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

Side by Side Diff: content/browser/renderer_host/media/audio_stream_registry_impl_unittest.cc

Issue 2578983003: Add AudioStreamRegistry. Move stream counting logic (Closed)
Patch Set: . Created 3 years, 11 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/browser/renderer_host/media/audio_stream_registry_impl.h"
6
7 #include "base/run_loop.h"
8 #include "base/test/histogram_tester.h"
9 #include "content/public/test/mock_render_process_host.h"
10 #include "content/public/test/test_browser_context.h"
11 #include "content/public/test/test_browser_thread_bundle.h"
12 #include "testing/gmock/include/gmock/gmock.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 using testing::StrictMock;
16 using testing::ElementsAre;
17 using testing::Mock;
18
19 namespace content {
20
21 namespace {
22
23 const int kRenderProcessId = 0;
24
25 class MockRenderProcessHostHandler {
26 public:
27 MOCK_METHOD0(AudioStateChanged, void());
28 };
29 } // namespace
30
31 class AudioStreamRegistryImplTest : public testing::Test {
32 public:
33 AudioStreamRegistryImplTest() = default;
34 ~AudioStreamRegistryImplTest() override = default;
35
36 private:
37 TestBrowserThreadBundle thread_bundle_;
38 };
39
40 TEST_F(AudioStreamRegistryImplTest, RegisterUnregister) {
41 base::HistogramTester hist;
42 {
43 AudioStreamRegistryImpl registry(kRenderProcessId);
44
45 EXPECT_FALSE(registry.HasActiveAudio());
46 registry.RegisterStream();
47 EXPECT_FALSE(registry.HasActiveAudio());
48 registry.DeregisterStream();
49 EXPECT_FALSE(registry.HasActiveAudio());
50 }
51 EXPECT_THAT(hist.GetAllSamples("Media.AudioRendererIpcStreams"),
52 ElementsAre(base::Bucket(1, 1)));
53 EXPECT_THAT(hist.GetAllSamples("Media.AudioRendererIpcStreamsTotal"),
54 ElementsAre(base::Bucket(1, 1)));
55 }
56
57 TEST_F(AudioStreamRegistryImplTest, RegisterPlayUnregister) {
58 base::HistogramTester hist;
59 {
60 AudioStreamRegistryImpl registry(kRenderProcessId);
61
62 registry.RegisterStream();
63 registry.StreamStateChanged(true);
64 EXPECT_TRUE(registry.HasActiveAudio());
65 registry.StreamStateChanged(false);
66 EXPECT_FALSE(registry.HasActiveAudio());
67 registry.DeregisterStream();
68 EXPECT_FALSE(registry.HasActiveAudio());
69 }
70 EXPECT_THAT(hist.GetAllSamples("Media.AudioRendererIpcStreams"),
71 ElementsAre(base::Bucket(1, 1)));
72 EXPECT_THAT(hist.GetAllSamples("Media.AudioRendererIpcStreamsTotal"),
73 ElementsAre(base::Bucket(1, 1)));
74 }
75
76 TEST_F(AudioStreamRegistryImplTest, MultipleRegistriesSerial) {
77 base::HistogramTester hist;
78 {
79 AudioStreamRegistryImpl registry(kRenderProcessId);
80 AudioStreamRegistryImpl registry2(kRenderProcessId);
81
82 registry.RegisterStream();
83 registry.DeregisterStream();
84 registry2.RegisterStream();
85 registry2.RegisterStream();
86 registry2.DeregisterStream();
87 registry2.DeregisterStream();
88 }
89 EXPECT_THAT(hist.GetAllSamples("Media.AudioRendererIpcStreams"),
90 ElementsAre(base::Bucket(1, 1), base::Bucket(2, 1)));
91 EXPECT_THAT(hist.GetAllSamples("Media.AudioRendererIpcStreamsTotal"),
92 ElementsAre(base::Bucket(0, 1), base::Bucket(2, 1)));
93 }
94
95 TEST_F(AudioStreamRegistryImplTest, MultipleRegistriesConcurrent) {
96 base::HistogramTester hist;
97 {
98 AudioStreamRegistryImpl registry(kRenderProcessId);
99 AudioStreamRegistryImpl registry2(kRenderProcessId);
100
101 registry.RegisterStream();
102 registry2.RegisterStream();
103 registry2.RegisterStream();
104 registry.DeregisterStream();
105 registry2.DeregisterStream();
106 registry2.DeregisterStream();
107 }
108 EXPECT_THAT(hist.GetAllSamples("Media.AudioRendererIpcStreams"),
109 ElementsAre(base::Bucket(1, 1), base::Bucket(2, 1)));
110 EXPECT_THAT(hist.GetAllSamples("Media.AudioRendererIpcStreamsTotal"),
111 ElementsAre(base::Bucket(0, 1), base::Bucket(3, 1)));
112 }
113
114 TEST_F(AudioStreamRegistryImplTest, StateChangeNotifiesRenderProcessHost) {
115 base::HistogramTester hist;
116 {
117 TestBrowserContext context;
118 MockRenderProcessHost rph(&context);
119 StrictMock<MockRenderProcessHostHandler> mock;
120 rph.SetAudioStateChangedCallback(
121 base::Bind(&MockRenderProcessHostHandler::AudioStateChanged,
122 base::Unretained(&mock)));
123 AudioStreamRegistryImpl registry(rph.GetID());
124
125 registry.RegisterStream();
126 base::RunLoop().RunUntilIdle();
127
128 EXPECT_CALL(mock, AudioStateChanged());
129 registry.StreamStateChanged(true);
130 base::RunLoop().RunUntilIdle();
131 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock));
132 EXPECT_CALL(mock, AudioStateChanged());
133 registry.StreamStateChanged(false);
134 base::RunLoop().RunUntilIdle();
135 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock));
136 registry.DeregisterStream();
137 }
138 EXPECT_THAT(hist.GetAllSamples("Media.AudioRendererIpcStreams"),
139 ElementsAre(base::Bucket(1, 1)));
140 EXPECT_THAT(hist.GetAllSamples("Media.AudioRendererIpcStreamsTotal"),
141 ElementsAre(base::Bucket(1, 1)));
142 }
143
144 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698