Create TaskScheduler in BrowserMainLoop constructor.

This CL allows tasks to be posted via base/task_scheduler/post_task.h
as soon as BrowserMainLoop is instantiated. Tasks don't run until
TaskScheduler::Start() is called in BrowserMainLoop::CreateThreads().

BUG=690706

Review-Url: https://codereview.chromium.org/2835933004
Cr-Commit-Position: refs/heads/master@{#467283}
diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc
index c9828a5..b024d9f 100644
--- a/content/browser/browser_main_loop.cc
+++ b/content/browser/browser_main_loop.cc
@@ -531,6 +531,10 @@
            tracing::TraceConfigFile::GetInstance()->GetStartupDuration() > 0)) {
   DCHECK(!g_current_browser_main_loop);
   g_current_browser_main_loop = this;
+
+  // Use an empty string as TaskScheduler name to match the suffix of browser
+  // process TaskScheduler histograms.
+  base::TaskScheduler::Create("");
 }
 
 BrowserMainLoop::~BrowserMainLoop() {
@@ -951,14 +955,15 @@
 int BrowserMainLoop::CreateThreads() {
   TRACE_EVENT0("startup,rail", "BrowserMainLoop::CreateThreads");
 
-  auto task_scheduler_init_params =
-      GetContentClient()->browser()->GetTaskSchedulerInitParams();
-  if (!task_scheduler_init_params)
-    task_scheduler_init_params = GetDefaultTaskSchedulerInitParams();
-  DCHECK(task_scheduler_init_params);
-
-  base::TaskScheduler::CreateAndSetDefaultTaskScheduler(
-      "", *task_scheduler_init_params.get());
+  {
+    auto task_scheduler_init_params =
+        GetContentClient()->browser()->GetTaskSchedulerInitParams();
+    if (!task_scheduler_init_params)
+      task_scheduler_init_params = GetDefaultTaskSchedulerInitParams();
+    DCHECK(task_scheduler_init_params);
+    base::TaskScheduler::GetInstance()->Start(
+        *task_scheduler_init_params.get());
+  }
 
   GetContentClient()->browser()->PerformExperimentalTaskSchedulerRedirections();