diff options
author | kinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-12 13:21:21 +0000 |
---|---|---|
committer | kinuko@chromium.org <kinuko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-12 13:21:21 +0000 |
commit | 6719948d489335b4b679c190a59e4995244a00e0 (patch) | |
tree | d19392a9ddf91bf824999c24e7bfef7b4e3a721d /webkit/browser/fileapi/timed_task_helper.h | |
parent | b7823011f3bf858a0d4baba1252f31831b3f3555 (diff) | |
download | chromium_src-6719948d489335b4b679c190a59e4995244a00e0.zip chromium_src-6719948d489335b4b679c190a59e4995244a00e0.tar.gz chromium_src-6719948d489335b4b679c190a59e4995244a00e0.tar.bz2 |
Add TimedTaskHelper to replace timer on SequencedTaskRunner
The code is based on the ObfuscatedFileUtil's ex-timer code
that replaces timer with PostDelayTask.
BUG=248826
R=tzik@chromium.org
Review URL: https://codereview.chromium.org/16775011
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@205748 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/browser/fileapi/timed_task_helper.h')
-rw-r--r-- | webkit/browser/fileapi/timed_task_helper.h | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/webkit/browser/fileapi/timed_task_helper.h b/webkit/browser/fileapi/timed_task_helper.h new file mode 100644 index 0000000..ad72fb8 --- /dev/null +++ b/webkit/browser/fileapi/timed_task_helper.h @@ -0,0 +1,59 @@ +// 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 WEBKIT_BROWSER_FILEAPI_TIMED_TASK_HELPER_H_ +#define WEBKIT_BROWSER_FILEAPI_TIMED_TASK_HELPER_H_ + +#include "base/basictypes.h" +#include "base/callback.h" +#include "base/location.h" +#include "base/memory/ref_counted.h" +#include "base/memory/scoped_ptr.h" +#include "base/time.h" +#include "webkit/storage/webkit_storage_export.h" + +namespace base { +class SequencedTaskRunner; +} + +namespace fileapi { + +// Works similarly as base::Timer, but takes SequencedTaskRunner and +// runs tasks on it (instead of implicitly bound to a thread). +// TODO(kinuko): This has nothing to do with fileapi. Move somewhere +// more common place. +class WEBKIT_STORAGE_EXPORT TimedTaskHelper { + public: + explicit TimedTaskHelper(base::SequencedTaskRunner* task_runner); + ~TimedTaskHelper(); + + bool IsRunning() const; + void Start(const tracked_objects::Location& posted_from, + base::TimeDelta delay, + const base::Closure& user_task); + void Reset(); + + private: + struct Tracker; + static void Fired(scoped_ptr<Tracker> tracker); + + void OnFired(scoped_ptr<Tracker> tracker); + void PostDelayedTask(scoped_ptr<Tracker> tracker, base::TimeDelta delay); + + scoped_refptr<base::SequencedTaskRunner> task_runner_; + tracked_objects::Location posted_from_; + base::TimeDelta delay_; + base::Closure user_task_; + + base::TimeTicks desired_run_time_; + + // This is set to non-null and owned by a timer task while timer is running. + Tracker* tracker_; + + DISALLOW_COPY_AND_ASSIGN(TimedTaskHelper); +}; + +} // namespace fileapi + +#endif // WEBKIT_BROWSER_FILEAPI_TIMED_TASK_HELPER_H_ |