Index: webrtc/base/sequenced_task_checker_unittest.cc |
diff --git a/webrtc/base/sequenced_task_checker_unittest.cc b/webrtc/base/sequenced_task_checker_unittest.cc |
deleted file mode 100644 |
index ae6e09dff7fe7762334cb069452380f877c43e8a..0000000000000000000000000000000000000000 |
--- a/webrtc/base/sequenced_task_checker_unittest.cc |
+++ /dev/null |
@@ -1,273 +0,0 @@ |
-/* |
- * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. |
- * |
- * Use of this source code is governed by a BSD-style license |
- * that can be found in the LICENSE file in the root of the source |
- * tree. An additional intellectual property rights grant can be found |
- * in the file PATENTS. All contributing project authors may |
- * be found in the AUTHORS file in the root of the source tree. |
- */ |
- |
-#include "webrtc/base/checks.h" |
-#include "webrtc/base/constructormagic.h" |
-#include "webrtc/base/platform_thread.h" |
-#include "webrtc/base/sequenced_task_checker.h" |
-#include "webrtc/base/task_queue.h" |
-#include "webrtc/test/gtest.h" |
- |
-namespace rtc { |
- |
-namespace { |
-// Calls SequencedTaskChecker::CalledSequentially on another thread. |
-class CallCalledSequentiallyOnThread { |
- public: |
- CallCalledSequentiallyOnThread(bool expect_true, |
- SequencedTaskChecker* sequenced_task_checker) |
- : expect_true_(expect_true), |
- thread_has_run_event_(false, false), |
- thread_(&Run, this, "call_do_stuff_on_thread"), |
- sequenced_task_checker_(sequenced_task_checker) { |
- thread_.Start(); |
- } |
- ~CallCalledSequentiallyOnThread() { |
- EXPECT_TRUE(thread_has_run_event_.Wait(1000)); |
- thread_.Stop(); |
- } |
- |
- private: |
- static void Run(void* obj) { |
- CallCalledSequentiallyOnThread* call_stuff_on_thread = |
- static_cast<CallCalledSequentiallyOnThread*>(obj); |
- EXPECT_EQ( |
- call_stuff_on_thread->expect_true_, |
- call_stuff_on_thread->sequenced_task_checker_->CalledSequentially()); |
- call_stuff_on_thread->thread_has_run_event_.Set(); |
- } |
- |
- const bool expect_true_; |
- Event thread_has_run_event_; |
- PlatformThread thread_; |
- SequencedTaskChecker* const sequenced_task_checker_; |
- |
- RTC_DISALLOW_COPY_AND_ASSIGN(CallCalledSequentiallyOnThread); |
-}; |
- |
-// Deletes SequencedTaskChecker on a different thread. |
-class DeleteSequencedCheckerOnThread { |
- public: |
- explicit DeleteSequencedCheckerOnThread( |
- std::unique_ptr<SequencedTaskChecker> sequenced_task_checker) |
- : thread_(&Run, this, "delete_sequenced_task_checker_on_thread"), |
- thread_has_run_event_(false, false), |
- sequenced_task_checker_(std::move(sequenced_task_checker)) { |
- thread_.Start(); |
- } |
- |
- ~DeleteSequencedCheckerOnThread() { |
- EXPECT_TRUE(thread_has_run_event_.Wait(1000)); |
- thread_.Stop(); |
- } |
- |
- private: |
- static bool Run(void* obj) { |
- DeleteSequencedCheckerOnThread* instance = |
- static_cast<DeleteSequencedCheckerOnThread*>(obj); |
- instance->sequenced_task_checker_.reset(); |
- instance->thread_has_run_event_.Set(); |
- return false; |
- } |
- |
- private: |
- PlatformThread thread_; |
- Event thread_has_run_event_; |
- std::unique_ptr<SequencedTaskChecker> sequenced_task_checker_; |
- |
- RTC_DISALLOW_COPY_AND_ASSIGN(DeleteSequencedCheckerOnThread); |
-}; |
- |
-void RunMethodOnDifferentThread(bool expect_true) { |
- std::unique_ptr<SequencedTaskChecker> sequenced_task_checker( |
- new SequencedTaskChecker()); |
- |
- CallCalledSequentiallyOnThread call_on_thread(expect_true, |
- sequenced_task_checker.get()); |
-} |
- |
-void RunMethodOnDifferentTaskQueue(bool expect_true) { |
- std::unique_ptr<SequencedTaskChecker> sequenced_task_checker( |
- new SequencedTaskChecker()); |
- |
- static const char kQueueName[] = "MethodNotAllowedOnDifferentTq"; |
- TaskQueue queue(kQueueName); |
- Event done_event(false, false); |
- queue.PostTask([&sequenced_task_checker, &done_event, expect_true] { |
- if (expect_true) |
- EXPECT_TRUE(sequenced_task_checker->CalledSequentially()); |
- else |
- EXPECT_FALSE(sequenced_task_checker->CalledSequentially()); |
- done_event.Set(); |
- }); |
- EXPECT_TRUE(done_event.Wait(1000)); |
-} |
- |
-void DetachThenCallFromDifferentTaskQueue(bool expect_true) { |
- std::unique_ptr<SequencedTaskChecker> sequenced_task_checker( |
- new SequencedTaskChecker()); |
- |
- sequenced_task_checker->Detach(); |
- |
- Event done_event(false, false); |
- TaskQueue queue1("DetachThenCallFromDifferentTaskQueueImpl1"); |
- queue1.PostTask([&sequenced_task_checker, &done_event] { |
- EXPECT_TRUE(sequenced_task_checker->CalledSequentially()); |
- done_event.Set(); |
- }); |
- EXPECT_TRUE(done_event.Wait(1000)); |
- |
- // CalledSequentially should return false in debug builds after moving to |
- // another task queue. |
- TaskQueue queue2("DetachThenCallFromDifferentTaskQueueImpl2"); |
- queue2.PostTask([&sequenced_task_checker, &done_event, expect_true] { |
- if (expect_true) |
- EXPECT_TRUE(sequenced_task_checker->CalledSequentially()); |
- else |
- EXPECT_FALSE(sequenced_task_checker->CalledSequentially()); |
- done_event.Set(); |
- }); |
- EXPECT_TRUE(done_event.Wait(1000)); |
-} |
-} // namespace |
- |
-TEST(SequencedTaskCheckerTest, CallsAllowedOnSameThread) { |
- std::unique_ptr<SequencedTaskChecker> sequenced_task_checker( |
- new SequencedTaskChecker()); |
- |
- EXPECT_TRUE(sequenced_task_checker->CalledSequentially()); |
- |
- // Verify that the destructor doesn't assert. |
- sequenced_task_checker.reset(); |
-} |
- |
-TEST(SequencedTaskCheckerTest, DestructorAllowedOnDifferentThread) { |
- std::unique_ptr<SequencedTaskChecker> sequenced_task_checker( |
- new SequencedTaskChecker()); |
- |
- // Verify that the destructor doesn't assert when called on a different |
- // thread. |
- DeleteSequencedCheckerOnThread delete_on_thread( |
- std::move(sequenced_task_checker)); |
-} |
- |
-TEST(SequencedTaskCheckerTest, DetachFromThread) { |
- std::unique_ptr<SequencedTaskChecker> sequenced_task_checker( |
- new SequencedTaskChecker()); |
- |
- sequenced_task_checker->Detach(); |
- CallCalledSequentiallyOnThread call_on_thread(true, |
- sequenced_task_checker.get()); |
-} |
- |
-TEST(SequencedTaskCheckerTest, DetachFromThreadAndUseOnTaskQueue) { |
- std::unique_ptr<SequencedTaskChecker> sequenced_task_checker( |
- new SequencedTaskChecker()); |
- |
- sequenced_task_checker->Detach(); |
- static const char kQueueName[] = "DetachFromThreadAndUseOnTaskQueue"; |
- TaskQueue queue(kQueueName); |
- Event done_event(false, false); |
- queue.PostTask([&sequenced_task_checker, &done_event] { |
- EXPECT_TRUE(sequenced_task_checker->CalledSequentially()); |
- done_event.Set(); |
- }); |
- EXPECT_TRUE(done_event.Wait(1000)); |
-} |
- |
-TEST(SequencedTaskCheckerTest, DetachFromTaskQueueAndUseOnThread) { |
- TaskQueue queue("DetachFromTaskQueueAndUseOnThread"); |
- Event done_event(false, false); |
- queue.PostTask([&done_event] { |
- std::unique_ptr<SequencedTaskChecker> sequenced_task_checker( |
- new SequencedTaskChecker()); |
- |
- sequenced_task_checker->Detach(); |
- CallCalledSequentiallyOnThread call_on_thread(true, |
- sequenced_task_checker.get()); |
- done_event.Set(); |
- }); |
- EXPECT_TRUE(done_event.Wait(1000)); |
-} |
- |
-#if RTC_DCHECK_IS_ON |
-TEST(SequencedTaskCheckerTest, MethodNotAllowedOnDifferentThreadInDebug) { |
- RunMethodOnDifferentThread(false); |
-} |
-#else |
-TEST(SequencedTaskCheckerTest, MethodAllowedOnDifferentThreadInRelease) { |
- RunMethodOnDifferentThread(true); |
-} |
-#endif |
- |
-#if RTC_DCHECK_IS_ON |
-TEST(SequencedTaskCheckerTest, MethodNotAllowedOnDifferentTaskQueueInDebug) { |
- RunMethodOnDifferentTaskQueue(false); |
-} |
-#else |
-TEST(SequencedTaskCheckerTest, MethodAllowedOnDifferentTaskQueueInRelease) { |
- RunMethodOnDifferentTaskQueue(true); |
-} |
-#endif |
- |
-#if RTC_DCHECK_IS_ON |
-TEST(SequencedTaskCheckerTest, DetachFromTaskQueueInDebug) { |
- DetachThenCallFromDifferentTaskQueue(false); |
-} |
-#else |
-TEST(SequencedTaskCheckerTest, DetachFromTaskQueueInRelease) { |
- DetachThenCallFromDifferentTaskQueue(true); |
-} |
-#endif |
- |
-class TestAnnotations { |
- public: |
- TestAnnotations() : test_var_(false) {} |
- |
- void ModifyTestVar() { |
- RTC_DCHECK_CALLED_SEQUENTIALLY(&checker_); |
- test_var_ = true; |
- } |
- |
- private: |
- bool test_var_ GUARDED_BY(&checker_); |
- SequencedTaskChecker checker_; |
-}; |
- |
-TEST(SequencedTaskCheckerTest, TestAnnotations) { |
- TestAnnotations annotations; |
- annotations.ModifyTestVar(); |
-} |
- |
-#if GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) |
- |
-void TestAnnotationsOnWrongQueue() { |
- TestAnnotations annotations; |
- static const char kQueueName[] = "TestAnnotationsOnWrongQueueDebug"; |
- TaskQueue queue(kQueueName); |
- Event done_event(false, false); |
- queue.PostTask([&annotations, &done_event] { |
- annotations.ModifyTestVar(); |
- done_event.Set(); |
- }); |
- EXPECT_TRUE(done_event.Wait(1000)); |
-} |
- |
-#if RTC_DCHECK_IS_ON |
-TEST(SequencedTaskCheckerTest, TestAnnotationsOnWrongQueueDebug) { |
- ASSERT_DEATH({ TestAnnotationsOnWrongQueue(); }, ""); |
-} |
-#else |
-TEST(SequencedTaskCheckerTest, TestAnnotationsOnWrongQueueRelease) { |
- TestAnnotationsOnWrongQueue(); |
-} |
-#endif |
-#endif // GTEST_HAS_DEATH_TEST |
-} // namespace rtc |