Diff
Modified: trunk/Source/WebCore/ChangeLog (180516 => 180517)
--- trunk/Source/WebCore/ChangeLog 2015-02-23 22:08:41 UTC (rev 180516)
+++ trunk/Source/WebCore/ChangeLog 2015-02-23 22:08:45 UTC (rev 180517)
@@ -1,3 +1,44 @@
+2015-02-23 Chris Dumez <[email protected]>
+
+ Add support for diagnostic logging messages sampling
+ https://bugs.webkit.org/show_bug.cgi?id=141823
+ <rdar://problem/19899030>
+
+ Reviewed by Andreas Kling.
+
+ Add support for diagnostic logging messages sampling to decrease the
+ impact of diagnostic logging on CPU usage, while still getting useful
+ overall results. This patch adds a ShouldSample argument to
+ logDiagnosticMessage*() functions and logs 5% of the messages when
+ sampling. Sampling is turned on for keys that are known to be verbose
+ (e.g. per resource load logging).
+
+ On the page load test I am tracking, CPU usage caused by diagnostic
+ logging went down to 0.3% of UIProcess from 2.8% with this change.
+
+ * history/PageCache.cpp:
+ (WebCore::logPageCacheFailureDiagnosticMessage):
+ (WebCore::logCanCachePageDecision):
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::parseAttribute):
+ * loader/EmptyClients.h:
+ * loader/FrameLoader.cpp:
+ (WebCore::logNavigation):
+ (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
+ * loader/ResourceLoader.cpp:
+ (WebCore::logResourceResponseSource):
+ * loader/SubframeLoader.cpp:
+ (WebCore::logPluginRequest):
+ * loader/SubresourceLoader.cpp:
+ (WebCore::SubresourceLoader::willSendRequest):
+ (WebCore::SubresourceLoader::didReceiveResponse):
+ (WebCore::logResourceLoaded):
+ * loader/cache/CachedResource.cpp:
+ (WebCore::logResourceRevalidationReason):
+ * loader/cache/CachedResourceLoader.cpp:
+ (WebCore::logMemoryCacheResourceRequest):
+ * page/DiagnosticLoggingClient.h:
+
2015-02-23 Said Abou-Hallawa <[email protected]>
Drawing an SVG image into a canvas using drawImage() ignores globalAlpha.
Modified: trunk/Source/WebCore/history/PageCache.cpp (180516 => 180517)
--- trunk/Source/WebCore/history/PageCache.cpp 2015-02-23 22:08:41 UTC (rev 180516)
+++ trunk/Source/WebCore/history/PageCache.cpp 2015-02-23 22:08:45 UTC (rev 180517)
@@ -98,7 +98,7 @@
static inline void logPageCacheFailureDiagnosticMessage(DiagnosticLoggingClient& client, const String& reason)
{
- client.logDiagnosticMessageWithValue(DiagnosticLoggingKeys::pageCacheKey(), DiagnosticLoggingKeys::failureKey(), reason);
+ client.logDiagnosticMessageWithValue(DiagnosticLoggingKeys::pageCacheKey(), DiagnosticLoggingKeys::failureKey(), reason, ShouldSample::Yes);
}
static inline void logPageCacheFailureDiagnosticMessage(Page* page, const String& reason)
@@ -288,7 +288,7 @@
else
PCLOG(" Page CAN be cached\n--------");
- diagnosticLoggingClient.logDiagnosticMessageWithResult(DiagnosticLoggingKeys::pageCacheKey(), emptyString(), rejectReasons ? DiagnosticLoggingResultFail : DiagnosticLoggingResultPass);
+ diagnosticLoggingClient.logDiagnosticMessageWithResult(DiagnosticLoggingKeys::pageCacheKey(), emptyString(), rejectReasons ? DiagnosticLoggingResultFail : DiagnosticLoggingResultPass, ShouldSample::Yes);
}
PageCache& PageCache::singleton()
Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (180516 => 180517)
--- trunk/Source/WebCore/html/HTMLMediaElement.cpp 2015-02-23 22:08:41 UTC (rev 180516)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp 2015-02-23 22:08:45 UTC (rev 180517)
@@ -1164,7 +1164,7 @@
// Log that we started loading a media element.
if (Frame* frame = document().frame())
- frame->mainFrame().diagnosticLoggingClient().logDiagnosticMessageWithValue(DiagnosticLoggingKeys::mediaKey(), isVideo() ? DiagnosticLoggingKeys::videoKey() : DiagnosticLoggingKeys::audioKey(), DiagnosticLoggingKeys::loadingKey());
+ frame->mainFrame().diagnosticLoggingClient().logDiagnosticMessageWithValue(DiagnosticLoggingKeys::mediaKey(), isVideo() ? DiagnosticLoggingKeys::videoKey() : DiagnosticLoggingKeys::audioKey(), DiagnosticLoggingKeys::loadingKey(), ShouldSample::No);
m_firstTimePlaying = true;
@@ -1835,17 +1835,17 @@
DiagnosticLoggingClient& diagnosticLoggingClient = page->mainFrame().diagnosticLoggingClient();
if (!succeeded) {
- diagnosticLoggingClient.logDiagnosticMessageWithResult(DiagnosticLoggingKeys::mediaLoadingFailedKey(), errorMessage, DiagnosticLoggingResultFail);
+ diagnosticLoggingClient.logDiagnosticMessageWithResult(DiagnosticLoggingKeys::mediaLoadingFailedKey(), errorMessage, DiagnosticLoggingResultFail, ShouldSample::No);
return;
}
- diagnosticLoggingClient.logDiagnosticMessage(DiagnosticLoggingKeys::mediaLoadedKey(), mediaEngine);
+ diagnosticLoggingClient.logDiagnosticMessage(DiagnosticLoggingKeys::mediaLoadedKey(), mediaEngine, ShouldSample::No);
if (!page->hasSeenAnyMediaEngine())
- diagnosticLoggingClient.logDiagnosticMessage(DiagnosticLoggingKeys::pageContainsAtLeastOneMediaEngineKey(), emptyString());
+ diagnosticLoggingClient.logDiagnosticMessage(DiagnosticLoggingKeys::pageContainsAtLeastOneMediaEngineKey(), emptyString(), ShouldSample::No);
if (!page->hasSeenMediaEngine(mediaEngine))
- diagnosticLoggingClient.logDiagnosticMessage(DiagnosticLoggingKeys::pageContainsMediaEngineKey(), mediaEngine);
+ diagnosticLoggingClient.logDiagnosticMessage(DiagnosticLoggingKeys::pageContainsMediaEngineKey(), mediaEngine, ShouldSample::No);
page->sawMediaEngine(mediaEngine);
}
@@ -4554,7 +4554,7 @@
if (m_firstTimePlaying) {
// Log that a media element was played.
if (Frame* frame = document().frame())
- frame->mainFrame().diagnosticLoggingClient().logDiagnosticMessageWithValue(DiagnosticLoggingKeys::mediaKey(), isVideo() ? DiagnosticLoggingKeys::videoKey() : DiagnosticLoggingKeys::audioKey(), DiagnosticLoggingKeys::playedKey());
+ frame->mainFrame().diagnosticLoggingClient().logDiagnosticMessageWithValue(DiagnosticLoggingKeys::mediaKey(), isVideo() ? DiagnosticLoggingKeys::videoKey() : DiagnosticLoggingKeys::audioKey(), DiagnosticLoggingKeys::playedKey(), ShouldSample::No);
m_firstTimePlaying = false;
}
@@ -5807,7 +5807,7 @@
return;
if (Frame* frame = document().frame())
- frame->mainFrame().diagnosticLoggingClient().logDiagnosticMessageWithValue(DiagnosticLoggingKeys::engineFailedToLoadKey(), m_player->engineDescription(), String::number(m_player->platformErrorCode()));
+ frame->mainFrame().diagnosticLoggingClient().logDiagnosticMessageWithValue(DiagnosticLoggingKeys::engineFailedToLoadKey(), m_player->engineDescription(), String::number(m_player->platformErrorCode()), ShouldSample::No);
}
double HTMLMediaElement::mediaPlayerRequestedPlaybackRate() const
Modified: trunk/Source/WebCore/loader/EmptyClients.h (180516 => 180517)
--- trunk/Source/WebCore/loader/EmptyClients.h 2015-02-23 22:08:41 UTC (rev 180516)
+++ trunk/Source/WebCore/loader/EmptyClients.h 2015-02-23 22:08:45 UTC (rev 180517)
@@ -632,9 +632,9 @@
};
class EmptyDiagnosticLoggingClient final : public DiagnosticLoggingClient {
- virtual void logDiagnosticMessage(const String&, const String&) override { }
- virtual void logDiagnosticMessageWithResult(const String&, const String&, DiagnosticLoggingResultType) override { }
- virtual void logDiagnosticMessageWithValue(const String&, const String&, const String&) override { }
+ virtual void logDiagnosticMessage(const String&, const String&, ShouldSample) override { }
+ virtual void logDiagnosticMessageWithResult(const String&, const String&, DiagnosticLoggingResultType, ShouldSample) override { }
+ virtual void logDiagnosticMessageWithValue(const String&, const String&, const String&, ShouldSample) override { }
};
void fillWithEmptyClients(PageConfiguration&);
Modified: trunk/Source/WebCore/loader/FrameLoader.cpp (180516 => 180517)
--- trunk/Source/WebCore/loader/FrameLoader.cpp 2015-02-23 22:08:41 UTC (rev 180516)
+++ trunk/Source/WebCore/loader/FrameLoader.cpp 2015-02-23 22:08:45 UTC (rev 180517)
@@ -1394,7 +1394,7 @@
// Not logging those for now.
return;
}
- frame.diagnosticLoggingClient().logDiagnosticMessage(DiagnosticLoggingKeys::navigationKey(), navigationDescription);
+ frame.diagnosticLoggingClient().logDiagnosticMessage(DiagnosticLoggingKeys::navigationKey(), navigationDescription, ShouldSample::No);
}
void FrameLoader::loadWithDocumentLoader(DocumentLoader* loader, FrameLoadType type, PassRefPtr<FormState> prpFormState, AllowNavigationToInvalidURL allowNavigationToInvalidURL)
@@ -2270,7 +2270,7 @@
cache->frameLoadingEventNotification(&m_frame, loadingEvent);
if (page)
- page->mainFrame().diagnosticLoggingClient().logDiagnosticMessageWithResult(DiagnosticLoggingKeys::pageLoadedKey(), emptyString(), error.isNull() ? DiagnosticLoggingResultPass : DiagnosticLoggingResultFail);
+ page->mainFrame().diagnosticLoggingClient().logDiagnosticMessageWithResult(DiagnosticLoggingKeys::pageLoadedKey(), emptyString(), error.isNull() ? DiagnosticLoggingResultPass : DiagnosticLoggingResultFail, ShouldSample::No);
return;
}
Modified: trunk/Source/WebCore/loader/ResourceLoader.cpp (180516 => 180517)
--- trunk/Source/WebCore/loader/ResourceLoader.cpp 2015-02-23 22:08:41 UTC (rev 180516)
+++ trunk/Source/WebCore/loader/ResourceLoader.cpp 2015-02-23 22:08:45 UTC (rev 180517)
@@ -329,7 +329,7 @@
return;
}
- frame->mainFrame().diagnosticLoggingClient().logDiagnosticMessageWithValue(DiagnosticLoggingKeys::resourceResponseKey(), DiagnosticLoggingKeys::sourceKey(), sourceKey);
+ frame->mainFrame().diagnosticLoggingClient().logDiagnosticMessageWithValue(DiagnosticLoggingKeys::resourceResponseKey(), DiagnosticLoggingKeys::sourceKey(), sourceKey, ShouldSample::Yes);
}
void ResourceLoader::didReceiveResponse(const ResourceResponse& r)
Modified: trunk/Source/WebCore/loader/SubframeLoader.cpp (180516 => 180517)
--- trunk/Source/WebCore/loader/SubframeLoader.cpp 2015-02-23 22:08:41 UTC (rev 180516)
+++ trunk/Source/WebCore/loader/SubframeLoader.cpp 2015-02-23 22:08:45 UTC (rev 180517)
@@ -195,13 +195,13 @@
String description = !pluginFile ? newMIMEType : pluginFile;
DiagnosticLoggingClient& diagnosticLoggingClient = page->mainFrame().diagnosticLoggingClient();
- diagnosticLoggingClient.logDiagnosticMessage(success ? DiagnosticLoggingKeys::pluginLoadedKey() : DiagnosticLoggingKeys::pluginLoadingFailedKey(), description);
+ diagnosticLoggingClient.logDiagnosticMessage(success ? DiagnosticLoggingKeys::pluginLoadedKey() : DiagnosticLoggingKeys::pluginLoadingFailedKey(), description, ShouldSample::No);
if (!page->hasSeenAnyPlugin())
- diagnosticLoggingClient.logDiagnosticMessage(DiagnosticLoggingKeys::pageContainsAtLeastOnePluginKey(), emptyString());
+ diagnosticLoggingClient.logDiagnosticMessage(DiagnosticLoggingKeys::pageContainsAtLeastOnePluginKey(), emptyString(), ShouldSample::No);
if (!page->hasSeenPlugin(description))
- diagnosticLoggingClient.logDiagnosticMessage(DiagnosticLoggingKeys::pageContainsPluginKey(), description);
+ diagnosticLoggingClient.logDiagnosticMessage(DiagnosticLoggingKeys::pageContainsPluginKey(), description, ShouldSample::No);
page->sawPlugin(description);
}
Modified: trunk/Source/WebCore/loader/SubresourceLoader.cpp (180516 => 180517)
--- trunk/Source/WebCore/loader/SubresourceLoader.cpp 2015-02-23 22:08:41 UTC (rev 180516)
+++ trunk/Source/WebCore/loader/SubresourceLoader.cpp 2015-02-23 22:08:45 UTC (rev 180517)
@@ -161,7 +161,7 @@
newRequest.makeUnconditional();
MemoryCache::singleton().revalidationFailed(*m_resource);
if (m_frame)
- m_frame->mainFrame().diagnosticLoggingClient().logDiagnosticMessageWithResult(DiagnosticLoggingKeys::cachedResourceRevalidationKey(), emptyString(), DiagnosticLoggingResultFail);
+ m_frame->mainFrame().diagnosticLoggingClient().logDiagnosticMessageWithResult(DiagnosticLoggingKeys::cachedResourceRevalidationKey(), emptyString(), DiagnosticLoggingResultFail, ShouldSample::Yes);
}
if (!m_documentLoader->cachedResourceLoader().canRequest(m_resource->type(), newRequest.url(), options())) {
@@ -209,7 +209,7 @@
m_resource->setResponse(response);
MemoryCache::singleton().revalidationSucceeded(*m_resource, response);
if (m_frame)
- m_frame->mainFrame().diagnosticLoggingClient().logDiagnosticMessageWithResult(DiagnosticLoggingKeys::cachedResourceRevalidationKey(), emptyString(), DiagnosticLoggingResultPass);
+ m_frame->mainFrame().diagnosticLoggingClient().logDiagnosticMessageWithResult(DiagnosticLoggingKeys::cachedResourceRevalidationKey(), emptyString(), DiagnosticLoggingResultPass, ShouldSample::Yes);
if (!reachedTerminalState())
ResourceLoader::didReceiveResponse(response);
return;
@@ -217,7 +217,7 @@
// Did not get 304 response, continue as a regular resource load.
MemoryCache::singleton().revalidationFailed(*m_resource);
if (m_frame)
- m_frame->mainFrame().diagnosticLoggingClient().logDiagnosticMessageWithResult(DiagnosticLoggingKeys::cachedResourceRevalidationKey(), emptyString(), DiagnosticLoggingResultFail);
+ m_frame->mainFrame().diagnosticLoggingClient().logDiagnosticMessageWithResult(DiagnosticLoggingKeys::cachedResourceRevalidationKey(), emptyString(), DiagnosticLoggingResultFail, ShouldSample::Yes);
}
m_resource->responseReceived(response);
@@ -342,7 +342,7 @@
resourceType = DiagnosticLoggingKeys::otherKey();
break;
}
- frame->mainFrame().diagnosticLoggingClient().logDiagnosticMessageWithValue(DiagnosticLoggingKeys::resourceKey(), DiagnosticLoggingKeys::loadedKey(), resourceType);
+ frame->mainFrame().diagnosticLoggingClient().logDiagnosticMessageWithValue(DiagnosticLoggingKeys::resourceKey(), DiagnosticLoggingKeys::loadedKey(), resourceType, ShouldSample::Yes);
}
void SubresourceLoader::didFinishLoading(double finishTime)
Modified: trunk/Source/WebCore/loader/cache/CachedResource.cpp (180516 => 180517)
--- trunk/Source/WebCore/loader/cache/CachedResource.cpp 2015-02-23 22:08:41 UTC (rev 180516)
+++ trunk/Source/WebCore/loader/cache/CachedResource.cpp 2015-02-23 22:08:45 UTC (rev 180517)
@@ -683,7 +683,7 @@
static inline void logResourceRevalidationReason(Frame* frame, const String& reason)
{
if (frame)
- frame->mainFrame().diagnosticLoggingClient().logDiagnosticMessageWithValue(DiagnosticLoggingKeys::cachedResourceRevalidationKey(), DiagnosticLoggingKeys::reasonKey(), reason);
+ frame->mainFrame().diagnosticLoggingClient().logDiagnosticMessageWithValue(DiagnosticLoggingKeys::cachedResourceRevalidationKey(), DiagnosticLoggingKeys::reasonKey(), reason, ShouldSample::Yes);
}
bool CachedResource::mustRevalidateDueToCacheHeaders(const CachedResourceLoader& cachedResourceLoader, CachePolicy cachePolicy) const
Modified: trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp (180516 => 180517)
--- trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp 2015-02-23 22:08:41 UTC (rev 180516)
+++ trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp 2015-02-23 22:08:45 UTC (rev 180517)
@@ -443,9 +443,9 @@
if (!frame)
return;
if (value.isNull())
- frame->mainFrame().diagnosticLoggingClient().logDiagnosticMessage(DiagnosticLoggingKeys::resourceRequestKey(), description);
+ frame->mainFrame().diagnosticLoggingClient().logDiagnosticMessage(DiagnosticLoggingKeys::resourceRequestKey(), description, ShouldSample::Yes);
else
- frame->mainFrame().diagnosticLoggingClient().logDiagnosticMessageWithValue(DiagnosticLoggingKeys::resourceRequestKey(), description, value);
+ frame->mainFrame().diagnosticLoggingClient().logDiagnosticMessageWithValue(DiagnosticLoggingKeys::resourceRequestKey(), description, value, ShouldSample::Yes);
}
CachedResourceHandle<CachedResource> CachedResourceLoader::requestResource(CachedResource::Type type, CachedResourceRequest& request)
Modified: trunk/Source/WebCore/page/DiagnosticLoggingClient.h (180516 => 180517)
--- trunk/Source/WebCore/page/DiagnosticLoggingClient.h 2015-02-23 22:08:41 UTC (rev 180516)
+++ trunk/Source/WebCore/page/DiagnosticLoggingClient.h 2015-02-23 22:08:45 UTC (rev 180517)
@@ -31,11 +31,13 @@
namespace WebCore {
+enum class ShouldSample { No, Yes };
+
class DiagnosticLoggingClient {
public:
- virtual void logDiagnosticMessage(const String& message, const String& description) = 0;
- virtual void logDiagnosticMessageWithResult(const String& message, const String& description, DiagnosticLoggingResultType) = 0;
- virtual void logDiagnosticMessageWithValue(const String& message, const String& description, const String& value) = 0;
+ virtual void logDiagnosticMessage(const String& message, const String& description, ShouldSample) = 0;
+ virtual void logDiagnosticMessageWithResult(const String& message, const String& description, DiagnosticLoggingResultType, ShouldSample) = 0;
+ virtual void logDiagnosticMessageWithValue(const String& message, const String& description, const String& value, ShouldSample) = 0;
protected:
virtual ~DiagnosticLoggingClient() { }
Modified: trunk/Source/WebKit2/ChangeLog (180516 => 180517)
--- trunk/Source/WebKit2/ChangeLog 2015-02-23 22:08:41 UTC (rev 180516)
+++ trunk/Source/WebKit2/ChangeLog 2015-02-23 22:08:45 UTC (rev 180517)
@@ -1,3 +1,51 @@
+2015-02-23 Chris Dumez <[email protected]>
+
+ Add support for diagnostic logging messages sampling
+ https://bugs.webkit.org/show_bug.cgi?id=141823
+ <rdar://problem/19899030>
+
+ Reviewed by Andreas Kling.
+
+ Add support for diagnostic logging messages sampling to decrease the
+ impact of diagnostic logging on CPU usage, while still getting useful
+ overall results. This patch adds a ShouldSample argument to
+ logDiagnosticMessage*() functions and logs 5% of the messages when
+ sampling. Sampling is turned on for keys that are known to be verbose
+ (e.g. per resource load logging).
+
+ On the page load test I am tracking, CPU usage caused by diagnostic
+ logging went down to 0.3% of UIProcess from 2.8% with this change.
+
+ * NetworkProcess/NetworkProcess.cpp:
+ (WebKit::NetworkProcess::logDiagnosticMessage):
+ (WebKit::NetworkProcess::logDiagnosticMessageWithResult):
+ (WebKit::NetworkProcess::logDiagnosticMessageWithValue):
+ * NetworkProcess/NetworkProcess.h:
+ * NetworkProcess/cache/NetworkCacheStatisticsCocoa.mm:
+ (WebKit::NetworkCacheStatistics::recordNotUsingCacheForRequest):
+ (WebKit::NetworkCacheStatistics::recordRetrievalFailure):
+ (WebKit::NetworkCacheStatistics::recordRetrievedCachedEntry):
+ * UIProcess/Network/NetworkProcessProxy.cpp:
+ (WebKit::NetworkProcessProxy::logDiagnosticMessage):
+ (WebKit::NetworkProcessProxy::logDiagnosticMessageWithResult):
+ (WebKit::NetworkProcessProxy::logDiagnosticMessageWithValue):
+ * UIProcess/Network/NetworkProcessProxy.h:
+ * UIProcess/Network/NetworkProcessProxy.messages.in:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::shouldLogDiagnosticMessage):
+ (WebKit::WebPageProxy::logDiagnosticMessage):
+ (WebKit::WebPageProxy::logDiagnosticMessageWithResult):
+ (WebKit::WebPageProxy::logDiagnosticMessageWithValue):
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/WebPageProxy.messages.in:
+ * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.cpp:
+ (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessage):
+ (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessageWithResult):
+ (WebKit::WebDiagnosticLoggingClient::logDiagnosticMessageWithValue):
+ * WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.h:
+ * WebProcess/WebPage/ios/WebPageIOS.mm:
+ (WebKit::WebPage::willStartUserTriggeredZooming):
+
2015-02-23 Anders Carlsson <[email protected]>
Add a stubbed out _WKWebsiteDataRecord class
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp (180516 => 180517)
--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp 2015-02-23 22:08:41 UTC (rev 180516)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp 2015-02-23 22:08:45 UTC (rev 180517)
@@ -305,19 +305,19 @@
parentProcessConnection()->send(Messages::WebProcessPool::DidGetStatistics(data, callbackID), 0);
}
-void NetworkProcess::logDiagnosticMessage(uint64_t webPageID, const String& message, const String& description)
+void NetworkProcess::logDiagnosticMessage(uint64_t webPageID, const String& message, const String& description, WebCore::ShouldSample shouldSample)
{
- parentProcessConnection()->send(Messages::NetworkProcessProxy::LogDiagnosticMessage(webPageID, message, description), 0);
+ parentProcessConnection()->send(Messages::NetworkProcessProxy::LogDiagnosticMessage(webPageID, message, description, shouldSample == ShouldSample::Yes), 0);
}
-void NetworkProcess::logDiagnosticMessageWithResult(uint64_t webPageID, const String& message, const String& description, WebCore::DiagnosticLoggingResultType result)
+void NetworkProcess::logDiagnosticMessageWithResult(uint64_t webPageID, const String& message, const String& description, WebCore::DiagnosticLoggingResultType result, WebCore::ShouldSample shouldSample)
{
- parentProcessConnection()->send(Messages::NetworkProcessProxy::LogDiagnosticMessageWithResult(webPageID, message, description, result), 0);
+ parentProcessConnection()->send(Messages::NetworkProcessProxy::LogDiagnosticMessageWithResult(webPageID, message, description, result, shouldSample == ShouldSample::Yes), 0);
}
-void NetworkProcess::logDiagnosticMessageWithValue(uint64_t webPageID, const String& message, const String& description, const String& value)
+void NetworkProcess::logDiagnosticMessageWithValue(uint64_t webPageID, const String& message, const String& description, const String& value, WebCore::ShouldSample shouldSample)
{
- parentProcessConnection()->send(Messages::NetworkProcessProxy::LogDiagnosticMessageWithValue(webPageID, message, description, value), 0);
+ parentProcessConnection()->send(Messages::NetworkProcessProxy::LogDiagnosticMessageWithValue(webPageID, message, description, value, shouldSample == ShouldSample::Yes), 0);
}
void NetworkProcess::terminate()
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h (180516 => 180517)
--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h 2015-02-23 22:08:41 UTC (rev 180516)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h 2015-02-23 22:08:45 UTC (rev 180517)
@@ -33,7 +33,7 @@
#include "DownloadManager.h"
#include "MessageReceiverMap.h"
#include "NetworkResourceLoadScheduler.h"
-#include <WebCore/DiagnosticLoggingResultType.h>
+#include <WebCore/DiagnosticLoggingClient.h>
#include <WebCore/SessionID.h>
#include <memory>
#include <wtf/Forward.h>
@@ -77,9 +77,9 @@
bool canHandleHTTPSServerTrustEvaluation() const { return m_canHandleHTTPSServerTrustEvaluation; }
// Diagnostic messages logging.
- void logDiagnosticMessage(uint64_t webPageID, const String& message, const String& description);
- void logDiagnosticMessageWithResult(uint64_t webPageID, const String& message, const String& description, WebCore::DiagnosticLoggingResultType);
- void logDiagnosticMessageWithValue(uint64_t webPageID, const String& message, const String& description, const String& value);
+ void logDiagnosticMessage(uint64_t webPageID, const String& message, const String& description, WebCore::ShouldSample);
+ void logDiagnosticMessageWithResult(uint64_t webPageID, const String& message, const String& description, WebCore::DiagnosticLoggingResultType, WebCore::ShouldSample);
+ void logDiagnosticMessageWithValue(uint64_t webPageID, const String& message, const String& description, const String& value, WebCore::ShouldSample);
private:
NetworkProcess();
Modified: trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheStatisticsCocoa.mm (180516 => 180517)
--- trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheStatisticsCocoa.mm 2015-02-23 22:08:41 UTC (rev 180516)
+++ trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheStatisticsCocoa.mm 2015-02-23 22:08:45 UTC (rev 180517)
@@ -216,7 +216,7 @@
if (wasEverRequested) {
String diagnosticKey = retrieveDecisionToDiagnosticKey(retrieveDecision);
LOG(NetworkCache, "(NetworkProcess) webPageID %llu: %s was previously requested but we are not using the cache, reason: %s", webPageID, requestURL.string().ascii().data(), diagnosticKey.utf8().data());
- NetworkProcess::singleton().logDiagnosticMessageWithValue(webPageID, WebCore::DiagnosticLoggingKeys::networkCacheKey(), WebCore::DiagnosticLoggingKeys::unusedKey(), diagnosticKey);
+ NetworkProcess::singleton().logDiagnosticMessageWithValue(webPageID, WebCore::DiagnosticLoggingKeys::networkCacheKey(), WebCore::DiagnosticLoggingKeys::unusedKey(), diagnosticKey, WebCore::ShouldSample::Yes);
} else
markAsRequested(hash);
});
@@ -250,7 +250,7 @@
if (wasPreviouslyRequested) {
String diagnosticKey = storeDecisionToDiagnosticKey(storeDecision.value());
LOG(NetworkCache, "(NetworkProcess) webPageID %llu: %s was previously request but is not in the cache, reason: %s", webPageID, requestURL.string().ascii().data(), diagnosticKey.utf8().data());
- NetworkProcess::singleton().logDiagnosticMessageWithValue(webPageID, WebCore::DiagnosticLoggingKeys::networkCacheKey(), WebCore::DiagnosticLoggingKeys::notInCacheKey(), diagnosticKey);
+ NetworkProcess::singleton().logDiagnosticMessageWithValue(webPageID, WebCore::DiagnosticLoggingKeys::networkCacheKey(), WebCore::DiagnosticLoggingKeys::notInCacheKey(), diagnosticKey, WebCore::ShouldSample::Yes);
} else
markAsRequested(hash);
});
@@ -277,13 +277,13 @@
WebCore::URL requestURL = request.url();
if (failure == NetworkCache::CachedEntryReuseFailure::None) {
LOG(NetworkCache, "(NetworkProcess) webPageID %llu: %s is in the cache and is used", webPageID, requestURL.string().ascii().data());
- NetworkProcess::singleton().logDiagnosticMessageWithResult(webPageID, WebCore::DiagnosticLoggingKeys::networkCacheKey(), WebCore::DiagnosticLoggingKeys::retrievalKey(), WebCore::DiagnosticLoggingResultPass);
+ NetworkProcess::singleton().logDiagnosticMessageWithResult(webPageID, WebCore::DiagnosticLoggingKeys::networkCacheKey(), WebCore::DiagnosticLoggingKeys::retrievalKey(), WebCore::DiagnosticLoggingResultPass, WebCore::ShouldSample::Yes);
return;
}
String diagnosticKey = cachedEntryReuseFailureToDiagnosticKey(failure);
LOG(NetworkCache, "(NetworkProcess) webPageID %llu: %s is in the cache but wasn't used, reason: %s", webPageID, requestURL.string().ascii().data(), diagnosticKey.utf8().data());
- NetworkProcess::singleton().logDiagnosticMessageWithValue(webPageID, WebCore::DiagnosticLoggingKeys::networkCacheKey(), WebCore::DiagnosticLoggingKeys::unusableCachedEntryKey(), diagnosticKey);
+ NetworkProcess::singleton().logDiagnosticMessageWithValue(webPageID, WebCore::DiagnosticLoggingKeys::networkCacheKey(), WebCore::DiagnosticLoggingKeys::unusableCachedEntryKey(), diagnosticKey, WebCore::ShouldSample::Yes);
}
void NetworkCacheStatistics::markAsRequested(const String& hash)
Modified: trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp (180516 => 180517)
--- trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp 2015-02-23 22:08:41 UTC (rev 180516)
+++ trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp 2015-02-23 22:08:45 UTC (rev 180517)
@@ -230,7 +230,7 @@
#endif
}
-void NetworkProcessProxy::logDiagnosticMessage(uint64_t pageID, const String& message, const String& description)
+void NetworkProcessProxy::logDiagnosticMessage(uint64_t pageID, const String& message, const String& description, bool shouldSample)
{
WebPageProxy* page = WebProcessProxy::webPage(pageID);
// FIXME: We do this null-check because by the time the decision to log is made, the page may be gone. We should refactor to avoid this,
@@ -238,10 +238,10 @@
if (!page)
return;
- page->logDiagnosticMessage(message, description);
+ page->logDiagnosticMessage(message, description, shouldSample);
}
-void NetworkProcessProxy::logDiagnosticMessageWithResult(uint64_t pageID, const String& message, const String& description, uint32_t result)
+void NetworkProcessProxy::logDiagnosticMessageWithResult(uint64_t pageID, const String& message, const String& description, uint32_t result, bool shouldSample)
{
WebPageProxy* page = WebProcessProxy::webPage(pageID);
// FIXME: We do this null-check because by the time the decision to log is made, the page may be gone. We should refactor to avoid this,
@@ -249,10 +249,10 @@
if (!page)
return;
- page->logDiagnosticMessageWithResult(message, description, result);
+ page->logDiagnosticMessageWithResult(message, description, result, shouldSample);
}
-void NetworkProcessProxy::logDiagnosticMessageWithValue(uint64_t pageID, const String& message, const String& description, const String& value)
+void NetworkProcessProxy::logDiagnosticMessageWithValue(uint64_t pageID, const String& message, const String& description, const String& value, bool shouldSample)
{
WebPageProxy* page = WebProcessProxy::webPage(pageID);
// FIXME: We do this null-check because by the time the decision to log is made, the page may be gone. We should refactor to avoid this,
@@ -260,7 +260,7 @@
if (!page)
return;
- page->logDiagnosticMessageWithValue(message, description, value);
+ page->logDiagnosticMessageWithValue(message, description, value, shouldSample);
}
} // namespace WebKit
Modified: trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.h (180516 => 180517)
--- trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.h 2015-02-23 22:08:41 UTC (rev 180516)
+++ trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.h 2015-02-23 22:08:45 UTC (rev 180517)
@@ -91,9 +91,9 @@
void didCreateNetworkConnectionToWebProcess(const IPC::Attachment&);
void didReceiveAuthenticationChallenge(uint64_t pageID, uint64_t frameID, const WebCore::AuthenticationChallenge&, uint64_t challengeID);
void didDeleteWebsiteData(uint64_t callbackID);
- void logDiagnosticMessage(uint64_t pageID, const String& message, const String& description);
- void logDiagnosticMessageWithResult(uint64_t pageID, const String& message, const String& description, uint32_t result);
- void logDiagnosticMessageWithValue(uint64_t pageID, const String& message, const String& description, const String& value);
+ void logDiagnosticMessage(uint64_t pageID, const String& message, const String& description, bool shouldSample);
+ void logDiagnosticMessageWithResult(uint64_t pageID, const String& message, const String& description, uint32_t result, bool shouldSample);
+ void logDiagnosticMessageWithValue(uint64_t pageID, const String& message, const String& description, const String& value, bool shouldSample);
// ProcessLauncher::Client
virtual void didFinishLaunching(ProcessLauncher*, IPC::Connection::Identifier) override;
Modified: trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.messages.in (180516 => 180517)
--- trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.messages.in 2015-02-23 22:08:41 UTC (rev 180516)
+++ trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.messages.in 2015-02-23 22:08:45 UTC (rev 180517)
@@ -30,9 +30,9 @@
DidDeleteWebsiteData(uint64_t callbackID)
# Diagnostic messages logging
- LogDiagnosticMessage(uint64_t pageID, String message, String description)
- LogDiagnosticMessageWithResult(uint64_t pageID, String message, String description, uint32_t result)
- LogDiagnosticMessageWithValue(uint64_t pageID, String message, String description, String value)
+ LogDiagnosticMessage(uint64_t pageID, String message, String description, bool shouldSample)
+ LogDiagnosticMessageWithResult(uint64_t pageID, String message, String description, uint32_t result, bool shouldSample)
+ LogDiagnosticMessageWithValue(uint64_t pageID, String message, String description, String value, bool shouldSample)
}
#endif // ENABLE(NETWORK_PROCESS)
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (180516 => 180517)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2015-02-23 22:08:41 UTC (rev 180516)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2015-02-23 22:08:45 UTC (rev 180517)
@@ -111,6 +111,7 @@
#include <WebCore/WindowFeatures.h>
#include <stdio.h>
#include <wtf/NeverDestroyed.h>
+#include <wtf/RandomNumber.h>
#include <wtf/text/StringView.h>
#if ENABLE(ASYNC_SCROLLING)
@@ -4494,21 +4495,33 @@
callback->performCallbackWithReturnValue(range);
}
-void WebPageProxy::logDiagnosticMessage(const String& message, const String& description)
+static bool shouldLogDiagnosticMessage(bool shouldSample)
{
- m_diagnosticLoggingClient->logDiagnosticMessage(this, message, description);
+ if (!shouldSample)
+ return true;
+ // Log 5% of messages when sampling.
+ static const double selectionProbability = 0.05;
+ return randomNumber() <= selectionProbability;
}
-void WebPageProxy::logDiagnosticMessageWithResult(const String& message, const String& description, uint32_t result)
+void WebPageProxy::logDiagnosticMessage(const String& message, const String& description, bool shouldSample)
{
- m_diagnosticLoggingClient->logDiagnosticMessageWithResult(this, message, description, static_cast<WebCore::DiagnosticLoggingResultType>(result));
+ if (shouldLogDiagnosticMessage(shouldSample))
+ m_diagnosticLoggingClient->logDiagnosticMessage(this, message, description);
}
-void WebPageProxy::logDiagnosticMessageWithValue(const String& message, const String& description, const String& value)
+void WebPageProxy::logDiagnosticMessageWithResult(const String& message, const String& description, uint32_t result, bool shouldSample)
{
- m_diagnosticLoggingClient->logDiagnosticMessageWithValue(this, message, description, value);
+ if (shouldLogDiagnosticMessage(shouldSample))
+ m_diagnosticLoggingClient->logDiagnosticMessageWithResult(this, message, description, static_cast<WebCore::DiagnosticLoggingResultType>(result));
}
+void WebPageProxy::logDiagnosticMessageWithValue(const String& message, const String& description, const String& value, bool shouldSample)
+{
+ if (shouldLogDiagnosticMessage(shouldSample))
+ m_diagnosticLoggingClient->logDiagnosticMessageWithValue(this, message, description, value);
+}
+
void WebPageProxy::rectForCharacterRangeCallback(const IntRect& rect, const EditingRange& actualRange, uint64_t callbackID)
{
MESSAGE_CHECK(actualRange.isValid());
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (180516 => 180517)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2015-02-23 22:08:41 UTC (rev 180516)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2015-02-23 22:08:45 UTC (rev 180517)
@@ -991,9 +991,9 @@
void setShouldDispatchFakeMouseMoveEvents(bool);
// Diagnostic messages logging.
- void logDiagnosticMessage(const String& message, const String& description);
- void logDiagnosticMessageWithResult(const String& message, const String& description, uint32_t result);
- void logDiagnosticMessageWithValue(const String& message, const String& description, const String& value);
+ void logDiagnosticMessage(const String& message, const String& description, bool shouldSample);
+ void logDiagnosticMessageWithResult(const String& message, const String& description, uint32_t result, bool shouldSample);
+ void logDiagnosticMessageWithValue(const String& message, const String& description, const String& value, bool shouldSample);
private:
WebPageProxy(PageClient&, WebProcessProxy&, uint64_t pageID, const WebPageConfiguration&);
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in (180516 => 180517)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in 2015-02-23 22:08:41 UTC (rev 180516)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in 2015-02-23 22:08:45 UTC (rev 180517)
@@ -224,9 +224,9 @@
ExecuteUndoRedo(uint32_t action) -> (bool result)
# Diagnostic messages logging
- LogDiagnosticMessage(String message, String description)
- LogDiagnosticMessageWithResult(String message, String description, uint32_t result)
- LogDiagnosticMessageWithValue(String message, String description, String value)
+ LogDiagnosticMessage(String message, String description, bool shouldSample)
+ LogDiagnosticMessageWithResult(String message, String description, uint32_t result, bool shouldSample)
+ LogDiagnosticMessageWithValue(String message, String description, String value, bool shouldSample)
# Editor notifications
EditorStateChanged(struct WebKit::EditorState editorState)
Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.cpp (180516 => 180517)
--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.cpp 2015-02-23 22:08:41 UTC (rev 180516)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.cpp 2015-02-23 22:08:45 UTC (rev 180517)
@@ -41,34 +41,34 @@
{
}
-void WebDiagnosticLoggingClient::logDiagnosticMessage(const String& message, const String& description)
+void WebDiagnosticLoggingClient::logDiagnosticMessage(const String& message, const String& description, WebCore::ShouldSample shouldSample)
{
if (!m_page.corePage()->settings().diagnosticLoggingEnabled())
return;
// FIXME: Remove this injected bundle API.
m_page.injectedBundleDiagnosticLoggingClient().logDiagnosticMessage(&m_page, message, description);
- m_page.send(Messages::WebPageProxy::LogDiagnosticMessage(message, description));
+ m_page.send(Messages::WebPageProxy::LogDiagnosticMessage(message, description, shouldSample == WebCore::ShouldSample::Yes));
}
-void WebDiagnosticLoggingClient::logDiagnosticMessageWithResult(const String& message, const String& description, WebCore::DiagnosticLoggingResultType result)
+void WebDiagnosticLoggingClient::logDiagnosticMessageWithResult(const String& message, const String& description, WebCore::DiagnosticLoggingResultType result, WebCore::ShouldSample shouldSample)
{
if (!m_page.corePage()->settings().diagnosticLoggingEnabled())
return;
// FIXME: Remove this injected bundle API.
m_page.injectedBundleDiagnosticLoggingClient().logDiagnosticMessageWithResult(&m_page, message, description, result);
- m_page.send(Messages::WebPageProxy::LogDiagnosticMessageWithResult(message, description, result));
+ m_page.send(Messages::WebPageProxy::LogDiagnosticMessageWithResult(message, description, result, shouldSample == WebCore::ShouldSample::Yes));
}
-void WebDiagnosticLoggingClient::logDiagnosticMessageWithValue(const String& message, const String& description, const String& value)
+void WebDiagnosticLoggingClient::logDiagnosticMessageWithValue(const String& message, const String& description, const String& value, WebCore::ShouldSample shouldSample)
{
if (!m_page.corePage()->settings().diagnosticLoggingEnabled())
return;
// FIXME: Remove this injected bundle API.
m_page.injectedBundleDiagnosticLoggingClient().logDiagnosticMessageWithValue(&m_page, message, description, value);
- m_page.send(Messages::WebPageProxy::LogDiagnosticMessageWithValue(message, description, value));
+ m_page.send(Messages::WebPageProxy::LogDiagnosticMessageWithValue(message, description, value, shouldSample == WebCore::ShouldSample::Yes));
}
} // namespace WebKit
Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.h (180516 => 180517)
--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.h 2015-02-23 22:08:41 UTC (rev 180516)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebDiagnosticLoggingClient.h 2015-02-23 22:08:45 UTC (rev 180517)
@@ -39,9 +39,9 @@
virtual ~WebDiagnosticLoggingClient();
private:
- virtual void logDiagnosticMessage(const String& message, const String& description) override;
- virtual void logDiagnosticMessageWithResult(const String& message, const String& description, WebCore::DiagnosticLoggingResultType) override;
- virtual void logDiagnosticMessageWithValue(const String& message, const String& description, const String& value) override;
+ virtual void logDiagnosticMessage(const String& message, const String& description, WebCore::ShouldSample) override;
+ virtual void logDiagnosticMessageWithResult(const String& message, const String& description, WebCore::DiagnosticLoggingResultType, WebCore::ShouldSample) override;
+ virtual void logDiagnosticMessageWithValue(const String& message, const String& description, const String& value, WebCore::ShouldSample) override;
WebPage& m_page;
};
Modified: trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm (180516 => 180517)
--- trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm 2015-02-23 22:08:41 UTC (rev 180516)
+++ trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm 2015-02-23 22:08:45 UTC (rev 180517)
@@ -2780,7 +2780,7 @@
void WebPage::willStartUserTriggeredZooming()
{
- m_page->mainFrame().diagnosticLoggingClient().logDiagnosticMessageWithValue(DiagnosticLoggingKeys::webViewKey(), DiagnosticLoggingKeys::userKey(), DiagnosticLoggingKeys::zoomedKey());
+ m_page->mainFrame().diagnosticLoggingClient().logDiagnosticMessageWithValue(DiagnosticLoggingKeys::webViewKey(), DiagnosticLoggingKeys::userKey(), DiagnosticLoggingKeys::zoomedKey(), ShouldSample::No);
m_userHasChangedPageScaleFactor = true;
}