Index: content/common/gamepad_seqlock_unittest.cc |
=================================================================== |
--- content/common/gamepad_seqlock_unittest.cc (revision 112429) |
+++ content/common/gamepad_seqlock_unittest.cc (working copy) |
@@ -8,7 +8,6 @@ |
#include "base/atomic_ref_count.h" |
#include "base/threading/platform_thread.h" |
-#include "base/third_party/dynamic_annotations/dynamic_annotations.h" |
#include "testing/gtest/include/gtest/gtest.h" |
namespace base { |
@@ -24,11 +23,9 @@ |
BasicSeqLockTestThread() {} |
void Init( |
- content::GamepadSeqLock* seqlock, |
- TestData* data, |
+ content::GamepadSeqLock<TestData>* seqlock, |
base::subtle::Atomic32* ready) { |
seqlock_ = seqlock; |
- data_ = data; |
ready_ = ready; |
} |
virtual void ThreadMain() { |
@@ -36,14 +33,9 @@ |
PlatformThread::YieldCurrentThread(); |
} |
- for (unsigned i = 0; i < 1000; ++i) { |
+ for (unsigned i = 0; i < 10000; ++i) { |
scottmg
2011/12/05 18:45:06
10000 was causing timeouts on (slower?) tsan bots
dvyukov
2011/12/07 09:35:50
Done.
|
TestData copy; |
- base::subtle::Atomic32 version; |
- do { |
- version = seqlock_->ReadBegin(); |
- copy = *data_; |
- } while (seqlock_->ReadRetry(version)); |
- |
+ seqlock_->ReadTo(©); |
EXPECT_EQ(copy.a + 100, copy.b); |
EXPECT_EQ(copy.c, copy.b + copy.a); |
} |
@@ -52,37 +44,33 @@ |
} |
private: |
- content::GamepadSeqLock* seqlock_; |
- TestData* data_; |
+ content::GamepadSeqLock<TestData>* seqlock_; |
base::AtomicRefCount* ready_; |
DISALLOW_COPY_AND_ASSIGN(BasicSeqLockTestThread); |
}; |
TEST(GamepadSeqLockTest, ManyThreads) { |
- content::GamepadSeqLock seqlock; |
+ content::GamepadSeqLock<TestData> seqlock; |
TestData data = { 0, 0, 0 }; |
base::AtomicRefCount ready = 0; |
- ANNOTATE_BENIGN_RACE_SIZED(&data, sizeof(data), "Racey reads are discarded"); |
- |
static const unsigned kNumReaderThreads = 10; |
BasicSeqLockTestThread threads[kNumReaderThreads]; |
PlatformThreadHandle handles[kNumReaderThreads]; |
for (unsigned i = 0; i < kNumReaderThreads; ++i) |
- threads[i].Init(&seqlock, &data, &ready); |
+ threads[i].Init(&seqlock, &ready); |
for (unsigned i = 0; i < kNumReaderThreads; ++i) |
ASSERT_TRUE(PlatformThread::Create(0, &threads[i], &handles[i])); |
// The main thread is the writer, and the spawned are readers. |
unsigned counter = 0; |
for (;;) { |
- seqlock.WriteBegin(); |
data.a = counter++; |
data.b = data.a + 100; |
data.c = data.b + data.a; |
- seqlock.WriteEnd(); |
+ seqlock.Write(data); |
if (counter == 1) |
base::AtomicRefCountIncN(&ready, kNumReaderThreads); |