| 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 |