Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(21)

Unified Diff: webkit/dom_storage/dom_storage_task_runner.h

Issue 9718029: DomStorage commit task sequencing. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webkit/dom_storage/dom_storage_task_runner.h
===================================================================
--- webkit/dom_storage/dom_storage_task_runner.h (revision 127613)
+++ webkit/dom_storage/dom_storage_task_runner.h (working copy)
@@ -17,18 +17,27 @@
namespace dom_storage {
-// Tasks must run serially with respect to one another, but may
-// execute on different OS threads. The base class is implemented
-// in terms of a MessageLoopProxy.
-class DomStorageTaskRunner : public base::SequencedTaskRunner {
+// Interface for posting dom storage related tasks. There
+// are two logical task sequences, the primary sequence is
+// the read where most tasks are performed, the commit sequence
+// is used internally for committing data to disk. The base TaskRunner
+// interfaces maps to the primary sequence and allow callers to post
+// non shutdown blocking tasks on it. An additional method allows callers
+// to post shutdown blocking tasks to either sequence.
+class DomStorageTaskRunner : public base::TaskRunner {
public:
- explicit DomStorageTaskRunner(base::MessageLoopProxy* message_loop);
+ enum SequenceID {
+ PRIMARY_SEQUENCE,
+ COMMIT_SEQUENCE
+ };
+
virtual ~DomStorageTaskRunner();
- // The PostTask() method, defined by TaskRunner, schedules a task
- // to run immediately.
+ // The PostTask() method, defined by TaskRunner, schedules
+ // a non shutdown blocking READ_SEQUENCE task to run immediately.
benm (inactive) 2012/03/20 13:39:16 s/READ_/PRIMARY_/ and below
- // Schedules a task to be run after a delay.
+ // Schedules a non shutdown blocking READ_SEQUENCE task to be run
+ // after a delay.
virtual bool PostDelayedTask(
const tracked_objects::Location& from_here,
const base::Closure& task,
@@ -45,43 +54,43 @@
// value is hard coded to true.
virtual bool RunsTasksOnCurrentThread() const OVERRIDE;
- // SequencedTaskRunner overrides, these are implemented in
- // terms of PostDelayedTask and the latter is similarly deprecated.
- virtual bool PostNonNestableDelayedTask(
+ virtual bool PostShutdownBlockingTask(
const tracked_objects::Location& from_here,
- const base::Closure& task,
- base::TimeDelta delay) OVERRIDE;
- virtual bool PostNonNestableDelayedTask(
- const tracked_objects::Location& from_here,
- const base::Closure& task,
- int64 delay_ms) OVERRIDE;
+ SequenceID sequence_id,
+ const base::Closure& task) = 0;
protected:
+ explicit DomStorageTaskRunner(base::MessageLoopProxy* message_loop);
+
const scoped_refptr<base::MessageLoopProxy> message_loop_;
};
// A derived class that utlizes the SequenceWorkerPool under a
benm (inactive) 2012/03/20 13:39:16 remove "a"
-// dom_storage specific SequenceToken. The MessageLoopProxy
+// dom_storage specific SequenceTokens. The MessageLoopProxy
// is used to delay scheduling on the worker pool.
class DomStorageWorkerPoolTaskRunner : public DomStorageTaskRunner {
public:
DomStorageWorkerPoolTaskRunner(
base::SequencedWorkerPool* sequenced_worker_pool,
- base::SequencedWorkerPool::SequenceToken sequence_token,
+ base::SequencedWorkerPool::SequenceToken primary_sequence_token,
+ base::SequencedWorkerPool::SequenceToken commit_sequence_token,
base::MessageLoopProxy* delayed_task_loop);
virtual ~DomStorageWorkerPoolTaskRunner();
- // Schedules a sequenced worker task to be run after a delay.
virtual bool PostDelayedTask(
const tracked_objects::Location& from_here,
const base::Closure& task,
base::TimeDelta delay) OVERRIDE;
- base::SequencedWorkerPool::SequenceToken sequence_token() const;
+ virtual bool PostShutdownBlockingTask(
+ const tracked_objects::Location& from_here,
+ SequenceID sequence_id,
+ const base::Closure& task) OVERRIDE;
private:
const scoped_refptr<base::SequencedWorkerPool> sequenced_worker_pool_;
- base::SequencedWorkerPool::SequenceToken sequence_token_;
+ base::SequencedWorkerPool::SequenceToken primary_sequence_token_;
+ base::SequencedWorkerPool::SequenceToken commit_sequence_token_;
};
// A derived class used in unit tests that causes us to ignore the
@@ -96,6 +105,11 @@
const tracked_objects::Location& from_here,
const base::Closure& task,
base::TimeDelta delay) OVERRIDE;
+
+ virtual bool PostShutdownBlockingTask(
+ const tracked_objects::Location& from_here,
+ SequenceID sequence_id,
+ const base::Closure& task) OVERRIDE;
};
} // namespace dom_storage

Powered by Google App Engine
This is Rietveld 408576698