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/workers/WorkerThread.h" | 6 #include "core/workers/WorkerThread.h" |
7 | 7 |
8 #include "core/inspector/ConsoleMessage.h" | 8 #include "core/inspector/ConsoleMessage.h" |
9 #include "core/workers/WorkerReportingProxy.h" | 9 #include "core/workers/WorkerReportingProxy.h" |
10 #include "core/workers/WorkerThreadStartupData.h" | 10 #include "core/workers/WorkerThreadStartupData.h" |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
138 private: | 138 private: |
139 OwnPtr<WebThreadSupportingGC> m_thread; | 139 OwnPtr<WebThreadSupportingGC> m_thread; |
140 OwnPtr<WebWaitableEvent> m_scriptLoadedEvent; | 140 OwnPtr<WebWaitableEvent> m_scriptLoadedEvent; |
141 }; | 141 }; |
142 | 142 |
143 void notifyScriptLoadedEventToWorkerThreadForTest(WorkerThread* thread) | 143 void notifyScriptLoadedEventToWorkerThreadForTest(WorkerThread* thread) |
144 { | 144 { |
145 static_cast<WorkerThreadForTest*>(thread)->scriptLoaded(); | 145 static_cast<WorkerThreadForTest*>(thread)->scriptLoaded(); |
146 } | 146 } |
147 | 147 |
148 class WakeupTask : public WebThread::Task { | 148 class WakeupTask : public WebTaskRunner::Task { |
149 public: | 149 public: |
150 WakeupTask() { } | 150 WakeupTask() { } |
151 | 151 |
152 ~WakeupTask() override { } | 152 ~WakeupTask() override { } |
153 | 153 |
154 void run() override { } | 154 void run() override { } |
155 }; | 155 }; |
156 | 156 |
157 class PostDelayedWakeupTask : public WebThread::Task { | 157 class PostDelayedWakeupTask : public WebTaskRunner::Task { |
158 public: | 158 public: |
159 PostDelayedWakeupTask(WebScheduler* scheduler, long long delay) : m_schedule
r(scheduler), m_delay(delay) { } | 159 PostDelayedWakeupTask(WebScheduler* scheduler, long long delay) : m_schedule
r(scheduler), m_delay(delay) { } |
160 | 160 |
161 ~PostDelayedWakeupTask() override { } | 161 ~PostDelayedWakeupTask() override { } |
162 | 162 |
163 void run() override | 163 void run() override |
164 { | 164 { |
165 m_scheduler->postTimerTask(FROM_HERE, new WakeupTask(), m_delay); | 165 m_scheduler->timerTaskRunner()->postDelayedTask(FROM_HERE, new WakeupTas
k(), m_delay); |
166 } | 166 } |
167 | 167 |
168 WebScheduler* m_scheduler; // Not owned. | 168 WebScheduler* m_scheduler; // Not owned. |
169 long long m_delay; | 169 long long m_delay; |
170 }; | 170 }; |
171 | 171 |
172 class SignalTask : public WebThread::Task { | 172 class SignalTask : public WebTaskRunner::Task { |
173 public: | 173 public: |
174 SignalTask(WebWaitableEvent* completionEvent) : m_completionEvent(completion
Event) { } | 174 SignalTask(WebWaitableEvent* completionEvent) : m_completionEvent(completion
Event) { } |
175 | 175 |
176 ~SignalTask() override { } | 176 ~SignalTask() override { } |
177 | 177 |
178 void run() override | 178 void run() override |
179 { | 179 { |
180 m_completionEvent->signal(); | 180 m_completionEvent->signal(); |
181 } | 181 } |
182 | 182 |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
284 .Times(AtMost(1)); | 284 .Times(AtMost(1)); |
285 EXPECT_CALL(*m_mockWorkerReportingProxy, workerThreadTerminated()) | 285 EXPECT_CALL(*m_mockWorkerReportingProxy, workerThreadTerminated()) |
286 .Times(AtMost(1)); | 286 .Times(AtMost(1)); |
287 EXPECT_CALL(*m_mockWorkerReportingProxy, willDestroyWorkerGlobalScope()) | 287 EXPECT_CALL(*m_mockWorkerReportingProxy, willDestroyWorkerGlobalScope()) |
288 .Times(AtMost(1)); | 288 .Times(AtMost(1)); |
289 startWithSourceCode(source); | 289 startWithSourceCode(source); |
290 m_workerThread->waitUntilScriptLoaded(); | 290 m_workerThread->waitUntilScriptLoaded(); |
291 m_workerThread->terminateAndWait(); | 291 m_workerThread->terminateAndWait(); |
292 } | 292 } |
293 | 293 |
294 class RepeatingTask : public WebThread::Task { | 294 class RepeatingTask : public WebTaskRunner::Task { |
295 public: | 295 public: |
296 RepeatingTask(WebScheduler* scheduler, WebWaitableEvent* completion) | 296 RepeatingTask(WebScheduler* scheduler, WebWaitableEvent* completion) |
297 : RepeatingTask(scheduler, completion, 0) { } | 297 : RepeatingTask(scheduler, completion, 0) { } |
298 | 298 |
299 ~RepeatingTask() override { } | 299 ~RepeatingTask() override { } |
300 | 300 |
301 void run() override | 301 void run() override |
302 { | 302 { |
303 m_taskCount++; | 303 m_taskCount++; |
304 if (m_taskCount == 10) | 304 if (m_taskCount == 10) |
305 m_completion->signal(); | 305 m_completion->signal(); |
306 | 306 |
307 m_scheduler->postTimerTask( | 307 m_scheduler->timerTaskRunner()->postTask( |
308 FROM_HERE, new RepeatingTask(m_scheduler, m_completion, m_taskCount)
, 0ul); | 308 FROM_HERE, new RepeatingTask(m_scheduler, m_completion, m_taskCount)
); |
309 m_scheduler->postLoadingTask(FROM_HERE, new WakeupTask()); | 309 m_scheduler->timerTaskRunner()->postTask(FROM_HERE, new WakeupTask()); |
310 | |
311 } | 310 } |
312 | 311 |
313 private: | 312 private: |
314 RepeatingTask(WebScheduler* scheduler, WebWaitableEvent* completion, int tas
kCount) | 313 RepeatingTask(WebScheduler* scheduler, WebWaitableEvent* completion, int tas
kCount) |
315 : m_scheduler(scheduler) | 314 : m_scheduler(scheduler) |
316 , m_completion(completion) | 315 , m_completion(completion) |
317 , m_taskCount(taskCount) | 316 , m_taskCount(taskCount) |
318 { } | 317 { } |
319 | 318 |
320 WebScheduler* m_scheduler; // Not owned. | 319 WebScheduler* m_scheduler; // Not owned. |
321 WebWaitableEvent* m_completion; | 320 WebWaitableEvent* m_completion; |
322 int m_taskCount; | 321 int m_taskCount; |
323 }; | 322 }; |
324 | 323 |
325 TEST_F(WorkerThreadTest, GcDoesNotOccurWhenNotIdle) | 324 TEST_F(WorkerThreadTest, GcDoesNotOccurWhenNotIdle) |
326 { | 325 { |
327 OwnPtr<WebWaitableEvent> completion = adoptPtr(Platform::current()->createWa
itableEvent()); | 326 OwnPtr<WebWaitableEvent> completion = adoptPtr(Platform::current()->createWa
itableEvent()); |
328 | 327 |
329 EXPECT_CALL(*m_workerThread, doIdleGc(_)).Times(0); | 328 EXPECT_CALL(*m_workerThread, doIdleGc(_)).Times(0); |
330 | 329 |
331 expectWorkerLifetimeReportingCalls(); | 330 expectWorkerLifetimeReportingCalls(); |
332 start(); | 331 start(); |
333 waitForInit(); | 332 waitForInit(); |
334 | 333 |
335 WebScheduler* scheduler = m_workerThread->backingThread().platformThread().s
cheduler(); | 334 WebScheduler* scheduler = m_workerThread->backingThread().platformThread().s
cheduler(); |
336 | 335 |
337 // Post a repeating task that should prevent any GC from happening. | 336 // Post a repeating task that should prevent any GC from happening. |
338 scheduler->postLoadingTask(FROM_HERE, new RepeatingTask(scheduler, completio
n.get())); | 337 scheduler->loadingTaskRunner()->postTask(FROM_HERE, new RepeatingTask(schedu
ler, completion.get())); |
339 | 338 |
340 completion->wait(); | 339 completion->wait(); |
341 | 340 |
342 // Make sure doIdleGc has not been called by this stage. | 341 // Make sure doIdleGc has not been called by this stage. |
343 Mock::VerifyAndClearExpectations(m_workerThread.get()); | 342 Mock::VerifyAndClearExpectations(m_workerThread.get()); |
344 | 343 |
345 m_workerThread->terminateAndWait(); | 344 m_workerThread->terminateAndWait(); |
346 } | 345 } |
347 | 346 |
348 } // namespace blink | 347 } // namespace blink |
OLD | NEW |