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

Side by Side Diff: content/renderer/scheduler_proxy_task_runner.h

Issue 548333002: Revert of Revert of Forward input and compositing tasks to the Blink scheduler (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 3 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CONTENT_RENDERER_SCHEDULER_PROXY_TASK_RUNNER_H_
6 #define CONTENT_RENDERER_SCHEDULER_PROXY_TASK_RUNNER_H_
7
8 #include "base/debug/task_annotator.h"
9 #include "base/pending_task.h"
10 #include "content/renderer/render_thread_impl.h"
11 #include "third_party/WebKit/public/platform/WebSchedulerProxy.h"
12 #include "third_party/WebKit/public/platform/WebTraceLocation.h"
13
14 namespace content {
15
16 // Helper for forwarding posted tasks into different WebSchedulerProxy queues.
17 template <void (blink::WebSchedulerProxy::*ProxyFunction)(
18 const blink::WebTraceLocation& location,
19 blink::WebThread::Task* task)>
20 class SchedulerProxyTaskRunner : public base::SingleThreadTaskRunner {
21 public:
22 SchedulerProxyTaskRunner()
23 : main_thread_id_(base::PlatformThread::CurrentId()),
24 scheduler_proxy_(blink::WebSchedulerProxy::create()),
25 next_sequence_num_(0) {}
26
27 // base::SingleThreadTaskRunner implementation:
28 virtual bool RunsTasksOnCurrentThread() const OVERRIDE {
29 return base::PlatformThread::CurrentId() == main_thread_id_;
30 }
31
32 virtual bool PostDelayedTask(const tracked_objects::Location& from_here,
33 const base::Closure& task,
34 base::TimeDelta delay) OVERRIDE {
35 DCHECK(delay == base::TimeDelta());
36 base::PendingTask pending_task(from_here, task);
37 pending_task.sequence_num = ++next_sequence_num_;
38 task_annotator_.DidQueueTask("SchedulerProxyTaskRunner::PostDelayedTask",
39 pending_task);
40 blink::WebTraceLocation location(from_here.function_name(),
41 from_here.file_name());
42 TaskAdapter* task_adapter = new TaskAdapter(&task_annotator_, pending_task);
43 (scheduler_proxy_.*ProxyFunction)(location, task_adapter);
44 return true;
45 }
46
47 virtual bool PostNonNestableDelayedTask(
48 const tracked_objects::Location& from_here,
49 const base::Closure& task,
50 base::TimeDelta delay) OVERRIDE {
51 NOTREACHED();
52 return false;
53 }
54
55 protected:
56 virtual ~SchedulerProxyTaskRunner() {}
57
58 private:
59 class TaskAdapter : public blink::WebThread::Task {
60 public:
61 explicit TaskAdapter(base::debug::TaskAnnotator* task_annotator,
62 const base::PendingTask& pending_task)
63 : task_annotator_(task_annotator), pending_task_(pending_task) {}
64 virtual ~TaskAdapter() {}
65
66 virtual void run() {
67 task_annotator_->RunTask("SchedulerProxyTaskRunner::PostDelayedTask",
68 "SchedulerProxyTaskRunner::RunTask",
69 pending_task_);
70 }
71
72 private:
73 base::debug::TaskAnnotator* task_annotator_;
74 base::PendingTask pending_task_;
75 };
76
77 const base::PlatformThreadId main_thread_id_;
78 blink::WebSchedulerProxy scheduler_proxy_;
79 base::debug::TaskAnnotator task_annotator_;
80 int next_sequence_num_;
81
82 DISALLOW_COPY_AND_ASSIGN(SchedulerProxyTaskRunner);
83 };
84
85 } // namespace content
86
87 #endif // CONTENT_RENDERER_SCHEDULER_PROXY_TASK_RUNNER_H_
OLDNEW
« no previous file with comments | « content/renderer/render_thread_impl.cc ('k') | content/renderer/scheduler_proxy_task_runner_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698