blob: f7d30da737987f7960fc0cdb66312cb60945c4b7 [file] [log] [blame]
Robert Ly35f2fda2013-01-29 16:27:05 -08001page.title=Power Profiles for Android
2@jd:body
3
4<!--
Clay Murphy314cc4e2015-04-03 14:35:53 -07005 Copyright 2015 The Android Open Source Project
Robert Ly35f2fda2013-01-29 16:27:05 -08006
7 Licensed under the Apache License, Version 2.0 (the "License");
8 you may not use this file except in compliance with the License.
9 You may obtain a copy of the License at
10
11 http://www.apache.org/licenses/LICENSE-2.0
12
13 Unless required by applicable law or agreed to in writing, software
14 distributed under the License is distributed on an "AS IS" BASIS,
15 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 See the License for the specific language governing permissions and
17 limitations under the License.
18-->
19<div id="qv-wrapper">
20 <div id="qv">
21 <h2>In this document</h2>
22 <ol id="auto-toc"></ol>
23 </div>
24</div>
25
Heidi Millerbf752972014-10-28 16:49:15 -070026<p>Battery usage information is derived from battery usage statistics and power profile values.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -080027
Heidi Millerbf752972014-10-28 16:49:15 -070028<h2 id="usage-statistics">Battery Usage Statistics</h2>
Robert Ly35f2fda2013-01-29 16:27:05 -080029
Heidi Millerbf752972014-10-28 16:49:15 -070030<p>The framework automatically determines battery usage statistics by tracking how long device
31components spend in different states. As components (WiFi chipset, Cellular Radio, Bluetooth, GPS,
32Display, CPU) change states (OFF/ON, idle/full power, low/high brightness, etc.), the controlling
33service reports to the framework BatteryStats service, which collects information over time and
34stores it for use across reboots. The service doesnt track battery current draw directly,
35but instead collects timing information that can be used to approximate battery
36consumption by different components.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -080037
Heidi Millerbf752972014-10-28 16:49:15 -070038<p>The framework gathers statistics using the following methods:</p>
Robert Ly35f2fda2013-01-29 16:27:05 -080039
Heidi Millerbf752972014-10-28 16:49:15 -070040<ul>
41<li><strong>Push</strong>. Services aware of component changes push state changes to the
42BatteryStats service.</li>
43<li><strong>Pull</strong>. For components such as the CPU usage by apps, the framework automatically
44pulls the data at transition points (such as starting or stopping an activity) to take a
45snapshot.</li>
46</ul>
Robert Ly35f2fda2013-01-29 16:27:05 -080047
Heidi Millerbf752972014-10-28 16:49:15 -070048<p>Resource consumption is associated with the application using the resource. When multiple
49applications simultaneously use a resource (such as wakelocks that prevent the system from
50suspending), the framework spreads consumption across those applications, although not necessarily
51equally.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -080052
Heidi Millerbf752972014-10-28 16:49:15 -070053<p>To avoid losing usage statistics for a shutdown event, which may indicate battery power
54consumption problems (i.e. shutdown occurs because the battery reached zero remaining capacity), the
55framework flashes statistics approximately every 30 minutes.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -080056
Heidi Millerbf752972014-10-28 16:49:15 -070057<p>Battery usage statistics are handled entirely by the framework and do not require OEM
58modifications.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -080059
Heidi Millerbf752972014-10-28 16:49:15 -070060<h2 id="profile-values">Power Profile Values</h2>
Robert Ly35f2fda2013-01-29 16:27:05 -080061
Heidi Millerbf752972014-10-28 16:49:15 -070062<p>Device manufacturers must provide a component power profile that defines the current
63consumption value for the component and the approximate the actual battery drain caused by the
64component over time. Within a power profile, power consumption is specified in milliamps (mA) of
65current draw at a nominal voltage and can be a fractional value specified in microamps (uA). The
66value should be the mA consumed at the battery and not a value applicable to a power rail that does
67not correspond to current consumed from the battery.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -080068
Heidi Millerbf752972014-10-28 16:49:15 -070069<p>For example, a display power profile specifies the mA of current required to keep the display on
70at minimum brightness and at maximum brightness. To determine the power cost (i.e the battery
71drained by the display component) of keeping the display on, the framework tracks the time spent at
72each brightness level, then multiplies those time intervals by an interpolated display brightness
73cost.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -080074
Heidi Millerbf752972014-10-28 16:49:15 -070075<p>The framework also multiplies the CPU time for each application by the mA required to run the CPU
76at a specific speed. This calculation establishes a comparative ranking of how much battery an
77application consumes by executing CPU code (time as the foreground app and total time including
78background activity are reported separately).</p>
Robert Ly35f2fda2013-01-29 16:27:05 -080079
Heidi Millerbf752972014-10-28 16:49:15 -070080<h2 id="component-power">Measuring Component Power</h2>
81
82<p>You can determine individual component power consumption by comparing the current drawn by the
83device when the component is in the desired state (on, active, scanning, etc.) and when the
84component is off. Measure the average instantaneous current drawn on the device at a
85nominal voltage using an external power monitor, such as a bench power supply or specialized
86battery-monitoring tools (such as Monsoon Solution Inc. Power Monitor and Power Tool software).</p>
Robert Ly35f2fda2013-01-29 16:27:05 -080087
88<p class="note">
Heidi Millerbf752972014-10-28 16:49:15 -070089<strong>Note:</strong> Manufacturers often supply information about the current consumed by an
90individual component. Use this information if it accurately represents the current drawn from the
91device battery in practice. However, validate manufacturer-provided values before
92using those values in your device power profile.</p>
Robert Ly35f2fda2013-01-29 16:27:05 -080093
Heidi Millerbf752972014-10-28 16:49:15 -070094<p>When measuring, ensure the device does not have a connection to an external charge source, such
95as a USB connection to a development host used when running Android Debug Bridge (adb). The device
96under test might draw current from the host, thus lowering measurements at the battery. Avoid USB
97On-The-Go (OTG) connections, as the OTG device might draw current from the device under test.</p>
98
99<p>Excluding the component being measured, the system should run at a constant level of power
100consumption to avoid inaccurate measurements caused by changes in other components. System
101activities that can introduce unwanted changes to power measurements include:</p>
Robert Ly35f2fda2013-01-29 16:27:05 -0800102
103<ul>
Heidi Millerbf752972014-10-28 16:49:15 -0700104<li><strong>Cellular, Wi-Fi, and Bluetooth receive, transmit, or scanning activity</strong>. When
105not measuring cell radio power, set the device to airplane mode and enable Wi-Fi or Bluetooth as
106appropriate.</li>
107<li><strong>Screen on/off</strong>. Colors displayed while the screen is on can affect power draw on
108some screen technologies. Turn the screen off when measuring values for non-screen components.</li>
109<li><strong>System suspend/resume</strong>. A screen off state can trigger a system suspension,
110placing parts of the device in a low-power or off state. This can affect power consumption of the
111component being measured and introduce large variances in power readings as the system periodically
112resumes to send alarms, etc. For details, see <a href="#control-suspend">Controlling System
113Suspend</a>.</li>
114<li><strong>CPUs changing speed and entering/exiting low-power scheduler idle state</strong>. During
115normal operation, the system makes frequent adjustments to CPU speeds, the number of online CPU
116cores, and other system core states such as memory bus speed and voltages of power rails associated
117with CPUs and memory. During testing, these adjustments affect power measurements:
Robert Ly35f2fda2013-01-29 16:27:05 -0800118
Robert Ly35f2fda2013-01-29 16:27:05 -0800119<ul>
Heidi Millerbf752972014-10-28 16:49:15 -0700120<li>CPU speed scaling operations can reduce the amount of clock and voltage scaling of memory buses
121and other system core components.</li>
122<li>Scheduling activity can affect the percentage of the time CPUs spend in low-power idle states.
123For details on preventing these adjustments from occurring during testing, see
124<a href="#control-cpu">Controlling CPU Speeds</a>.</li>
125</ul>
126
Robert Ly35f2fda2013-01-29 16:27:05 -0800127</li>
128</ul>
Heidi Millerbf752972014-10-28 16:49:15 -0700129
130<p>For example, Joe Droid wants to compute the <code>screen.on</code> value for a device. He enables
131airplane mode on the device, runs the device at a stable current state, holds the CPU speed constant
132, and uses a partial wakelock to prevent system suspend. Joe then turns the device screen off and
133takes a measurement (200mA). Next, Joe turns the device screen on at minimum brightness and takes
134another measurement (300mA). The <code>screen.on</code> value is 100mA (300 - 200).</p>
135
136<p>For components that dont have a flat waveform of current consumption when active (such as
137cellular radio or Wi-Fi), measure the average current over time using a power monitoring tool.</p>
138
139<p>When using an external power source in place of the device battery, the system might experience
140problems due to an unconnected battery thermistor or integrated fuel gauge pins (i.e. an invalid
141reading for battery temperature or remaining battery capacity could shut down the kernel or Android
142system). Fake batteries can provide signals on thermistor or fuel gauge pins that mimic temperature
143and state of charge readings for a normal system, and may also provide convenient leads for
144connecting to external power supplies. Alternatively, you can modify the system to ignore the
145invalid data from the missing battery.</p>
146
Clay Murphy314cc4e2015-04-03 14:35:53 -0700147<h3 id="control-suspend">Controlling System Suspend</h3>
Heidi Millerbf752972014-10-28 16:49:15 -0700148
149<p>This section describes how to avoid system suspend state when you dont want it to interfere with
150other measurements, and how to measure the power draw of system suspend state when you do want to
151measure it.</p>
152
153<h4>Preventing System Suspend</h4>
154
155<p>System suspend can introduce unwanted variance in power measurements and place system components
156in low-power states inappropriate for measuring active power use. To prevent the system from
157suspending while the screen is off, use a temporary partial wakelock. Using a USB cable, connect the
158device to a development host, then issue the following command:</p>
159
Robert Ly35f2fda2013-01-29 16:27:05 -0800160<pre>
161$ adb shell "echo temporary &gt; /sys/power/wake_lock"
162</pre>
Heidi Millerbf752972014-10-28 16:49:15 -0700163
164<p>While in wake_lock, the screen off state does not trigger a system suspend. (Remember to
165disconnect the USB cable from the device before measuring power consumption.)</p>
166
167<p>To remove the wakelock:</p>
168
Robert Ly35f2fda2013-01-29 16:27:05 -0800169<pre>
170$ adb shell "echo temporary &gt; /sys/power/wake_unlock"
171</pre>
Heidi Millerbf752972014-10-28 16:49:15 -0700172
173<h4>Measuring System Suspend</h4>
174
175<p>To measure the power draw during the system suspend state, measure the value of cpu.idle in the
176power profile. Before measuring:
177
178<ul>
179<li>Remove existing wakelocks (as described above).</li>
180<li>Place the device in airplane mode to avoid concurrent activity by the cellular radio, which
181might run on a processor separate from the SoC portions controlled by the system suspend.</li>
182<li>Ensure the system is in suspend state by:
183<ul>
184<li>Confirming current readings settle to a steady value. Readings should be within the expected
185range for the power consumption of the SoC suspend state plus the power consumption of system
186components that remain powered (such as the USB PHY).</li>
187<li>Checking the system console output.</li>
188<li>Watching for external indications of system status (such as an LED turning off when not in
189suspend).</li>
190</ul>
191</li>
192</ul>
193
Clay Murphy314cc4e2015-04-03 14:35:53 -0700194<h3 id="control-cpu">Controlling CPU Speeds</h3>
Heidi Millerbf752972014-10-28 16:49:15 -0700195
196<p>Active CPUs can be brought online or put offline, have their clock speeds and associated voltages
197changed (possibly also affecting memory bus speeds and other system core power states), and
198can enter lower power idle states while in the kernel idle loop. When measuring different CPU power
199states for the power profile, avoid the power draw variance when measuring other parameters. The
200power profile assumes all CPUs have the same available speeds and power characteristics.</p>
201
202<p>While measuring CPU power, or while holding CPU power constant to make other measurements, keep
203the number of CPUs brought online constant (such as having one CPU online and the rest
204offline/hotplugged out). Keeping all CPUs except one in scheduling idle may product acceptable
205results. Stopping the Android framework with <code>adb shell stop</code> can reduce system
206scheduling activity.</p>
207
208<p>You must specify the available CPU speeds for your device in the power profile cpu.speeds
209entry. To get a list of available CPU speeds, run:</p>
210
Robert Ly35f2fda2013-01-29 16:27:05 -0800211<pre>
212adb shell cat /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state
213</pre>
Heidi Millerbf752972014-10-28 16:49:15 -0700214
215<p>These speeds match the corresponding power measurements in value <code>cpu.active</code>.</p>
216
217<p>For platforms where number of cores brought online significantly affects power consumption, you
218might need to modify the cpufreq driver or governor for the platform. Most platforms support
219controlling CPU speed using the userspace cpufreq governor and using sysfs interfaces to
220set the speed. For example, to set speed for 200MHz on a system with only 1 CPU or all CPUs sharing
221a common cpufreq policy, use the system console or adb shell to run the following commands:</p>
222
Robert Ly35f2fda2013-01-29 16:27:05 -0800223<pre>
224echo userspace &gt; /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
225echo 200000 &gt; /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
226echo 200000 &gt; /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
227echo 200000 &gt; /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
228cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
229</pre>
Heidi Millerbf752972014-10-28 16:49:15 -0700230
231<p class="note">
232<strong>Note</strong>: The exact commands differ depending on the platform cpufreq implementation.
Robert Ly35f2fda2013-01-29 16:27:05 -0800233</p>
Heidi Millerbf752972014-10-28 16:49:15 -0700234
235<p>These commands ensure the new speed is not outside the allowed bounds, set the new speed, then
236print the speed at which the CPU is actually running (for verification). If the current
237minimum speed prior to execution is higher than 200000, you might need to reverse the order
238of the first two lines, or execute the first line again to drop the minimum speed prior to
239setting the maximum speed.</p>
240
241<p>To measure current consumed by a CPU running at various speeds, use the system console place the
242CPU in a CPU-bound loop using the command:</p>
Robert Ly35f2fda2013-01-29 16:27:05 -0800243<pre>
244# while true; do true; done
245</pre>
Heidi Millerbf752972014-10-28 16:49:15 -0700246
247<p>Take the measurement while the loop executes.</p>
248
249<p>Some devices can limit maximum CPU speed while performing thermal throttling due to a high
250temperature measurement (i.e. after running CPUs at high speeds for sustained periods). Watch for
251such limiting, either using the system console output when taking measurements or by checking the
252kernel log after measuring.</p>
253
Clay Murphy314cc4e2015-04-03 14:35:53 -0700254<p>For the <code>cpu.awake</code> value, measure the power consumed when the system is not in
Heidi Millerbf752972014-10-28 16:49:15 -0700255suspend and not executing tasks. The CPU should be in a low-power scheduler <em>idle loop
Clay Murphy314cc4e2015-04-03 14:35:53 -0700256</em>, possibly executing an ARM Wait For Event instruction or in an SoC-specific low-power state
257with a fast-exit latency suitable for idle use.</p>
258
259<p>For the <code>cpu.active</code> value, power needs to be measured when the
260system is not in suspend mode and not executing tasks. One of the CPU (usually
261the primary CPU) should be running the task, and all the other CPUs should be in
262an idle state.</p>
Heidi Millerbf752972014-10-28 16:49:15 -0700263
264<h3 id="screen-power">Measuring Screen Power</h3>
265
266<p>When measuring screen on power, ensure that other devices normally turned on when the screen is
267enabled are also on. For example, if the touchscreen and display backlight would normally be on when
268the screen is on, ensure these devices are on when you measure to get a realistic example of screen
269on power usage.</p>
270
271<p>Some display technologies vary in power consumption according to the colors displayed, causing
272power measurements to vary considerably depending on what is displayed on the screen at the time of
273measurement. When measuring, ensure the screen is displaying something that has power
274characteristics of a realistic screen. Aim between the extremes of an all-black screen (which
275consumes the lowest power for some technologies) and an all-white screen. A common choice is a view
276of a schedule in the calendar app, which has a mix of white background and non-white elements.</p>
277
278<p>Measure screen on power at <em>minimum</em> and <em>maximum</em> display/backlight brightness.
279To set minimum brightness:</p>
280
281<ul>
282<li><strong>Use the Android UI</strong> (not recommended). Set the Settings > Display Brightness
283slider to the minimum display brightness. However, the Android UI allows setting brightness only to
284a minimum of 10-20% of the possible panel/backlight brightness, and does not allow setting
285brightness so low that the screen might not be visible without great effort.</li>
286<li><strong>Use a sysfs file</strong> (recommended). If available, use a sysfs file to control panel
287brightness all the way down to the minimum brightness supported by the hardware.</li>
288</ul>
289
290<p>Additionally, if the platform sysfs file enables turning the LCD panel, backlight, and
291touchscreen on and off, use the file to take measurements with the screen on and off. Otherwise,
292set a partial wakelock so the system does not suspend, then turn on and off the
293screen with the power button.</p>
294
295<h3 id="wifi-power">Measuring Wi-Fi Power</h3>
296
297<p>Perform Wi-Fi measurements on a relatively quiet network. Avoid introducing additional work
298processing high volumes of broadcast traffic that is unrelated to the activity being measured.</p>
299
300<p>The <code>wifi.on</code> value measures the power consumed when Wi-Fi is enabled but not actively
Robert Ly35f2fda2013-01-29 16:27:05 -0800301transmitting or receiving. This is often measured as the delta between the current draw in
Heidi Millerbf752972014-10-28 16:49:15 -0700302system suspend (sleep) state with Wi-Fi enabled vs. disabled.</p>
303
304<p>The <code>wifi.scan</code> value measures the power consumed during a Wi-Fi scan for access
305points. Applications can trigger Wi-Fi scans using the WifiManager class
Clay Murphy314cc4e2015-04-03 14:35:53 -0700306<a href ="http://developer.android.com/reference/android/net/wifi/WifiManager.html">
Heidi Millerbf752972014-10-28 16:49:15 -0700307<code>startScan()</code>API</a>. You can also open Settings &gt; Wi-Fi, which performs access point
308scans every few seconds with an apparent jump in power consumption, but you must subtract screen
309power from these measurements.</p>
310
311<p class="note">
312<strong>Note</strong>: Use a controlled setup (such as
313<a href="http://en.wikipedia.org/wiki/Iperf">iperf</a>) to generate network receive and transmit
314traffic.</p>
315
316<h2 id="device-power">Measuring Device Power</h2>
317
318<p>You can determine device power consumption for Android devices that include a battery fuel gauge
319such as a Summit SMB347 or Maxim MAX17050 (available on many Nexus devices). Use the in-system
320battery fuel gauge when external measurement equipment is not available or is inconvenient to
321connect to a device (such as in mobile usage).</p>
322
323<p>Measurements can include instantaneous current, remaining charge, battery capacity at test start
324and end, and more depending on the supported properties of the device (see below). For best results,
325perform device power measurements during long-running A/B tests that use the same device type with
326the same fuel gauge and same current sense resistor. Ensure the starting battery charge is the same
327for each device to avoid differing fuel gauge behavior at different points in the battery discharge
328curve.</p>
329
330<p>Even with identical test environments, measurements are not guaranteed to be of high absolute
331accuracy. However, most inaccuracies specific to the fuel gauge and sense resistor are consistent
332between test runs, making comparisons between identical devices useful. We recommend running
333multiple tests in different configurations to identify significant differences and relative power
334consumption between configurations.</p>
335
336<h3 id="power-consumption">Reading Power Consumption</h3>
337
338<p>To read power consumption data, insert calls to the API in your testing code.</p>
339
340<pre>
341import android.os.BatteryManager;
342import android.os.ServiceManager;
343import android.content.Context;
344BatteryManager mBatteryManager =
345(BatteryManager)Context.getSystemService(Context.BATTERY_SERVICE);
346Long energy =
347mBatteryManager.getLongProperty(BatteryManager.BATTERY_PROPERTY_ENERGY_COUNTER);
348Slog.i(TAG, "Remaining energy = " + energy + "nWh");
349</pre>
350
351<h3 id="avail-props">Available Properties</h3>
352
353<p>Android supports the following battery fuel gauge properties:</p>
354
355<pre>
356BATTERY_PROPERTY_CHARGE_COUNTER Remaining battery capacity in microampere-hours
357BATTERY_PROPERTY_CURRENT_NOW Instantaneous battery current in microamperes
358BATTERY_PROPERTY_CURRENT_AVERAGE Average battery current in microamperes
359BATTERY_PROPERTY_CAPACITY Remaining battery capacity as an integer percentage
360BATTERY_PROPERTY_ENERGY_COUNTER Remaining energy in nanowatt-hours
361</pre>
362
363<p>Most properties are read from kernel power_supply subsystem attributes of similar names.
364However, the exact properties, resolution of property values, and update frequency
365available for a specific device depend on:</p>
366
367<ul>
368<li>Fuel gauge hardware, such as a Summit SMB347 or Maxim MAX17050.</li>
369<li>Fuel gauge-to-system connection, such as the value of external current sense resistors.</li>
370<li>Fuel gauge chip software configuration, such as values chosen for average current computation
371intervals in the kernel driver.</li>
372</ul>
373
374<p>For details, see the properties available for <a href="#nexus-devices">Nexus devices</a>.</p>
375
376<h3 id="maxim-fuel">Maxim Fuel Gauge</h3>
377
378<p>When determining battery state-of-charge over a long period of time, the Maxim fuel gauge
379(MAX17050, BC15) corrects for coulomb-counter offset measurements. For measurements made over a
380short period of time (such as power consumption metering tests), the fuel gauge does not make
381corrections, making the offset the primary source of error when current measurements are too small
382(although no amount of time can eliminate the offset error completely).</p>
383
384<p>For a typical 10mOhm sense resistor design, the offset current should be better than 1.5mA,
385meaning any measurement is +/-1.5mA (PCBoard layout can also affect this variation). For example,
386when measuring a large current (200mA) you can expect the following:</p>
387
388<ul>
389<li>2mA (1% gain error of 200mA due to fuel gauge gain error)</li>
390<li>+2mA (1% gain error of 200mA due to sense resistor error)</li>
391<li>+1.5mA (current sense offset error from fuel gauge)</li>
392</ul>
393
394<p>The total error is 5.5mA (2.75%). Compare this to a medium current (50mA) where the same error
395percentages give a total error of 7% or to a small current (15mA) where +/-1.5mA gives a total error
396of 10%.</p>
397
398<p>For best results, we recommend measuring greater than 20mA. Gain measurement errors are
399systematic and repeatable, enabling you to test a device in multiple modes and get clean relative
400measurements (with exceptions for the 1.5mA offset).</p>
401
402<p>For +/-100uA relative measurements, required measurement time depends on:</p>
403
404<ul>
405<li><b>ADC sampling noise</b>. The MAX17050 with its normal factory configuration produces +/-1.5mA
406sample-to-sample variation due to noise, with each sample delivered at 175.8ms. You can expect a
407rough +/-100uA for a 1 minute test window and a clean 3-sigma noise less than 100uA (or 1-sigma
408noise at 33uA) for a 6 minute test window.</li>
409<li><b>Sample Aliasing because of load variation</b>. Variation exaggerates errors, so for samples
410with variation inherent in the loading, consider using a longer test window.</li>
411</ul>
412
Clay Murphy314cc4e2015-04-03 14:35:53 -0700413<h3 id="nexus-devices">Supported Nexus Devices</h3>
Heidi Millerbf752972014-10-28 16:49:15 -0700414
Clay Murphy314cc4e2015-04-03 14:35:53 -0700415<h5 id="nexus-5">Nexus 5</h5>
Heidi Millerbf752972014-10-28 16:49:15 -0700416
417<table>
418<tbody>
419<tr>
420<th>Model</th>
421<td>Nexus 5</td>
422</tr>
423<tr>
424<th>Fuel Gauge</th>
425<td>Maxim MAX17048 fuel gauge (ModelGauge™, no coulomb counter)</td>
426</tr>
427<tr>
428<th>Properties</th>
429<td>BATTERY_PROPERTY_CAPACITY</td>
430</tr>
431<tr>
432<th>Measurements</th>
433<td>The fuel gauge does not support any measurements other than battery State Of Charge to a
434resolution of %/256 (1/256th of a percent of full battery capacity).</td>
435</tr>
436</tbody>
437</table>
438
439
Clay Murphy314cc4e2015-04-03 14:35:53 -0700440<h5 id="nexus-6">Nexus 6</h5>
Heidi Millerbf752972014-10-28 16:49:15 -0700441
442<table>
443<tbody>
444<tr>
445<th>Model</th>
446<td>Nexus 6</td>
447</tr>
448<tr>
449<th>Fuel Gauge</th>
450<td>Maxim MAX17050 fuel gauge (a coulomb counter with Maxim ModelGauge adjustments), and a 10mohm
451current sense resistor.</td>
452</tr>
453<tr>
454<th>Properties</th>
455<td>BATTERY_PROPERTY_CAPACITY<br>
456BATTERY_PROPERTY_CURRENT_NOW<br>
457BATTERY_PROPERTY_CURRENT_AVERAGE<br>
458BATTERY_PROPERTY_CHARGE_COUNTER<br>
459BATTERY_PROPERTY_ENERGY_COUNTER</td>
460</tr>
461<tr>
462<th>Measurements</th>
463<td>CURRENT_NOW resolution 156.25uA, update period is 175.8ms.<br>
464CURRENT_AVERAGE resolution 156.25uA, update period configurable 0.7s - 6.4h, default 11.25 secs.<br>
465CHARGE_COUNTER (accumulated current, non-extended precision) resolution is 500uAh (raw coulomb
466counter read, not adjusted by fuel gauge for coulomb counter offset, plus inputs from the ModelGauge
467m3 algorithm including empty compensation).<br>
468CHARGE_COUNTER_EXT (extended precision in kernel) resolution 8nAh.<br>
469ENERGY_COUNTER is CHARGE_COUNTER_EXT at nominal voltage of 3.7V.</td>
470</tr>
471</tbody>
472</table>
473
474
Clay Murphy314cc4e2015-04-03 14:35:53 -0700475<h5 id="nexus-9">Nexus 9</h5>
Heidi Millerbf752972014-10-28 16:49:15 -0700476
477<table>
478<tbody>
479<tr>
480<th>Model</th>
481<td>Nexus 9</td>
482</tr>
483<tr>
484<th>Fuel Gauge</th>
485<td>Maxim MAX17050 fuel gauge (a coulomb counter with Maxim ModelGauge adjustments), and a 10mohm
486current sense resistor.</td>
487</tr>
488<tr>
489<th>Properties</th>
490<td>BATTERY_PROPERTY_CAPACITY<br>
491BATTERY_PROPERTY_CURRENT_NOW<br>
492BATTERY_PROPERTY_CURRENT_AVERAGE<br>
493BATTERY_PROPERTY_CHARGE_COUNTER<br>
494BATTERY_PROPERTY_ENERGY_COUNTER</td>
495</tr>
496<tr>
497<th>Measurements</th>
498<td>CURRENT_NOW resolution 156.25uA, update period is 175.8ms.<br>
499CURRENT_AVERAGE resolution 156.25uA, update period configurable 0.7s - 6.4h, default 11.25 secs.<br>
500CHARGE_COUNTER (accumulated current, non-extended precision) resolution is 500uAh.<br>
501CHARGE_COUNTER_EXT (extended precision in kernel) resolution 8nAh.<br>
502ENERGY_COUNTER is CHARGE_COUNTER_EXT at nominal voltage of 3.7V.<br>
503Accumulated current update period 175.8ms.<br>
504ADC sampled at 175ms quantization with a 4ms sample period. Can adjust duty cycle.</td>
505</tr>
506</tbody>
507</table>
508
509
Clay Murphy314cc4e2015-04-03 14:35:53 -0700510<h5 id="nexus-10">Nexus 10</h5>
Heidi Millerbf752972014-10-28 16:49:15 -0700511
512<table>
513<tbody>
514<tr>
515<th>Model</th>
516<td>Nexus 10</td>
517</tr>
518<tr>
519<th>Fuel Gauge</th>
520<td>Dallas Semiconductor DS2784 fuel gauge (a coulomb counter), with a 10mohm current sense
521resistor.</td>
522</tr>
523<tr>
524<th>Properties</th>
525<td>BATTERY_PROPERTY_CAPACITY<br>
526BATTERY_PROPERTY_CURRENT_NOW<br>
527BATTERY_PROPERTY_CURRENT_AVERAGE<br>
528BATTERY_PROPERTY_CHARGE_COUNTER<br>
529BATTERY_PROPERTY_ENERGY_COUNTER</td>
530</tr>
531<tr>
532<th>Measurements</th>
533<td>Current measurement (instantaneous and average) resolution is 156.3uA.<br>
534CURRENT_NOW instantaneous current update period is 3.5 seconds.<br>
535CURRENT_AVERAGE update period is 28 seconds (not configurable).<br>
536CHARGE_COUNTER (accumulated current, non-extended precision) resolution is 625uAh.<br>
537CHARGE_COUNTER_EXT (extended precision in kernel) resolution is 144nAh.<br>
538ENERGY_COUNTER is CHARGE_COUNTER_EXT at nominal voltage of 3.7V.<br>
539Update period for all is 3.5 seconds.</td>
540</tr>
541</tbody>
542</table>
543
544
545<h2 id="viewing-usage">Viewing Battery Usage Data</h2>
546
547<p>The <code>dumpsys</code> <code>batterystats</code> command generates interesting statistical data
548about battery usage on a device, organized by unique application ID. You can view a history of
549battery-related events such as mobile radio state, Wi-Fi and Bluetooth power states, and wakelock
550reasons.</p>
551
552<p>Statistics include:</p>
553
554<ul>
555<li>History of battery-related events</li>
556<li>Global statistics for the device</li>
557<li>Approximate power use per UID and system component</li>
558<li>System UID aggregated statistics</li>
559</ul>
560
561<p>Use the output of the dumpsys command with the
562<a href="https://github.com/google/battery-historian">Battery Historian</a> tool to generate HTML
563visualizations of power-related events from logs.</p>
564
565
566<h2 id="power-values">Power Values</h2>
Robert Ly35f2fda2013-01-29 16:27:05 -0800567<table>
568<tr>
569 <th>Name</th>
Heidi Millerbf752972014-10-28 16:49:15 -0700570 <th>Description</th>
571 <th>Example Value</th>
Robert Ly35f2fda2013-01-29 16:27:05 -0800572 <th>Notes</th>
573</tr>
574<tr>
575 <td>none</td>
576 <td>Nothing</td>
577 <td>0</td>
578 <td></td>
579</tr>
580
581<tr>
582 <td>screen.on</td>
Heidi Millerbf752972014-10-28 16:49:15 -0700583 <td>Additional power used when screen is turned on at minimum brightness.</td>
Robert Ly35f2fda2013-01-29 16:27:05 -0800584 <td>200mA</td>
585 <td>Includes touch controller and display backlight. At 0 brightness, not the Android minimum which tends to be 10 or 20%.</td>
586</tr>
587
588<tr>
589 <td>screen.full</td>
Heidi Millerbf752972014-10-28 16:49:15 -0700590 <td>Additional power used when screen is at maximum brightness, compared to screen at minimum brightness.</td>
591 <td>100mA-300mA</td>
Robert Ly35f2fda2013-01-29 16:27:05 -0800592 <td>A fraction of this value (based on screen brightness) is added to the screen.on value to compute the power usage of the screen.</td>
593</tr>
594
595<tr>
Heidi Millerbf752972014-10-28 16:49:15 -0700596 <td>bluetooth.active</td>
597 <td>Additional power used when playing audio through bluetooth A2DP.</td>
Robert Ly35f2fda2013-01-29 16:27:05 -0800598 <td>14mA</td>
599 <td></td>
600</tr>
601
602<tr>
603 <td>bluetooth.on</td>
Heidi Millerbf752972014-10-28 16:49:15 -0700604 <td>Additional power used when bluetooth is turned on but idle.</td>
Robert Ly35f2fda2013-01-29 16:27:05 -0800605 <td>1.4mA</td>
606 <td></td>
607</tr>
608
609<tr>
Heidi Millerbf752972014-10-28 16:49:15 -0700610 <td>wifi.on</td>
611 <td>Additional power used when Wi-Fi is turned on but not receiving, transmitting, or scanning.</td>
612 <td>2mA</td>
Robert Ly35f2fda2013-01-29 16:27:05 -0800613 <td></td>
614</tr>
615
616<tr>
Heidi Millerbf752972014-10-28 16:49:15 -0700617 <td>wifi.active</td>
618 <td>Additional power used when transmitting or receiving over Wi-Fi.</td>
Robert Ly35f2fda2013-01-29 16:27:05 -0800619 <td>31mA</td>
620 <td></td>
621</tr>
622
623<tr>
Heidi Millerbf752972014-10-28 16:49:15 -0700624 <td>wifi.scan</td>
625 <td>Additional power used when Wi-Fi is scanning for access points.</td>
Robert Ly35f2fda2013-01-29 16:27:05 -0800626 <td>100mA</td>
627 <td></td>
628</tr>
629
630<tr>
Heidi Millerbf752972014-10-28 16:49:15 -0700631 <td>dsp.audio</td>
632 <td>Additional power used when audio decoding/encoding via DSP.</td>
633 <td>14.1mA</td>
634 <td>Reserved for future use.</td>
Robert Ly35f2fda2013-01-29 16:27:05 -0800635</tr>
636
637
638<tr>
Heidi Millerbf752972014-10-28 16:49:15 -0700639 <td>dsp.video</td>
640 <td>Additional power used when video decoding via DSP.</td>
641 <td>54mA</td>
642 <td>Reserved for future use.</td>
Robert Ly35f2fda2013-01-29 16:27:05 -0800643</tr>
644
645<tr>
Heidi Millerbf752972014-10-28 16:49:15 -0700646 <td>gps.on</td>
647 <td>Additional power used when GPS is acquiring a signal.</td>
Robert Ly35f2fda2013-01-29 16:27:05 -0800648 <td>50mA</td>
649 <td></td>
650</tr>
651
652<tr>
Heidi Millerbf752972014-10-28 16:49:15 -0700653 <td>radio.active</td>
654 <td>Additional power used when cellular radio is transmitting/receiving.</td>
655 <td>100mA-300mA</td>
Robert Ly35f2fda2013-01-29 16:27:05 -0800656 <td></td>
657</tr>
658
659<tr>
Heidi Millerbf752972014-10-28 16:49:15 -0700660 <td>radio.scanning</td>
661 <td>Additional power used when cellular radio is paging the tower.</td>
Robert Ly35f2fda2013-01-29 16:27:05 -0800662 <td>1.2mA</td>
663 <td></td>
664</tr>
665
666<tr>
Heidi Millerbf752972014-10-28 16:49:15 -0700667 <td>radio.on</td>
668 <td>Additional power used when the cellular radio is on. Multi-value entry, one per signal strength (no signal, weak, moderate, strong).</td>
669 <td>1.2mA</td>
670 <td>Some radios boost power when they search for a cell tower and do not detect a signal. These
671 numbers could all be the same or decreasing with increasing signal strength. If you provide only
672 one value, the same value will be used for all strengths. If you provide 2 values, the first will
673 be for no-signal and the second for all other strengths, and so on.</td>
Robert Ly35f2fda2013-01-29 16:27:05 -0800674</tr>
675
676<tr>
Heidi Millerbf752972014-10-28 16:49:15 -0700677 <td>cpu.speeds</td>
678 <td>Multi-value entry that lists each possible CPU speed in KHz.</td>
679 <td>125000, 250000, 500000, 1000000, 1500000</td>
680 <td>The number and order of entries must correspond to the mA entries in cpu.active.</td>
Robert Ly35f2fda2013-01-29 16:27:05 -0800681</tr>
682
683<tr>
Heidi Millerbf752972014-10-28 16:49:15 -0700684 <td>cpu.idle</td>
685 <td>Total power drawn by the system when CPUs (and the SoC) are in system suspend state.</td>
Robert Ly35f2fda2013-01-29 16:27:05 -0800686 <td>3mA</td>
687 <td></td>
688</tr>
689
690<tr>
Heidi Millerbf752972014-10-28 16:49:15 -0700691 <td>cpu.awake</td>
692 <td>Additional power used when CPUs are in scheduling idle state (kernel idle loop); system is not
693 in system suspend state.</td>
Robert Ly35f2fda2013-01-29 16:27:05 -0800694 <td>50mA</td>
Clay Murphy314cc4e2015-04-03 14:35:53 -0700695 <td>Your platform might have more than one idle state in use with differing
696levels of power consumption; choose a representative idle state for longer
697periods of scheduler idle (several milliseconds). Examine the power graph on
698your measurement equipment and choose samples where the CPU is at its lowest
699consumption, discarding higher samples where the CPU exited idle.</td>
Robert Ly35f2fda2013-01-29 16:27:05 -0800700</tr>
701
702<tr>
Heidi Millerbf752972014-10-28 16:49:15 -0700703 <td>cpu.active</td>
704 <td>Additional power used by CPUs when running at different speeds.</td>
705 <td>100, 120, 140, 160, 200</td>
Robert Ly35f2fda2013-01-29 16:27:05 -0800706 <td>Set the max speed in the kernel to each of the allowed speeds and peg the CPU at that
707speed. The number of entries here correspond to the number of entries in cpu.speeds, in the
Heidi Millerbf752972014-10-28 16:49:15 -0700708same order.</td>
Robert Ly35f2fda2013-01-29 16:27:05 -0800709</tr>
710
711<tr>
Heidi Millerbf752972014-10-28 16:49:15 -0700712 <td>battery.capacity</td>
713 <td>The total battery capacity in mAh.</td>
Robert Ly35f2fda2013-01-29 16:27:05 -0800714 <td>3000mAh</td>
715 <td></td>
716</tr>
717
718</table>
719
Heidi Millerbf752972014-10-28 16:49:15 -0700720<p>The power_profile.xml file is placed in an overlay in
721device///frameworks/base/core/res/res/xml/power_profile.xml</p>
722
723<h3 id="sample">Sample file</h3>
724
Robert Ly35f2fda2013-01-29 16:27:05 -0800725<pre>
726&lt;!-- Most values are the incremental current used by a feature, in mA (measured at
Heidi Millerbf752972014-10-28 16:49:15 -0700727nominal voltage). OEMs must measure and provide actual values before shipping a device.
728Example real-world values are given, but are dependent on the platform
Robert Ly35f2fda2013-01-29 16:27:05 -0800729and can vary significantly, so should be measured on the shipping platform with a power meter.
730--&gt;
7310
732200
733160
73410
735&lt;!-- Bluetooth stereo audio playback 10.0 mA --&gt;
7361.3
7370.5
73830
739100
74012
74150
74250
74375
7441.1
745&lt;!-- Strength 0 to BINS-1 (4) --&gt;
7461.1
747
748&lt;!-- Different CPU speeds as reported in
749/sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state --&gt;
750
751250000 <!-- 250 MHz -->
752500000 <!-- 500 MHz -->
753750000 <!-- 750 MHz -->
7541000000 <!-- 1 GHz -->
7551200000 <!-- 1.2 GHz -->
756
757&lt;!-- Power consumption when CPU is idle --&gt;
7583.0
75950.1
760&lt;!-- Power consumption at different speeds --&gt;
761
762100 &lt;!-- 250 MHz --&gt;
763120 &lt;!-- 500 MHz --&gt;
764140 &lt;!-- 750 MHz --&gt;
765155 &lt;!-- 1 GHz --&gt;
766175 &lt;!-- 1.2 GHz --&gt;
767
768&lt;!-- This is the battery capacity in mAh --&gt;
7693000
770&lt;!-- Battery capacity is 3000 mAH (at 3.6 Volts) --&gt;
771
Clay Murphy314cc4e2015-04-03 14:35:53 -0700772</pre>