| Index: webrtc/base/sharedexclusivelock_unittest.cc
|
| diff --git a/webrtc/base/sharedexclusivelock_unittest.cc b/webrtc/base/sharedexclusivelock_unittest.cc
|
| deleted file mode 100644
|
| index e0462ffa115d99674c8ab4aa1ccd8fd7cff9cddc..0000000000000000000000000000000000000000
|
| --- a/webrtc/base/sharedexclusivelock_unittest.cc
|
| +++ /dev/null
|
| @@ -1,197 +0,0 @@
|
| -/*
|
| - * Copyright 2011 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 <memory>
|
| -
|
| -#include "webrtc/base/checks.h"
|
| -#include "webrtc/base/gunit.h"
|
| -#include "webrtc/base/event.h"
|
| -#include "webrtc/base/messagehandler.h"
|
| -#include "webrtc/base/messagequeue.h"
|
| -#include "webrtc/base/sharedexclusivelock.h"
|
| -#include "webrtc/base/thread.h"
|
| -#include "webrtc/base/timeutils.h"
|
| -
|
| -namespace rtc {
|
| -
|
| -static const uint32_t kMsgRead = 0;
|
| -static const uint32_t kMsgWrite = 0;
|
| -static const int kNoWaitThresholdInMs = 10;
|
| -static const int kWaitThresholdInMs = 80;
|
| -static const int kProcessTimeInMs = 100;
|
| -static const int kProcessTimeoutInMs = 5000;
|
| -
|
| -class SharedExclusiveTask : public MessageHandler {
|
| - public:
|
| - SharedExclusiveTask(SharedExclusiveLock* shared_exclusive_lock,
|
| - int* value,
|
| - Event* done)
|
| - : shared_exclusive_lock_(shared_exclusive_lock),
|
| - value_(value),
|
| - done_(done) {
|
| - worker_thread_.reset(new Thread());
|
| - worker_thread_->Start();
|
| - }
|
| -
|
| - protected:
|
| - std::unique_ptr<Thread> worker_thread_;
|
| - SharedExclusiveLock* shared_exclusive_lock_;
|
| - int* value_;
|
| - Event* done_;
|
| -};
|
| -
|
| -class ReadTask : public SharedExclusiveTask {
|
| - public:
|
| - ReadTask(SharedExclusiveLock* shared_exclusive_lock, int* value, Event* done)
|
| - : SharedExclusiveTask(shared_exclusive_lock, value, done) {
|
| - }
|
| -
|
| - void PostRead(int* value) {
|
| - worker_thread_->Post(RTC_FROM_HERE, this, kMsgRead,
|
| - new TypedMessageData<int*>(value));
|
| - }
|
| -
|
| - private:
|
| - virtual void OnMessage(Message* message) {
|
| - RTC_CHECK(rtc::Thread::Current() == worker_thread_.get());
|
| - RTC_CHECK(message != nullptr);
|
| - RTC_CHECK(message->message_id == kMsgRead);
|
| -
|
| - TypedMessageData<int*>* message_data =
|
| - static_cast<TypedMessageData<int*>*>(message->pdata);
|
| -
|
| - {
|
| - SharedScope ss(shared_exclusive_lock_);
|
| - *message_data->data() = *value_;
|
| - done_->Set();
|
| - }
|
| - delete message->pdata;
|
| - message->pdata = nullptr;
|
| - }
|
| -};
|
| -
|
| -class WriteTask : public SharedExclusiveTask {
|
| - public:
|
| - WriteTask(SharedExclusiveLock* shared_exclusive_lock, int* value, Event* done)
|
| - : SharedExclusiveTask(shared_exclusive_lock, value, done) {
|
| - }
|
| -
|
| - void PostWrite(int value) {
|
| - worker_thread_->Post(RTC_FROM_HERE, this, kMsgWrite,
|
| - new TypedMessageData<int>(value));
|
| - }
|
| -
|
| - private:
|
| - virtual void OnMessage(Message* message) {
|
| - RTC_CHECK(rtc::Thread::Current() == worker_thread_.get());
|
| - RTC_CHECK(message != nullptr);
|
| - RTC_CHECK(message->message_id == kMsgWrite);
|
| -
|
| - TypedMessageData<int>* message_data =
|
| - static_cast<TypedMessageData<int>*>(message->pdata);
|
| -
|
| - {
|
| - ExclusiveScope es(shared_exclusive_lock_);
|
| - *value_ = message_data->data();
|
| - done_->Set();
|
| - }
|
| - delete message->pdata;
|
| - message->pdata = nullptr;
|
| - }
|
| -};
|
| -
|
| -// Unit test for SharedExclusiveLock.
|
| -class SharedExclusiveLockTest
|
| - : public testing::Test {
|
| - public:
|
| - SharedExclusiveLockTest() : value_(0) {
|
| - }
|
| -
|
| - virtual void SetUp() {
|
| - shared_exclusive_lock_.reset(new SharedExclusiveLock());
|
| - }
|
| -
|
| - protected:
|
| - std::unique_ptr<SharedExclusiveLock> shared_exclusive_lock_;
|
| - int value_;
|
| -};
|
| -
|
| -TEST_F(SharedExclusiveLockTest, TestSharedShared) {
|
| - int value0, value1;
|
| - Event done0(false, false), done1(false, false);
|
| - ReadTask reader0(shared_exclusive_lock_.get(), &value_, &done0);
|
| - ReadTask reader1(shared_exclusive_lock_.get(), &value_, &done1);
|
| -
|
| - // Test shared locks can be shared without waiting.
|
| - {
|
| - SharedScope ss(shared_exclusive_lock_.get());
|
| - value_ = 1;
|
| - reader0.PostRead(&value0);
|
| - reader1.PostRead(&value1);
|
| -
|
| - EXPECT_TRUE(done0.Wait(kProcessTimeoutInMs));
|
| - EXPECT_TRUE(done1.Wait(kProcessTimeoutInMs));
|
| - EXPECT_EQ(1, value0);
|
| - EXPECT_EQ(1, value1);
|
| - }
|
| -}
|
| -
|
| -TEST_F(SharedExclusiveLockTest, TestSharedExclusive) {
|
| - Event done(false, false);
|
| - WriteTask writer(shared_exclusive_lock_.get(), &value_, &done);
|
| -
|
| - // Test exclusive lock needs to wait for shared lock.
|
| - {
|
| - SharedScope ss(shared_exclusive_lock_.get());
|
| - value_ = 1;
|
| - writer.PostWrite(2);
|
| - EXPECT_FALSE(done.Wait(kProcessTimeInMs));
|
| - }
|
| - EXPECT_TRUE(done.Wait(kProcessTimeoutInMs));
|
| - EXPECT_EQ(2, value_);
|
| -}
|
| -
|
| -TEST_F(SharedExclusiveLockTest, TestExclusiveShared) {
|
| - int value;
|
| - Event done(false, false);
|
| - ReadTask reader(shared_exclusive_lock_.get(), &value_, &done);
|
| -
|
| - // Test shared lock needs to wait for exclusive lock.
|
| - {
|
| - ExclusiveScope es(shared_exclusive_lock_.get());
|
| - value_ = 1;
|
| - reader.PostRead(&value);
|
| - EXPECT_FALSE(done.Wait(kProcessTimeInMs));
|
| - value_ = 2;
|
| - }
|
| -
|
| - EXPECT_TRUE(done.Wait(kProcessTimeoutInMs));
|
| - EXPECT_EQ(2, value);
|
| -}
|
| -
|
| -TEST_F(SharedExclusiveLockTest, TestExclusiveExclusive) {
|
| - Event done(false, false);
|
| - WriteTask writer(shared_exclusive_lock_.get(), &value_, &done);
|
| -
|
| - // Test exclusive lock needs to wait for exclusive lock.
|
| - {
|
| - ExclusiveScope es(shared_exclusive_lock_.get());
|
| - // Start the writer task only after holding the lock, to ensure it need
|
| - value_ = 1;
|
| - writer.PostWrite(2);
|
| - EXPECT_FALSE(done.Wait(kProcessTimeInMs));
|
| - EXPECT_EQ(1, value_);
|
| - }
|
| -
|
| - EXPECT_TRUE(done.Wait(kProcessTimeoutInMs));
|
| - EXPECT_EQ(2, value_);
|
| -}
|
| -
|
| -} // namespace rtc
|
|
|