Add breakdown histograms for injected script execution time

Currently we have the following metrics for content script injections:

- Extensions.Inject{Start,End,Idle}_Time: Time to inject all extensions'
  scripts for one run_location. Recorded only if injected synchronously.
- Extensions.InjectedScriptExecutionTime: Time to inject one extension's
  scripts, not broken down by run_location.

This patch adds breakdown histograms for InjectedScriptExecutionTime by
locations. Also, add notes to Inject{Start,End,Idle}_Time descriptions
that these are reported only for synchronous script injections.

BUG=636655

Review-Url: https://codereview.chromium.org/2766603002
Cr-Commit-Position: refs/heads/master@{#459375}
diff --git a/extensions/renderer/script_injection.cc b/extensions/renderer/script_injection.cc
index 519dce0ba..cd7da1b 100644
--- a/extensions/renderer/script_injection.cc
+++ b/extensions/renderer/script_injection.cc
@@ -323,8 +323,25 @@
     base::TimeDelta elapsed) {
   DCHECK(!did_inject_js_);
 
-  if (injection_host_->id().type() == HostID::EXTENSIONS)
+  if (injection_host_->id().type() == HostID::EXTENSIONS) {
     UMA_HISTOGRAM_TIMES("Extensions.InjectedScriptExecutionTime", elapsed);
+    switch (run_location_) {
+      case UserScript::DOCUMENT_START:
+        UMA_HISTOGRAM_TIMES(
+            "Extensions.InjectedScriptExecutionTime.DocumentStart", elapsed);
+        break;
+      case UserScript::DOCUMENT_END:
+        UMA_HISTOGRAM_TIMES(
+            "Extensions.InjectedScriptExecutionTime.DocumentEnd", elapsed);
+        break;
+      case UserScript::DOCUMENT_IDLE:
+        UMA_HISTOGRAM_TIMES(
+            "Extensions.InjectedScriptExecutionTime.DocumentIdle", elapsed);
+        break;
+      default:
+        break;
+    }
+  }
 
   bool expects_results = injector_->ExpectsResults();
   if (expects_results) {