Chromium Code Reviews| Index: Source/devtools/front_end/TimelinePowerOverview.js |
| diff --git a/Source/devtools/front_end/TimelinePowerOverview.js b/Source/devtools/front_end/TimelinePowerOverview.js |
| index e6c511f0ed7051e5be67809e8dafcdeeb564e96f..611c61b553dd7eca3d375ef521321defe1357490 100644 |
| --- a/Source/devtools/front_end/TimelinePowerOverview.js |
| +++ b/Source/devtools/front_end/TimelinePowerOverview.js |
| @@ -9,6 +9,8 @@ |
| WebInspector.TimelinePowerOverviewDataProvider = function() |
| { |
| this._records = []; |
| + this._energies = []; |
| + this._times = []; |
| if (Capabilities.canProfilePower) |
| WebInspector.powerProfiler.addEventListener(WebInspector.PowerProfiler.EventTypes.PowerEventRecorded, this._onRecordAdded, this); |
| } |
| @@ -23,15 +25,52 @@ WebInspector.TimelinePowerOverviewDataProvider.prototype = { |
| return this._records.slice(0, this._records.length - 1); |
| }, |
| + /** |
| + * @param {number} minTime |
| + * @param {number} maxTime |
| + */ |
| + _calculateEnergy : function(minTime, maxTime) |
| + { |
| + var times = this._times; |
| + var energies = this._energies; |
| + |
| + if (times.length < 2) |
| + return 0; |
| + |
| + // Maximum index of element whose time <= minTime. |
| + var start = minTime >= times[0] ? Number.constrain(times.upperBound(minTime) - 1, 0, times.length - 1) : 0; |
|
alph
2014/04/09 16:02:27
no need for "minTime >= times[0]" check as constra
Pan
2014/04/10 13:38:57
Done.
|
| + |
| + // Minimum index of element whose time >= maxTime. |
| + var end = maxTime <= times[times.length - 1] ? Number.constrain(times.lowerBound(maxTime), 0, times.length - 1) : times.length - 1; |
|
alph
2014/04/09 16:02:27
ditto for maxTime <= times[...] check.
Pan
2014/04/10 13:38:57
Done.
|
| + |
| + if (start + 1 === end) |
|
alph
2014/04/09 16:02:27
There seems to be another case when start === end,
Pan
2014/04/10 13:38:57
thanks, I'd like to return 0 when window is out of
|
| + return (maxTime - minTime) / (times[end] - times[start]) * (energies[end] - energies[start]) / 1000; |
|
alph
2014/04/09 16:02:27
seems to be incorrect if minTime < times[0].
same
Pan
2014/04/10 13:38:57
thanks, if window's range is bigger than times[],
|
| + |
| + var totalEnergy = 0; |
| + totalEnergy += energies[end - 1] - energies[start + 1]; |
| + totalEnergy += (times[start + 1] - minTime) / (times[start + 1] - times[start]) * (energies[start + 1] - energies[start]); |
|
alph
2014/04/09 16:02:27
A case of minTime < times[0] and the same at the o
Pan
2014/04/10 13:38:57
Done.
|
| + totalEnergy += (maxTime - times[end - 1]) / (times[end] - times[end - 1]) * (energies[end] - energies[end - 1]); |
| + return totalEnergy / 1000; |
| + }, |
| + |
| _onRecordAdded: function(event) |
| { |
| // "value" of original PowerEvent means the average power between previous sampling to current one. |
| // Here, it is converted to average power between current sampling to next one. |
| var record = event.data; |
| + var curTime = record.timestamp; |
| var length = this._records.length; |
| - if (length) |
| + var accumulatedEnergy = 0; |
| + if (length) { |
| this._records[length - 1].value = record.value; |
| + |
| + var prevTime = this._records[length - 1].timestamp; |
| + accumulatedEnergy = this._energies[length - 1]; |
| + accumulatedEnergy += (curTime - prevTime) * record.value; |
| + } |
| + this._energies.push(accumulatedEnergy); |
| this._records.push(record); |
| + this._times.push(curTime); |
| }, |
| __proto__: WebInspector.Object.prototype |
| @@ -145,7 +184,16 @@ WebInspector.TimelinePowerOverview.prototype = { |
| ctx.restore(); |
| this._maxPowerLabel.textContent = WebInspector.UIString("%.2f\u2009watts", maxPower); |
| - this._minPowerLabel.textContent = WebInspector.UIString("%.2f\u2009watts", minPower);; |
| + this._minPowerLabel.textContent = WebInspector.UIString("%.2f\u2009watts", minPower); |
| + }, |
| + |
| + /** |
| + * @param {number} minTime |
| + * @param {number} maxTime |
| + */ |
| + calculateEnergy: function(minTime, maxTime) |
| + { |
| + return this._dataProvider._calculateEnergy(minTime, maxTime); |
| }, |
| __proto__: WebInspector.TimelineOverviewBase.prototype |