Commit 3f6d2857 authored by Scott Violet's avatar Scott Violet Committed by Commit Bot

Revert "Fetch and apply Multiroom info in CAOS"

This reverts commit df6e77ca.

Reason for revert: Reverting as suspect of failing case_media_unittests . https://ci.chromium.org/p/chromium/builders/luci.chromium.ci/Cast%20Audio%20Linux/16824 :

[ RUN      ] CastAudioManagerTest.MakeAudioOutputStreamProxy
../../chromecast/media/audio/cast_audio_manager_unittest.cc:106: Failure
Actual function call count doesn't match EXPECT_CALL(*backend, Initialize())...
         Expected: to be called once
           Actual: never called - unsatisfied and active
Stack trace:
#0 0x00000054cffc testing::internal::UnitTestImpl::CurrentOsStackTraceExceptTop()
#1 0x00000054c9d9 testing::internal::AssertHelper::operator=()
#2 0x00000053ddd3 testing::internal::GoogleTestFailureReporter::ReportFailure()
#3 0x0000005405b6 testing::internal::UntypedFunctionMockerBase::VerifyAndClearExpectationsLocked()
#4 0x0000003e7142 chromecast::media::MockCmaBackend::~MockCmaBackend()
#5 0x0000003a7340 testing::StrictMock<>::~StrictMock()
#6 0x0000003a44b5 chromecast::media::(anonymous namespace)::CastAudioManagerTest_MakeAudioOutputStreamProxy_Test::TestBody()
../../chromecast/media/audio/cast_audio_manager_unittest.cc:105: Failure
Actual function call count doesn't match EXPECT_CALL(*backend, CreateAudioDecoder())...
         Expected: to be called once
           Actual: never called - unsatisfied and active

Original change's description:
> Fetch and apply Multiroom info in CAOS
> 
> CastAudioOutputStream can now use internal backends with multizone. In
> order for multizone to work, we first need to retrieve the multiroom
> info and pass it to the backend.
> 
> BUG=b:111694183
> TEST=Build, cast_media_unittests
> 
> Change-Id: I128a6b0cc1a389d01102007244fdb5594dd4c637
> Reviewed-on: https://chromium-review.googlesource.com/1145892
> Reviewed-by: Kenneth MacKay <kmackay@chromium.org>
> Reviewed-by: Luke Halliwell <halliwell@chromium.org>
> Reviewed-by: Scott Violet <sky@chromium.org>
> Commit-Queue: Aidan Wolter <awolter@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#578670}

TBR=sky@chromium.org,gab@chromium.org,halliwell@chromium.org,jameswest@chromium.org,kmackay@chromium.org,awolter@chromium.org

