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

Unified Diff: chromecast/media/cma/ipc_streamer/av_streamer_unittest.cc

Issue 2300993003: CmaRenderer is dead. Long live MojoRenderer. (Closed)
Patch Set: update OWNERS file Created 4 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: chromecast/media/cma/ipc_streamer/av_streamer_unittest.cc
diff --git a/chromecast/media/cma/ipc_streamer/av_streamer_unittest.cc b/chromecast/media/cma/ipc_streamer/av_streamer_unittest.cc
deleted file mode 100644
index 46ca5d02b052acd812ee6df359f6c52af17d8824..0000000000000000000000000000000000000000
--- a/chromecast/media/cma/ipc_streamer/av_streamer_unittest.cc
+++ /dev/null
@@ -1,322 +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 <stddef.h>
-#include <stdint.h>
-
-#include <list>
-#include <memory>
-#include <utility>
-#include <vector>
-
-#include "base/bind.h"
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "base/threading/thread.h"
-#include "base/threading/thread_task_runner_handle.h"
-#include "base/time/time.h"
-#include "chromecast/media/cma/ipc/media_memory_chunk.h"
-#include "chromecast/media/cma/ipc/media_message_fifo.h"
-#include "chromecast/media/cma/ipc_streamer/av_streamer_proxy.h"
-#include "chromecast/media/cma/ipc_streamer/coded_frame_provider_host.h"
-#include "chromecast/media/cma/test/frame_generator_for_test.h"
-#include "chromecast/media/cma/test/mock_frame_consumer.h"
-#include "chromecast/media/cma/test/mock_frame_provider.h"
-#include "chromecast/public/media/cast_decoder_buffer.h"
-#include "media/base/audio_decoder_config.h"
-#include "media/base/decoder_buffer.h"
-#include "media/base/video_decoder_config.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);
-};
-
-} // namespace
-
-class AvStreamerTest : public testing::Test {
- public:
- AvStreamerTest();
- ~AvStreamerTest() override;
-
- // Setups the test.
- void Configure(size_t frame_count,
- const std::vector<bool>& provider_delayed_pattern,
- const std::vector<bool>& consumer_delayed_pattern,
- bool delay_flush);
-
- // Starts the test.
- void Start();
-
- // Back to back flush
- void FlushThenStop();
-
- // Timeout indicates test failure
- void OnTestTimeout();
-
- protected:
- std::unique_ptr<uint64_t[]> fifo_mem_;
-
- std::unique_ptr<AvStreamerProxy> av_buffer_proxy_;
- std::unique_ptr<CodedFrameProviderHost> coded_frame_provider_host_;
- std::unique_ptr<MockFrameConsumer> frame_consumer_;
-
- // number of pending cb in StopAndFlush
- int stop_and_flush_cb_count_;
-
- private:
- void OnTestCompleted();
-
- void OnFifoRead();
- void OnFifoWrite();
-
- void OnStopAndFlush();
-
- DISALLOW_COPY_AND_ASSIGN(AvStreamerTest);
-};
-
-AvStreamerTest::AvStreamerTest() {
-}
-
-AvStreamerTest::~AvStreamerTest() {
-}
-
-void AvStreamerTest::Configure(
- size_t frame_count,
- const std::vector<bool>& provider_delayed_pattern,
- const std::vector<bool>& consumer_delayed_pattern,
- bool delay_flush) {
- // Frame generation on the producer and consumer side.
- std::vector<FrameGeneratorForTest::FrameSpec> frame_specs;
- frame_specs.resize(frame_count);
- for (size_t k = 0; k < frame_specs.size() - 1; k++) {
- frame_specs[k].has_config = (k == 0);
- frame_specs[k].timestamp = base::TimeDelta::FromMilliseconds(40) * k;
- frame_specs[k].size = 512;
- frame_specs[k].has_decrypt_config = ((k % 3) == 0);
- }
- frame_specs.back().is_eos = true;
-
- std::unique_ptr<FrameGeneratorForTest> frame_generator_provider(
- new FrameGeneratorForTest(frame_specs));
- std::unique_ptr<FrameGeneratorForTest> frame_generator_consumer(
- new FrameGeneratorForTest(frame_specs));
-
- std::unique_ptr<MockFrameProvider> frame_provider(new MockFrameProvider());
- frame_provider->Configure(provider_delayed_pattern,
- std::move(frame_generator_provider));
- frame_provider->SetDelayFlush(delay_flush);
-
- size_t fifo_size_div_8 = 512;
- fifo_mem_.reset(new uint64_t[fifo_size_div_8]);
- std::unique_ptr<MediaMessageFifo> producer_fifo(new MediaMessageFifo(
- std::unique_ptr<MediaMemoryChunk>(
- new FifoMemoryChunk(&fifo_mem_[0], fifo_size_div_8 * 8)),
- true));
- std::unique_ptr<MediaMessageFifo> consumer_fifo(new MediaMessageFifo(
- std::unique_ptr<MediaMemoryChunk>(
- new FifoMemoryChunk(&fifo_mem_[0], fifo_size_div_8 * 8)),
- false));
- producer_fifo->ObserveWriteActivity(
- base::Bind(&AvStreamerTest::OnFifoWrite, base::Unretained(this)));
- consumer_fifo->ObserveReadActivity(
- base::Bind(&AvStreamerTest::OnFifoRead, base::Unretained(this)));
-
- av_buffer_proxy_.reset(
- new AvStreamerProxy());
- av_buffer_proxy_->SetCodedFrameProvider(
- std::unique_ptr<CodedFrameProvider>(frame_provider.release()));
- av_buffer_proxy_->SetMediaMessageFifo(std::move(producer_fifo));
-
- coded_frame_provider_host_.reset(
- new CodedFrameProviderHost(std::move(consumer_fifo)));
-
- frame_consumer_.reset(
- new MockFrameConsumer(coded_frame_provider_host_.get()));
- frame_consumer_->Configure(consumer_delayed_pattern, false,
- std::move(frame_generator_consumer));
-
- stop_and_flush_cb_count_ = 0;
-}
-
-void AvStreamerTest::Start() {
- base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE, base::Bind(&AvStreamerProxy::Start,
- base::Unretained(av_buffer_proxy_.get())));
-
- frame_consumer_->Start(
- base::Bind(&AvStreamerTest::OnTestCompleted,
- base::Unretained(this)));
-}
-
-void AvStreamerTest::FlushThenStop() {
- base::Closure cb =
- base::Bind(&AvStreamerTest::OnStopAndFlush, base::Unretained(this));
-
- stop_and_flush_cb_count_++;
- av_buffer_proxy_->StopAndFlush(cb);
-
- ASSERT_EQ(stop_and_flush_cb_count_, 1);
-
- stop_and_flush_cb_count_++;
- av_buffer_proxy_->StopAndFlush(cb);
-}
-
-void AvStreamerTest::OnTestTimeout() {
- ADD_FAILURE() << "Test timed out";
- if (base::MessageLoop::current())
- base::MessageLoop::current()->QuitWhenIdle();
-}
-
-void AvStreamerTest::OnTestCompleted() {
- base::MessageLoop::current()->QuitWhenIdle();
-}
-
-void AvStreamerTest::OnFifoWrite() {
- base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE,
- base::Bind(&CodedFrameProviderHost::OnFifoWriteEvent,
- base::Unretained(coded_frame_provider_host_.get())));
-}
-
-void AvStreamerTest::OnFifoRead() {
- base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE, base::Bind(&AvStreamerProxy::OnFifoReadEvent,
- base::Unretained(av_buffer_proxy_.get())));
-}
-
-void AvStreamerTest::OnStopAndFlush() {
- stop_and_flush_cb_count_--;
- if (stop_and_flush_cb_count_ == 0) {
- OnTestCompleted();
- }
-}
-
-TEST_F(AvStreamerTest, FastProviderSlowConsumer) {
- bool provider_delayed_pattern[] = { false };
- bool consumer_delayed_pattern[] = { true };
-
- const size_t frame_count = 100u;
- Configure(frame_count,
- std::vector<bool>(
- provider_delayed_pattern,
- provider_delayed_pattern + arraysize(provider_delayed_pattern)),
- std::vector<bool>(
- consumer_delayed_pattern,
- consumer_delayed_pattern + arraysize(consumer_delayed_pattern)),
- false);
-
- std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop());
- message_loop->PostTask(
- FROM_HERE,
- base::Bind(&AvStreamerTest::Start, base::Unretained(this)));
- message_loop->Run();
-}
-
-TEST_F(AvStreamerTest, SlowProviderFastConsumer) {
- bool provider_delayed_pattern[] = { true };
- bool consumer_delayed_pattern[] = { false };
-
- const size_t frame_count = 100u;
- Configure(frame_count,
- std::vector<bool>(
- provider_delayed_pattern,
- provider_delayed_pattern + arraysize(provider_delayed_pattern)),
- std::vector<bool>(
- consumer_delayed_pattern,
- consumer_delayed_pattern + arraysize(consumer_delayed_pattern)),
- false);
-
- std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop());
- message_loop->PostTask(
- FROM_HERE,
- base::Bind(&AvStreamerTest::Start, base::Unretained(this)));
- message_loop->Run();
-}
-
-TEST_F(AvStreamerTest, SlowFastProducerConsumer) {
- // Pattern lengths are prime between each other
- // so that a lot of combinations can be tested.
- bool provider_delayed_pattern[] = {
- true, true, true, true, true,
- false, false, false, false
- };
- bool consumer_delayed_pattern[] = {
- true, true, true, true, true, true, true,
- false, false, false, false, false, false, false
- };
-
- const size_t frame_count = 100u;
- Configure(frame_count,
- std::vector<bool>(
- provider_delayed_pattern,
- provider_delayed_pattern + arraysize(provider_delayed_pattern)),
- std::vector<bool>(
- consumer_delayed_pattern,
- consumer_delayed_pattern + arraysize(consumer_delayed_pattern)),
- false);
-
- std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop());
- message_loop->PostTask(
- FROM_HERE,
- base::Bind(&AvStreamerTest::Start, base::Unretained(this)));
- message_loop->Run();
-}
-
-// Test case for when AvStreamerProxy::StopAndFlush is invoked while a previous
-// flush is pending. This can happen when pipeline is stopped while a seek/flush
-// is pending.
-TEST_F(AvStreamerTest, StopInFlush) {
- // We don't care about the delayed pattern. Setting to true to make sure the
- // test won't exit before flush is called.
- bool dummy_delayed_pattern[] = {true};
- std::vector<bool> dummy_delayed_pattern_vector(
- dummy_delayed_pattern,
- dummy_delayed_pattern + arraysize(dummy_delayed_pattern));
- const size_t frame_count = 100u;
-
- // Delay flush callback in frame provider
- Configure(frame_count, dummy_delayed_pattern_vector,
- dummy_delayed_pattern_vector, true);
-
- std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop());
-
- // Flush takes 10ms to finish. 1s timeout is enough for this test.
- message_loop->PostDelayedTask(
- FROM_HERE,
- base::Bind(&AvStreamerTest::OnTestTimeout, base::Unretained(this)),
- base::TimeDelta::FromSeconds(1));
-
- message_loop->PostTask(
- FROM_HERE, base::Bind(&AvStreamerTest::Start, base::Unretained(this)));
-
- // Let AvStreamerProxy run for a while. Fire flush and stop later
- message_loop->PostDelayedTask(
- FROM_HERE,
- base::Bind(&AvStreamerTest::FlushThenStop, base::Unretained(this)),
- base::TimeDelta::FromMilliseconds(10));
-
- message_loop->Run();
-}
-
-} // namespace media
-} // namespace chromecast
« no previous file with comments | « chromecast/media/cma/ipc_streamer/av_streamer_proxy.cc ('k') | chromecast/media/cma/ipc_streamer/coded_frame_provider_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698