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

Side by Side Diff: Source/platform/scheduler/Scheduler.h

Issue 490913002: Adding flow traces for blink scheduler events (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Merge with master and disable mangle 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
« no previous file with comments | « Source/platform/blink_platform.gypi ('k') | Source/platform/scheduler/Scheduler.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef Scheduler_h 5 #ifndef Scheduler_h
6 #define Scheduler_h 6 #define Scheduler_h
7 7
8 #include "platform/PlatformExport.h" 8 #include "platform/PlatformExport.h"
9 #include "platform/TraceLocation.h" 9 #include "platform/scheduler/TracedTask.h"
10 #include "wtf/DoubleBufferedDeque.h" 10 #include "wtf/DoubleBufferedDeque.h"
11 #include "wtf/Functional.h" 11 #include "wtf/Functional.h"
12 #include "wtf/Noncopyable.h" 12 #include "wtf/Noncopyable.h"
13 #include "wtf/ThreadingPrimitives.h" 13 #include "wtf/ThreadingPrimitives.h"
14 14
15 namespace blink { 15 namespace blink {
16 class WebThread; 16 class WebThread;
17 struct WebBeginFrameArgs; 17 struct WebBeginFrameArgs;
18 18
19 // The scheduler is an opinionated gateway for arranging work to be run on the 19 // The scheduler is an opinionated gateway for arranging work to be run on the
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 class MainThreadPendingTaskRunner; 62 class MainThreadPendingTaskRunner;
63 class MainThreadPendingHighPriorityTaskRunner; 63 class MainThreadPendingHighPriorityTaskRunner;
64 friend class MainThreadPendingTaskRunner; 64 friend class MainThreadPendingTaskRunner;
65 friend class MainThreadPendingHighPriorityTaskRunner; 65 friend class MainThreadPendingHighPriorityTaskRunner;
66 66
67 enum SchedulerPolicy { 67 enum SchedulerPolicy {
68 Normal, 68 Normal,
69 CompositorPriority, 69 CompositorPriority,
70 }; 70 };
71 71
72 class TracedTask {
73 public:
74 TracedTask(const Task& task, const TraceLocation& location)
75 : m_task(task)
76 , m_location(location) { }
77
78 void run();
79
80 private:
81 Task m_task;
82 TraceLocation m_location;
83 };
84
85 Scheduler(); 72 Scheduler();
86 virtual ~Scheduler(); 73 virtual ~Scheduler();
87 74
75 void scheduleIdleTask(const TraceLocation&, const IdleTask&);
76 void postHighPriorityTaskInternal(const TraceLocation&, const Task&, const c har* traceName);
77
88 static void sharedTimerAdapter(); 78 static void sharedTimerAdapter();
89 79
90
91 // Start of main thread only members ----------------------------------- 80 // Start of main thread only members -----------------------------------
92 81
93 // Only does work in CompositorPriority mode. Returns true if any work was d one. 82 // Only does work in CompositorPriority mode. Returns true if any work was d one.
94 bool runPendingHighPriorityTasksIfInCompositorPriority(); 83 bool runPendingHighPriorityTasksIfInCompositorPriority();
95 84
96 // Returns true if any work was done. 85 // Returns true if any work was done.
97 bool swapQueuesAndRunPendingTasks(); 86 bool swapQueuesAndRunPendingTasks();
98 87
99 void swapQueuesRunPendingTasksAndAllowHighPriorityTaskRunnerPosting(); 88 void swapQueuesRunPendingTasksAndAllowHighPriorityTaskRunnerPosting();
100 89
101 // Returns true if any work was done. 90 // Returns true if any work was done.
102 bool executeHighPriorityTasks(Deque<TracedTask>&); 91 bool executeHighPriorityTasks(Deque<TracedTask>&);
103 92
104 // Return the current SchedulerPolicy. 93 // Return the current SchedulerPolicy.
105 SchedulerPolicy schedulerPolicy() const; 94 SchedulerPolicy schedulerPolicy() const;
106 95
107 void maybeEnterNormalSchedulerPolicy(); 96 void maybeEnterNormalSchedulerPolicy();
108 97
109 // Must be called while m_pendingTasksMutex is locked. 98 // Must be called while m_pendingTasksMutex is locked.
110 void maybePostMainThreadPendingHighPriorityTaskRunner(); 99 void maybePostMainThreadPendingHighPriorityTaskRunner();
111 100
112 void tickSharedTimer(); 101 void tickSharedTimer();
113 102
114 void (*m_sharedTimerFunction)(); 103 void (*m_sharedTimerFunction)();
115 104
116 // End of main thread only members ------------------------------------- 105 // End of main thread only members -------------------------------------
117 106
118
119 void scheduleIdleTask(const TraceLocation&, const IdleTask&);
120
121 bool hasPendingHighPriorityWork() const; 107 bool hasPendingHighPriorityWork() const;
122 108
123 void enterSchedulerPolicyLocked(SchedulerPolicy); 109 void enterSchedulerPolicyLocked(SchedulerPolicy);
124 110
125 void enterSchedulerPolicy(SchedulerPolicy); 111 void enterSchedulerPolicy(SchedulerPolicy);
126 112
127 static Scheduler* s_sharedScheduler; 113 static Scheduler* s_sharedScheduler;
128 114
129 WebThread* m_mainThread; 115 WebThread* m_mainThread;
130 116
131 // This mutex protects calls to the pending task queue, m_highPriorityTaskRu nnerPosted and 117 // This mutex protects calls to the pending task queue, m_highPriorityTaskRu nnerPosted and
132 // m_compositorPriorityPolicyEndTimeSeconds. 118 // m_compositorPriorityPolicyEndTimeSeconds.
133 Mutex m_pendingTasksMutex; 119 Mutex m_pendingTasksMutex;
134 DoubleBufferedDeque<TracedTask> m_pendingHighPriorityTasks; 120 DoubleBufferedDeque<TracedTask> m_pendingHighPriorityTasks;
135 double m_compositorPriorityPolicyEndTimeSeconds; 121 double m_compositorPriorityPolicyEndTimeSeconds;
136 122
123 // Declared volatile as it is atomically incremented.
137 volatile int m_highPriorityTaskCount; 124 volatile int m_highPriorityTaskCount;
125
138 bool m_highPriorityTaskRunnerPosted; 126 bool m_highPriorityTaskRunnerPosted;
139 127
140 // Don't access m_schedulerPolicy directly, use enterSchedulerPolicyLocked a nd SchedulerPolicy instead. 128 // Don't access m_schedulerPolicy directly, use enterSchedulerPolicyLocked a nd SchedulerPolicy instead.
141 volatile int m_schedulerPolicy; 129 volatile int m_schedulerPolicy;
142 }; 130 };
143 131
144 } // namespace blink 132 } // namespace blink
145 133
146 #endif // Scheduler_h 134 #endif // Scheduler_h
OLDNEW
« no previous file with comments | « Source/platform/blink_platform.gypi ('k') | Source/platform/scheduler/Scheduler.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698