OLD | NEW |
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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/bind.h" | 6 #include "base/bind.h" |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "base/synchronization/waitable_event.h" | 8 #include "base/synchronization/waitable_event.h" |
9 #include "base/threading/thread.h" | 9 #include "base/threading/thread.h" |
10 #include "chromecast/media/cma/ipc/media_memory_chunk.h" | 10 #include "chromecast/media/cma/ipc/media_memory_chunk.h" |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
128 scoped_ptr<MediaMessageFifo> producer_fifo(new MediaMessageFifo( | 128 scoped_ptr<MediaMessageFifo> producer_fifo(new MediaMessageFifo( |
129 scoped_ptr<MediaMemoryChunk>( | 129 scoped_ptr<MediaMemoryChunk>( |
130 new FifoMemoryChunk(&buffer[0], buffer_size)), | 130 new FifoMemoryChunk(&buffer[0], buffer_size)), |
131 true)); | 131 true)); |
132 scoped_ptr<MediaMessageFifo> consumer_fifo(new MediaMessageFifo( | 132 scoped_ptr<MediaMessageFifo> consumer_fifo(new MediaMessageFifo( |
133 scoped_ptr<MediaMemoryChunk>( | 133 scoped_ptr<MediaMemoryChunk>( |
134 new FifoMemoryChunk(&buffer[0], buffer_size)), | 134 new FifoMemoryChunk(&buffer[0], buffer_size)), |
135 false)); | 135 false)); |
136 | 136 |
137 base::WaitableEvent event(false, false); | 137 base::WaitableEvent event(false, false); |
138 thread->message_loop_proxy()->PostTask( | 138 thread->task_runner()->PostTask( |
139 FROM_HERE, | 139 FROM_HERE, base::Bind(&MsgProducerConsumer, base::Passed(&producer_fifo), |
140 base::Bind(&MsgProducerConsumer, | 140 base::Passed(&consumer_fifo), &event)); |
141 base::Passed(&producer_fifo), | |
142 base::Passed(&consumer_fifo), | |
143 &event)); | |
144 event.Wait(); | 141 event.Wait(); |
145 | 142 |
146 thread.reset(); | 143 thread.reset(); |
147 } | 144 } |
148 | 145 |
149 TEST(MediaMessageFifoTest, MultiThreaded) { | 146 TEST(MediaMessageFifoTest, MultiThreaded) { |
150 size_t buffer_size = 64 * 1024; | 147 size_t buffer_size = 64 * 1024; |
151 scoped_ptr<uint64[]> buffer(new uint64[buffer_size / sizeof(uint64)]); | 148 scoped_ptr<uint64[]> buffer(new uint64[buffer_size / sizeof(uint64)]); |
152 | 149 |
153 scoped_ptr<base::Thread> producer_thread( | 150 scoped_ptr<base::Thread> producer_thread( |
154 new base::Thread("FeederThread")); | 151 new base::Thread("FeederThread")); |
155 scoped_ptr<base::Thread> consumer_thread( | 152 scoped_ptr<base::Thread> consumer_thread( |
156 new base::Thread("ConsumerThread")); | 153 new base::Thread("ConsumerThread")); |
157 producer_thread->Start(); | 154 producer_thread->Start(); |
158 consumer_thread->Start(); | 155 consumer_thread->Start(); |
159 | 156 |
160 scoped_ptr<MediaMessageFifo> producer_fifo(new MediaMessageFifo( | 157 scoped_ptr<MediaMessageFifo> producer_fifo(new MediaMessageFifo( |
161 scoped_ptr<MediaMemoryChunk>( | 158 scoped_ptr<MediaMemoryChunk>( |
162 new FifoMemoryChunk(&buffer[0], buffer_size)), | 159 new FifoMemoryChunk(&buffer[0], buffer_size)), |
163 true)); | 160 true)); |
164 scoped_ptr<MediaMessageFifo> consumer_fifo(new MediaMessageFifo( | 161 scoped_ptr<MediaMessageFifo> consumer_fifo(new MediaMessageFifo( |
165 scoped_ptr<MediaMemoryChunk>( | 162 scoped_ptr<MediaMemoryChunk>( |
166 new FifoMemoryChunk(&buffer[0], buffer_size)), | 163 new FifoMemoryChunk(&buffer[0], buffer_size)), |
167 false)); | 164 false)); |
168 | 165 |
169 base::WaitableEvent producer_event_done(false, false); | 166 base::WaitableEvent producer_event_done(false, false); |
170 base::WaitableEvent consumer_event_done(false, false); | 167 base::WaitableEvent consumer_event_done(false, false); |
171 | 168 |
172 const int msg_count = 2048; | 169 const int msg_count = 2048; |
173 producer_thread->message_loop_proxy()->PostTask( | 170 producer_thread->task_runner()->PostTask( |
174 FROM_HERE, | 171 FROM_HERE, base::Bind(&MsgProducer, base::Passed(&producer_fifo), |
175 base::Bind(&MsgProducer, | 172 msg_count, &producer_event_done)); |
176 base::Passed(&producer_fifo), | 173 consumer_thread->task_runner()->PostTask( |
177 msg_count, | 174 FROM_HERE, base::Bind(&MsgConsumer, base::Passed(&consumer_fifo), |
178 &producer_event_done)); | 175 msg_count, &consumer_event_done)); |
179 consumer_thread->message_loop_proxy()->PostTask( | |
180 FROM_HERE, | |
181 base::Bind(&MsgConsumer, | |
182 base::Passed(&consumer_fifo), | |
183 msg_count, | |
184 &consumer_event_done)); | |
185 | 176 |
186 producer_event_done.Wait(); | 177 producer_event_done.Wait(); |
187 consumer_event_done.Wait(); | 178 consumer_event_done.Wait(); |
188 | 179 |
189 producer_thread.reset(); | 180 producer_thread.reset(); |
190 consumer_thread.reset(); | 181 consumer_thread.reset(); |
191 } | 182 } |
192 | 183 |
193 } // namespace media | 184 } // namespace media |
194 } // namespace chromecast | 185 } // namespace chromecast |
195 | 186 |
OLD | NEW |