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

Unified Diff: webrtc/system_wrappers/source/critical_section_unittest.cc

Issue 2790533002: Remove ALL usage of CriticalSectionWrapper. (Closed)
Patch Set: remove winXP rw_lock include Created 3 years, 9 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
Index: webrtc/system_wrappers/source/critical_section_unittest.cc
diff --git a/webrtc/system_wrappers/source/critical_section_unittest.cc b/webrtc/system_wrappers/source/critical_section_unittest.cc
deleted file mode 100644
index 623f2fc2db5feac81fae1e10bfdc365670096dd5..0000000000000000000000000000000000000000
--- a/webrtc/system_wrappers/source/critical_section_unittest.cc
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (c) 2012 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/system_wrappers/include/critical_section_wrapper.h"
-
-#include "webrtc/base/platform_thread.h"
-#include "webrtc/system_wrappers/include/sleep.h"
-#include "webrtc/test/gtest.h"
-
-namespace webrtc {
-
-namespace {
-
-// Cause a process switch. Needed to avoid depending on
-// busy-wait in tests.
-static void SwitchProcess() {
- // Note - sched_yield has been tried as process switch. This does
- // not cause a process switch enough of the time for reliability.
- SleepMs(1);
-}
-
-class ProtectedCount {
-public:
- explicit ProtectedCount(CriticalSectionWrapper* crit_sect)
- : crit_sect_(crit_sect),
- count_(0) {
- }
-
- void Increment() {
- CriticalSectionScoped cs(crit_sect_);
- ++count_;
- }
-
- int Count() const {
- CriticalSectionScoped cs(crit_sect_);
- return count_;
- }
-
-private:
- CriticalSectionWrapper* crit_sect_;
- int count_;
-};
-
-class CritSectTest : public ::testing::Test {
-public:
- CritSectTest() {}
-
- // Waits a number of cycles for the count to reach a given value.
- // Returns true if the target is reached or passed.
- bool WaitForCount(int target, ProtectedCount* count) {
- int loop_counter = 0;
- // On Posix, this SwitchProcess() needs to be in a loop to make the
- // test both fast and non-flaky.
- // With 1 us wait as the switch, up to 7 rounds have been observed.
- while (count->Count() < target && loop_counter < 100 * target) {
- ++loop_counter;
- SwitchProcess();
- }
- return (count->Count() >= target);
- }
-};
-
-void LockUnlockThenStopRunFunction(void* obj) {
- ProtectedCount* the_count = static_cast<ProtectedCount*>(obj);
- the_count->Increment();
-}
-
-TEST_F(CritSectTest, ThreadWakesOnce) NO_THREAD_SAFETY_ANALYSIS {
- CriticalSectionWrapper* crit_sect =
- CriticalSectionWrapper::CreateCriticalSection();
- ProtectedCount count(crit_sect);
- rtc::PlatformThread thread(
- &LockUnlockThenStopRunFunction, &count, "ThreadWakesOnce");
- crit_sect->Enter();
- thread.Start();
- SwitchProcess();
- // The critical section is of reentrant mode, so this should not release
- // the lock, even though count.Count() locks and unlocks the critical section
- // again.
- // Thus, the thread should not be able to increment the count
- ASSERT_EQ(0, count.Count());
- crit_sect->Leave(); // This frees the thread to act.
- EXPECT_TRUE(WaitForCount(1, &count));
- thread.Stop();
- delete crit_sect;
-}
-
-bool LockUnlockRunFunction(void* obj) {
- ProtectedCount* the_count = static_cast<ProtectedCount*>(obj);
- the_count->Increment();
- SwitchProcess();
- return true;
-}
-
-TEST_F(CritSectTest, ThreadWakesTwice) NO_THREAD_SAFETY_ANALYSIS {
- CriticalSectionWrapper* crit_sect =
- CriticalSectionWrapper::CreateCriticalSection();
- ProtectedCount count(crit_sect);
- rtc::PlatformThread thread(
- &LockUnlockRunFunction, &count, "ThreadWakesTwice");
- crit_sect->Enter(); // Make sure counter stays 0 until we wait for it.
- thread.Start();
- crit_sect->Leave();
-
- // The thread is capable of grabbing the lock multiple times,
- // incrementing counter once each time.
- // It's possible for the count to be incremented by more than 2.
- EXPECT_TRUE(WaitForCount(2, &count));
- EXPECT_LE(2, count.Count());
-
- // The thread does not increment while lock is held.
- crit_sect->Enter();
- int count_before = count.Count();
- for (int i = 0; i < 10; i++) {
- SwitchProcess();
- }
- EXPECT_EQ(count_before, count.Count());
- crit_sect->Leave();
-
- SwitchProcess();
- EXPECT_TRUE(WaitForCount(count_before + 1, &count));
- thread.Stop();
- delete crit_sect;
-}
-
-} // anonymous namespace
-
-} // namespace webrtc
« no previous file with comments | « webrtc/system_wrappers/source/condition_variable_unittest.cc ('k') | webrtc/system_wrappers/source/rw_lock.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698