[chromeos] Add a battery discharge rate plot to about:power page.

BUG=333087
TBR=sky

Review URL: https://codereview.chromium.org/140663004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@245349 0039d316-1c4b-4281-b951-d872f2087c98
parent a5c58ab8
......@@ -468,7 +468,7 @@ deps_os = {
# For Linux and Chromium OS.
"src/third_party/cros_system_api":
Var("chromiumos_git") + "/platform/system_api.git" +
"@cfa23a554dcb262bfac10f9f5ac624d26c8c4e38",
"@6445c9773efbcbcbc4077c349f846b18c525b3eb",
# Note that this is different from Android's freetype repo.
"src/third_party/freetype2/src":
......
......@@ -15432,9 +15432,15 @@ Do you accept?
<message name="IDS_ABOUT_POWER_RELOAD_BUTTON" desc="Text on the reload button">
Reload
</message>
<message name="IDS_ABOUT_POWER_BATTERY_CHARGE_HEADER" desc="Header of the battery charge section">
<message name="IDS_ABOUT_POWER_BATTERY_CHARGE_PERCENTAGE_HEADER" desc="Header of the battery charge plot">
Battery Charge Percentage
</message>
<message name="IDS_ABOUT_POWER_BATTERY_DISCHARGE_RATE_HEADER" desc="Header of the battery discharge rate plot">
Battery Discharge Rate in Watts
</message>
<message name="IDS_ABOUT_POWER_NEGATIVE_DISCHARGE_RATE_INFO" desc="Describes what a negative discharge rate means">
Negative discharge rate means the battery is charging
</message>
<message name="IDS_ABOUT_POWER_NOT_ENOUGH_DATA" desc="String to display when enough plot data is not available">
Not enough data available yet.
</message>
......
......@@ -12,10 +12,19 @@
<body i18n-values=".style.fontFamily:fontfamily;.style.fontSize:fontsize">
<div id="main-layout">
<div id="battery-charge-section">
<h3 i18n-content="batteryChargeHeader"></h3>
<h3 i18n-content="batteryChargePercentageHeader"></h3>
<div class="plot-canvas-div">
<canvas id="battery-charge-canvas" width="600" height="200"></canvas>
<canvas id="battery-charge-percentage-canvas" width="600" height="200">
</canvas>
</div>
<h3 i18n-content="batteryDischargeRateHeader"></h3>
<p i18n-content="negativeDischargeRateInfo"></p>
<div class="plot-canvas-div">
<canvas id="battery-discharge-rate-canvas" width="600" height="200">
</canvas>
</div>
<button id="battery-charge-reload-button" class="reload-button"
i18n-content="reloadButton">
</button>
......
......@@ -236,22 +236,48 @@ function plotLineGraph(canvas, tData, plots, yMin, yMax, yPrecision) {
* taken, and whether there was external power connected at that time.
*/
function showBatteryChargeData(powerSupplyArray) {
var canvas = $('battery-charge-canvas');
var tData = [];
var plot = [];
var chargePlot = [
{
color: '#0000FF',
data: []
}
];
var dischargeRatePlot = [
{
color: '#FF0000',
data: []
}
];
var minDischargeRate = 1000; // A high unrealistic number to begin with.
var maxDischargeRate = -1000; // A low unrealistic number to begin with.
for (var i = 0; i < powerSupplyArray.length; i++) {
var time = new Date(powerSupplyArray[i].time);
tData[i] = time.toLocaleTimeString();
plot[i] = powerSupplyArray[i].battery_percent;
chargePlot[0].data[i] = powerSupplyArray[i].battery_percent;
var dischargeRate = powerSupplyArray[i].battery_discharge_rate;
dischargeRatePlot[0].data[i] = dischargeRate;
minDischargeRate = Math.min(dischargeRate, minDischargeRate);
maxDischargeRate = Math.max(dischargeRate, maxDischargeRate);
}
if (minDischargeRate == maxDischargeRate) {
// This means that all the samples had the same value. Hence, offset the
// extremes by a bit so that the plot looks good.
minDischargeRate -= 1;
maxDischargeRate += 1;
}
var plots = [
{
color: '#0000FF',
data: plot
}
];
plotLineGraph(canvas, tData, plots, 0.00, 100.00, 3);
var chargeCanvas = $('battery-charge-percentage-canvas');
var dischargeRateCanvas = $('battery-discharge-rate-canvas');
plotLineGraph(chargeCanvas, tData, chargePlot, 0.00, 100.00, 3);
plotLineGraph(dischargeRateCanvas,
tData,
dischargeRatePlot,
minDischargeRate,
maxDischargeRate,
3);
}
function requestBatteryChargeData() {
......
......@@ -64,6 +64,8 @@ void PowerMessageHandler::OnGetBatteryChargeData(const base::ListValue* value) {
(base::TimeTicks::Now() - snapshot.time);
scoped_ptr<base::DictionaryValue> element(new base::DictionaryValue);
element->SetDouble("battery_percent", snapshot.battery_percent);
element->SetDouble("battery_discharge_rate",
snapshot.battery_discharge_rate);
element->SetBoolean("external_power", snapshot.external_power);
element->SetDouble("time", time.ToJsTime());
......@@ -84,8 +86,12 @@ PowerUI::PowerUI(content::WebUI* web_ui) : content::WebUIController(web_ui) {
html->AddLocalizedString("titleText", IDS_ABOUT_POWER_TITLE);
html->AddLocalizedString("reloadButton", IDS_ABOUT_POWER_RELOAD_BUTTON);
html->AddLocalizedString("batteryChargeHeader",
IDS_ABOUT_POWER_BATTERY_CHARGE_HEADER);
html->AddLocalizedString("batteryChargePercentageHeader",
IDS_ABOUT_POWER_BATTERY_CHARGE_PERCENTAGE_HEADER);
html->AddLocalizedString("batteryDischargeRateHeader",
IDS_ABOUT_POWER_BATTERY_DISCHARGE_RATE_HEADER);
html->AddLocalizedString("negativeDischargeRateInfo",
IDS_ABOUT_POWER_NEGATIVE_DISCHARGE_RATE_INFO);
html->AddLocalizedString("notEnoughDataAvailableYet",
IDS_ABOUT_POWER_NOT_ENOUGH_DATA);
html->AddLocalizedString("timeAndPlotDataMismatch",
......
......@@ -49,6 +49,7 @@ void PowerDataCollector::PowerChanged(
snapshot.external_power = (prop.external_power() !=
power_manager::PowerSupplyProperties::DISCONNECTED);
snapshot.battery_percent = prop.battery_percent();
snapshot.battery_discharge_rate = prop.battery_discharge_rate();
AddSnapshot(snapshot);
}
......@@ -78,7 +79,8 @@ void PowerDataCollector::AddSnapshot(const PowerSupplySnapshot& snapshot) {
PowerDataCollector::PowerSupplySnapshot::PowerSupplySnapshot()
: time(base::TimeTicks::Now()),
external_power(false),
battery_percent(0) {
battery_percent(0),
battery_discharge_rate(0.0) {
}
} // namespace chromeos
......@@ -38,6 +38,10 @@ class CHROMEOS_EXPORT PowerDataCollector : public PowerManagerClient::Observer {
// The battery charge as a percentage of full charge in range [0.0, 100.00].
double battery_percent;
// The battery discharge rate in W. Positive if the battery is being
// discharged and negative if it's being charged.
double battery_discharge_rate;
};
const std::deque<PowerSupplySnapshot>& power_supply_data() const {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment