summaryrefslogtreecommitdiffstats
path: root/content/browser/startup_task_runner.h
diff options
context:
space:
mode:
authoraberent@chromium.org <aberent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-01 16:01:51 +0000
committeraberent@chromium.org <aberent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-01 16:01:51 +0000
commit57624abcbe3852fe2492ea0257fd92f400c4c5ce (patch)
tree8947ba6272e9b13103304285b5faf76a60593601 /content/browser/startup_task_runner.h
parent9562f40f00dab5117a37553b712f902d2ddf5417 (diff)
downloadchromium_src-57624abcbe3852fe2492ea0257fd92f400c4c5ce.zip
chromium_src-57624abcbe3852fe2492ea0257fd92f400c4c5ce.tar.gz
chromium_src-57624abcbe3852fe2492ea0257fd92f400c4c5ce.tar.bz2
Run the later parts of startup as UI thread tasks
This CL splits the later parts of startup, from thread creation onwards, into multiple UI thread tasks. Depending on the StartupTaskRunner passed to CreateThreads the tasks are all run immediately, or are queued one at a time on the UI thread. This, on platforms where the UI is already running, allows the UI to remain interactive while Chrome is initialized. BUG=231856 Review URL: https://chromiumcodereview.appspot.com/19957002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@215042 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/startup_task_runner.h')
-rw-r--r--content/browser/startup_task_runner.h66
1 files changed, 66 insertions, 0 deletions
diff --git a/content/browser/startup_task_runner.h b/content/browser/startup_task_runner.h
new file mode 100644
index 0000000..5f954ed
--- /dev/null
+++ b/content/browser/startup_task_runner.h
@@ -0,0 +1,66 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_STARTUP_TASK_RUNNER_H_
+#define CONTENT_BROWSER_STARTUP_TASK_RUNNER_H_
+
+#include <list>
+
+#include "base/callback.h"
+#include "base/memory/ref_counted.h"
+#include "base/single_thread_task_runner.h"
+
+#include "build/build_config.h"
+
+#include "content/public/browser/browser_main_runner.h"
+
+namespace content {
+
+// A startup task is a void function returning the status on completion.
+// a status of > 0 indicates a failure, and that no further startup tasks should
+// be run.
+typedef base::Callback<int(void)> StartupTask;
+
+// This class runs startup tasks. The tasks are either run immediately inline,
+// or are queued one at a time on the UI thread's message loop. If the events
+// are queued, UI events that are received during startup will be acted upon
+// between startup tasks. The motivation for this is that, on targets where the
+// UI is already started, it allows us to keep the UI responsive during startup.
+//
+// Note that this differs from a SingleThreadedTaskRunner in that there may be
+// no opportunity to handle UI events between the tasks of a
+// SingleThreadedTaskRunner.
+
+class CONTENT_EXPORT StartupTaskRunner
+ : public base::RefCounted<StartupTaskRunner> {
+
+ public:
+ // Constructor: Note that |startup_complete_callback| is optional. If it is
+ // not null it will be called once all the startup tasks have run.
+ StartupTaskRunner(bool browser_may_start_asynchronously,
+ base::Callback<void(int)> startup_complete_callback,
+ scoped_refptr<base::SingleThreadTaskRunner> proxy);
+
+ // Add a task to the queue of startup tasks to be run.
+ virtual void AddTask(StartupTask& callback);
+
+ // Start running the tasks.
+ virtual void StartRunningTasks();
+
+ private:
+ friend class base::RefCounted<StartupTaskRunner>;
+ virtual ~StartupTaskRunner();
+
+ std::list<StartupTask> task_list_;
+ void WrappedTask();
+
+ const bool asynchronous_startup_;
+ base::Callback<void(int)> startup_complete_callback_;
+ scoped_refptr<base::SingleThreadTaskRunner> proxy_;
+
+ DISALLOW_COPY_AND_ASSIGN(StartupTaskRunner);
+};
+
+} // namespace content
+#endif // CONTENT_BROWSER_STARTUP_TASK_RUNNER_H_