Index: chrome/browser/chrome_browser_main.cc |
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc |
index 6e3e14b2cc96c364e574a4d97e1b5cb07c1a5512..5b553396c2a9b44f1d15ad2b5f2665cc6aa0d458 100644 |
--- a/chrome/browser/chrome_browser_main.cc |
+++ b/chrome/browser/chrome_browser_main.cc |
@@ -314,7 +314,13 @@ void AddFirstRunNewTabs(StartupBrowserCreator* browser_creator, |
} |
#endif // !defined(OS_ANDROID) && !defined(OS_CHROMEOS) |
-void MaybeInitializeTaskScheduler() { |
+// Initializes TaskScheduler if enabled via field trial or command line flag. If |
+// the function enables redirection of SequencedWorkerPool to TaskScheduler, |
+// |sequenced_worker_pool_redirected| is set to true. |
+void MaybeInitializeTaskScheduler(bool* sequenced_worker_pool_redirected) { |
gab
2016/11/01 21:48:02
Prefer return value to out-param.
fdoray
2016/11/02 12:56:09
Done.
|
+ DCHECK(sequenced_worker_pool_redirected); |
+ DCHECK(!*sequenced_worker_pool_redirected); |
+ |
static constexpr char kFieldTrialName[] = "BrowserScheduler"; |
std::map<std::string, std::string> variation_params; |
if (!variations::GetVariationParams(kFieldTrialName, &variation_params)) { |
@@ -335,7 +341,8 @@ void MaybeInitializeTaskScheduler() { |
variation_params.find("RedirectSequencedWorkerPools"); |
if (sequenced_worker_pool_param != variation_params.end() && |
sequenced_worker_pool_param->second == "true") { |
- base::SequencedWorkerPool::RedirectToTaskSchedulerForProcess(); |
+ base::SequencedWorkerPool::EnableWithRedirectionToTaskSchedulerForProcess(); |
+ *sequenced_worker_pool_redirected = true; |
} |
} |
@@ -1229,7 +1236,8 @@ int ChromeBrowserMainParts::PreCreateThreadsImpl() { |
// IOThread's initialization which happens in BrowserProcess:PreCreateThreads. |
SetupFieldTrials(); |
- // Task Scheduler initialization needs to be here for the following reasons: |
+ // Initializing TaskScheduler and enabling SequencedWorkerPool needs to be |
+ // here for the following reasons: |
// * After |SetupFieldTrials()|: Initialization uses variations. |
// * Before |SetupMetrics()|: |SetupMetrics()| uses the blocking pool. The |
// Task Scheduler must do any necessary redirection before then. |
@@ -1238,7 +1246,15 @@ int ChromeBrowserMainParts::PreCreateThreadsImpl() { |
// threads itself so instantiating it earlier is also incorrect. |
// To maintain scoping symmetry, if this line is moved, the corresponding |
// shutdown call may also need to be moved. |
- MaybeInitializeTaskScheduler(); |
+ bool sequenced_worker_pool_redirected = false; |
+ MaybeInitializeTaskScheduler(&sequenced_worker_pool_redirected); |
+ |
+ // If MaybeInitializeTaskScheduler() hasn't enabled SequencedWorkerPool with |
+ // redirection to TaskScheduler, enable it without redirection. |
+ // TODO(fdoray): Remove this once the SequencedWorkerPool to TaskScheduler |
+ // redirection experiment concludes https://crbug.com/622400. |
+ if (!sequenced_worker_pool_redirected) |
+ base::SequencedWorkerPool::EnableForProcess(); |
SetupMetrics(); |