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

Side by Side Diff: content/browser/power_usage_monitor_impl_unittest.cc

Issue 560553005: Battery impact UMA (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix component build. Created 6 years, 1 month 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 2014 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/power_usage_monitor_impl.h"
6
7 #include "content/public/browser/notification_types.h"
8 #include "content/public/test/test_browser_thread_bundle.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 namespace content {
12
13 // Dummy ID to identify a phantom RenderProcessHost in tests.
14 const int kDummyRenderProcessHostID = 1;
15
16 class SystemInterfaceForTest : public PowerUsageMonitor::SystemInterface {
17 public:
18 SystemInterfaceForTest()
19 : num_pending_histogram_reports_(0),
20 discharge_percent_per_hour_(0),
21 now_(base::Time::FromInternalValue(1000)) {}
22 ~SystemInterfaceForTest() override {}
23
24 int num_pending_histogram_reports() const {
25 return num_pending_histogram_reports_;
26 }
27
28 int discharge_percent_per_hour() const {
29 return discharge_percent_per_hour_;
30 }
31
32 void AdvanceClockSeconds(int seconds) {
33 now_ += base::TimeDelta::FromSeconds(seconds);
34 }
35
36 void AdvanceClockMinutes(int minutes) {
37 now_ += base::TimeDelta::FromMinutes(minutes);
38 }
39
40 void ScheduleHistogramReport(base::TimeDelta delay) override {
41 num_pending_histogram_reports_++;
42 }
43
44 void CancelPendingHistogramReports() override {
45 num_pending_histogram_reports_ = 0;
46 }
47
48 void RecordDischargePercentPerHour(int percent_per_hour) override {
49 discharge_percent_per_hour_ = percent_per_hour;
50 }
51
52 base::Time Now() override { return now_; }
53
54 private:
55 int num_pending_histogram_reports_;
56 int discharge_percent_per_hour_;
57 base::Time now_;
58 };
59
60 class PowerUsageMonitorTest : public testing::Test {
61 protected:
62 virtual void SetUp() {
63 monitor_.reset(new PowerUsageMonitor);
64 // PowerUsageMonitor assumes ownership.
65 scoped_ptr<SystemInterfaceForTest> test_interface(
66 new SystemInterfaceForTest());
67 system_interface_ = test_interface.get();
68 monitor_->SetSystemInterfaceForTest(test_interface.Pass());
69
70 // Without live renderers, the monitor won't do anything.
71 monitor_->OnRenderProcessNotification(NOTIFICATION_RENDERER_PROCESS_CREATED,
72 kDummyRenderProcessHostID);
73 }
74
75 void UpdateBatteryStatus(bool charging, double battery_level) {
76 device::BatteryStatus battery_status;
ppi 2014/11/16 16:03:08 nit: include what you use, I think that would be "
jeremy 2014/11/17 07:50:48 Done.
77 battery_status.charging = charging;
78 battery_status.level = battery_level;
79 monitor_->OnBatteryStatusUpdate(battery_status);
80 }
81
82 void KillTestRenderer() {
83 monitor_->OnRenderProcessNotification(
84 NOTIFICATION_RENDERER_PROCESS_CLOSED, kDummyRenderProcessHostID);
85 }
86
87 scoped_ptr<PowerUsageMonitor> monitor_;
88 SystemInterfaceForTest* system_interface_;
89 TestBrowserThreadBundle thread_bundle_;
90 };
91
92 TEST_F(PowerUsageMonitorTest, StartStopQuickly) {
93 // Going on battery power.
94 UpdateBatteryStatus(false, 1.0);
95 int initial_num_histogram_reports =
96 system_interface_->num_pending_histogram_reports();
97 ASSERT_GT(initial_num_histogram_reports, 0);
98
99 // Battery level goes down a bit.
100 system_interface_->AdvanceClockSeconds(1);
101 UpdateBatteryStatus(false, 0.9);
102 ASSERT_EQ(initial_num_histogram_reports,
103 system_interface_->num_pending_histogram_reports());
104 ASSERT_EQ(0, system_interface_->discharge_percent_per_hour());
105
106 // Wall power connected.
107 system_interface_->AdvanceClockSeconds(30);
108 UpdateBatteryStatus(true, 0);
109 ASSERT_EQ(0, system_interface_->num_pending_histogram_reports());
110 ASSERT_EQ(0, system_interface_->discharge_percent_per_hour());
111 }
112
113 TEST_F(PowerUsageMonitorTest, DischargePercentReported) {
114 // Going on battery power.
115 UpdateBatteryStatus(false, 1.0);
116 int initial_num_histogram_reports =
117 system_interface_->num_pending_histogram_reports();
118 ASSERT_GT(initial_num_histogram_reports, 0);
119
120 // Battery level goes down a bit.
121 system_interface_->AdvanceClockSeconds(30);
122 UpdateBatteryStatus(false, 0.9);
123 ASSERT_EQ(initial_num_histogram_reports,
124 system_interface_->num_pending_histogram_reports());
125 ASSERT_EQ(0, system_interface_->discharge_percent_per_hour());
126
127 // Wall power connected.
128 system_interface_->AdvanceClockMinutes(31);
129 UpdateBatteryStatus(true, 0);
130 ASSERT_EQ(0, system_interface_->num_pending_histogram_reports());
131 ASSERT_GT(system_interface_->discharge_percent_per_hour(), 0);
132 }
133
134 TEST_F(PowerUsageMonitorTest, NoRenderersDisablesMonitoring) {
135 KillTestRenderer();
136
137 // Going on battery power.
138 UpdateBatteryStatus(false, 1.0);
139 ASSERT_EQ(0, system_interface_->num_pending_histogram_reports());
140 ASSERT_EQ(0, system_interface_->discharge_percent_per_hour());
141
142 // Wall power connected.
143 system_interface_->AdvanceClockSeconds(30);
144 UpdateBatteryStatus(true, 0.5);
145 ASSERT_EQ(0, system_interface_->num_pending_histogram_reports());
146 ASSERT_EQ(0, system_interface_->discharge_percent_per_hour());
147 }
148
149 TEST_F(PowerUsageMonitorTest, NoRenderersCancelsInProgressMonitoring) {
150 // Going on battery power.
151 UpdateBatteryStatus(false, 1.0);
152 ASSERT_GT(system_interface_->num_pending_histogram_reports(), 0);
153 ASSERT_EQ(0, system_interface_->discharge_percent_per_hour());
154
155 // All renderers killed.
156 KillTestRenderer();
157 ASSERT_EQ(0, system_interface_->num_pending_histogram_reports());
158
159 // Wall power connected.
160 system_interface_->AdvanceClockMinutes(31);
161 UpdateBatteryStatus(true, 0);
162 ASSERT_EQ(0, system_interface_->num_pending_histogram_reports());
163 ASSERT_EQ(0, system_interface_->discharge_percent_per_hour());
164 }
165
166 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698