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

Side by Side Diff: content/renderer/media/renderer_webmediaplayer_delegate_browsertest.cc

Issue 2218963003: Added metrics for background video playback. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added PowerObserver Created 4 years, 4 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
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 <tuple> 5 #include <tuple>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/power_monitor/power_monitor.h"
11 #include "base/power_monitor/power_monitor_source.h"
10 #include "base/run_loop.h" 12 #include "base/run_loop.h"
11 #include "base/single_thread_task_runner.h" 13 #include "base/single_thread_task_runner.h"
14 #include "base/test/histogram_tester.h"
12 #include "base/test/simple_test_tick_clock.h" 15 #include "base/test/simple_test_tick_clock.h"
13 #include "base/threading/thread_task_runner_handle.h" 16 #include "base/threading/thread_task_runner_handle.h"
14 #include "content/common/media/media_player_delegate_messages.h" 17 #include "content/common/media/media_player_delegate_messages.h"
15 #include "content/public/renderer/render_view.h" 18 #include "content/public/renderer/render_view.h"
16 #include "content/public/test/render_view_test.h" 19 #include "content/public/test/render_view_test.h"
17 #include "content/renderer/media/renderer_webmediaplayer_delegate.h" 20 #include "content/renderer/media/renderer_webmediaplayer_delegate.h"
18 #include "content/renderer/render_process.h" 21 #include "content/renderer/render_process.h"
19 #include "testing/gmock/include/gmock/gmock.h" 22 #include "testing/gmock/include/gmock/gmock.h"
20 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
21 24
(...skipping 11 matching lines...) Expand all
33 36
34 // WebMediaPlayerDelegate::Observer implementation. 37 // WebMediaPlayerDelegate::Observer implementation.
35 MOCK_METHOD0(OnHidden, void()); 38 MOCK_METHOD0(OnHidden, void());
36 MOCK_METHOD0(OnShown, void()); 39 MOCK_METHOD0(OnShown, void());
37 MOCK_METHOD1(OnSuspendRequested, void(bool)); 40 MOCK_METHOD1(OnSuspendRequested, void(bool));
38 MOCK_METHOD0(OnPlay, void()); 41 MOCK_METHOD0(OnPlay, void());
39 MOCK_METHOD0(OnPause, void()); 42 MOCK_METHOD0(OnPause, void());
40 MOCK_METHOD1(OnVolumeMultiplierUpdate, void(double)); 43 MOCK_METHOD1(OnVolumeMultiplierUpdate, void(double));
41 }; 44 };
42 45
46 class DummyPowerMonitorSource : public base::PowerMonitorSource {
47 public:
48 DummyPowerMonitorSource() {}
49 ~DummyPowerMonitorSource() override {}
mlamouri (slow - plz ping) 2016/08/08 13:19:31 nit: `= default;` FTW
50
51 void Suspend() { ProcessPowerEvent(SUSPEND_EVENT); }
52 void Resume() { ProcessPowerEvent(RESUME_EVENT); }
53
54 private:
55 // base::PowerMonitorSource implementation.
56 bool IsOnBatteryPowerImpl() override { return false; }
57
58 DISALLOW_COPY_AND_ASSIGN(DummyPowerMonitorSource);
59 };
60
43 class RendererWebMediaPlayerDelegateTest : public content::RenderViewTest { 61 class RendererWebMediaPlayerDelegateTest : public content::RenderViewTest {
44 public: 62 public:
45 RendererWebMediaPlayerDelegateTest() {} 63 RendererWebMediaPlayerDelegateTest() {}
46 ~RendererWebMediaPlayerDelegateTest() override {} 64 ~RendererWebMediaPlayerDelegateTest() override {}
47 65
48 void SetUp() override { 66 void SetUp() override {
49 RenderViewTest::SetUp(); 67 RenderViewTest::SetUp();
68
69 power_monitor_source_ = new DummyPowerMonitorSource();
70 power_monitor_.reset(new base::PowerMonitor(
71 base::WrapUnique(power_monitor_source_)));
50 delegate_manager_.reset( 72 delegate_manager_.reset(
51 new RendererWebMediaPlayerDelegate(view_->GetMainRenderFrame())); 73 new RendererWebMediaPlayerDelegate(view_->GetMainRenderFrame()));
52 } 74 }
53 75
54 void TearDown() override { 76 void TearDown() override {
55 // Destruct the controller prior to any other tear down to avoid out of 77 // Destruct the controller prior to any other tear down to avoid out of
56 // order destruction relative to the test render frame. 78 // order destruction relative to the test render frame.
57 delegate_manager_.reset(); 79 delegate_manager_.reset();
80 power_monitor_.reset();
58 RenderViewTest::TearDown(); 81 RenderViewTest::TearDown();
59 } 82 }
60 83
61 protected: 84 protected:
62 IPC::TestSink& test_sink() { return render_thread_->sink(); } 85 IPC::TestSink& test_sink() { return render_thread_->sink(); }
63 86
64 bool HasPlayingVideo(int delegate_id) { 87 bool HasPlayingVideo(int delegate_id) {
65 return delegate_manager_->playing_videos_.count(delegate_id); 88 return delegate_manager_->playing_videos_.count(delegate_id);
66 } 89 }
67 90
68 void SetPlayingBackgroundVideo(bool is_playing) { 91 void SetPlayingBackgroundVideo(bool is_playing) {
69 delegate_manager_->is_playing_background_video_ = is_playing; 92 delegate_manager_->is_playing_background_video_ = is_playing;
70 } 93 }
71 94
72 void CallOnMediaDelegatePlay(int delegate_id) { 95 void CallOnMediaDelegatePlay(int delegate_id) {
73 delegate_manager_->OnMediaDelegatePlay(delegate_id); 96 delegate_manager_->OnMediaDelegatePlay(delegate_id);
74 } 97 }
75 98
76 void CallOnMediaDelegatePause(int delegate_id) { 99 void CallOnMediaDelegatePause(int delegate_id) {
77 delegate_manager_->OnMediaDelegatePause(delegate_id); 100 delegate_manager_->OnMediaDelegatePause(delegate_id);
78 } 101 }
79 102
103 void CallSetIsPlayingBackgroundVideo(bool is_playing) {
104 delegate_manager_->SetIsPlayingBackgroundVideo(is_playing);
105 }
106
107 base::TimeTicks GetBackgroundVideoPlayingStartTime() {
108 return delegate_manager_->background_video_playing_start_time_;
109 }
110
111 DummyPowerMonitorSource* power_monitor_source_ = nullptr;
112 std::unique_ptr<base::PowerMonitor> power_monitor_;
80 std::unique_ptr<RendererWebMediaPlayerDelegate> delegate_manager_; 113 std::unique_ptr<RendererWebMediaPlayerDelegate> delegate_manager_;
81 114
82 private: 115 private:
83 DISALLOW_COPY_AND_ASSIGN(RendererWebMediaPlayerDelegateTest); 116 DISALLOW_COPY_AND_ASSIGN(RendererWebMediaPlayerDelegateTest);
84 }; 117 };
85 118
86 TEST_F(RendererWebMediaPlayerDelegateTest, SendsMessagesCorrectly) { 119 TEST_F(RendererWebMediaPlayerDelegateTest, SendsMessagesCorrectly) {
87 testing::StrictMock<MockWebMediaPlayerDelegateObserver> observer; 120 testing::StrictMock<MockWebMediaPlayerDelegateObserver> observer;
88 const int delegate_id = delegate_manager_->AddObserver(&observer); 121 const int delegate_id = delegate_manager_->AddObserver(&observer);
89 122
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 delegate_manager_->DidPause(delegate_id, true); 392 delegate_manager_->DidPause(delegate_id, true);
360 CallOnMediaDelegatePlay(delegate_id); 393 CallOnMediaDelegatePlay(delegate_id);
361 EXPECT_EQ(old_value, delegate_manager_->IsPlayingBackgroundVideo()); 394 EXPECT_EQ(old_value, delegate_manager_->IsPlayingBackgroundVideo());
362 395
363 delegate_manager_->DidPlay( 396 delegate_manager_->DidPlay(
364 delegate_id, true, true, false, base::TimeDelta()); 397 delegate_id, true, true, false, base::TimeDelta());
365 CallOnMediaDelegatePlay(delegate_id); 398 CallOnMediaDelegatePlay(delegate_id);
366 EXPECT_NE(old_value, delegate_manager_->IsPlayingBackgroundVideo()); 399 EXPECT_NE(old_value, delegate_manager_->IsPlayingBackgroundVideo());
367 } 400 }
368 401
402 TEST_F(RendererWebMediaPlayerDelegateTest, Histograms) {
403 MockWebMediaPlayerDelegateObserver observer;
404 int delegate_id = delegate_manager_->AddObserver(&observer);
405 base::HistogramTester histogram_tester;
406 histogram_tester.ExpectTotalCount("Media.Session.BackgroundTime", 0);
407
408 // Pausing or showing doesn't record anything as background playback
409 // hasn't started yet.
410 delegate_manager_->DidPlay(
411 delegate_id, true, true, false, base::TimeDelta());
412 CallOnMediaDelegatePause(delegate_id);
413 histogram_tester.ExpectTotalCount("Media.Session.BackgroundTime", 0);
414
415 delegate_manager_->DidPlay(
416 delegate_id, true, true, false, base::TimeDelta());
417 delegate_manager_->WasShown();
418 histogram_tester.ExpectTotalCount("Media.Session.BackgroundTime", 0);
419
420 // Doing this things after the background playback has started should record
421 // the time.
422 delegate_manager_->DidPlay(
423 delegate_id, true, true, false, base::TimeDelta());
424 SetPlayingBackgroundVideo(true);
425 CallOnMediaDelegatePause(delegate_id);
426 histogram_tester.ExpectTotalCount("Media.Session.BackgroundTime", 1);
427
428 delegate_manager_->DidPlay(
429 delegate_id, true, true, false, base::TimeDelta());
430 SetPlayingBackgroundVideo(true);
431 delegate_manager_->WasShown();
432 histogram_tester.ExpectTotalCount("Media.Session.BackgroundTime", 2);
433 }
434
435 TEST_F(RendererWebMediaPlayerDelegateTest, PowerObserver) {
436 CallSetIsPlayingBackgroundVideo(true);
437 base::TimeTicks time_before_suspend = GetBackgroundVideoPlayingStartTime();
438
439 power_monitor_source_->Suspend();
440 power_monitor_source_->Resume();
441
442 EXPECT_GE(GetBackgroundVideoPlayingStartTime(), time_before_suspend);
443 }
369 444
370 } // namespace media 445 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698