[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 = { ...@@ -468,7 +468,7 @@ deps_os = {
# For Linux and Chromium OS. # For Linux and Chromium OS.
"src/third_party/cros_system_api": "src/third_party/cros_system_api":
Var("chromiumos_git") + "/platform/system_api.git" + Var("chromiumos_git") + "/platform/system_api.git" +
"@cfa23a554dcb262bfac10f9f5ac624d26c8c4e38", "@6445c9773efbcbcbc4077c349f846b18c525b3eb",
# Note that this is different from Android's freetype repo. # Note that this is different from Android's freetype repo.
"src/third_party/freetype2/src": "src/third_party/freetype2/src":
......
...@@ -15432,9 +15432,15 @@ Do you accept? ...@@ -15432,9 +15432,15 @@ Do you accept?
<message name="IDS_ABOUT_POWER_RELOAD_BUTTON" desc="Text on the reload button"> <message name="IDS_ABOUT_POWER_RELOAD_BUTTON" desc="Text on the reload button">
Reload Reload
</message> </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 Battery Charge Percentage
</message> </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"> <message name="IDS_ABOUT_POWER_NOT_ENOUGH_DATA" desc="String to display when enough plot data is not available">
Not enough data available yet. Not enough data available yet.
</message> </message>
......
...@@ -12,10 +12,19 @@ ...@@ -12,10 +12,19 @@
<body i18n-values=".style.fontFamily:fontfamily;.style.fontSize:fontsize"> <body i18n-values=".style.fontFamily:fontfamily;.style.fontSize:fontsize">
<div id="main-layout"> <div id="main-layout">
<div id="battery-charge-section"> <div id="battery-charge-section">
<h3 i18n-content="batteryChargeHeader"></h3> <h3 i18n-content="batteryChargePercentageHeader"></h3>
<div class="plot-canvas-div"> <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> </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" <button id="battery-charge-reload-button" class="reload-button"
i18n-content="reloadButton"> i18n-content="reloadButton">
</button> </button>
......
...@@ -236,22 +236,48 @@ function plotLineGraph(canvas, tData, plots, yMin, yMax, yPrecision) { ...@@ -236,22 +236,48 @@ function plotLineGraph(canvas, tData, plots, yMin, yMax, yPrecision) {
* taken, and whether there was external power connected at that time. * taken, and whether there was external power connected at that time.
*/ */
function showBatteryChargeData(powerSupplyArray) { function showBatteryChargeData(powerSupplyArray) {
var canvas = $('battery-charge-canvas');
var tData = []; 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++) { for (var i = 0; i < powerSupplyArray.length; i++) {
var time = new Date(powerSupplyArray[i].time); var time = new Date(powerSupplyArray[i].time);
tData[i] = time.toLocaleTimeString(); 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 = [ var chargeCanvas = $('battery-charge-percentage-canvas');
{ var dischargeRateCanvas = $('battery-discharge-rate-canvas');
color: '#0000FF', plotLineGraph(chargeCanvas, tData, chargePlot, 0.00, 100.00, 3);
data: plot plotLineGraph(dischargeRateCanvas,
} tData,
]; dischargeRatePlot,
plotLineGraph(canvas, tData, plots, 0.00, 100.00, 3); minDischargeRate,
maxDischargeRate,
3);
} }
function requestBatteryChargeData() { function requestBatteryChargeData() {
......
...@@ -64,6 +64,8 @@ void PowerMessageHandler::OnGetBatteryChargeData(const base::ListValue* value) { ...@@ -64,6 +64,8 @@ void PowerMessageHandler::OnGetBatteryChargeData(const base::ListValue* value) {
(base::TimeTicks::Now() - snapshot.time); (base::TimeTicks::Now() - snapshot.time);
scoped_ptr<base::DictionaryValue> element(new base::DictionaryValue); scoped_ptr<base::DictionaryValue> element(new base::DictionaryValue);
element->SetDouble("battery_percent", snapshot.battery_percent); element->SetDouble("battery_percent", snapshot.battery_percent);
element->SetDouble("battery_discharge_rate",
snapshot.battery_discharge_rate);
element->SetBoolean("external_power", snapshot.external_power); element->SetBoolean("external_power", snapshot.external_power);
element->SetDouble("time", time.ToJsTime()); element->SetDouble("time", time.ToJsTime());
...@@ -84,8 +86,12 @@ PowerUI::PowerUI(content::WebUI* web_ui) : content::WebUIController(web_ui) { ...@@ -84,8 +86,12 @@ PowerUI::PowerUI(content::WebUI* web_ui) : content::WebUIController(web_ui) {
html->AddLocalizedString("titleText", IDS_ABOUT_POWER_TITLE); html->AddLocalizedString("titleText", IDS_ABOUT_POWER_TITLE);
html->AddLocalizedString("reloadButton", IDS_ABOUT_POWER_RELOAD_BUTTON); html->AddLocalizedString("reloadButton", IDS_ABOUT_POWER_RELOAD_BUTTON);
html->AddLocalizedString("batteryChargeHeader", html->AddLocalizedString("batteryChargePercentageHeader",
IDS_ABOUT_POWER_BATTERY_CHARGE_HEADER); 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", html->AddLocalizedString("notEnoughDataAvailableYet",
IDS_ABOUT_POWER_NOT_ENOUGH_DATA); IDS_ABOUT_POWER_NOT_ENOUGH_DATA);
html->AddLocalizedString("timeAndPlotDataMismatch", html->AddLocalizedString("timeAndPlotDataMismatch",
......
...@@ -49,6 +49,7 @@ void PowerDataCollector::PowerChanged( ...@@ -49,6 +49,7 @@ void PowerDataCollector::PowerChanged(
snapshot.external_power = (prop.external_power() != snapshot.external_power = (prop.external_power() !=
power_manager::PowerSupplyProperties::DISCONNECTED); power_manager::PowerSupplyProperties::DISCONNECTED);
snapshot.battery_percent = prop.battery_percent(); snapshot.battery_percent = prop.battery_percent();
snapshot.battery_discharge_rate = prop.battery_discharge_rate();
AddSnapshot(snapshot); AddSnapshot(snapshot);
} }
...@@ -78,7 +79,8 @@ void PowerDataCollector::AddSnapshot(const PowerSupplySnapshot& snapshot) { ...@@ -78,7 +79,8 @@ void PowerDataCollector::AddSnapshot(const PowerSupplySnapshot& snapshot) {
PowerDataCollector::PowerSupplySnapshot::PowerSupplySnapshot() PowerDataCollector::PowerSupplySnapshot::PowerSupplySnapshot()
: time(base::TimeTicks::Now()), : time(base::TimeTicks::Now()),
external_power(false), external_power(false),
battery_percent(0) { battery_percent(0),
battery_discharge_rate(0.0) {
} }
} // namespace chromeos } // namespace chromeos
...@@ -38,6 +38,10 @@ class CHROMEOS_EXPORT PowerDataCollector : public PowerManagerClient::Observer { ...@@ -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]. // The battery charge as a percentage of full charge in range [0.0, 100.00].
double battery_percent; 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 { 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