OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 #include "config.h" | 5 #include "config.h" |
6 #include "core/dom/ScriptedIdleTaskController.h" | 6 #include "core/dom/ScriptedIdleTaskController.h" |
7 | 7 |
8 #include "core/dom/ExecutionContext.h" | 8 #include "core/dom/ExecutionContext.h" |
9 #include "core/dom/IdleRequestCallback.h" | 9 #include "core/dom/IdleRequestCallback.h" |
10 #include "platform/Logging.h" | 10 #include "platform/Logging.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 { | 25 { |
26 return adoptRef(new IdleRequestCallbackWrapper(id, controller)); | 26 return adoptRef(new IdleRequestCallbackWrapper(id, controller)); |
27 } | 27 } |
28 virtual ~IdleRequestCallbackWrapper() | 28 virtual ~IdleRequestCallbackWrapper() |
29 { | 29 { |
30 } | 30 } |
31 | 31 |
32 static void idleTaskFired(PassRefPtr<IdleRequestCallbackWrapper> callbackWra
pper, double deadlineSeconds) | 32 static void idleTaskFired(PassRefPtr<IdleRequestCallbackWrapper> callbackWra
pper, double deadlineSeconds) |
33 { | 33 { |
34 // TODO(rmcilroy): Implement clamping of deadline in some form. | 34 // TODO(rmcilroy): Implement clamping of deadline in some form. |
35 callbackWrapper->controller()->callbackFired(callbackWrapper->id(), dead
lineSeconds, IdleCallbackDeadline::CallbackType::CalledWhenIdle); | 35 callbackWrapper->controller()->callbackFired(callbackWrapper->id(), dead
lineSeconds, IdleDeadline::CallbackType::CalledWhenIdle); |
36 } | 36 } |
37 | 37 |
38 static void timeoutFired(PassRefPtr<IdleRequestCallbackWrapper> callbackWrap
per) | 38 static void timeoutFired(PassRefPtr<IdleRequestCallbackWrapper> callbackWrap
per) |
39 { | 39 { |
40 callbackWrapper->controller()->callbackFired(callbackWrapper->id(), mono
tonicallyIncreasingTime(), IdleCallbackDeadline::CallbackType::CalledByTimeout); | 40 callbackWrapper->controller()->callbackFired(callbackWrapper->id(), mono
tonicallyIncreasingTime(), IdleDeadline::CallbackType::CalledByTimeout); |
41 } | 41 } |
42 | 42 |
43 ScriptedIdleTaskController::CallbackId id() const { return m_id; } | 43 ScriptedIdleTaskController::CallbackId id() const { return m_id; } |
44 PassRefPtrWillBeRawPtr<ScriptedIdleTaskController> controller() const { retu
rn m_controller; } | 44 PassRefPtrWillBeRawPtr<ScriptedIdleTaskController> controller() const { retu
rn m_controller; } |
45 | 45 |
46 private: | 46 private: |
47 IdleRequestCallbackWrapper(ScriptedIdleTaskController::CallbackId id, PassRe
fPtrWillBeRawPtr<ScriptedIdleTaskController> controller) | 47 IdleRequestCallbackWrapper(ScriptedIdleTaskController::CallbackId id, PassRe
fPtrWillBeRawPtr<ScriptedIdleTaskController> controller) |
48 : m_id(id) | 48 : m_id(id) |
49 , m_controller(controller) | 49 , m_controller(controller) |
50 { | 50 { |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 // TODO(rmcilroy): Add devtools tracing. | 88 // TODO(rmcilroy): Add devtools tracing. |
89 return id; | 89 return id; |
90 } | 90 } |
91 | 91 |
92 void ScriptedIdleTaskController::cancelCallback(CallbackId id) | 92 void ScriptedIdleTaskController::cancelCallback(CallbackId id) |
93 { | 93 { |
94 // TODO(rmcilroy): Add devtools tracing. | 94 // TODO(rmcilroy): Add devtools tracing. |
95 m_callbacks.remove(id); | 95 m_callbacks.remove(id); |
96 } | 96 } |
97 | 97 |
98 void ScriptedIdleTaskController::callbackFired(CallbackId id, double deadlineSec
onds, IdleCallbackDeadline::CallbackType callbackType) | 98 void ScriptedIdleTaskController::callbackFired(CallbackId id, double deadlineSec
onds, IdleDeadline::CallbackType callbackType) |
99 { | 99 { |
100 if (!m_callbacks.contains(id)) | 100 if (!m_callbacks.contains(id)) |
101 return; | 101 return; |
102 | 102 |
103 if (m_suspended) { | 103 if (m_suspended) { |
104 if (callbackType == IdleCallbackDeadline::CallbackType::CalledByTimeout)
{ | 104 if (callbackType == IdleDeadline::CallbackType::CalledByTimeout) { |
105 // Queue for execution when we are resumed. | 105 // Queue for execution when we are resumed. |
106 m_pendingTimeouts.append(id); | 106 m_pendingTimeouts.append(id); |
107 } | 107 } |
108 // Just drop callbacks called while suspended, these will be reposted on
the idle task queue when we are resumed. | 108 // Just drop callbacks called while suspended, these will be reposted on
the idle task queue when we are resumed. |
109 return; | 109 return; |
110 } | 110 } |
111 | 111 |
112 runCallback(id, deadlineSeconds, callbackType); | 112 runCallback(id, deadlineSeconds, callbackType); |
113 } | 113 } |
114 | 114 |
115 void ScriptedIdleTaskController::runCallback(CallbackId id, double deadlineSecon
ds, IdleCallbackDeadline::CallbackType callbackType) | 115 void ScriptedIdleTaskController::runCallback(CallbackId id, double deadlineSecon
ds, IdleDeadline::CallbackType callbackType) |
116 { | 116 { |
117 ASSERT(!m_suspended); | 117 ASSERT(!m_suspended); |
118 auto callback = m_callbacks.take(id); | 118 auto callback = m_callbacks.take(id); |
119 if (!callback) | 119 if (!callback) |
120 return; | 120 return; |
121 | 121 |
122 // TODO(rmcilroy): Add devtools tracing. | 122 // TODO(rmcilroy): Add devtools tracing. |
123 callback->handleEvent(IdleCallbackDeadline::create(deadlineSeconds, callback
Type)); | 123 callback->handleEvent(IdleDeadline::create(deadlineSeconds, callbackType)); |
124 } | 124 } |
125 | 125 |
126 void ScriptedIdleTaskController::stop() | 126 void ScriptedIdleTaskController::stop() |
127 { | 127 { |
128 m_callbacks.clear(); | 128 m_callbacks.clear(); |
129 } | 129 } |
130 | 130 |
131 void ScriptedIdleTaskController::suspend() | 131 void ScriptedIdleTaskController::suspend() |
132 { | 132 { |
133 m_suspended = true; | 133 m_suspended = true; |
134 } | 134 } |
135 | 135 |
136 void ScriptedIdleTaskController::resume() | 136 void ScriptedIdleTaskController::resume() |
137 { | 137 { |
138 ASSERT(m_suspended); | 138 ASSERT(m_suspended); |
139 m_suspended = false; | 139 m_suspended = false; |
140 | 140 |
141 // Run any pending timeouts. | 141 // Run any pending timeouts. |
142 Vector<CallbackId> pendingTimeouts; | 142 Vector<CallbackId> pendingTimeouts; |
143 m_pendingTimeouts.swap(pendingTimeouts); | 143 m_pendingTimeouts.swap(pendingTimeouts); |
144 for (auto& id : pendingTimeouts) | 144 for (auto& id : pendingTimeouts) |
145 runCallback(id, monotonicallyIncreasingTime(), IdleCallbackDeadline::Cal
lbackType::CalledByTimeout); | 145 runCallback(id, monotonicallyIncreasingTime(), IdleDeadline::CallbackTyp
e::CalledByTimeout); |
146 | 146 |
147 // Repost idle tasks for any remaining callbacks. | 147 // Repost idle tasks for any remaining callbacks. |
148 for (auto& callback : m_callbacks) { | 148 for (auto& callback : m_callbacks) { |
149 RefPtr<internal::IdleRequestCallbackWrapper> callbackWrapper = internal:
:IdleRequestCallbackWrapper::create(callback.key, this); | 149 RefPtr<internal::IdleRequestCallbackWrapper> callbackWrapper = internal:
:IdleRequestCallbackWrapper::create(callback.key, this); |
150 m_scheduler->postIdleTask(FROM_HERE, WTF::bind<double>(&internal::IdleRe
questCallbackWrapper::idleTaskFired, callbackWrapper)); | 150 m_scheduler->postIdleTask(FROM_HERE, WTF::bind<double>(&internal::IdleRe
questCallbackWrapper::idleTaskFired, callbackWrapper)); |
151 } | 151 } |
152 } | 152 } |
153 | 153 |
154 bool ScriptedIdleTaskController::hasPendingActivity() const | 154 bool ScriptedIdleTaskController::hasPendingActivity() const |
155 { | 155 { |
156 return !m_callbacks.isEmpty(); | 156 return !m_callbacks.isEmpty(); |
157 } | 157 } |
158 | 158 |
159 } // namespace blink | 159 } // namespace blink |
OLD | NEW |