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

Side by Side Diff: third_party/crashpad/crashpad/util/thread/worker_thread_test.cc

Issue 2773813002: Update Crashpad to 8e37886d418dd042c3c7bfadac99214739ee4d98 (Closed)
Patch Set: Update Crashpad to 8e37886d418dd042c3c7bfadac99214739ee4d98 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Crashpad Authors. All rights reserved. 1 // Copyright 2015 The Crashpad Authors. All rights reserved.
2 // 2 //
3 // Licensed under the Apache License, Version 2.0 (the "License"); 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License. 4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at 5 // You may obtain a copy of the License at
6 // 6 //
7 // http://www.apache.org/licenses/LICENSE-2.0 7 // http://www.apache.org/licenses/LICENSE-2.0
8 // 8 //
9 // Unless required by applicable law or agreed to in writing, software 9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS, 10 // distributed under the License is distributed on an "AS IS" BASIS,
(...skipping 12 matching lines...) Expand all
23 namespace { 23 namespace {
24 24
25 const uint64_t kNanosecondsPerSecond = static_cast<uint64_t>(1E9); 25 const uint64_t kNanosecondsPerSecond = static_cast<uint64_t>(1E9);
26 26
27 class WorkDelegate : public WorkerThread::Delegate { 27 class WorkDelegate : public WorkerThread::Delegate {
28 public: 28 public:
29 WorkDelegate() {} 29 WorkDelegate() {}
30 ~WorkDelegate() {} 30 ~WorkDelegate() {}
31 31
32 void DoWork(const WorkerThread* thread) override { 32 void DoWork(const WorkerThread* thread) override {
33 if (++work_count_ == waiting_for_count_) 33 if (work_count_ < waiting_for_count_) {
34 semaphore_.Signal(); 34 if (++work_count_ == waiting_for_count_) {
35 semaphore_.Signal();
36 }
37 }
35 } 38 }
36 39
37 void SetDesiredWorkCount(int times) { 40 void SetDesiredWorkCount(int times) {
38 waiting_for_count_ = times; 41 waiting_for_count_ = times;
39 } 42 }
40 43
41 //! \brief Suspends the calling thread until the DoWork() has been called 44 //! \brief Suspends the calling thread until the DoWork() has been called
42 //! the number of times specified by SetDesiredWorkCount(). 45 //! the number of times specified by SetDesiredWorkCount().
43 void WaitForWorkCount() { 46 void WaitForWorkCount() {
44 semaphore_.Wait(); 47 semaphore_.Wait();
45 } 48 }
46 49
47 int work_count() const { return work_count_; } 50 int work_count() const { return work_count_; }
48 51
49 private: 52 private:
50 Semaphore semaphore_{0}; 53 Semaphore semaphore_{0};
51 int work_count_ = 0; 54 int work_count_ = 0;
52 int waiting_for_count_ = -1; 55 int waiting_for_count_ = -1;
53 56
54 DISALLOW_COPY_AND_ASSIGN(WorkDelegate); 57 DISALLOW_COPY_AND_ASSIGN(WorkDelegate);
55 }; 58 };
56 59
57 TEST(WorkerThread, DoWork) { 60 TEST(WorkerThread, DoWork) {
58 WorkDelegate delegate; 61 WorkDelegate delegate;
59 WorkerThread thread(0.05, &delegate); 62 WorkerThread thread(0.05, &delegate);
60 63
61 uint64_t start = ClockMonotonicNanoseconds(); 64 uint64_t start = ClockMonotonicNanoseconds();
65
62 delegate.SetDesiredWorkCount(2); 66 delegate.SetDesiredWorkCount(2);
63 thread.Start(0); 67 thread.Start(0);
64 EXPECT_TRUE(thread.is_running()); 68 EXPECT_TRUE(thread.is_running());
65 69
66 delegate.WaitForWorkCount(); 70 delegate.WaitForWorkCount();
67 thread.Stop(); 71 thread.Stop();
68 EXPECT_FALSE(thread.is_running()); 72 EXPECT_FALSE(thread.is_running());
69 73
70 EXPECT_GE(1 * kNanosecondsPerSecond, ClockMonotonicNanoseconds() - start); 74 EXPECT_GE(1 * kNanosecondsPerSecond, ClockMonotonicNanoseconds() - start);
71 } 75 }
(...skipping 24 matching lines...) Expand all
96 thread.Start(0); 100 thread.Start(0);
97 delegate.WaitForWorkCount(); 101 delegate.WaitForWorkCount();
98 thread.Stop(); 102 thread.Stop();
99 ASSERT_FALSE(thread.is_running()); 103 ASSERT_FALSE(thread.is_running());
100 } 104 }
101 105
102 TEST(WorkerThread, DoWorkNow) { 106 TEST(WorkerThread, DoWorkNow) {
103 WorkDelegate delegate; 107 WorkDelegate delegate;
104 WorkerThread thread(100, &delegate); 108 WorkerThread thread(100, &delegate);
105 109
110 uint64_t start = ClockMonotonicNanoseconds();
111
106 delegate.SetDesiredWorkCount(1); 112 delegate.SetDesiredWorkCount(1);
107 thread.Start(0); 113 thread.Start(0);
108 EXPECT_TRUE(thread.is_running()); 114 EXPECT_TRUE(thread.is_running());
109 115
110 uint64_t start = ClockMonotonicNanoseconds();
111
112 delegate.WaitForWorkCount(); 116 delegate.WaitForWorkCount();
113 EXPECT_EQ(1, delegate.work_count()); 117 EXPECT_EQ(1, delegate.work_count());
114 118
115 delegate.SetDesiredWorkCount(2); 119 delegate.SetDesiredWorkCount(2);
116 thread.DoWorkNow(); 120 thread.DoWorkNow();
117 delegate.WaitForWorkCount(); 121 delegate.WaitForWorkCount();
118 thread.Stop(); 122 thread.Stop();
119 EXPECT_EQ(2, delegate.work_count()); 123 EXPECT_EQ(2, delegate.work_count());
120 124
121 EXPECT_GE(100 * kNanosecondsPerSecond, ClockMonotonicNanoseconds() - start); 125 EXPECT_GE(100 * kNanosecondsPerSecond, ClockMonotonicNanoseconds() - start);
(...skipping 15 matching lines...) Expand all
137 141
138 EXPECT_GE(100 * kNanosecondsPerSecond, ClockMonotonicNanoseconds() - start); 142 EXPECT_GE(100 * kNanosecondsPerSecond, ClockMonotonicNanoseconds() - start);
139 143
140 thread.Stop(); 144 thread.Stop();
141 EXPECT_FALSE(thread.is_running()); 145 EXPECT_FALSE(thread.is_running());
142 } 146 }
143 147
144 } // namespace 148 } // namespace
145 } // namespace test 149 } // namespace test
146 } // namespace crashpad 150 } // namespace crashpad
OLDNEW
« no previous file with comments | « third_party/crashpad/crashpad/util/posix/process_info_test.cc ('k') | third_party/crashpad/crashpad/util/util.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698