Index: third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp |
diff --git a/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp b/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp |
index 70d417fbcc337f9098f74069ad38ca12dcd349ec..893dd66f199318482ce93e164bca1bea60140407 100644 |
--- a/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp |
+++ b/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp |
@@ -30,6 +30,7 @@ |
#include "core/loader/WorkerThreadableLoader.h" |
+#include <memory> |
#include "core/dom/Document.h" |
#include "core/dom/ExecutionContextTask.h" |
#include "core/loader/DocumentThreadableLoader.h" |
@@ -37,6 +38,7 @@ |
#include "core/workers/WorkerGlobalScope.h" |
#include "core/workers/WorkerLoaderProxy.h" |
#include "platform/CrossThreadFunctional.h" |
+#include "platform/Histogram.h" |
#include "platform/heap/SafePoint.h" |
#include "platform/network/ResourceError.h" |
#include "platform/network/ResourceRequest.h" |
@@ -44,9 +46,9 @@ |
#include "platform/network/ResourceTimingInfo.h" |
#include "platform/weborigin/KURL.h" |
#include "platform/weborigin/SecurityPolicy.h" |
+#include "wtf/CurrentTime.h" |
#include "wtf/Functional.h" |
#include "wtf/debug/Alias.h" |
-#include <memory> |
namespace blink { |
@@ -201,7 +203,8 @@ WorkerThreadableLoader::WorkerThreadableLoader( |
m_client(client), |
m_threadableLoaderOptions(options), |
m_resourceLoaderOptions(resourceLoaderOptions), |
- m_blockingBehavior(blockingBehavior) { |
+ m_blockingBehavior(blockingBehavior), |
+ m_isServiceWorker(workerGlobalScope.isServiceWorkerGlobalScope()) { |
DCHECK(client); |
} |
@@ -242,7 +245,7 @@ void WorkerThreadableLoader::start(const ResourceRequest& originalRequest) { |
wrapCrossThreadPersistent( |
m_workerGlobalScope->thread()->getWorkerThreadLifecycleContext()), |
request, m_threadableLoaderOptions, m_resourceLoaderOptions, |
- eventWithTasks)); |
+ eventWithTasks, monotonicallyIncreasingTime(), m_isServiceWorker)); |
if (m_blockingBehavior == LoadAsynchronously) |
return; |
@@ -334,7 +337,15 @@ void WorkerThreadableLoader::didReceiveRedirectTo(const KURL& url) { |
void WorkerThreadableLoader::didReceiveResponse( |
unsigned long identifier, |
std::unique_ptr<CrossThreadResourceResponseData> responseData, |
- std::unique_ptr<WebDataConsumerHandle> handle) { |
+ std::unique_ptr<WebDataConsumerHandle> handle, |
+ double postTaskTime) { |
+ int value = |
+ static_cast<int>((monotonicallyIncreasingTime() - postTaskTime) * 1000); |
+ DEFINE_STATIC_LOCAL( |
+ CustomCountHistogram, hist, |
+ ("SWF.C2.Response.RendererMainToWorker", 0, 10000000, 50)); |
+ if (m_isServiceWorker) |
+ hist.count(value); |
DCHECK(!isMainThread()); |
if (!m_client) |
return; |
@@ -433,7 +444,16 @@ void WorkerThreadableLoader::MainThreadLoaderHolder::createAndStart( |
const ThreadableLoaderOptions& options, |
const ResourceLoaderOptions& resourceLoaderOptions, |
PassRefPtr<WaitableEventWithTasks> eventWithTasks, |
+ double postTaskTime, |
+ bool isServiceWorker, |
ExecutionContext* executionContext) { |
+ int value = |
+ static_cast<int>((monotonicallyIncreasingTime() - postTaskTime) * 1000); |
+ DEFINE_STATIC_LOCAL(CustomCountHistogram, hist, |
+ ("SWF.B1.Request.WorkerToRendererMain", 0, 10000000, 50)); |
+ if (isServiceWorker) |
+ hist.count(value); |
+ |
DCHECK(isMainThread()); |
TaskForwarder* forwarder; |
RefPtr<WorkerLoaderProxy> loaderProxy = passLoaderProxy; |
@@ -444,6 +464,7 @@ void WorkerThreadableLoader::MainThreadLoaderHolder::createAndStart( |
MainThreadLoaderHolder* mainThreadLoaderHolder = |
new MainThreadLoaderHolder(forwarder, workerThreadLifecycleContext); |
+ mainThreadLoaderHolder->m_isServiceWorker = isServiceWorker; |
if (mainThreadLoaderHolder->wasContextDestroyedBeforeObserverCreation()) { |
// The thread is already terminating. |
forwarder->abort(); |
@@ -515,6 +536,14 @@ void WorkerThreadableLoader::MainThreadLoaderHolder::didReceiveResponse( |
const ResourceResponse& response, |
std::unique_ptr<WebDataConsumerHandle> handle) { |
DCHECK(isMainThread()); |
+ double now(monotonicallyIncreasingTime()); |
+ int value = static_cast<int>((now * 1000 - response.responseStart() / 1000)); |
+ DEFINE_STATIC_LOCAL( |
+ CustomCountHistogram, hist, |
+ ("SWF.C1.Response.BrowserToRendererMain", 0, 10000000, 50)); |
+ if (m_isServiceWorker) |
+ hist.count(value); |
+ |
CrossThreadPersistent<WorkerThreadableLoader> workerLoader = |
m_workerLoader.get(); |
if (!workerLoader || !m_forwarder) |
@@ -522,7 +551,8 @@ void WorkerThreadableLoader::MainThreadLoaderHolder::didReceiveResponse( |
m_forwarder->forwardTask( |
BLINK_FROM_HERE, |
crossThreadBind(&WorkerThreadableLoader::didReceiveResponse, workerLoader, |
- identifier, response, WTF::passed(std::move(handle)))); |
+ identifier, response, WTF::passed(std::move(handle)), |
+ now)); |
} |
void WorkerThreadableLoader::MainThreadLoaderHolder::didReceiveData( |