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

Side by Side Diff: media/blink/webmediaplayer_impl_unittest.cc

Issue 1830913005: Convert WMPI state management to level-triggered. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use EXPECT_TRUE/EXPECT_FALSE. Created 4 years, 8 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
« no previous file with comments | « media/blink/webmediaplayer_impl.cc ('k') | media/filters/pipeline_controller.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 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 <stdint.h> 5 #include <stdint.h>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback_helpers.h" 8 #include "base/callback_helpers.h"
9 #include "base/memory/ref_counted.h" 9 #include "base/memory/ref_counted.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 // NOTE: This should be done before any other member variables are 118 // NOTE: This should be done before any other member variables are
119 // destructed since WMPI may reference them during destruction. 119 // destructed since WMPI may reference them during destruction.
120 wmpi_.reset(); 120 wmpi_.reset();
121 message_loop_.RunUntilIdle(); 121 message_loop_.RunUntilIdle();
122 122
123 web_view_->close(); 123 web_view_->close();
124 web_local_frame_->close(); 124 web_local_frame_->close();
125 } 125 }
126 126
127 protected: 127 protected:
128 void SetReadyState(blink::WebMediaPlayer::ReadyState state) {
129 wmpi_->SetReadyState(state);
130 }
131
132 void SetPaused(bool is_paused) { wmpi_->paused_ = is_paused; }
133
134 void SetEnded(bool is_ended) { wmpi_->ended_ = is_ended; }
135
136 void SetMetadata(bool has_audio, bool has_video) {
137 wmpi_->SetNetworkState(blink::WebMediaPlayer::NetworkStateLoaded);
138 wmpi_->SetReadyState(blink::WebMediaPlayer::ReadyStateHaveMetadata);
139 wmpi_->pipeline_metadata_.has_audio = has_audio;
140 wmpi_->pipeline_metadata_.has_video = has_video;
141 }
142
143 WebMediaPlayerImpl::PlayState ComputePlayState() {
144 wmpi_->is_idle_ = false;
145 wmpi_->must_suspend_ = false;
146 return wmpi_->UpdatePlayState_ComputePlayState(false, false);
147 }
148
149 WebMediaPlayerImpl::PlayState ComputeBackgroundedPlayState() {
150 wmpi_->is_idle_ = false;
151 wmpi_->must_suspend_ = false;
152 return wmpi_->UpdatePlayState_ComputePlayState(false, true);
153 }
154
155 WebMediaPlayerImpl::PlayState ComputeIdlePlayState() {
156 wmpi_->is_idle_ = true;
157 wmpi_->must_suspend_ = false;
158 return wmpi_->UpdatePlayState_ComputePlayState(false, false);
159 }
160
161 WebMediaPlayerImpl::PlayState ComputeMustSuspendPlayState() {
162 wmpi_->is_idle_ = false;
163 wmpi_->must_suspend_ = true;
164 return wmpi_->UpdatePlayState_ComputePlayState(false, false);
165 }
166
128 // "Renderer" thread. 167 // "Renderer" thread.
129 base::MessageLoop message_loop_; 168 base::MessageLoop message_loop_;
130 169
131 // "Media" thread. This is necessary because WMPI destruction waits on a 170 // "Media" thread. This is necessary because WMPI destruction waits on a
132 // WaitableEvent. 171 // WaitableEvent.
133 base::Thread media_thread_; 172 base::Thread media_thread_;
134 173
135 // Blink state. 174 // Blink state.
136 DummyWebFrameClient web_frame_client_; 175 DummyWebFrameClient web_frame_client_;
137 blink::WebView* web_view_; 176 blink::WebView* web_view_;
(...skipping 12 matching lines...) Expand all
150 189
151 // The WebMediaPlayerImpl instance under test. 190 // The WebMediaPlayerImpl instance under test.
152 scoped_ptr<WebMediaPlayerImpl> wmpi_; 191 scoped_ptr<WebMediaPlayerImpl> wmpi_;
153 192
154 private: 193 private:
155 DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImplTest); 194 DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImplTest);
156 }; 195 };
157 196
158 TEST_F(WebMediaPlayerImplTest, ConstructAndDestroy) {} 197 TEST_F(WebMediaPlayerImplTest, ConstructAndDestroy) {}
159 198
199 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterConstruction) {
200 WebMediaPlayerImpl::PlayState state;
201
202 state = ComputePlayState();
203 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
204 EXPECT_FALSE(state.is_memory_reporting_enabled);
205 EXPECT_FALSE(state.is_suspended);
206
207 state = ComputeBackgroundedPlayState();
208 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
209 EXPECT_FALSE(state.is_memory_reporting_enabled);
210 EXPECT_FALSE(state.is_suspended);
211
212 state = ComputeMustSuspendPlayState();
213 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
214 EXPECT_FALSE(state.is_memory_reporting_enabled);
215 EXPECT_TRUE(state.is_suspended);
216 }
217
218 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata) {
219 WebMediaPlayerImpl::PlayState state;
220 SetMetadata(true, true);
221
222 state = ComputePlayState();
223 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
224 EXPECT_FALSE(state.is_memory_reporting_enabled);
225 EXPECT_FALSE(state.is_suspended);
226
227 state = ComputeBackgroundedPlayState();
228 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
229 EXPECT_FALSE(state.is_memory_reporting_enabled);
230 EXPECT_TRUE(state.is_suspended);
231
232 state = ComputeMustSuspendPlayState();
233 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
234 EXPECT_FALSE(state.is_memory_reporting_enabled);
235 EXPECT_TRUE(state.is_suspended);
236 }
237
238 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata_AudioOnly) {
239 WebMediaPlayerImpl::PlayState state;
240 SetMetadata(true, false);
241
242 state = ComputePlayState();
243 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
244 EXPECT_FALSE(state.is_memory_reporting_enabled);
245 EXPECT_FALSE(state.is_suspended);
246
247 // Background suspend is not enabled for audio-only.
248 state = ComputeBackgroundedPlayState();
249 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
250 EXPECT_FALSE(state.is_memory_reporting_enabled);
251 EXPECT_FALSE(state.is_suspended);
252
253 state = ComputeMustSuspendPlayState();
254 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
255 EXPECT_FALSE(state.is_memory_reporting_enabled);
256 EXPECT_TRUE(state.is_suspended);
257 }
258
259 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterFutureData) {
260 WebMediaPlayerImpl::PlayState state;
261 SetMetadata(true, true);
262 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
263
264 state = ComputePlayState();
265 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
266 EXPECT_FALSE(state.is_memory_reporting_enabled);
267 EXPECT_FALSE(state.is_suspended);
268
269 state = ComputeBackgroundedPlayState();
270 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
271 EXPECT_FALSE(state.is_memory_reporting_enabled);
272 EXPECT_TRUE(state.is_suspended);
273
274 // Idle suspension is possible after HaveFutureData.
275 state = ComputeIdlePlayState();
276 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
277 EXPECT_FALSE(state.is_memory_reporting_enabled);
278 EXPECT_TRUE(state.is_suspended);
279
280 state = ComputeMustSuspendPlayState();
281 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
282 EXPECT_FALSE(state.is_memory_reporting_enabled);
283 EXPECT_TRUE(state.is_suspended);
284 }
285
286 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing) {
287 WebMediaPlayerImpl::PlayState state;
288 SetMetadata(true, true);
289 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
290 SetPaused(false);
291
292 state = ComputePlayState();
293 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
294 EXPECT_TRUE(state.is_memory_reporting_enabled);
295 EXPECT_FALSE(state.is_suspended);
296
297 state = ComputeBackgroundedPlayState();
298 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
299 EXPECT_FALSE(state.is_memory_reporting_enabled);
300 EXPECT_TRUE(state.is_suspended);
301
302 state = ComputeMustSuspendPlayState();
303 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
304 EXPECT_FALSE(state.is_memory_reporting_enabled);
305 EXPECT_TRUE(state.is_suspended);
306 }
307
308 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing_AudioOnly) {
309 WebMediaPlayerImpl::PlayState state;
310 SetMetadata(true, false);
311 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
312 SetPaused(false);
313
314 state = ComputePlayState();
315 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
316 EXPECT_TRUE(state.is_memory_reporting_enabled);
317 EXPECT_FALSE(state.is_suspended);
318
319 // Audio-only stays playing in the background.
320 state = ComputeBackgroundedPlayState();
321 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
322 EXPECT_TRUE(state.is_memory_reporting_enabled);
323 EXPECT_FALSE(state.is_suspended);
324
325 state = ComputeMustSuspendPlayState();
326 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
327 EXPECT_FALSE(state.is_memory_reporting_enabled);
328 EXPECT_TRUE(state.is_suspended);
329 }
330
331 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Ended) {
332 WebMediaPlayerImpl::PlayState state;
333 SetMetadata(true, true);
334 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
335 SetEnded(true);
336
337 // The pipeline is not suspended immediately on ended.
338 state = ComputePlayState();
339 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::ENDED, state.delegate_state);
340 EXPECT_FALSE(state.is_memory_reporting_enabled);
341 EXPECT_FALSE(state.is_suspended);
342
343 state = ComputeIdlePlayState();
344 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::ENDED, state.delegate_state);
345 EXPECT_FALSE(state.is_memory_reporting_enabled);
346 EXPECT_TRUE(state.is_suspended);
347 }
348
160 } // namespace media 349 } // namespace media
OLDNEW
« no previous file with comments | « media/blink/webmediaplayer_impl.cc ('k') | media/filters/pipeline_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698