Chrome OS OOBE: Increase startup sound delay and add UMA metric.

This CL increases OOBE startup sound delay to 4 seconds, and adds UMA metric
on it.

Bug: 848485
Change-Id: I5401a2625634315760906789fcd69afe04d2972c
Reviewed-on: https://chromium-review.googlesource.com/1173014
Reviewed-by: Ilya Sherman <isherman@chromium.org>
Reviewed-by: Wenzhao (Colin) Zang <wzang@chromium.org>
Commit-Queue: Alexander Alekseev <alemate@chromium.org>
Cr-Commit-Position: refs/heads/master@{#582866}
diff --git a/chrome/browser/chromeos/login/ui/login_display_host_webui.cc b/chrome/browser/chromeos/login/ui/login_display_host_webui.cc
index a77031a..abb0931 100644
--- a/chrome/browser/chromeos/login/ui/login_display_host_webui.cc
+++ b/chrome/browser/chromeos/login/ui/login_display_host_webui.cc
@@ -18,6 +18,7 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/macros.h"
+#include "base/metrics/histogram_macros.h"
 #include "base/single_thread_task_runner.h"
 #include "base/strings/string_split.h"
 #include "base/strings/utf_string_conversions.h"
@@ -113,7 +114,7 @@
 namespace {
 
 // Maximum delay for startup sound after 'loginPromptVisible' signal.
-const int kStartupSoundMaxDelayMs = 2000;
+const int kStartupSoundMaxDelayMs = 4000;
 
 // URL which corresponds to the login WebUI.
 const char kLoginURL[] = "chrome://oobe/login";
@@ -357,14 +358,6 @@
          device.type != chromeos::AudioDeviceType::AUDIO_TYPE_OTHER;
 }
 
-// Returns true if it is too late to play startup sound.
-bool StartupSoundOutdated(base::TimeTicks login_prompt_visible_time) {
-  // Don't try to play startup sound if login prompt has been already visible
-  // for a long time.
-  return base::TimeTicks::Now() - login_prompt_visible_time >
-         base::TimeDelta::FromMilliseconds(kStartupSoundMaxDelayMs);
-}
-
 }  // namespace
 
 namespace chromeos {
@@ -1202,9 +1195,17 @@
   need_to_play_startup_sound_ = false;
   oobe_startup_sound_played_ = true;
 
-  if (StartupSoundOutdated(login_prompt_visible_time_))
-    return;
+  const base::TimeDelta time_since_login_prompt_visible =
+      base::TimeTicks::Now() - login_prompt_visible_time_;
+  UMA_HISTOGRAM_TIMES("Accessibility.OOBEStartupSoundDelay",
+                      time_since_login_prompt_visible);
 
+  // Don't try to play startup sound if login prompt has been already visible
+  // for a long time.
+  if (time_since_login_prompt_visible >
+      base::TimeDelta::FromMilliseconds(kStartupSoundMaxDelayMs)) {
+    return;
+  }
   AccessibilityManager::Get()->PlayEarcon(SOUND_STARTUP,
                                           PlaySoundOption::ALWAYS);
 }
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index b0ed027..22db035 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -347,6 +347,15 @@
   </summary>
 </histogram>
 
+<histogram name="Accessibility.OOBEStartupSoundDelay" units="ms">
+  <owner>lpalmaro@chromium.org</owner>
+  <owner>alemate@chromium.org</owner>
+  <summary>
+    Delay between login_prompt_visible and Chrome OS OOBE startup sound
+    playback. Depends on sound subsystem initialization time.
+  </summary>
+</histogram>
+
 <histogram name="Accessibility.State" enum="BooleanEnabled">
   <obsolete>
     Deprecated 12/2016 in Issue 672205 with the addition of