Add WKContext API to retrieve basic network process statistics
https://bugs.webkit.org/show_bug.cgi?id=109329

Reviewed by Sam Weinig.

This patch adds a WKContextGetStatisticsWithOptions which allows the client to ask for
certain types of statistics.

It also expands the "get statistics" callback mechanism to allow for a statistics request
to be answered by multiple child processes.

That mechanism still has some rough edges but will eventually allow for getting statistics
from multiple web processes, as well.

* NetworkProcess/HostRecord.cpp:
(WebKit::HostRecord::pendingRequestCount):
(WebKit::HostRecord::activeLoadCount):
* NetworkProcess/HostRecord.h:

* NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::getNetworkProcessStatistics):
* NetworkProcess/NetworkProcess.h:
* NetworkProcess/NetworkProcess.messages.in:

* NetworkProcess/NetworkResourceLoadScheduler.cpp:
(WebKit::NetworkResourceLoadScheduler::hostsPendingCount):
(WebKit::NetworkResourceLoadScheduler::loadsPendingCount):
(WebKit::NetworkResourceLoadScheduler::hostsActiveCount):
(WebKit::NetworkResourceLoadScheduler::loadsActiveCount):
* NetworkProcess/NetworkResourceLoadScheduler.h:

* Shared/Authentication/AuthenticationManager.h:
(WebKit::AuthenticationManager::outstandingAuthenticationChallengeCount):
* Shared/Downloads/DownloadManager.h:

* UIProcess/API/C/WKContext.cpp:
(WKContextGetStatistics):
(WKContextGetStatisticsWithOptions):
* UIProcess/API/C/WKContext.h:

* UIProcess/StatisticsRequest.cpp: Added.
(WebKit::StatisticsRequest::StatisticsRequest):
(WebKit::StatisticsRequest::~StatisticsRequest):
(WebKit::StatisticsRequest::addOutstandingRequest):
(WebKit::addToDictionaryFromHashMap):
(WebKit::createDictionaryFromHashMap):
(WebKit::StatisticsRequest::completedRequest):
* UIProcess/StatisticsRequest.h: Added.
(WebKit::StatisticsRequest::create):

* UIProcess/WebContext.cpp:
(WebKit::WebContext::networkingProcessConnection):
(WebKit::WebContext::getStatistics):
(WebKit::WebContext::requestWebContentStatistics):
(WebKit::WebContext::requestNetworkingStatistics):
(WebKit::WebContext::didGetStatistics):
* UIProcess/WebContext.h:
* UIProcess/WebContext.messages.in:

* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::getWebCoreStatistics):

* WebKit2.xcodeproj/project.pbxproj:

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@142651 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Cache timer heap pointer to timers
https://bugs.webkit.org/show_bug.cgi?id=109597

Reviewed by Andreas Kling.

Accessing timer heap through thread global storage is slow (~0.1% in PLT3). We can cache the heap pointer to
each TimerBase. There are not huge numbers of timers around so memory is not an issue and many timers are heavily reused.

* platform/Timer.cpp:
(WebCore::threadGlobalTimerHeap):
(WebCore::TimerHeapReference::operator=):
(WebCore::TimerHeapIterator::checkConsistency):
(WebCore::TimerBase::TimerBase):
(WebCore::TimerBase::checkHeapIndex):
(WebCore::TimerBase::setNextFireTime):
* platform/Timer.h:
(WebCore::TimerBase::timerHeap):
(TimerBase):



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@142652 268f45cc-cd09-0410-ab3c-d52691b4dbfc