| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 "chrome/common/render_messages.h" | 5 #include "chrome/common/render_messages.h" |
| 6 #include "chrome/renderer/media/audio_renderer_impl.h" | 6 #include "chrome/renderer/media/audio_renderer_impl.h" |
| 7 #include "media/base/data_buffer.h" | 7 #include "media/base/data_buffer.h" |
| 8 #include "media/base/media_format.h" |
| 8 #include "media/base/mock_filter_host.h" | 9 #include "media/base/mock_filter_host.h" |
| 9 #include "media/base/mock_filters.h" | 10 #include "media/base/mock_filters.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
| 11 | 12 |
| 13 using ::testing::ReturnRef; |
| 14 |
| 12 class AudioRendererImplTest : public ::testing::Test { | 15 class AudioRendererImplTest : public ::testing::Test { |
| 13 public: | 16 public: |
| 14 static const int kRouteId = 0; | 17 static const int kRouteId = 0; |
| 15 static const int kSize = 1024; | 18 static const int kSize = 1024; |
| 16 | 19 |
| 17 AudioRendererImplTest() { | 20 AudioRendererImplTest() { |
| 18 message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO)); | 21 message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO)); |
| 19 | 22 |
| 20 // TODO(scherkus): use gmock with AudioMessageFilter to verify | 23 // TODO(scherkus): use gmock with AudioMessageFilter to verify |
| 21 // AudioRendererImpl calls or doesn't call Send(). | 24 // AudioRendererImpl calls or doesn't call Send(). |
| 22 filter_ = new AudioMessageFilter(kRouteId); | 25 filter_ = new AudioMessageFilter(kRouteId); |
| 23 filter_->message_loop_ = message_loop_.get(); | 26 filter_->message_loop_ = message_loop_.get(); |
| 24 | 27 |
| 25 // Create temporary shared memory. | 28 // Create temporary shared memory. |
| 26 CHECK(shared_mem_.Create(L"", false, false, kSize)); | 29 CHECK(shared_mem_.Create(L"", false, false, kSize)); |
| 27 | 30 |
| 28 // Setup expectations for initialization. | 31 // Setup expectations for initialization. |
| 29 EXPECT_CALL(callback_, OnFilterCallback()); | 32 EXPECT_CALL(callback_, OnFilterCallback()); |
| 30 EXPECT_CALL(callback_, OnCallbackDestroyed()); | 33 EXPECT_CALL(callback_, OnCallbackDestroyed()); |
| 31 decoder_ = new media::MockAudioDecoder(2, 48000, 16); | 34 decoder_ = new media::MockAudioDecoder(); |
| 35 |
| 36 // Associate media format with decoder |
| 37 decoder_media_format_.SetAsString(media::MediaFormat::kMimeType, |
| 38 media::mime_type::kUncompressedAudio); |
| 39 decoder_media_format_.SetAsInteger(media::MediaFormat::kChannels, 2); |
| 40 decoder_media_format_.SetAsInteger(media::MediaFormat::kSampleRate, 48000); |
| 41 decoder_media_format_.SetAsInteger(media::MediaFormat::kSampleBits, 16); |
| 42 EXPECT_CALL(*decoder_, media_format()) |
| 43 .WillRepeatedly(ReturnRef(decoder_media_format_)); |
| 32 | 44 |
| 33 // Create and initialize audio renderer. | 45 // Create and initialize audio renderer. |
| 34 renderer_ = new AudioRendererImpl(filter_); | 46 renderer_ = new AudioRendererImpl(filter_); |
| 35 renderer_->set_host(&host_); | 47 renderer_->set_host(&host_); |
| 36 renderer_->set_message_loop(message_loop_.get()); | 48 renderer_->set_message_loop(message_loop_.get()); |
| 37 renderer_->Initialize(decoder_, callback_.NewCallback()); | 49 renderer_->Initialize(decoder_, callback_.NewCallback()); |
| 38 | 50 |
| 39 // Run pending tasks and simulate responding with a created audio stream. | 51 // Run pending tasks and simulate responding with a created audio stream. |
| 40 message_loop_->RunAllPending(); | 52 message_loop_->RunAllPending(); |
| 41 renderer_->OnCreated(shared_mem_.handle(), kSize); | 53 renderer_->OnCreated(shared_mem_.handle(), kSize); |
| 42 } | 54 } |
| 43 | 55 |
| 44 virtual ~AudioRendererImplTest() { | 56 virtual ~AudioRendererImplTest() { |
| 45 } | 57 } |
| 46 | 58 |
| 47 protected: | 59 protected: |
| 48 // Fixtures. | 60 // Fixtures. |
| 49 scoped_ptr<MessageLoop> message_loop_; | 61 scoped_ptr<MessageLoop> message_loop_; |
| 50 scoped_refptr<AudioMessageFilter> filter_; | 62 scoped_refptr<AudioMessageFilter> filter_; |
| 51 base::SharedMemory shared_mem_; | 63 base::SharedMemory shared_mem_; |
| 52 media::MockFilterHost host_; | 64 media::MockFilterHost host_; |
| 53 media::MockFilterCallback callback_; | 65 media::MockFilterCallback callback_; |
| 54 scoped_refptr<media::MockAudioDecoder> decoder_; | 66 scoped_refptr<media::MockAudioDecoder> decoder_; |
| 55 scoped_refptr<AudioRendererImpl> renderer_; | 67 scoped_refptr<AudioRendererImpl> renderer_; |
| 68 media::MediaFormat decoder_media_format_; |
| 56 | 69 |
| 57 private: | 70 private: |
| 58 DISALLOW_COPY_AND_ASSIGN(AudioRendererImplTest); | 71 DISALLOW_COPY_AND_ASSIGN(AudioRendererImplTest); |
| 59 }; | 72 }; |
| 60 | 73 |
| 61 TEST_F(AudioRendererImplTest, SetPlaybackRate) { | 74 TEST_F(AudioRendererImplTest, SetPlaybackRate) { |
| 62 // Execute SetPlaybackRate() codepath to create an IPC message. | 75 // Execute SetPlaybackRate() codepath to create an IPC message. |
| 63 | 76 |
| 64 // Toggle play/pause to generate some IPC messages. | 77 // Toggle play/pause to generate some IPC messages. |
| 65 renderer_->SetPlaybackRate(0.0f); | 78 renderer_->SetPlaybackRate(0.0f); |
| 66 renderer_->SetPlaybackRate(1.0f); | 79 renderer_->SetPlaybackRate(1.0f); |
| 67 renderer_->SetPlaybackRate(0.0f); | 80 renderer_->SetPlaybackRate(0.0f); |
| 68 | 81 |
| 82 renderer_->Stop(); |
| 69 message_loop_->RunAllPending(); | 83 message_loop_->RunAllPending(); |
| 70 renderer_->Stop(); | |
| 71 } | 84 } |
| 72 | 85 |
| 73 TEST_F(AudioRendererImplTest, SetVolume) { | 86 TEST_F(AudioRendererImplTest, SetVolume) { |
| 74 // Execute SetVolume() codepath to create an IPC message. | 87 // Execute SetVolume() codepath to create an IPC message. |
| 75 renderer_->SetVolume(0.5f); | 88 renderer_->SetVolume(0.5f); |
| 89 renderer_->Stop(); |
| 76 message_loop_->RunAllPending(); | 90 message_loop_->RunAllPending(); |
| 77 renderer_->Stop(); | |
| 78 } | 91 } |
| 79 | 92 |
| 80 TEST_F(AudioRendererImplTest, Stop) { | 93 TEST_F(AudioRendererImplTest, Stop) { |
| 81 // Declare some state messages. | 94 // Declare some state messages. |
| 82 const ViewMsg_AudioStreamState kError = | 95 const ViewMsg_AudioStreamState kError = |
| 83 { ViewMsg_AudioStreamState::kError }; | 96 { ViewMsg_AudioStreamState::kError }; |
| 84 const ViewMsg_AudioStreamState kPlaying = | 97 const ViewMsg_AudioStreamState kPlaying = |
| 85 { ViewMsg_AudioStreamState::kPlaying }; | 98 { ViewMsg_AudioStreamState::kPlaying }; |
| 86 const ViewMsg_AudioStreamState kPaused = | 99 const ViewMsg_AudioStreamState kPaused = |
| 87 { ViewMsg_AudioStreamState::kPaused }; | 100 { ViewMsg_AudioStreamState::kPaused }; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 renderer_->Stop(); | 133 renderer_->Stop(); |
| 121 } | 134 } |
| 122 | 135 |
| 123 TEST_F(AudioRendererImplTest, DestroyedMessageLoop_OnReadComplete) { | 136 TEST_F(AudioRendererImplTest, DestroyedMessageLoop_OnReadComplete) { |
| 124 // Kill the message loop and verify OnReadComplete() still works. | 137 // Kill the message loop and verify OnReadComplete() still works. |
| 125 message_loop_.reset(); | 138 message_loop_.reset(); |
| 126 scoped_refptr<media::Buffer> buffer = new media::DataBuffer(kSize); | 139 scoped_refptr<media::Buffer> buffer = new media::DataBuffer(kSize); |
| 127 renderer_->OnReadComplete(buffer); | 140 renderer_->OnReadComplete(buffer); |
| 128 renderer_->Stop(); | 141 renderer_->Stop(); |
| 129 } | 142 } |
| OLD | NEW |