Record service worker's script sizes for script streaming

ServiceWorkerInstalledScriptsManager starts to record following two metrics by
this patch:
- ServiceWorker.ScriptSize
- ServiceWorker.ScriptCachedMetadataSize

Bug: 683037
Change-Id: I2a941ae97e62a4c198dccc4a9ac0e769251ddf94
Reviewed-on: https://chromium-review.googlesource.com/609621
Commit-Queue: Makoto Shimazu <shimazu@chromium.org>
Reviewed-by: Kinuko Yasuda <kinuko@chromium.org>
Reviewed-by: Hiroki Nakagawa <nhiroki@chromium.org>
Cr-Commit-Position: refs/heads/master@{#494017}
diff --git a/third_party/WebKit/Source/modules/exported/WebEmbeddedWorkerImpl.cpp b/third_party/WebKit/Source/modules/exported/WebEmbeddedWorkerImpl.cpp
index b1f679e0d..50bc156 100644
--- a/third_party/WebKit/Source/modules/exported/WebEmbeddedWorkerImpl.cpp
+++ b/third_party/WebKit/Source/modules/exported/WebEmbeddedWorkerImpl.cpp
@@ -53,7 +53,6 @@
 #include "modules/serviceworkers/ServiceWorkerGlobalScopeProxy.h"
 #include "modules/serviceworkers/ServiceWorkerInstalledScriptsManager.h"
 #include "modules/serviceworkers/ServiceWorkerThread.h"
-#include "platform/Histogram.h"
 #include "platform/RuntimeEnabledFeatures.h"
 #include "platform/SharedBuffer.h"
 #include "platform/heap/Handle.h"
@@ -340,17 +339,6 @@
   }
   worker_context_client_->WorkerScriptLoaded();
 
-  DEFINE_STATIC_LOCAL(CustomCountHistogram, script_size_histogram,
-                      ("ServiceWorker.ScriptSize", 1000, 5000000, 50));
-  script_size_histogram.Count(main_script_loader_->SourceText().length());
-  if (main_script_loader_->CachedMetadata()) {
-    DEFINE_STATIC_LOCAL(
-        CustomCountHistogram, script_cached_metadata_size_histogram,
-        ("ServiceWorker.ScriptCachedMetadataSize", 1000, 50000000, 50));
-    script_cached_metadata_size_histogram.Count(
-        main_script_loader_->CachedMetadata()->size());
-  }
-
   if (pause_after_download_state_ == kDoPauseAfterDownload) {
     pause_after_download_state_ = kIsPausedAfterDownload;
     return;
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.cpp
index 008caf37..3cad3ec 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.cpp
@@ -120,8 +120,31 @@
 
 ServiceWorkerGlobalScope::~ServiceWorkerGlobalScope() {}
 
-void ServiceWorkerGlobalScope::CountScript(size_t script_size,
-                                           size_t cached_metadata_size) {
+void ServiceWorkerGlobalScope::CountWorkerScript(size_t script_size,
+                                                 size_t cached_metadata_size) {
+  DEFINE_THREAD_SAFE_STATIC_LOCAL(
+      CustomCountHistogram, script_size_histogram,
+      ("ServiceWorker.ScriptSize", 1000, 5000000, 50));
+  script_size_histogram.Count(script_size);
+
+  if (cached_metadata_size) {
+    DEFINE_THREAD_SAFE_STATIC_LOCAL(
+        CustomCountHistogram, script_cached_metadata_size_histogram,
+        ("ServiceWorker.ScriptCachedMetadataSize", 1000, 50000000, 50));
+    script_cached_metadata_size_histogram.Count(cached_metadata_size);
+  }
+
+  RecordScriptSize(script_size, cached_metadata_size);
+}
+
+void ServiceWorkerGlobalScope::CountImportedScript(
+    size_t script_size,
+    size_t cached_metadata_size) {
+  RecordScriptSize(script_size, cached_metadata_size);
+}
+
+void ServiceWorkerGlobalScope::RecordScriptSize(size_t script_size,
+                                                size_t cached_metadata_size) {
   ++script_count_;
   script_total_size_ += script_size;
   script_cached_metadata_total_size_ += cached_metadata_size;
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.h b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.h
index 5d17247b..3fb1cd8 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.h
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.h
@@ -65,9 +65,12 @@
   ~ServiceWorkerGlobalScope() override;
   bool IsServiceWorkerGlobalScope() const override { return true; }
 
-  // Counts an evaluated script and its size. Called for each of the main
-  // worker script and imported scripts.
-  void CountScript(size_t script_size, size_t cached_metadata_size);
+  // Counts an evaluated script and its size. Called for the main worker script.
+  void CountWorkerScript(size_t script_size, size_t cached_metadata_size);
+
+  // Counts an evaluated script and its size. Called for each of imported
+  // scripts.
+  void CountImportedScript(size_t script_size, size_t cached_metadata_size);
 
   // Called when the main worker script is evaluated.
   void DidEvaluateWorkerScript();
@@ -123,6 +126,10 @@
       const Vector<char>* meta_data) override;
   void ExceptionThrown(ErrorEvent*) override;
 
+  // Records the |script_size| and |cached_metadata_size| for UMA to measure the
+  // number of scripts and the total bytes of scripts.
+  void RecordScriptSize(size_t script_size, size_t cached_metadata_size);
+
   Member<ServiceWorkerClients> clients_;
   Member<ServiceWorkerRegistration> registration_;
   bool did_evaluate_script_;
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScopeProxy.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScopeProxy.cpp
index b789dc2..4cb7aac 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScopeProxy.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScopeProxy.cpp
@@ -628,14 +628,14 @@
     size_t script_size,
     size_t cached_metadata_size) {
   DCHECK(WorkerGlobalScope()->IsContextThread());
-  WorkerGlobalScope()->CountScript(script_size, cached_metadata_size);
+  worker_global_scope_->CountWorkerScript(script_size, cached_metadata_size);
 }
 
 void ServiceWorkerGlobalScopeProxy::WillEvaluateImportedScript(
     size_t script_size,
     size_t cached_metadata_size) {
   DCHECK(WorkerGlobalScope()->IsContextThread());
-  WorkerGlobalScope()->CountScript(script_size, cached_metadata_size);
+  worker_global_scope_->CountImportedScript(script_size, cached_metadata_size);
 }
 
 void ServiceWorkerGlobalScopeProxy::DidEvaluateWorkerScript(bool success) {