Change-Id: I519349d1cd87709c2a1bd39299420b5a7df7bcee
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: b:111694183
Reviewed-on: https://chromium-review.googlesource.com/1153309Reviewed-by: default avatarScott Violet <sky@chromium.org>
Commit-Queue: Scott Violet <sky@chromium.org>
Cr-Commit-Position: refs/heads/master@{#578685}
parent 9d0fd86c
...@@ -230,8 +230,6 @@ CastContentBrowserClient::CreateAudioManager( ...@@ -230,8 +230,6 @@ CastContentBrowserClient::CreateAudioManager(
std::make_unique<::media::AudioThreadImpl>(), audio_log_factory, std::make_unique<::media::AudioThreadImpl>(), audio_log_factory,
base::BindRepeating(&CastContentBrowserClient::GetCmaBackendFactory, base::BindRepeating(&CastContentBrowserClient::GetCmaBackendFactory,
base::Unretained(this)), base::Unretained(this)),
content::BrowserThread::GetTaskRunnerForThread(
content::BrowserThread::UI),
GetMediaTaskRunner(), use_mixer); GetMediaTaskRunner(), use_mixer);
#endif // defined(USE_ALSA) #endif // defined(USE_ALSA)
} }
......
...@@ -63,14 +63,9 @@ test("cast_media_unittests") { ...@@ -63,14 +63,9 @@ test("cast_media_unittests") {
"//base/test:test_support", "//base/test:test_support",
"//chromecast/base", "//chromecast/base",
"//chromecast/base/metrics:test_support", "//chromecast/base/metrics:test_support",
"//chromecast/common/mojom",
"//chromecast/media/cma:test_support", "//chromecast/media/cma:test_support",
"//chromecast/public", "//chromecast/public",
"//content/test:test_support",
"//media:test_support", "//media:test_support",
"//media/mojo:test_support",
"//mojo/core/embedder",
"//services/service_manager/public/cpp",
"//testing/gmock", "//testing/gmock",
"//testing/gtest", "//testing/gtest",
] ]
......
include_rules = [ include_rules = [
"+chromecast/common/mojom",
"+content/public/browser/browser_thread.h",
"+content/public/common/service_manager_connection.h",
"+content/public/test/test_browser_thread.h",
"+content/public/test/test_browser_thread_bundle.h",
"+content/public/test/test_utils.h",
"+crypto", "+crypto",
"+media/audio", "+media/audio",
"+media/base", "+media/base",
"+media/cdm", "+media/cdm",
"+mojo/core/embedder/embedder.h",
"+mojo/public/cpp/bindings/binding.h",
"+ui/gfx/geometry", "+ui/gfx/geometry",
"+ui/gfx/overlay_transform.h", "+ui/gfx/overlay_transform.h",
"+services/service_manager/public",
] ]
...@@ -15,28 +15,24 @@ cast_source_set("audio") { ...@@ -15,28 +15,24 @@ cast_source_set("audio") {
"cast_audio_output_stream.h", "cast_audio_output_stream.h",
] ]
if (use_alsa) {
sources += [
"cast_audio_manager_alsa.cc",
"cast_audio_manager_alsa.h",
]
}
deps = [ deps = [
"//base", "//base",
"//chromecast/base", "//chromecast/base",
"//chromecast/common/mojom",
"//chromecast/media/base", "//chromecast/media/base",
"//chromecast/media/cma/backend", "//chromecast/media/cma/backend",
"//chromecast/media/cma/base", "//chromecast/media/cma/base",
"//chromecast/public/media", "//chromecast/public/media",
"//content/public/common",
"//media", "//media",
"//media:shared_memory_support", "//media:shared_memory_support",
"//services/service_manager/public/cpp",
] ]
if (use_alsa) {
sources += [
"cast_audio_manager_alsa.cc",
"cast_audio_manager_alsa.h",
]
deps += [ "//content/public/browser" ]
}
configs += [ "//media/audio:platform_config" ] configs += [ "//media/audio:platform_config" ]
} }
......
...@@ -36,12 +36,10 @@ CastAudioManager::CastAudioManager( ...@@ -36,12 +36,10 @@ CastAudioManager::CastAudioManager(
std::unique_ptr<::media::AudioThread> audio_thread, std::unique_ptr<::media::AudioThread> audio_thread,
::media::AudioLogFactory* audio_log_factory, ::media::AudioLogFactory* audio_log_factory,
base::RepeatingCallback<CmaBackendFactory*()> backend_factory_getter, base::RepeatingCallback<CmaBackendFactory*()> backend_factory_getter,
scoped_refptr<base::SingleThreadTaskRunner> browser_task_runner,
scoped_refptr<base::SingleThreadTaskRunner> backend_task_runner, scoped_refptr<base::SingleThreadTaskRunner> backend_task_runner,
bool use_mixer) bool use_mixer)
: AudioManagerBase(std::move(audio_thread), audio_log_factory), : AudioManagerBase(std::move(audio_thread), audio_log_factory),
backend_factory_getter_(std::move(backend_factory_getter)), backend_factory_getter_(std::move(backend_factory_getter)),
browser_task_runner_(std::move(browser_task_runner)),
backend_task_runner_(std::move(backend_task_runner)) { backend_task_runner_(std::move(backend_task_runner)) {
DCHECK(backend_factory_getter_); DCHECK(backend_factory_getter_);
if (use_mixer) if (use_mixer)
...@@ -108,8 +106,7 @@ CmaBackendFactory* CastAudioManager::backend_factory() { ...@@ -108,8 +106,7 @@ CmaBackendFactory* CastAudioManager::backend_factory() {
if (mixer_) if (mixer_)
return mixer_->MakeStream(params); return mixer_->MakeStream(params);
else else
return new CastAudioOutputStream(params, browser_task_runner_, return new CastAudioOutputStream(params, this);
browser_connector_, this);
} }
::media::AudioOutputStream* CastAudioManager::MakeLowLatencyOutputStream( ::media::AudioOutputStream* CastAudioManager::MakeLowLatencyOutputStream(
...@@ -122,8 +119,7 @@ CmaBackendFactory* CastAudioManager::backend_factory() { ...@@ -122,8 +119,7 @@ CmaBackendFactory* CastAudioManager::backend_factory() {
if (mixer_) if (mixer_)
return mixer_->MakeStream(params); return mixer_->MakeStream(params);
else else
return new CastAudioOutputStream(params, browser_task_runner_, return new CastAudioOutputStream(params, this);
browser_connector_, this);
} }
::media::AudioInputStream* CastAudioManager::MakeLinearInputStream( ::media::AudioInputStream* CastAudioManager::MakeLinearInputStream(
...@@ -172,15 +168,9 @@ CmaBackendFactory* CastAudioManager::backend_factory() { ...@@ -172,15 +168,9 @@ CmaBackendFactory* CastAudioManager::backend_factory() {
// Keep a reference to this stream for proper behavior on // Keep a reference to this stream for proper behavior on
// CastAudioManager::ReleaseOutputStream. // CastAudioManager::ReleaseOutputStream.
mixer_output_stream_.reset(new CastAudioOutputStream( mixer_output_stream_.reset(new CastAudioOutputStream(params, this));
params, browser_task_runner_, browser_connector_, this));
return mixer_output_stream_.get(); return mixer_output_stream_.get();
} }
void CastAudioManager::SetBrowserConnectorForTesting(
service_manager::Connector* browser_connector) {
browser_connector_ = browser_connector;
}
} // namespace media } // namespace media
} // namespace chromecast } // namespace chromecast
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
#include "base/macros.h" #include "base/macros.h"
#include "base/single_thread_task_runner.h" #include "base/single_thread_task_runner.h"
#include "media/audio/audio_manager_base.h" #include "media/audio/audio_manager_base.h"
#include "services/service_manager/public/cpp/connector.h"
namespace chromecast { namespace chromecast {
...@@ -26,7 +25,6 @@ class CastAudioManager : public ::media::AudioManagerBase { ...@@ -26,7 +25,6 @@ class CastAudioManager : public ::media::AudioManagerBase {
std::unique_ptr<::media::AudioThread> audio_thread, std::unique_ptr<::media::AudioThread> audio_thread,
::media::AudioLogFactory* audio_log_factory, ::media::AudioLogFactory* audio_log_factory,
base::RepeatingCallback<CmaBackendFactory*()> backend_factory_getter, base::RepeatingCallback<CmaBackendFactory*()> backend_factory_getter,
scoped_refptr<base::SingleThreadTaskRunner> browser_task_runner,
scoped_refptr<base::SingleThreadTaskRunner> backend_task_runner, scoped_refptr<base::SingleThreadTaskRunner> backend_task_runner,
bool use_mixer); bool use_mixer);
~CastAudioManager() override; ~CastAudioManager() override;
...@@ -46,9 +44,6 @@ class CastAudioManager : public ::media::AudioManagerBase { ...@@ -46,9 +44,6 @@ class CastAudioManager : public ::media::AudioManagerBase {
return backend_task_runner_.get(); return backend_task_runner_.get();
} }
void SetBrowserConnectorForTesting(
service_manager::Connector* browser_connector);
protected: protected:
// AudioManagerBase implementation. // AudioManagerBase implementation.
::media::AudioOutputStream* MakeLinearOutputStream( ::media::AudioOutputStream* MakeLinearOutputStream(
...@@ -79,14 +74,9 @@ class CastAudioManager : public ::media::AudioManagerBase { ...@@ -79,14 +74,9 @@ class CastAudioManager : public ::media::AudioManagerBase {
base::RepeatingCallback<CmaBackendFactory*()> backend_factory_getter_; base::RepeatingCallback<CmaBackendFactory*()> backend_factory_getter_;
CmaBackendFactory* backend_factory_ = nullptr; CmaBackendFactory* backend_factory_ = nullptr;
scoped_refptr<base::SingleThreadTaskRunner> browser_task_runner_;
scoped_refptr<base::SingleThreadTaskRunner> backend_task_runner_; scoped_refptr<base::SingleThreadTaskRunner> backend_task_runner_;
std::unique_ptr<::media::AudioOutputStream> mixer_output_stream_; std::unique_ptr<::media::AudioOutputStream> mixer_output_stream_;
std::unique_ptr<CastAudioMixer> mixer_; std::unique_ptr<CastAudioMixer> mixer_;
// Used in tests to override the default browser connector.
service_manager::Connector* browser_connector_ = nullptr;
DISALLOW_COPY_AND_ASSIGN(CastAudioManager); DISALLOW_COPY_AND_ASSIGN(CastAudioManager);
}; };
......
...@@ -9,7 +9,6 @@ ...@@ -9,7 +9,6 @@
#include "base/memory/free_deleter.h" #include "base/memory/free_deleter.h"
#include "chromecast/media/cma/backend/cma_backend_factory.h" #include "chromecast/media/cma/backend/cma_backend_factory.h"
#include "content/public/browser/browser_thread.h"
#include "media/audio/alsa/alsa_input.h" #include "media/audio/alsa/alsa_input.h"
#include "media/audio/alsa/alsa_wrapper.h" #include "media/audio/alsa/alsa_wrapper.h"
...@@ -40,8 +39,6 @@ CastAudioManagerAlsa::CastAudioManagerAlsa( ...@@ -40,8 +39,6 @@ CastAudioManagerAlsa::CastAudioManagerAlsa(
: CastAudioManager(std::move(audio_thread), : CastAudioManager(std::move(audio_thread),
audio_log_factory, audio_log_factory,
std::move(backend_factory_getter), std::move(backend_factory_getter),
content::BrowserThread::GetTaskRunnerForThread(
content::BrowserThread::UI),
backend_task_runner, backend_task_runner,
use_mixer), use_mixer),
wrapper_(new ::media::AlsaWrapper()) {} wrapper_(new ::media::AlsaWrapper()) {}
......
...@@ -9,15 +9,11 @@ ...@@ -9,15 +9,11 @@
#include <utility> #include <utility>
#include "base/bind.h" #include "base/bind.h"
#include "base/test/scoped_task_environment.h" #include "base/test/test_message_loop.h"
#include "chromecast/common/mojom/multiroom.mojom.h"
#include "chromecast/media/audio/cast_audio_output_stream.h"
#include "chromecast/media/cma/test/mock_cma_backend.h" #include "chromecast/media/cma/test/mock_cma_backend.h"
#include "chromecast/media/cma/test/mock_cma_backend_factory.h" #include "chromecast/media/cma/test/mock_cma_backend_factory.h"
#include "chromecast/media/cma/test/mock_multiroom_manager.h"
#include "media/audio/fake_audio_log_factory.h" #include "media/audio/fake_audio_log_factory.h"
#include "media/audio/test_audio_thread.h" #include "media/audio/test_audio_thread.h"
#include "services/service_manager/public/cpp/connector.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
...@@ -26,15 +22,6 @@ using testing::Invoke; ...@@ -26,15 +22,6 @@ using testing::Invoke;
using testing::Return; using testing::Return;
using testing::StrictMock; using testing::StrictMock;
namespace {
constexpr char kChromecastServiceName[] = "chromecast";
std::unique_ptr<service_manager::Connector> CreateConnector() {
service_manager::mojom::ConnectorRequest request;
return service_manager::Connector::Create(&request);
}
} // namespace
namespace chromecast { namespace chromecast {
namespace media { namespace media {
namespace { namespace {
...@@ -47,53 +34,26 @@ const ::media::AudioParameters kDefaultAudioParams( ...@@ -47,53 +34,26 @@ const ::media::AudioParameters kDefaultAudioParams(
class CastAudioManagerTest : public testing::Test { class CastAudioManagerTest : public testing::Test {
public: public:
CastAudioManagerTest() CastAudioManagerTest() : media_thread_("CastMediaThread") {
: media_thread_("CastMediaThread"), connector_(CreateConnector()) {
CHECK(media_thread_.Start()); CHECK(media_thread_.Start());
// Set the test connector to override interface bindings.
service_manager::Connector::TestApi connector_test_api(connector_.get());
connector_test_api.OverrideBinderForTesting(
service_manager::Identity(kChromecastServiceName),
mojom::MultiroomManager::Name_,
base::BindRepeating(&CastAudioManagerTest::BindMultiroomManager,
base::Unretained(this)));
backend_factory_ = std::make_unique<MockCmaBackendFactory>(); backend_factory_ = std::make_unique<MockCmaBackendFactory>();
audio_manager_ = std::make_unique<CastAudioManager>( audio_manager_ = std::make_unique<CastAudioManager>(
std::make_unique<::media::TestAudioThread>(), &audio_log_factory_, std::make_unique<::media::TestAudioThread>(), &audio_log_factory_,
base::BindRepeating(&CastAudioManagerTest::GetCmaBackendFactory, base::BindRepeating(&CastAudioManagerTest::GetCmaBackendFactory,
base::Unretained(this)), base::Unretained(this)),
scoped_task_environment_.GetMainThreadTaskRunner(),
media_thread_.task_runner(), false); media_thread_.task_runner(), false);
audio_manager_->SetBrowserConnectorForTesting(connector_.get());
} }
~CastAudioManagerTest() override { audio_manager_->Shutdown(); } ~CastAudioManagerTest() override { audio_manager_->Shutdown(); }
CmaBackendFactory* GetCmaBackendFactory() { return backend_factory_.get(); } CmaBackendFactory* GetCmaBackendFactory() { return backend_factory_.get(); }
// Binds |multiroom_manager_| to the interface requested through the test
// connector.
void BindMultiroomManager(mojo::ScopedMessagePipeHandle handle) {
multiroom_manager_.Bind(std::move(handle));
}
protected: protected:
bool OpenStream(::media::AudioOutputStream* stream) { base::TestMessageLoop message_loop_;
bool success = stream->Open();
media_thread_.FlushForTesting();
scoped_task_environment_.RunUntilIdle();
media_thread_.FlushForTesting();
return success;
}
base::test::ScopedTaskEnvironment scoped_task_environment_;
base::Thread media_thread_; base::Thread media_thread_;
::media::FakeAudioLogFactory audio_log_factory_; ::media::FakeAudioLogFactory audio_log_factory_;
std::unique_ptr<CastAudioManager> audio_manager_; std::unique_ptr<CastAudioManager> audio_manager_;
std::unique_ptr<MockCmaBackendFactory> backend_factory_; std::unique_ptr<MockCmaBackendFactory> backend_factory_;
std::unique_ptr<service_manager::Connector> connector_;
MockMultiroomManager multiroom_manager_;
}; };
TEST_F(CastAudioManagerTest, MakeAudioOutputStreamProxy) { TEST_F(CastAudioManagerTest, MakeAudioOutputStreamProxy) {
...@@ -114,7 +74,7 @@ TEST_F(CastAudioManagerTest, MakeAudioOutputStreamProxy) { ...@@ -114,7 +74,7 @@ TEST_F(CastAudioManagerTest, MakeAudioOutputStreamProxy) {
::media::AudioOutputStream* stream = ::media::AudioOutputStream* stream =
audio_manager_->MakeAudioOutputStreamProxy(kDefaultAudioParams, audio_manager_->MakeAudioOutputStreamProxy(kDefaultAudioParams,
std::string()); std::string());
EXPECT_TRUE(OpenStream(stream)); EXPECT_TRUE(stream->Open());
stream->Close(); stream->Close();
} }
......
...@@ -11,14 +11,13 @@ ...@@ -11,14 +11,13 @@
#include <vector> #include <vector>
#include "base/bind.h" #include "base/bind.h"
#include "base/message_loop/message_loop.h"
#include "base/run_loop.h" #include "base/run_loop.h"
#include "base/test/scoped_task_environment.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "chromecast/media/audio/cast_audio_manager.h" #include "chromecast/media/audio/cast_audio_manager.h"
#include "chromecast/media/audio/cast_audio_output_stream.h" #include "chromecast/media/audio/cast_audio_output_stream.h"
#include "chromecast/media/cma/backend/cma_backend_factory.h" #include "chromecast/media/cma/backend/cma_backend_factory.h"
#include "media/audio/test_audio_thread.h" #include "media/audio/test_audio_thread.h"
#include "services/service_manager/public/cpp/connector.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
...@@ -65,15 +64,9 @@ class MockAudioSourceCallback ...@@ -65,15 +64,9 @@ class MockAudioSourceCallback
class MockCastAudioOutputStream : public CastAudioOutputStream { class MockCastAudioOutputStream : public CastAudioOutputStream {
public: public:
MockCastAudioOutputStream( MockCastAudioOutputStream(const ::media::AudioParameters& audio_params,
const ::media::AudioParameters& audio_params, CastAudioManager* audio_manager)
scoped_refptr<base::SingleThreadTaskRunner> browser_task_runner, : CastAudioOutputStream(audio_params, audio_manager) {}
service_manager::Connector* browser_connector,
CastAudioManager* audio_manager)
: CastAudioOutputStream(audio_params,
browser_task_runner,
browser_connector,
audio_manager) {}
MOCK_METHOD0(Open, bool()); MOCK_METHOD0(Open, bool());
MOCK_METHOD0(Close, void()); MOCK_METHOD0(Close, void());
...@@ -103,7 +96,6 @@ class MockCastAudioManager : public CastAudioManager { ...@@ -103,7 +96,6 @@ class MockCastAudioManager : public CastAudioManager {
base::BindRepeating(&MockCastAudioManager::GetCmaBackendFactory, base::BindRepeating(&MockCastAudioManager::GetCmaBackendFactory,
base::Unretained(this)), base::Unretained(this)),
nullptr, nullptr,
nullptr,
true /* use_mixer */) { true /* use_mixer */) {
ON_CALL(*this, ReleaseOutputStream(_)) ON_CALL(*this, ReleaseOutputStream(_))
.WillByDefault( .WillByDefault(
...@@ -125,18 +117,14 @@ class MockCastAudioManager : public CastAudioManager { ...@@ -125,18 +117,14 @@ class MockCastAudioManager : public CastAudioManager {
// Generates StrictMocks of Mixer, Manager, and Mixer OutputStream. // Generates StrictMocks of Mixer, Manager, and Mixer OutputStream.
class CastAudioMixerTest : public ::testing::Test { class CastAudioMixerTest : public ::testing::Test {
public: public:
CastAudioMixerTest() CastAudioMixerTest() : source_callback_(nullptr) {}
: scoped_task_environment_(
base::test::ScopedTaskEnvironment::MainThreadType::UI),
source_callback_(nullptr) {}
~CastAudioMixerTest() override {} ~CastAudioMixerTest() override {}
protected: protected:
void SetUp() override { void SetUp() override {
mock_manager_.reset(new StrictMock<MockCastAudioManager>()); mock_manager_.reset(new StrictMock<MockCastAudioManager>());
mock_mixer_stream_.reset(new StrictMock<MockCastAudioOutputStream>( mock_mixer_stream_.reset(new StrictMock<MockCastAudioOutputStream>(
GetAudioParams(), scoped_task_environment_.GetMainThreadTaskRunner(), GetAudioParams(), mock_manager_.get()));
nullptr, mock_manager_.get()));
ON_CALL(*mock_manager_, MakeMixerOutputStream(_)) ON_CALL(*mock_manager_, MakeMixerOutputStream(_))
.WillByDefault(Return(mock_mixer_stream_.get())); .WillByDefault(Return(mock_mixer_stream_.get()));
...@@ -156,7 +144,7 @@ class CastAudioMixerTest : public ::testing::Test { ...@@ -156,7 +144,7 @@ class CastAudioMixerTest : public ::testing::Test {
GetAudioParams(), "", ::media::AudioManager::LogCallback()); GetAudioParams(), "", ::media::AudioManager::LogCallback());
} }
base::test::ScopedTaskEnvironment scoped_task_environment_; base::MessageLoop message_loop_;
std::unique_ptr<MockCastAudioManager> mock_manager_; std::unique_ptr<MockCastAudioManager> mock_manager_;
std::unique_ptr<MockCastAudioOutputStream> mock_mixer_stream_; std::unique_ptr<MockCastAudioOutputStream> mock_mixer_stream_;
......
...@@ -8,10 +8,8 @@ ...@@ -8,10 +8,8 @@
#include <memory> #include <memory>
#include "base/macros.h" #include "base/macros.h"
#include "base/single_thread_task_runner.h"
#include "media/audio/audio_io.h" #include "media/audio/audio_io.h"
#include "media/base/audio_parameters.h" #include "media/base/audio_parameters.h"
#include "services/service_manager/public/cpp/connector.h"
namespace chromecast { namespace chromecast {
namespace media { namespace media {
...@@ -20,13 +18,8 @@ class CastAudioManager; ...@@ -20,13 +18,8 @@ class CastAudioManager;
class CastAudioOutputStream : public ::media::AudioOutputStream { class CastAudioOutputStream : public ::media::AudioOutputStream {
public: public:
CastAudioOutputStream( CastAudioOutputStream(const ::media::AudioParameters& audio_params,
const ::media::AudioParameters& audio_params, CastAudioManager* audio_manager);
scoped_refptr<base::SingleThreadTaskRunner> browser_task_runner,
// If the |browser_connector| is nullptr, then it will be fetched from the
// BrowserThread before usage.
service_manager::Connector* browser_connector,
CastAudioManager* audio_manager);
~CastAudioOutputStream() override; ~CastAudioOutputStream() override;
// ::media::AudioOutputStream implementation. // ::media::AudioOutputStream implementation.
...@@ -37,17 +30,10 @@ class CastAudioOutputStream : public ::media::AudioOutputStream { ...@@ -37,17 +30,10 @@ class CastAudioOutputStream : public ::media::AudioOutputStream {
void SetVolume(double volume) override; void SetVolume(double volume) override;
void GetVolume(double* volume) override; void GetVolume(double* volume) override;
void BindConnectorRequest(
service_manager::mojom::ConnectorRequest connector_request);
private: private:
class Backend; class Backend;
void BindConnectorRequestOnBrowserTaskRunner(
service_manager::mojom::ConnectorRequest connector_request);
const ::media::AudioParameters audio_params_; const ::media::AudioParameters audio_params_;
scoped_refptr<base::SingleThreadTaskRunner> browser_task_runner_;
service_manager::Connector* browser_connector_ = nullptr;
CastAudioManager* const audio_manager_; CastAudioManager* const audio_manager_;
double volume_; double volume_;
......
...@@ -14,20 +14,14 @@ ...@@ -14,20 +14,14 @@
#include "base/run_loop.h" #include "base/run_loop.h"
#include "base/test/scoped_task_environment.h" #include "base/test/scoped_task_environment.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "chromecast/common/mojom/multiroom.mojom.h"
#include "chromecast/media/audio/cast_audio_manager.h" #include "chromecast/media/audio/cast_audio_manager.h"
#include "chromecast/media/audio/cast_audio_mixer.h" #include "chromecast/media/audio/cast_audio_mixer.h"
#include "chromecast/media/cma/backend/cma_backend.h" #include "chromecast/media/cma/backend/cma_backend.h"
#include "chromecast/media/cma/base/decoder_buffer_base.h" #include "chromecast/media/cma/base/decoder_buffer_base.h"
#include "chromecast/media/cma/test/mock_cma_backend_factory.h" #include "chromecast/media/cma/test/mock_cma_backend_factory.h"
#include "chromecast/media/cma/test/mock_multiroom_manager.h"
#include "chromecast/public/task_runner.h" #include "chromecast/public/task_runner.h"
#include "content/public/test/test_browser_thread.h"
#include "content/public/test/test_browser_thread_bundle.h"
#include "media/audio/mock_audio_source_callback.h" #include "media/audio/mock_audio_source_callback.h"
#include "media/audio/test_audio_thread.h" #include "media/audio/test_audio_thread.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "services/service_manager/public/cpp/connector.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
...@@ -41,12 +35,6 @@ namespace { ...@@ -41,12 +35,6 @@ namespace {
const char kDefaultDeviceId[] = ""; const char kDefaultDeviceId[] = "";
const int64_t kDelayUs = 123; const int64_t kDelayUs = 123;
const int64_t kDelayTimestampUs = 123456789; const int64_t kDelayTimestampUs = 123456789;
constexpr char kChromecastServiceName[] = "chromecast";
std::unique_ptr<service_manager::Connector> CreateConnector() {
service_manager::mojom::ConnectorRequest request;
return service_manager::Connector::Create(&request);
}
int OnMoreData(base::TimeDelta /* delay */, int OnMoreData(base::TimeDelta /* delay */,
base::TimeTicks /* delay_timestamp */, base::TimeTicks /* delay_timestamp */,
...@@ -212,26 +200,10 @@ class CastAudioOutputStreamTest : public ::testing::Test { ...@@ -212,26 +200,10 @@ class CastAudioOutputStreamTest : public ::testing::Test {
format_(::media::AudioParameters::AUDIO_PCM_LINEAR), format_(::media::AudioParameters::AUDIO_PCM_LINEAR),
channel_layout_(::media::CHANNEL_LAYOUT_MONO), channel_layout_(::media::CHANNEL_LAYOUT_MONO),
sample_rate_(::media::AudioParameters::kAudioCDSampleRate), sample_rate_(::media::AudioParameters::kAudioCDSampleRate),
frames_per_buffer_(256), frames_per_buffer_(256) {}
connector_(CreateConnector()) {
// Set the test connector to override interface bindings.
service_manager::Connector::TestApi connector_test_api(connector_.get());
connector_test_api.OverrideBinderForTesting(
service_manager::Identity(kChromecastServiceName),
mojom::MultiroomManager::Name_,
base::BindRepeating(&CastAudioOutputStreamTest::BindMultiroomManager,
base::Unretained(this)));
}
~CastAudioOutputStreamTest() override {} ~CastAudioOutputStreamTest() override {}
CmaBackendFactory* GetCmaBackendFactory() { return backend_factory_.get(); } CmaBackendFactory* GetCmaBackendFactory() { return backend_factory_.get(); }
// Binds |multiroom_manager_| to the interface requested through the test
// connector.
void BindMultiroomManager(mojo::ScopedMessagePipeHandle handle) {
multiroom_manager_.Bind(std::move(handle));
}
protected: protected:
void SetUp() override { void SetUp() override {
CHECK(media_thread_.Start()); CHECK(media_thread_.Start());
...@@ -246,9 +218,7 @@ class CastAudioOutputStreamTest : public ::testing::Test { ...@@ -246,9 +218,7 @@ class CastAudioOutputStreamTest : public ::testing::Test {
std::make_unique<::media::TestAudioThread>(), nullptr, std::make_unique<::media::TestAudioThread>(), nullptr,
base::BindRepeating(&CastAudioOutputStreamTest::GetCmaBackendFactory, base::BindRepeating(&CastAudioOutputStreamTest::GetCmaBackendFactory,
base::Unretained(this)), base::Unretained(this)),
scoped_task_environment_.GetMainThreadTaskRunner(),
media_thread_.task_runner(), false); media_thread_.task_runner(), false);
audio_manager_->SetBrowserConnectorForTesting(connector_.get());
EXPECT_EQ(backend_factory_.get(), audio_manager_->backend_factory()); EXPECT_EQ(backend_factory_.get(), audio_manager_->backend_factory());
} }
...@@ -272,17 +242,6 @@ class CastAudioOutputStreamTest : public ::testing::Test { ...@@ -272,17 +242,6 @@ class CastAudioOutputStreamTest : public ::testing::Test {
::media::AudioManager::LogCallback()); ::media::AudioManager::LogCallback());
} }
bool OpenStream(::media::AudioOutputStream* stream) {
bool success = stream->Open();
// TODO(awolter) Determine a better way to ensure that all the tasks are
// flushed.
media_thread_.FlushForTesting();
scoped_task_environment_.RunUntilIdle();
media_thread_.FlushForTesting();
media_thread_.FlushForTesting();
return success;
}
// Runs the messsage loop for duration equivalent to the given number of // Runs the messsage loop for duration equivalent to the given number of
// audio |frames|. // audio |frames|.
void RunMessageLoopFor(int frames) { void RunMessageLoopFor(int frames) {
...@@ -306,8 +265,6 @@ class CastAudioOutputStreamTest : public ::testing::Test { ...@@ -306,8 +265,6 @@ class CastAudioOutputStreamTest : public ::testing::Test {
::media::ChannelLayout channel_layout_; ::media::ChannelLayout channel_layout_;
int sample_rate_; int sample_rate_;
int frames_per_buffer_; int frames_per_buffer_;
std::unique_ptr<service_manager::Connector> connector_;
MockMultiroomManager multiroom_manager_;
}; };
TEST_F(CastAudioOutputStreamTest, Format) { TEST_F(CastAudioOutputStreamTest, Format) {
...@@ -318,7 +275,7 @@ TEST_F(CastAudioOutputStreamTest, Format) { ...@@ -318,7 +275,7 @@ TEST_F(CastAudioOutputStreamTest, Format) {
format_ = format[i]; format_ = format[i];
::media::AudioOutputStream* stream = CreateStream(); ::media::AudioOutputStream* stream = CreateStream();
ASSERT_TRUE(stream); ASSERT_TRUE(stream);
EXPECT_TRUE(OpenStream(stream)); EXPECT_TRUE(stream->Open());
FakeAudioDecoder* audio_decoder = GetAudio(); FakeAudioDecoder* audio_decoder = GetAudio();
ASSERT_TRUE(audio_decoder); ASSERT_TRUE(audio_decoder);
...@@ -338,7 +295,7 @@ TEST_F(CastAudioOutputStreamTest, ChannelLayout) { ...@@ -338,7 +295,7 @@ TEST_F(CastAudioOutputStreamTest, ChannelLayout) {
channel_layout_ = layout[i]; channel_layout_ = layout[i];
::media::AudioOutputStream* stream = CreateStream(); ::media::AudioOutputStream* stream = CreateStream();
ASSERT_TRUE(stream); ASSERT_TRUE(stream);
EXPECT_TRUE(OpenStream(stream)); EXPECT_TRUE(stream->Open());
FakeAudioDecoder* audio_decoder = GetAudio(); FakeAudioDecoder* audio_decoder = GetAudio();
ASSERT_TRUE(audio_decoder); ASSERT_TRUE(audio_decoder);
...@@ -354,7 +311,7 @@ TEST_F(CastAudioOutputStreamTest, SampleRate) { ...@@ -354,7 +311,7 @@ TEST_F(CastAudioOutputStreamTest, SampleRate) {
sample_rate_ = ::media::AudioParameters::kAudioCDSampleRate; sample_rate_ = ::media::AudioParameters::kAudioCDSampleRate;
::media::AudioOutputStream* stream = CreateStream(); ::media::AudioOutputStream* stream = CreateStream();
ASSERT_TRUE(stream); ASSERT_TRUE(stream);
EXPECT_TRUE(OpenStream(stream)); EXPECT_TRUE(stream->Open());
FakeAudioDecoder* audio_decoder = GetAudio(); FakeAudioDecoder* audio_decoder = GetAudio();
ASSERT_TRUE(audio_decoder); ASSERT_TRUE(audio_decoder);
...@@ -368,7 +325,7 @@ TEST_F(CastAudioOutputStreamTest, DeviceState) { ...@@ -368,7 +325,7 @@ TEST_F(CastAudioOutputStreamTest, DeviceState) {
::media::AudioOutputStream* stream = CreateStream(); ::media::AudioOutputStream* stream = CreateStream();
ASSERT_TRUE(stream); ASSERT_TRUE(stream);
EXPECT_TRUE(OpenStream(stream)); EXPECT_TRUE(stream->Open());
FakeAudioDecoder* audio_decoder = GetAudio(); FakeAudioDecoder* audio_decoder = GetAudio();
ASSERT_TRUE(audio_decoder); ASSERT_TRUE(audio_decoder);
FakeCmaBackend* backend = GetBackend(); FakeCmaBackend* backend = GetBackend();
...@@ -392,7 +349,7 @@ TEST_F(CastAudioOutputStreamTest, DeviceState) { ...@@ -392,7 +349,7 @@ TEST_F(CastAudioOutputStreamTest, DeviceState) {
TEST_F(CastAudioOutputStreamTest, PushFrame) { TEST_F(CastAudioOutputStreamTest, PushFrame) {
::media::AudioOutputStream* stream = CreateStream(); ::media::AudioOutputStream* stream = CreateStream();
ASSERT_TRUE(stream); ASSERT_TRUE(stream);
EXPECT_TRUE(OpenStream(stream)); EXPECT_TRUE(stream->Open());
FakeAudioDecoder* audio_decoder = GetAudio(); FakeAudioDecoder* audio_decoder = GetAudio();
ASSERT_TRUE(audio_decoder); ASSERT_TRUE(audio_decoder);
...@@ -429,7 +386,7 @@ TEST_F(CastAudioOutputStreamTest, PushFrame) { ...@@ -429,7 +386,7 @@ TEST_F(CastAudioOutputStreamTest, PushFrame) {
TEST_F(CastAudioOutputStreamTest, DeviceBusy) { TEST_F(CastAudioOutputStreamTest, DeviceBusy) {
::media::AudioOutputStream* stream = CreateStream(); ::media::AudioOutputStream* stream = CreateStream();
ASSERT_TRUE(stream); ASSERT_TRUE(stream);
EXPECT_TRUE(OpenStream(stream)); EXPECT_TRUE(stream->Open());
FakeAudioDecoder* audio_decoder = GetAudio(); FakeAudioDecoder* audio_decoder = GetAudio();
ASSERT_TRUE(audio_decoder); ASSERT_TRUE(audio_decoder);
...@@ -462,7 +419,7 @@ TEST_F(CastAudioOutputStreamTest, DeviceBusy) { ...@@ -462,7 +419,7 @@ TEST_F(CastAudioOutputStreamTest, DeviceBusy) {
TEST_F(CastAudioOutputStreamTest, DeviceError) { TEST_F(CastAudioOutputStreamTest, DeviceError) {
::media::AudioOutputStream* stream = CreateStream(); ::media::AudioOutputStream* stream = CreateStream();
ASSERT_TRUE(stream); ASSERT_TRUE(stream);
EXPECT_TRUE(OpenStream(stream)); EXPECT_TRUE(stream->Open());
FakeAudioDecoder* audio_decoder = GetAudio(); FakeAudioDecoder* audio_decoder = GetAudio();
ASSERT_TRUE(audio_decoder); ASSERT_TRUE(audio_decoder);
...@@ -485,7 +442,7 @@ TEST_F(CastAudioOutputStreamTest, DeviceError) { ...@@ -485,7 +442,7 @@ TEST_F(CastAudioOutputStreamTest, DeviceError) {
TEST_F(CastAudioOutputStreamTest, DeviceAsyncError) { TEST_F(CastAudioOutputStreamTest, DeviceAsyncError) {
::media::AudioOutputStream* stream = CreateStream(); ::media::AudioOutputStream* stream = CreateStream();
ASSERT_TRUE(stream); ASSERT_TRUE(stream);
EXPECT_TRUE(OpenStream(stream)); EXPECT_TRUE(stream->Open());
FakeAudioDecoder* audio_decoder = GetAudio(); FakeAudioDecoder* audio_decoder = GetAudio();
ASSERT_TRUE(audio_decoder); ASSERT_TRUE(audio_decoder);
...@@ -496,7 +453,7 @@ TEST_F(CastAudioOutputStreamTest, DeviceAsyncError) { ...@@ -496,7 +453,7 @@ TEST_F(CastAudioOutputStreamTest, DeviceAsyncError) {
EXPECT_CALL(source_callback, OnMoreData(_, _, _, _)) EXPECT_CALL(source_callback, OnMoreData(_, _, _, _))
.WillRepeatedly(Invoke(OnMoreData)); .WillRepeatedly(Invoke(OnMoreData));
// AudioOutputStream must report error to source callback. // AudioOutputStream must report error to source callback.
EXPECT_CALL(source_callback, OnError()).Times(testing::AtLeast(1)); EXPECT_CALL(source_callback, OnError());
stream->Start(&source_callback); stream->Start(&source_callback);
RunMessageLoopFor(5); RunMessageLoopFor(5);
...@@ -510,7 +467,7 @@ TEST_F(CastAudioOutputStreamTest, DeviceAsyncError) { ...@@ -510,7 +467,7 @@ TEST_F(CastAudioOutputStreamTest, DeviceAsyncError) {
TEST_F(CastAudioOutputStreamTest, Volume) { TEST_F(CastAudioOutputStreamTest, Volume) {
::media::AudioOutputStream* stream = CreateStream(); ::media::AudioOutputStream* stream = CreateStream();
ASSERT_TRUE(stream); ASSERT_TRUE(stream);
ASSERT_TRUE(OpenStream(stream)); ASSERT_TRUE(stream->Open());
FakeAudioDecoder* audio_decoder = GetAudio(); FakeAudioDecoder* audio_decoder = GetAudio();
ASSERT_TRUE(audio_decoder); ASSERT_TRUE(audio_decoder);
...@@ -531,7 +488,7 @@ TEST_F(CastAudioOutputStreamTest, Volume) { ...@@ -531,7 +488,7 @@ TEST_F(CastAudioOutputStreamTest, Volume) {
TEST_F(CastAudioOutputStreamTest, StartStopStart) { TEST_F(CastAudioOutputStreamTest, StartStopStart) {
::media::AudioOutputStream* stream = CreateStream(); ::media::AudioOutputStream* stream = CreateStream();
ASSERT_TRUE(stream); ASSERT_TRUE(stream);
ASSERT_TRUE(OpenStream(stream)); ASSERT_TRUE(stream->Open());
::media::MockAudioSourceCallback source_callback; ::media::MockAudioSourceCallback source_callback;
EXPECT_CALL(source_callback, OnMoreData(_, _, _, _)) EXPECT_CALL(source_callback, OnMoreData(_, _, _, _))
...@@ -553,14 +510,14 @@ TEST_F(CastAudioOutputStreamTest, StartStopStart) { ...@@ -553,14 +510,14 @@ TEST_F(CastAudioOutputStreamTest, StartStopStart) {
TEST_F(CastAudioOutputStreamTest, CloseWithoutStart) { TEST_F(CastAudioOutputStreamTest, CloseWithoutStart) {
::media::AudioOutputStream* stream = CreateStream(); ::media::AudioOutputStream* stream = CreateStream();
ASSERT_TRUE(stream); ASSERT_TRUE(stream);
ASSERT_TRUE(OpenStream(stream)); ASSERT_TRUE(stream->Open());
stream->Close(); stream->Close();
} }
TEST_F(CastAudioOutputStreamTest, AudioDelay) { TEST_F(CastAudioOutputStreamTest, AudioDelay) {
::media::AudioOutputStream* stream = CreateStream(); ::media::AudioOutputStream* stream = CreateStream();
ASSERT_TRUE(stream); ASSERT_TRUE(stream);
ASSERT_TRUE(OpenStream(stream)); ASSERT_TRUE(stream->Open());
FakeAudioDecoder* audio_decoder = GetAudio(); FakeAudioDecoder* audio_decoder = GetAudio();
ASSERT_TRUE(audio_decoder); ASSERT_TRUE(audio_decoder);
......
...@@ -29,12 +29,10 @@ cast_source_set("test_support") { ...@@ -29,12 +29,10 @@ cast_source_set("test_support") {
"test/mock_frame_consumer.h", "test/mock_frame_consumer.h",
"test/mock_frame_provider.cc", "test/mock_frame_provider.cc",
"test/mock_frame_provider.h", "test/mock_frame_provider.h",
"test/mock_multiroom_manager.h",
] ]
deps = [ deps = [
"//base", "//base",
"//chromecast/common/mojom",
"//chromecast/media/cma/backend", "//chromecast/media/cma/backend",
"//chromecast/media/cma/backend:null_video", "//chromecast/media/cma/backend:null_video",
"//chromecast/media/cma/base", "//chromecast/media/cma/base",
......
include_rules = [ include_rules = [
"+chromecast/common/mojom",
"+media/filters", "+media/filters",
"+media/video", "+media/video",
] ]
// Copyright 2018 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.
#ifndef CHROMECAST_MEDIA_CMA_TEST_MOCK_MULTIROOM_MANAGER_H_
#define CHROMECAST_MEDIA_CMA_TEST_MOCK_MULTIROOM_MANAGER_H_
#include <string>
#include <utility>
#include "base/bind.h"
#include "chromecast/common/mojom/multiroom.mojom.h"
#include "mojo/public/cpp/bindings/binding.h"
namespace chromecast {
namespace media {
class MockMultiroomManager : public mojom::MultiroomManager {
public:
MockMultiroomManager();
~MockMultiroomManager() override;
void Bind(mojo::ScopedMessagePipeHandle handle) {
binding_.Close();
binding_.Bind(mojom::MultiroomManagerRequest(std::move(handle)));
}
void GetMultiroomInfo(const std::string& session_id,
GetMultiroomInfoCallback callback) override;
private:
mojo::Binding<mojom::MultiroomManager> binding_;
};
inline MockMultiroomManager::MockMultiroomManager() : binding_(this) {}
inline MockMultiroomManager::~MockMultiroomManager() = default;
inline void MockMultiroomManager::GetMultiroomInfo(
const std::string& session_id,
GetMultiroomInfoCallback callback) {
std::move(callback).Run(chromecast::mojom::MultiroomInfo::New());
}
} // namespace media
} // namespace chromecast
#endif // CHROMECAST_MEDIA_CMA_TEST_MOCK_MULTIROOM_MANAGER_H_
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
#include "base/test/test_suite.h" #include "base/test/test_suite.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "media/base/media.h" #include "media/base/media.h"
#include "mojo/core/embedder/embedder.h"
class CastMediaTestSuite : public base::TestSuite { class CastMediaTestSuite : public base::TestSuite {
public: public:
...@@ -30,7 +29,6 @@ void CastMediaTestSuite::Initialize() { ...@@ -30,7 +29,6 @@ void CastMediaTestSuite::Initialize() {
int main(int argc, char** argv) { int main(int argc, char** argv) {
CastMediaTestSuite test_suite(argc, argv); CastMediaTestSuite test_suite(argc, argv);
mojo::core::Init();
return base::LaunchUnitTests( return base::LaunchUnitTests(
argc, argv, argc, argv,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment