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

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: 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 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 // NOTE: This should be done before any other member variables are 117 // NOTE: This should be done before any other member variables are
118 // destructed since WMPI may reference them during destruction. 118 // destructed since WMPI may reference them during destruction.
119 wmpi_.reset(); 119 wmpi_.reset();
120 message_loop_.RunUntilIdle(); 120 message_loop_.RunUntilIdle();
121 121
122 web_view_->close(); 122 web_view_->close();
123 web_local_frame_->close(); 123 web_local_frame_->close();
124 } 124 }
125 125
126 protected: 126 protected:
127 void SetReadyState(blink::WebMediaPlayer::ReadyState state) {
128 wmpi_->SetReadyState(state);
129 }
130
131 void SetPaused(bool is_paused) { wmpi_->paused_ = is_paused; }
132
133 void SetEnded(bool is_ended) { wmpi_->ended_ = is_ended; }
134
135 void SetMetadata(bool has_audio, bool has_video) {
136 wmpi_->SetNetworkState(blink::WebMediaPlayer::NetworkStateLoaded);
137 wmpi_->SetReadyState(blink::WebMediaPlayer::ReadyStateHaveMetadata);
138 wmpi_->pipeline_metadata_.has_audio = has_audio;
139 wmpi_->pipeline_metadata_.has_video = has_video;
140 }
141
142 WebMediaPlayerImpl::PlayState ComputePlayState() {
143 wmpi_->is_idle_ = false;
144 wmpi_->must_suspend_ = false;
145 return wmpi_->UpdatePlayState_ComputePlayState(false, false);
146 }
147
148 WebMediaPlayerImpl::PlayState ComputeBackgroundedPlayState() {
149 wmpi_->is_idle_ = false;
150 wmpi_->must_suspend_ = false;
151 return wmpi_->UpdatePlayState_ComputePlayState(false, true);
152 }
153
154 WebMediaPlayerImpl::PlayState ComputeIdlePlayState() {
155 wmpi_->is_idle_ = true;
156 wmpi_->must_suspend_ = false;
157 return wmpi_->UpdatePlayState_ComputePlayState(false, false);
158 }
159
160 WebMediaPlayerImpl::PlayState ComputeMustSuspendPlayState() {
161 wmpi_->is_idle_ = false;
162 wmpi_->must_suspend_ = true;
163 return wmpi_->UpdatePlayState_ComputePlayState(false, false);
164 }
165
127 // "Renderer" thread. 166 // "Renderer" thread.
128 base::MessageLoop message_loop_; 167 base::MessageLoop message_loop_;
129 168
130 // "Media" thread. This is necessary because WMPI destruction waits on a 169 // "Media" thread. This is necessary because WMPI destruction waits on a
131 // WaitableEvent. 170 // WaitableEvent.
132 base::Thread media_thread_; 171 base::Thread media_thread_;
133 172
134 // Blink state. 173 // Blink state.
135 DummyWebFrameClient web_frame_client_; 174 DummyWebFrameClient web_frame_client_;
136 blink::WebView* web_view_; 175 blink::WebView* web_view_;
(...skipping 12 matching lines...) Expand all
149 188
150 // The WebMediaPlayerImpl instance under test. 189 // The WebMediaPlayerImpl instance under test.
151 scoped_ptr<WebMediaPlayerImpl> wmpi_; 190 scoped_ptr<WebMediaPlayerImpl> wmpi_;
152 191
153 private: 192 private:
154 DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImplTest); 193 DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImplTest);
155 }; 194 };
156 195
157 TEST_F(WebMediaPlayerImplTest, ConstructAndDestroy) {} 196 TEST_F(WebMediaPlayerImplTest, ConstructAndDestroy) {}
158 197
198 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterConstruction) {
199 WebMediaPlayerImpl::PlayState state;
200
201 state = ComputePlayState();
202 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
watk 2016/04/02 00:12:53 All these WebMediaPlayerImpls only add noise. I wo
sandersd (OOO until July 31) 2016/04/04 19:47:37 Ack. I think I'll hold off for now, hopefully the
203 EXPECT_EQ(false, state.is_memory_reporting_enabled);
204 EXPECT_EQ(false, state.is_suspended);
205
206 state = ComputeBackgroundedPlayState();
207 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
208 EXPECT_EQ(false, state.is_memory_reporting_enabled);
209 EXPECT_EQ(false, state.is_suspended);
210
211 state = ComputeMustSuspendPlayState();
212 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
213 EXPECT_EQ(false, state.is_memory_reporting_enabled);
214 EXPECT_EQ(true, state.is_suspended);
215 }
216
217 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata) {
218 WebMediaPlayerImpl::PlayState state;
219 SetMetadata(true, true);
220
221 state = ComputePlayState();
222 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
223 EXPECT_EQ(false, state.is_memory_reporting_enabled);
224 EXPECT_EQ(false, state.is_suspended);
225
226 state = ComputeBackgroundedPlayState();
227 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
228 EXPECT_EQ(false, state.is_memory_reporting_enabled);
229 EXPECT_EQ(true, state.is_suspended);
230
231 state = ComputeMustSuspendPlayState();
232 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
233 EXPECT_EQ(false, state.is_memory_reporting_enabled);
234 EXPECT_EQ(true, state.is_suspended);
235 }
236
237 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata_AudioOnly) {
238 WebMediaPlayerImpl::PlayState state;
239 SetMetadata(true, false);
240
241 state = ComputePlayState();
242 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
243 EXPECT_EQ(false, state.is_memory_reporting_enabled);
244 EXPECT_EQ(false, state.is_suspended);
245
246 // Background suspend is not enabled for audio-only.
247 state = ComputeBackgroundedPlayState();
248 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
249 EXPECT_EQ(false, state.is_memory_reporting_enabled);
250 EXPECT_EQ(false, state.is_suspended);
251
252 state = ComputeMustSuspendPlayState();
253 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
254 EXPECT_EQ(false, state.is_memory_reporting_enabled);
255 EXPECT_EQ(true, state.is_suspended);
256 }
257
258 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterFutureData) {
259 WebMediaPlayerImpl::PlayState state;
260 SetMetadata(true, true);
261 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
262
263 state = ComputePlayState();
264 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
265 EXPECT_EQ(false, state.is_memory_reporting_enabled);
266 EXPECT_EQ(false, state.is_suspended);
267
268 state = ComputeBackgroundedPlayState();
269 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
270 EXPECT_EQ(false, state.is_memory_reporting_enabled);
271 EXPECT_EQ(true, state.is_suspended);
272
273 // Idle suspension is possible after HaveFutureData.
274 state = ComputeIdlePlayState();
275 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
276 EXPECT_EQ(false, state.is_memory_reporting_enabled);
277 EXPECT_EQ(true, state.is_suspended);
278
279 state = ComputeMustSuspendPlayState();
280 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
281 EXPECT_EQ(false, state.is_memory_reporting_enabled);
282 EXPECT_EQ(true, state.is_suspended);
283 }
284
285 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing) {
286 WebMediaPlayerImpl::PlayState state;
287 SetMetadata(true, true);
288 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
289 SetPaused(false);
290
291 state = ComputePlayState();
292 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
293 EXPECT_EQ(true, state.is_memory_reporting_enabled);
294 EXPECT_EQ(false, state.is_suspended);
295
296 state = ComputeBackgroundedPlayState();
297 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
298 EXPECT_EQ(false, state.is_memory_reporting_enabled);
299 EXPECT_EQ(true, state.is_suspended);
300
301 state = ComputeMustSuspendPlayState();
302 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
303 EXPECT_EQ(false, state.is_memory_reporting_enabled);
304 EXPECT_EQ(true, state.is_suspended);
305 }
306
307 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing_AudioOnly) {
308 WebMediaPlayerImpl::PlayState state;
309 SetMetadata(true, false);
310 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
311 SetPaused(false);
312
313 state = ComputePlayState();
314 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
315 EXPECT_EQ(true, state.is_memory_reporting_enabled);
316 EXPECT_EQ(false, state.is_suspended);
317
318 // Audio-only stays playing in the background.
319 state = ComputeBackgroundedPlayState();
320 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
321 EXPECT_EQ(true, state.is_memory_reporting_enabled);
322 EXPECT_EQ(false, state.is_suspended);
323
324 state = ComputeMustSuspendPlayState();
325 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
326 EXPECT_EQ(false, state.is_memory_reporting_enabled);
327 EXPECT_EQ(true, state.is_suspended);
328 }
329
330 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Ended) {
331 WebMediaPlayerImpl::PlayState state;
332 SetMetadata(true, true);
333 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
334 SetEnded(true);
335
336 // The pipeline is not suspended immediately on ended.
337 state = ComputePlayState();
338 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::ENDED, state.delegate_state);
339 EXPECT_EQ(false, state.is_memory_reporting_enabled);
340 EXPECT_EQ(false, state.is_suspended);
341
342 state = ComputeIdlePlayState();
343 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::ENDED, state.delegate_state);
344 EXPECT_EQ(false, state.is_memory_reporting_enabled);
345 EXPECT_EQ(true, state.is_suspended);
346 }
347
159 } // namespace media 348 } // 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