Index: content/renderer/scheduler/deadline_task_runner.h |
diff --git a/content/renderer/scheduler/deadline_task_runner.h b/content/renderer/scheduler/deadline_task_runner.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3f0ea9f89084c9181cd072100e73e581aa930a29 |
--- /dev/null |
+++ b/content/renderer/scheduler/deadline_task_runner.h |
@@ -0,0 +1,49 @@ |
+// Copyright 2015 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_RENDERER_SCHEDULER_DEADLINE_TASK_RUNNER_H_ |
+#define CONTENT_RENDERER_SCHEDULER_DEADLINE_TASK_RUNNER_H_ |
+ |
+#include "base/callback.h" |
+#include "base/macros.h" |
+#include "base/memory/weak_ptr.h" |
+#include "base/single_thread_task_runner.h" |
+#include "base/time/time.h" |
+#include "content/renderer/scheduler/cancelable_closure_holder.h" |
+ |
+namespace content { |
+ |
+// Runs a posted task at latest by a given deadline, but possibly sooner. |
+class DeadlineTaskRunner { |
rmcilroy
2015/03/12 22:11:30
looks like you will need to add CONTENT_EXPORT for
alex clarke (OOO till 29th)
2015/03/13 09:53:03
Done.
|
+ public: |
+ DeadlineTaskRunner(const base::Closure& callback, |
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner); |
+ |
+ ~DeadlineTaskRunner(); |
+ |
+ // If there is no outstanding task then a task is posted to run after |delay|. |
+ // If there is an outstanding task which is scheduled to run: |
+ // a) sooner - then this is a NOP. |
+ // b) later - then the outstanding task is cancelled and a new task is |
+ // posted to run after |delay|. |
+ // |
+ // Once the deadline task has run, we reset. |
+ void SetDeadline(const tracked_objects::Location& from_here, |
+ base::TimeDelta delay, |
+ base::TimeTicks now); |
+ |
+ private: |
+ void RunInternal(); |
+ |
+ CancelableClosureHolder cancelable_run_internal_; |
+ base::Closure callback_; |
+ base::TimeTicks deadline_; |
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(DeadlineTaskRunner); |
+}; |
+ |
+} // namespace content |
+ |
+#endif // CONTENT_RENDERER_SCHEDULER_DEADLINE_TASK_RUNNER_H_ |