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

Side by Side Diff: chromecast/media/cma/ipc/media_message_fifo_unittest.cc

Issue 2043303004: More WaitableEvent stragglers migrated to enum-based constructor (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@d_4_misc
Patch Set: Created 4 years, 6 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chromecast/media/cma/ipc/media_message_fifo.h" 5 #include "chromecast/media/cma/ipc/media_message_fifo.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <memory> 10 #include <memory>
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 uint32_t msg_type = 0x2 + (k % 5); 47 uint32_t msg_type = 0x2 + (k % 5);
48 uint32_t max_msg_content_size = k % 64; 48 uint32_t max_msg_content_size = k % 64;
49 do { 49 do {
50 std::unique_ptr<MediaMessage> msg1(MediaMessage::CreateMessage( 50 std::unique_ptr<MediaMessage> msg1(MediaMessage::CreateMessage(
51 msg_type, base::Bind(&MediaMessageFifo::ReserveMemory, 51 msg_type, base::Bind(&MediaMessageFifo::ReserveMemory,
52 base::Unretained(fifo.get())), 52 base::Unretained(fifo.get())),
53 max_msg_content_size)); 53 max_msg_content_size));
54 if (msg1) 54 if (msg1)
55 break; 55 break;
56 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(10)); 56 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(10));
57 } while(true); 57 } while (true);
58 } 58 }
59 59
60 fifo.reset(); 60 fifo.reset();
61 61
62 event->Signal(); 62 event->Signal();
63 } 63 }
64 64
65 void MsgConsumer(std::unique_ptr<MediaMessageFifo> fifo, 65 void MsgConsumer(std::unique_ptr<MediaMessageFifo> fifo,
66 int msg_count, 66 int msg_count,
67 base::WaitableEvent* event) { 67 base::WaitableEvent* event) {
68 int k = 0; 68 int k = 0;
69 while (k < msg_count) { 69 while (k < msg_count) {
70 uint32_t msg_type = 0x2 + (k % 5); 70 uint32_t msg_type = 0x2 + (k % 5);
71 do { 71 do {
72 std::unique_ptr<MediaMessage> msg2(fifo->Pop()); 72 std::unique_ptr<MediaMessage> msg2(fifo->Pop());
73 if (msg2) { 73 if (msg2) {
74 if (msg2->type() != PaddingMediaMsg) { 74 if (msg2->type() != PaddingMediaMsg) {
75 EXPECT_EQ(msg2->type(), msg_type); 75 EXPECT_EQ(msg2->type(), msg_type);
76 k++; 76 k++;
77 } 77 }
78 break; 78 break;
79 } 79 }
80 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(10)); 80 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(10));
81 } while(true); 81 } while (true);
82 } 82 }
83 83
84 fifo.reset(); 84 fifo.reset();
85 85
86 event->Signal(); 86 event->Signal();
87 } 87 }
88 88
89 void MsgProducerConsumer(std::unique_ptr<MediaMessageFifo> producer_fifo, 89 void MsgProducerConsumer(std::unique_ptr<MediaMessageFifo> producer_fifo,
90 std::unique_ptr<MediaMessageFifo> consumer_fifo, 90 std::unique_ptr<MediaMessageFifo> consumer_fifo,
91 base::WaitableEvent* event) { 91 base::WaitableEvent* event) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 126
127 std::unique_ptr<MediaMessageFifo> producer_fifo( 127 std::unique_ptr<MediaMessageFifo> producer_fifo(
128 new MediaMessageFifo(std::unique_ptr<MediaMemoryChunk>( 128 new MediaMessageFifo(std::unique_ptr<MediaMemoryChunk>(
129 new FifoMemoryChunk(&buffer[0], buffer_size)), 129 new FifoMemoryChunk(&buffer[0], buffer_size)),
130 true)); 130 true));
131 std::unique_ptr<MediaMessageFifo> consumer_fifo( 131 std::unique_ptr<MediaMessageFifo> consumer_fifo(
132 new MediaMessageFifo(std::unique_ptr<MediaMemoryChunk>( 132 new MediaMessageFifo(std::unique_ptr<MediaMemoryChunk>(
133 new FifoMemoryChunk(&buffer[0], buffer_size)), 133 new FifoMemoryChunk(&buffer[0], buffer_size)),
134 false)); 134 false));
135 135
136 base::WaitableEvent event(false, false); 136 base::WaitableEvent event(base::WaitableEvent::ResetPolicy::AUTOMATIC,
137 base::WaitableEvent::InitialState::NOT_SIGNALED);
137 thread->task_runner()->PostTask( 138 thread->task_runner()->PostTask(
138 FROM_HERE, base::Bind(&MsgProducerConsumer, base::Passed(&producer_fifo), 139 FROM_HERE, base::Bind(&MsgProducerConsumer, base::Passed(&producer_fifo),
139 base::Passed(&consumer_fifo), &event)); 140 base::Passed(&consumer_fifo), &event));
140 event.Wait(); 141 event.Wait();
141 142
142 thread.reset(); 143 thread.reset();
143 } 144 }
144 145
145 TEST(MediaMessageFifoTest, MultiThreaded) { 146 TEST(MediaMessageFifoTest, MultiThreaded) {
146 size_t buffer_size = 64 * 1024; 147 size_t buffer_size = 64 * 1024;
147 std::unique_ptr<uint64_t[]> buffer( 148 std::unique_ptr<uint64_t[]> buffer(
148 new uint64_t[buffer_size / sizeof(uint64_t)]); 149 new uint64_t[buffer_size / sizeof(uint64_t)]);
149 150
150 std::unique_ptr<base::Thread> producer_thread( 151 std::unique_ptr<base::Thread> producer_thread(
151 new base::Thread("FeederThread")); 152 new base::Thread("FeederThread"));
152 std::unique_ptr<base::Thread> consumer_thread( 153 std::unique_ptr<base::Thread> consumer_thread(
153 new base::Thread("ConsumerThread")); 154 new base::Thread("ConsumerThread"));
154 producer_thread->Start(); 155 producer_thread->Start();
155 consumer_thread->Start(); 156 consumer_thread->Start();
156 157
157 std::unique_ptr<MediaMessageFifo> producer_fifo( 158 std::unique_ptr<MediaMessageFifo> producer_fifo(
158 new MediaMessageFifo(std::unique_ptr<MediaMemoryChunk>( 159 new MediaMessageFifo(std::unique_ptr<MediaMemoryChunk>(
159 new FifoMemoryChunk(&buffer[0], buffer_size)), 160 new FifoMemoryChunk(&buffer[0], buffer_size)),
160 true)); 161 true));
161 std::unique_ptr<MediaMessageFifo> consumer_fifo( 162 std::unique_ptr<MediaMessageFifo> consumer_fifo(
162 new MediaMessageFifo(std::unique_ptr<MediaMemoryChunk>( 163 new MediaMessageFifo(std::unique_ptr<MediaMemoryChunk>(
163 new FifoMemoryChunk(&buffer[0], buffer_size)), 164 new FifoMemoryChunk(&buffer[0], buffer_size)),
164 false)); 165 false));
165 166
166 base::WaitableEvent producer_event_done(false, false); 167 base::WaitableEvent producer_event_done(
167 base::WaitableEvent consumer_event_done(false, false); 168 base::WaitableEvent::ResetPolicy::AUTOMATIC,
169 base::WaitableEvent::InitialState::NOT_SIGNALED);
170 base::WaitableEvent consumer_event_done(
171 base::WaitableEvent::ResetPolicy::AUTOMATIC,
172 base::WaitableEvent::InitialState::NOT_SIGNALED);
168 173
169 const int msg_count = 2048; 174 const int msg_count = 2048;
170 producer_thread->task_runner()->PostTask( 175 producer_thread->task_runner()->PostTask(
171 FROM_HERE, base::Bind(&MsgProducer, base::Passed(&producer_fifo), 176 FROM_HERE, base::Bind(&MsgProducer, base::Passed(&producer_fifo),
172 msg_count, &producer_event_done)); 177 msg_count, &producer_event_done));
173 consumer_thread->task_runner()->PostTask( 178 consumer_thread->task_runner()->PostTask(
174 FROM_HERE, base::Bind(&MsgConsumer, base::Passed(&consumer_fifo), 179 FROM_HERE, base::Bind(&MsgConsumer, base::Passed(&consumer_fifo),
175 msg_count, &consumer_event_done)); 180 msg_count, &consumer_event_done));
176 181
177 producer_event_done.Wait(); 182 producer_event_done.Wait();
178 consumer_event_done.Wait(); 183 consumer_event_done.Wait();
179 184
180 producer_thread.reset(); 185 producer_thread.reset();
181 consumer_thread.reset(); 186 consumer_thread.reset();
182 } 187 }
183 188
184 } // namespace media 189 } // namespace media
185 } // namespace chromecast 190 } // namespace chromecast
186 191
OLDNEW
« no previous file with comments | « chromecast/media/base/media_resource_tracker_unittest.cc ('k') | components/exo/wayland/server_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698