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

Unified Diff: third_party/WebKit/Source/core/workers/WorkerThreadTest.cpp

Issue 2325923002: Worker: Factor out a part of WorkerThread::terminateInternal() into its own function for cleanup (Closed)
Patch Set: fix comments Created 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/core/workers/WorkerThread.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/workers/WorkerThreadTest.cpp
diff --git a/third_party/WebKit/Source/core/workers/WorkerThreadTest.cpp b/third_party/WebKit/Source/core/workers/WorkerThreadTest.cpp
index 580a1997ece2b0a81a9b95dd8314920c39e7d590..b282cbc93a654428bc9591e0ec3902b12301e094 100644
--- a/third_party/WebKit/Source/core/workers/WorkerThreadTest.cpp
+++ b/third_party/WebKit/Source/core/workers/WorkerThreadTest.cpp
@@ -17,6 +17,8 @@ using testing::AtMost;
namespace blink {
+using ExitCode = WorkerThread::ExitCode;
+
namespace {
// Called from WorkerThread::startRunningDebuggerTasksOnPauseOnWorkerThread as a
@@ -123,7 +125,7 @@ protected:
EXPECT_CALL(*m_mockWorkerReportingProxy, willDestroyWorkerGlobalScope()).Times(1);
}
- WorkerThread::ExitCode getExitCode()
+ ExitCode getExitCode()
{
return m_workerThread->getExitCodeForTesting();
}
@@ -135,6 +137,28 @@ protected:
Persistent<WorkerThreadLifecycleObserverForTest> m_workerThreadLifecycleObserver;
};
+TEST_F(WorkerThreadTest, ShouldScheduleToTerminateExecution)
+{
+ using ThreadState = WorkerThread::ThreadState;
+ MutexLocker dummyLock(m_workerThread->m_threadStateMutex);
+
+ EXPECT_EQ(ThreadState::NotStarted, m_workerThread->m_threadState);
+ EXPECT_FALSE(m_workerThread->shouldScheduleToTerminateExecution(dummyLock));
+
+ m_workerThread->setThreadState(dummyLock, ThreadState::Running);
+ EXPECT_FALSE(m_workerThread->m_runningDebuggerTask);
+ EXPECT_TRUE(m_workerThread->shouldScheduleToTerminateExecution(dummyLock));
+
+ m_workerThread->m_runningDebuggerTask = true;
+ EXPECT_FALSE(m_workerThread->shouldScheduleToTerminateExecution(dummyLock));
+
+ m_workerThread->setThreadState(dummyLock, ThreadState::ReadyToShutdown);
+ EXPECT_FALSE(m_workerThread->shouldScheduleToTerminateExecution(dummyLock));
+
+ // This is necessary to satisfy DCHECK in the dtor of WorkerThread.
+ m_workerThread->setExitCode(dummyLock, ExitCode::GracefullyTerminated);
+}
+
TEST_F(WorkerThreadTest, StartAndTerminate_AsyncTerminate)
{
expectReportingCalls();
@@ -146,7 +170,7 @@ TEST_F(WorkerThreadTest, StartAndTerminate_AsyncTerminate)
m_workerThread->terminate();
EXPECT_TRUE(isForceTerminationTaskScheduled());
m_workerThread->waitForShutdownForTesting();
- EXPECT_EQ(WorkerThread::ExitCode::GracefullyTerminated, getExitCode());
+ EXPECT_EQ(ExitCode::GracefullyTerminated, getExitCode());
}
TEST_F(WorkerThreadTest, StartAndTerminate_SyncTerminate)
@@ -155,7 +179,7 @@ TEST_F(WorkerThreadTest, StartAndTerminate_SyncTerminate)
start();
m_workerThread->waitForInit();
m_workerThread->terminateAndWait();
- EXPECT_EQ(WorkerThread::ExitCode::SyncForciblyTerminated, getExitCode());
+ EXPECT_EQ(ExitCode::SyncForciblyTerminated, getExitCode());
}
TEST_F(WorkerThreadTest, StartAndTerminateImmediately_AsyncTerminate)
@@ -170,8 +194,8 @@ TEST_F(WorkerThreadTest, StartAndTerminateImmediately_AsyncTerminate)
// terminate() should gracefully shut down the thread.
m_workerThread->terminate();
m_workerThread->waitForShutdownForTesting();
- WorkerThread::ExitCode exitCode = getExitCode();
- EXPECT_EQ(WorkerThread::ExitCode::GracefullyTerminated, exitCode);
+ ExitCode exitCode = getExitCode();
+ EXPECT_EQ(ExitCode::GracefullyTerminated, exitCode);
}
TEST_F(WorkerThreadTest, StartAndTerminateImmediately_SyncTerminate)
@@ -186,8 +210,8 @@ TEST_F(WorkerThreadTest, StartAndTerminateImmediately_SyncTerminate)
// terminateAndWait() should synchronously forcibly terminates the worker
// execution.
m_workerThread->terminateAndWait();
- WorkerThread::ExitCode exitCode = getExitCode();
- EXPECT_TRUE(WorkerThread::ExitCode::GracefullyTerminated == exitCode || WorkerThread::ExitCode::SyncForciblyTerminated == exitCode);
+ ExitCode exitCode = getExitCode();
+ EXPECT_TRUE(ExitCode::GracefullyTerminated == exitCode || ExitCode::SyncForciblyTerminated == exitCode);
}
TEST_F(WorkerThreadTest, StartAndTerminateOnInitialization_TerminateWhileDebuggerTaskIsRunning)
@@ -231,7 +255,7 @@ TEST_F(WorkerThreadTest, StartAndTerminateOnInitialization_TerminateWhileDebugge
// Start termination while the debugger task is running.
EXPECT_TRUE(m_workerThread->m_runningDebuggerTask);
m_workerThread->terminateAndWait();
- EXPECT_EQ(WorkerThread::ExitCode::GracefullyTerminated, getExitCode());
+ EXPECT_EQ(ExitCode::GracefullyTerminated, getExitCode());
}
TEST_F(WorkerThreadTest, StartAndTerminateOnScriptLoaded_SyncForciblyTerminate)
@@ -242,7 +266,7 @@ TEST_F(WorkerThreadTest, StartAndTerminateOnScriptLoaded_SyncForciblyTerminate)
// terminateAndWait() synchronously terminates the worker execution.
m_workerThread->terminateAndWait();
- EXPECT_EQ(WorkerThread::ExitCode::SyncForciblyTerminated, getExitCode());
+ EXPECT_EQ(ExitCode::SyncForciblyTerminated, getExitCode());
}
TEST_F(WorkerThreadTest, StartAndTerminateOnScriptLoaded_AsyncForciblyTerminate)
@@ -257,12 +281,12 @@ TEST_F(WorkerThreadTest, StartAndTerminateOnScriptLoaded_AsyncForciblyTerminate)
// terminate() schedules a force termination task.
m_workerThread->terminate();
EXPECT_TRUE(isForceTerminationTaskScheduled());
- EXPECT_EQ(WorkerThread::ExitCode::NotTerminated, getExitCode());
+ EXPECT_EQ(ExitCode::NotTerminated, getExitCode());
// Wait until the force termination task runs.
testing::runDelayedTasks(kForceTerminationDelayInMs);
m_workerThread->waitForShutdownForTesting();
- EXPECT_EQ(WorkerThread::ExitCode::AsyncForciblyTerminated, getExitCode());
+ EXPECT_EQ(ExitCode::AsyncForciblyTerminated, getExitCode());
}
TEST_F(WorkerThreadTest, StartAndTerminateOnScriptLoaded_AsyncForciblyTerminate_MultipleTimes)
@@ -277,17 +301,17 @@ TEST_F(WorkerThreadTest, StartAndTerminateOnScriptLoaded_AsyncForciblyTerminate_
// terminate() schedules a force termination task.
m_workerThread->terminate();
EXPECT_TRUE(isForceTerminationTaskScheduled());
- EXPECT_EQ(WorkerThread::ExitCode::NotTerminated, getExitCode());
+ EXPECT_EQ(ExitCode::NotTerminated, getExitCode());
// Multiple terminate() calls should not take effect.
m_workerThread->terminate();
m_workerThread->terminate();
- EXPECT_EQ(WorkerThread::ExitCode::NotTerminated, getExitCode());
+ EXPECT_EQ(ExitCode::NotTerminated, getExitCode());
// Wait until the force termination task runs.
testing::runDelayedTasks(kForceTerminationDelayInMs);
m_workerThread->waitForShutdownForTesting();
- EXPECT_EQ(WorkerThread::ExitCode::AsyncForciblyTerminated, getExitCode());
+ EXPECT_EQ(ExitCode::AsyncForciblyTerminated, getExitCode());
}
TEST_F(WorkerThreadTest, StartAndTerminateOnScriptLoaded_SyncForciblyTerminateAfterTerminationTaskIsScheduled)
@@ -302,12 +326,12 @@ TEST_F(WorkerThreadTest, StartAndTerminateOnScriptLoaded_SyncForciblyTerminateAf
// terminate() schedules a force termination task.
m_workerThread->terminate();
EXPECT_TRUE(isForceTerminationTaskScheduled());
- EXPECT_EQ(WorkerThread::ExitCode::NotTerminated, getExitCode());
+ EXPECT_EQ(ExitCode::NotTerminated, getExitCode());
// terminateAndWait() should overtake the scheduled force termination task.
m_workerThread->terminateAndWait();
EXPECT_FALSE(isForceTerminationTaskScheduled());
- EXPECT_EQ(WorkerThread::ExitCode::SyncForciblyTerminated, getExitCode());
+ EXPECT_EQ(ExitCode::SyncForciblyTerminated, getExitCode());
}
TEST_F(WorkerThreadTest, StartAndTerminateOnScriptLoaded_TerminateWhileDebuggerTaskIsRunning)
@@ -323,21 +347,21 @@ TEST_F(WorkerThreadTest, StartAndTerminateOnScriptLoaded_TerminateWhileDebuggerT
// a running debugger task.
m_workerThread->terminate();
EXPECT_FALSE(isForceTerminationTaskScheduled());
- EXPECT_EQ(WorkerThread::ExitCode::NotTerminated, getExitCode());
+ EXPECT_EQ(ExitCode::NotTerminated, getExitCode());
// Multiple terminate() calls should not take effect.
m_workerThread->terminate();
m_workerThread->terminate();
EXPECT_FALSE(isForceTerminationTaskScheduled());
- EXPECT_EQ(WorkerThread::ExitCode::NotTerminated, getExitCode());
+ EXPECT_EQ(ExitCode::NotTerminated, getExitCode());
// Focible termination request should also respect the running debugger
// task.
m_workerThread->terminateInternal(WorkerThread::TerminationMode::Forcible);
EXPECT_FALSE(isForceTerminationTaskScheduled());
- EXPECT_EQ(WorkerThread::ExitCode::NotTerminated, getExitCode());
+ EXPECT_EQ(ExitCode::NotTerminated, getExitCode());
- // Clean up in order to satisfy DCHECKs in dtors.
+ // Clean up in order to satisfy DCHECK in the dtor of WorkerThread.
m_workerThread->m_runningDebuggerTask = false;
m_workerThread->forciblyTerminateExecution();
m_workerThread->waitForShutdownForTesting();
« no previous file with comments | « third_party/WebKit/Source/core/workers/WorkerThread.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698