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

Side by Side Diff: third_party/WebKit/Source/core/workers/WorkerThread.cpp

Issue 1925583003: Replace AllowCrossThreadAccess() + non-GCed pointers with crossThreadUnretained() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@Kuroneko_4
Patch Set: Rebase. Created 4 years, 6 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. 2 * Copyright (C) 2008 Apple Inc. All Rights Reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 } 187 }
188 188
189 void WorkerThread::start(std::unique_ptr<WorkerThreadStartupData> startupData) 189 void WorkerThread::start(std::unique_ptr<WorkerThreadStartupData> startupData)
190 { 190 {
191 DCHECK(isMainThread()); 191 DCHECK(isMainThread());
192 192
193 if (m_started) 193 if (m_started)
194 return; 194 return;
195 195
196 m_started = true; 196 m_started = true;
197 workerBackingThread().backingThread().postTask(BLINK_FROM_HERE, threadSafeBi nd(&WorkerThread::initializeOnWorkerThread, AllowCrossThreadAccess(this), passed (std::move(startupData)))); 197 workerBackingThread().backingThread().postTask(BLINK_FROM_HERE, threadSafeBi nd(&WorkerThread::initializeOnWorkerThread, crossThreadUnretained(this), passed( std::move(startupData))));
198 } 198 }
199 199
200 void WorkerThread::terminate() 200 void WorkerThread::terminate()
201 { 201 {
202 DCHECK(isMainThread()); 202 DCHECK(isMainThread());
203 terminateInternal(TerminationMode::Graceful); 203 terminateInternal(TerminationMode::Graceful);
204 } 204 }
205 205
206 void WorkerThread::terminateAndWait() 206 void WorkerThread::terminateAndWait()
207 { 207 {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 MutexLocker lock(m_threadStateMutex); 246 MutexLocker lock(m_threadStateMutex);
247 if (m_terminated || m_readyToShutdown) 247 if (m_terminated || m_readyToShutdown)
248 return; 248 return;
249 } 249 }
250 250
251 bool isInstrumented = !task->taskNameForInstrumentation().isEmpty(); 251 bool isInstrumented = !task->taskNameForInstrumentation().isEmpty();
252 if (isInstrumented) { 252 if (isInstrumented) {
253 DCHECK(isCurrentThread()); 253 DCHECK(isCurrentThread());
254 InspectorInstrumentation::asyncTaskScheduled(workerGlobalScope(), "Worke r task", task.get()); 254 InspectorInstrumentation::asyncTaskScheduled(workerGlobalScope(), "Worke r task", task.get());
255 } 255 }
256 workerBackingThread().backingThread().postTask(location, threadSafeBind(&Wor kerThread::performTaskOnWorkerThread, AllowCrossThreadAccess(this), passed(std:: move(task)), isInstrumented)); 256 workerBackingThread().backingThread().postTask(location, threadSafeBind(&Wor kerThread::performTaskOnWorkerThread, crossThreadUnretained(this), passed(std::m ove(task)), isInstrumented));
257 } 257 }
258 258
259 void WorkerThread::appendDebuggerTask(std::unique_ptr<CrossThreadClosure> task) 259 void WorkerThread::appendDebuggerTask(std::unique_ptr<CrossThreadClosure> task)
260 { 260 {
261 DCHECK(isMainThread()); 261 DCHECK(isMainThread());
262 { 262 {
263 MutexLocker lock(m_threadStateMutex); 263 MutexLocker lock(m_threadStateMutex);
264 if (m_terminated) 264 if (m_terminated)
265 return; 265 return;
266 } 266 }
267 m_inspectorTaskRunner->appendTask(threadSafeBind(&WorkerThread::performDebug gerTaskOnWorkerThread, AllowCrossThreadAccess(this), passed(std::move(task)))); 267 m_inspectorTaskRunner->appendTask(threadSafeBind(&WorkerThread::performDebug gerTaskOnWorkerThread, crossThreadUnretained(this), passed(std::move(task))));
268 { 268 {
269 MutexLocker lock(m_threadStateMutex); 269 MutexLocker lock(m_threadStateMutex);
270 if (isolate() && !m_readyToShutdown) 270 if (isolate() && !m_readyToShutdown)
271 m_inspectorTaskRunner->interruptAndRunAllTasksDontWait(isolate()); 271 m_inspectorTaskRunner->interruptAndRunAllTasksDontWait(isolate());
272 } 272 }
273 workerBackingThread().backingThread().postTask(BLINK_FROM_HERE, threadSafeBi nd(&WorkerThread::performDebuggerTaskDontWaitOnWorkerThread, AllowCrossThreadAcc ess(this))); 273 workerBackingThread().backingThread().postTask(BLINK_FROM_HERE, threadSafeBi nd(&WorkerThread::performDebuggerTaskDontWaitOnWorkerThread, crossThreadUnretain ed(this)));
274 } 274 }
275 275
276 void WorkerThread::startRunningDebuggerTasksOnPauseOnWorkerThread() 276 void WorkerThread::startRunningDebuggerTasksOnPauseOnWorkerThread()
277 { 277 {
278 DCHECK(isCurrentThread()); 278 DCHECK(isCurrentThread());
279 m_pausedInDebugger = true; 279 m_pausedInDebugger = true;
280 ThreadDebugger::idleStarted(isolate()); 280 ThreadDebugger::idleStarted(isolate());
281 std::unique_ptr<CrossThreadClosure> task; 281 std::unique_ptr<CrossThreadClosure> task;
282 do { 282 do {
283 { 283 {
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
412 m_exitCode = ExitCode::SyncForciblyTerminated; 412 m_exitCode = ExitCode::SyncForciblyTerminated;
413 } else { 413 } else {
414 DCHECK_EQ(TerminationMode::Graceful, mode); 414 DCHECK_EQ(TerminationMode::Graceful, mode);
415 DCHECK(!m_scheduledForceTerminationTask); 415 DCHECK(!m_scheduledForceTerminationTask);
416 m_scheduledForceTerminationTask = ForceTerminationTask::create(this) ; 416 m_scheduledForceTerminationTask = ForceTerminationTask::create(this) ;
417 m_scheduledForceTerminationTask->schedule(); 417 m_scheduledForceTerminationTask->schedule();
418 } 418 }
419 } 419 }
420 420
421 m_inspectorTaskRunner->kill(); 421 m_inspectorTaskRunner->kill();
422 workerBackingThread().backingThread().postTask(BLINK_FROM_HERE, threadSafeBi nd(&WorkerThread::prepareForShutdownOnWorkerThread, AllowCrossThreadAccess(this) )); 422 workerBackingThread().backingThread().postTask(BLINK_FROM_HERE, threadSafeBi nd(&WorkerThread::prepareForShutdownOnWorkerThread, crossThreadUnretained(this)) );
423 workerBackingThread().backingThread().postTask(BLINK_FROM_HERE, threadSafeBi nd(&WorkerThread::performShutdownOnWorkerThread, AllowCrossThreadAccess(this))); 423 workerBackingThread().backingThread().postTask(BLINK_FROM_HERE, threadSafeBi nd(&WorkerThread::performShutdownOnWorkerThread, crossThreadUnretained(this)));
424 } 424 }
425 425
426 void WorkerThread::forciblyTerminateExecution() 426 void WorkerThread::forciblyTerminateExecution()
427 { 427 {
428 DCHECK(m_workerGlobalScope); 428 DCHECK(m_workerGlobalScope);
429 m_workerGlobalScope->scriptController()->willScheduleExecutionTermination(); 429 m_workerGlobalScope->scriptController()->willScheduleExecutionTermination();
430 isolate()->TerminateExecution(); 430 isolate()->TerminateExecution();
431 } 431 }
432 432
433 void WorkerThread::initializeOnWorkerThread(std::unique_ptr<WorkerThreadStartupD ata> startupData) 433 void WorkerThread::initializeOnWorkerThread(std::unique_ptr<WorkerThreadStartupD ata> startupData)
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
618 (*task)(); 618 (*task)();
619 } 619 }
620 620
621 WorkerThread::ExitCode WorkerThread::getExitCode() 621 WorkerThread::ExitCode WorkerThread::getExitCode()
622 { 622 {
623 MutexLocker lock(m_threadStateMutex); 623 MutexLocker lock(m_threadStateMutex);
624 return m_exitCode; 624 return m_exitCode;
625 } 625 }
626 626
627 } // namespace blink 627 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698