From 65590011ef779b4bdaf64c87a358f809a19c1367 Mon Sep 17 00:00:00 2001 From: dalecurtis Date: Mon, 5 Jan 2015 18:02:56 -0800 Subject: Enable PipelineIntegrationTests in mojo! This hooks up our pipeline integration tests into mojo and removes the existing primitive pipeline test. There's a bit of nastiness with mojo not setting up the media library or command line, probably something we'll want in its own module later. The following tests had to be disabled because the actual rendering happens in a separate process and required information is unavailable: - Any tests which perform hash checks. - Any tests which exercise EME. - Any tests which look at the video frame formats. There also seems to be a couple intermittent crashes which need to be debugged in follow up investigations: - Sometimes all tests complete successfully but a "Segmentation fault (core dumped)" shows after printing the summary. No core is actually written and it won't happen under gdb thus far :-/ - Once the WriteDataRaw() call in MojoDemuxerStreamImpl() failed with MOJO_RESULT_FAILED_PRECONDITION for reasons unknown. BUG=440850 TEST=all enabled tests pass! Review URL: https://codereview.chromium.org/806443002 Cr-Commit-Position: refs/heads/master@{#310036} --- media/mojo/services/BUILD.gn | 22 +--- media/mojo/services/media_renderer_apptest.cc | 162 -------------------------- 2 files changed, 5 insertions(+), 179 deletions(-) delete mode 100644 media/mojo/services/media_renderer_apptest.cc (limited to 'media/mojo/services') diff --git a/media/mojo/services/BUILD.gn b/media/mojo/services/BUILD.gn index c014a00..6096a07 100644 --- a/media/mojo/services/BUILD.gn +++ b/media/mojo/services/BUILD.gn @@ -163,28 +163,16 @@ if (!is_component_build) { ] } - # Not a 'test' because this is loaded via mojo_shell as an app. - # To run the test: + # Note, this 'test' must be loaded via mojo_shell as an app: + # # out/Debug/mojo_shell mojo:media_test - # You can get "mojo_shell" using mojo/public/tools/download_shell_binary.py + # + # To get "mojo_shell" you must specify "use_prebuilt_mojo_shell=true" in GN. mojo_native_application("media_test") { testonly = true - sources = [ - "media_renderer_apptest.cc", - ] deps = [ - ":media", - ":renderer_proxy", - "//base", - "//media", - "//media/mojo/interfaces", - "//media:shared_memory_support", - "//mojo/application", - "//mojo/application:test_support", - "//mojo/common", - "//mojo/environment:chromium", - "//mojo/public/c/system:for_shared_library", + "//media/test:mojo_pipeline_integration_tests", ] } } diff --git a/media/mojo/services/media_renderer_apptest.cc b/media/mojo/services/media_renderer_apptest.cc deleted file mode 100644 index 99d60ec..0000000 --- a/media/mojo/services/media_renderer_apptest.cc +++ /dev/null @@ -1,162 +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 "base/bind.h" -#include "base/message_loop/message_loop.h" -#include "base/run_loop.h" -#include "media/base/audio_decoder_config.h" -#include "media/base/channel_layout.h" -#include "media/base/demuxer_stream_provider.h" -#include "media/base/sample_format.h" -#include "media/base/video_decoder_config.h" -#include "media/mojo/services/mojo_renderer_impl.h" -#include "mojo/public/cpp/application/application_delegate.h" -#include "mojo/public/cpp/application/application_impl.h" -#include "mojo/public/cpp/application/application_test_base.h" -#include "mojo/public/cpp/application/connect.h" - -namespace { - -// This class is here to give the gtest class access to the -// mojo::ApplicationImpl so that the tests can connect to other applications. -class MojoRendererTestHelper : public mojo::ApplicationDelegate { - public: - MojoRendererTestHelper() : application_impl_(NULL) {} - ~MojoRendererTestHelper() override {} - - // ApplicationDelegate implementation. - void Initialize(mojo::ApplicationImpl* app) override { - application_impl_ = app; - } - - mojo::ApplicationImpl* application_impl() { return application_impl_; } - - private: - mojo::ApplicationImpl* application_impl_; - - DISALLOW_COPY_AND_ASSIGN(MojoRendererTestHelper); -}; - -// TODO(tim): Make media::FakeDemuxerStream support audio and use that for the -// DemuxerStream implementation instead. -class FakeDemuxerStream : public media::DemuxerStreamProvider, - public media::DemuxerStream { - public: - FakeDemuxerStream() {} - ~FakeDemuxerStream() override {} - - // media::Demuxer implementation. - media::DemuxerStream* GetStream(media::DemuxerStream::Type type) override { - if (type == media::DemuxerStream::AUDIO) - return this; - return nullptr; - } - - // media::DemuxerStream implementation. - void Read(const ReadCB& read_cb) override {} - - media::AudioDecoderConfig audio_decoder_config() override { - media::AudioDecoderConfig config; - config.Initialize(media::kCodecAAC, - media::kSampleFormatU8, - media::CHANNEL_LAYOUT_SURROUND, - 48000, - NULL, - 0, - false, - false, - base::TimeDelta(), - 0); - return config; - } - - media::VideoDecoderConfig video_decoder_config() override { - NOTREACHED(); - return media::VideoDecoderConfig(); - } - - media::DemuxerStream::Type type() const override { - return media::DemuxerStream::AUDIO; - } - - void EnableBitstreamConverter() override {} - - bool SupportsConfigChanges() override { return true; } - - media::VideoRotation video_rotation() override { - NOTREACHED(); - return media::VIDEO_ROTATION_0; - } - - private: - DISALLOW_COPY_AND_ASSIGN(FakeDemuxerStream); -}; - -} // namespace - -namespace media { - -class MojoRendererTest : public mojo::test::ApplicationTestBase { - public: - MojoRendererTest() : service_provider_(NULL) {} - ~MojoRendererTest() override {} - - protected: - // ApplicationTestBase implementation. - mojo::ApplicationDelegate* GetApplicationDelegate() override { - return &mojo_renderer_test_helper_; - } - - void SetUp() override { - ApplicationTestBase::SetUp(); - demuxer_stream_provider_.reset(new FakeDemuxerStream()); - service_provider_ = - application_impl() - ->ConnectToApplication("mojo:media") - ->GetServiceProvider(); - } - - mojo::MediaRendererPtr CreateMediaRenderer() { - mojo::MediaRendererPtr mojo_media_renderer; - mojo::ConnectToService(service_provider_, - &mojo_media_renderer); - return mojo_media_renderer.Pass(); - } - - DemuxerStreamProvider* stream_provider() { - return demuxer_stream_provider_.get(); - } - scoped_refptr task_runner() { - return base::MessageLoop::current()->task_runner(); - } - - private: - MojoRendererTestHelper mojo_renderer_test_helper_; - scoped_ptr demuxer_stream_provider_; - mojo::ServiceProvider* service_provider_; - - DISALLOW_COPY_AND_ASSIGN(MojoRendererTest); -}; - -void ErrorCallback(PipelineStatus* output, PipelineStatus status) { - *output = status; -} - -// Tests that a MojoRendererImpl can successfully establish communication -// with a MojoRendererService and set up a MojoDemuxerStream -// connection. The test also initializes a media::AudioRendererImpl which -// will error-out expectedly due to lack of support for decoder selection. -TEST_F(MojoRendererTest, BasicInitialize) { - MojoRendererImpl mojo_renderer_impl(task_runner(), CreateMediaRenderer()); - PipelineStatus expected_error(PIPELINE_OK); - mojo_renderer_impl.Initialize( - stream_provider(), base::MessageLoop::current()->QuitClosure(), - media::StatisticsCB(), media::BufferingStateCB(), - media::Renderer::PaintCB(), base::Closure(), - base::Bind(&ErrorCallback, &expected_error)); - base::MessageLoop::current()->Run(); - EXPECT_EQ(PIPELINE_OK, expected_error); -} - -} // namespace media -- cgit v1.1