Index: chromecast/media/cma/ipc/media_message_fifo_unittest.cc |
diff --git a/chromecast/media/cma/ipc/media_message_fifo_unittest.cc b/chromecast/media/cma/ipc/media_message_fifo_unittest.cc |
deleted file mode 100644 |
index 229e2375632d026b9bc799c2b6adb50d6332fa1e..0000000000000000000000000000000000000000 |
--- a/chromecast/media/cma/ipc/media_message_fifo_unittest.cc |
+++ /dev/null |
@@ -1,191 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chromecast/media/cma/ipc/media_message_fifo.h" |
- |
-#include <stddef.h> |
-#include <stdint.h> |
- |
-#include <memory> |
- |
-#include "base/bind.h" |
-#include "base/macros.h" |
-#include "base/synchronization/waitable_event.h" |
-#include "base/threading/thread.h" |
-#include "chromecast/media/cma/ipc/media_memory_chunk.h" |
-#include "chromecast/media/cma/ipc/media_message.h" |
-#include "chromecast/media/cma/ipc/media_message_type.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-namespace chromecast { |
-namespace media { |
- |
-namespace { |
- |
-class FifoMemoryChunk : public MediaMemoryChunk { |
- public: |
- FifoMemoryChunk(void* mem, size_t size) |
- : mem_(mem), size_(size) {} |
- ~FifoMemoryChunk() override {} |
- |
- void* data() const override { return mem_; } |
- size_t size() const override { return size_; } |
- bool valid() const override { return true; } |
- |
- private: |
- void* mem_; |
- size_t size_; |
- |
- DISALLOW_COPY_AND_ASSIGN(FifoMemoryChunk); |
-}; |
- |
-void MsgProducer(std::unique_ptr<MediaMessageFifo> fifo, |
- int msg_count, |
- base::WaitableEvent* event) { |
- for (int k = 0; k < msg_count; k++) { |
- uint32_t msg_type = 0x2 + (k % 5); |
- uint32_t max_msg_content_size = k % 64; |
- do { |
- std::unique_ptr<MediaMessage> msg1(MediaMessage::CreateMessage( |
- msg_type, base::Bind(&MediaMessageFifo::ReserveMemory, |
- base::Unretained(fifo.get())), |
- max_msg_content_size)); |
- if (msg1) |
- break; |
- base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(10)); |
- } while (true); |
- } |
- |
- fifo.reset(); |
- |
- event->Signal(); |
-} |
- |
-void MsgConsumer(std::unique_ptr<MediaMessageFifo> fifo, |
- int msg_count, |
- base::WaitableEvent* event) { |
- int k = 0; |
- while (k < msg_count) { |
- uint32_t msg_type = 0x2 + (k % 5); |
- do { |
- std::unique_ptr<MediaMessage> msg2(fifo->Pop()); |
- if (msg2) { |
- if (msg2->type() != PaddingMediaMsg) { |
- EXPECT_EQ(msg2->type(), msg_type); |
- k++; |
- } |
- break; |
- } |
- base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(10)); |
- } while (true); |
- } |
- |
- fifo.reset(); |
- |
- event->Signal(); |
-} |
- |
-void MsgProducerConsumer(std::unique_ptr<MediaMessageFifo> producer_fifo, |
- std::unique_ptr<MediaMessageFifo> consumer_fifo, |
- base::WaitableEvent* event) { |
- for (int k = 0; k < 2048; k++) { |
- // Should have enough space to create a message. |
- uint32_t msg_type = 0x2 + (k % 5); |
- uint32_t max_msg_content_size = k % 64; |
- std::unique_ptr<MediaMessage> msg1(MediaMessage::CreateMessage( |
- msg_type, base::Bind(&MediaMessageFifo::ReserveMemory, |
- base::Unretained(producer_fifo.get())), |
- max_msg_content_size)); |
- EXPECT_TRUE(msg1); |
- |
- // Make sure the message is commited. |
- msg1.reset(); |
- |
- // At this point, we should have a message to read. |
- std::unique_ptr<MediaMessage> msg2(consumer_fifo->Pop()); |
- EXPECT_TRUE(msg2); |
- } |
- |
- producer_fifo.reset(); |
- consumer_fifo.reset(); |
- |
- event->Signal(); |
-} |
- |
-} // namespace |
- |
-TEST(MediaMessageFifoTest, AlternateWriteRead) { |
- size_t buffer_size = 64 * 1024; |
- std::unique_ptr<uint64_t[]> buffer( |
- new uint64_t[buffer_size / sizeof(uint64_t)]); |
- |
- std::unique_ptr<base::Thread> thread( |
- new base::Thread("FeederConsumerThread")); |
- thread->Start(); |
- |
- std::unique_ptr<MediaMessageFifo> producer_fifo( |
- new MediaMessageFifo(std::unique_ptr<MediaMemoryChunk>( |
- new FifoMemoryChunk(&buffer[0], buffer_size)), |
- true)); |
- std::unique_ptr<MediaMessageFifo> consumer_fifo( |
- new MediaMessageFifo(std::unique_ptr<MediaMemoryChunk>( |
- new FifoMemoryChunk(&buffer[0], buffer_size)), |
- false)); |
- |
- base::WaitableEvent event(base::WaitableEvent::ResetPolicy::AUTOMATIC, |
- base::WaitableEvent::InitialState::NOT_SIGNALED); |
- thread->task_runner()->PostTask( |
- FROM_HERE, base::Bind(&MsgProducerConsumer, base::Passed(&producer_fifo), |
- base::Passed(&consumer_fifo), &event)); |
- event.Wait(); |
- |
- thread.reset(); |
-} |
- |
-TEST(MediaMessageFifoTest, MultiThreaded) { |
- size_t buffer_size = 64 * 1024; |
- std::unique_ptr<uint64_t[]> buffer( |
- new uint64_t[buffer_size / sizeof(uint64_t)]); |
- |
- std::unique_ptr<base::Thread> producer_thread( |
- new base::Thread("FeederThread")); |
- std::unique_ptr<base::Thread> consumer_thread( |
- new base::Thread("ConsumerThread")); |
- producer_thread->Start(); |
- consumer_thread->Start(); |
- |
- std::unique_ptr<MediaMessageFifo> producer_fifo( |
- new MediaMessageFifo(std::unique_ptr<MediaMemoryChunk>( |
- new FifoMemoryChunk(&buffer[0], buffer_size)), |
- true)); |
- std::unique_ptr<MediaMessageFifo> consumer_fifo( |
- new MediaMessageFifo(std::unique_ptr<MediaMemoryChunk>( |
- new FifoMemoryChunk(&buffer[0], buffer_size)), |
- false)); |
- |
- base::WaitableEvent producer_event_done( |
- base::WaitableEvent::ResetPolicy::AUTOMATIC, |
- base::WaitableEvent::InitialState::NOT_SIGNALED); |
- base::WaitableEvent consumer_event_done( |
- base::WaitableEvent::ResetPolicy::AUTOMATIC, |
- base::WaitableEvent::InitialState::NOT_SIGNALED); |
- |
- const int msg_count = 2048; |
- producer_thread->task_runner()->PostTask( |
- FROM_HERE, base::Bind(&MsgProducer, base::Passed(&producer_fifo), |
- msg_count, &producer_event_done)); |
- consumer_thread->task_runner()->PostTask( |
- FROM_HERE, base::Bind(&MsgConsumer, base::Passed(&consumer_fifo), |
- msg_count, &consumer_event_done)); |
- |
- producer_event_done.Wait(); |
- consumer_event_done.Wait(); |
- |
- producer_thread.reset(); |
- consumer_thread.reset(); |
-} |
- |
-} // namespace media |
-} // namespace chromecast |
- |