| 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(
|
|
|