| OLD | NEW |
| 1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
| 2 <!-- | 2 <!-- |
| 3 Copyright 2016 The Chromium Authors. All rights reserved. | 3 Copyright 2016 The Chromium Authors. All rights reserved. |
| 4 Use of this source code is governed by a BSD-style license that can be | 4 Use of this source code is governed by a BSD-style license that can be |
| 5 found in the LICENSE file. | 5 found in the LICENSE file. |
| 6 --> | 6 --> |
| 7 | 7 |
| 8 <link rel="import" href="/tracing/base/statistics.html"> | 8 <link rel="import" href="/tracing/base/statistics.html"> |
| 9 <link rel="import" href="/tracing/metrics/metric_registry.html"> | 9 <link rel="import" href="/tracing/metrics/metric_registry.html"> |
| 10 <link rel="import" href="/tracing/metrics/system_health/clock_sync_latency_metri
c.html"> | 10 <link rel="import" href="/tracing/metrics/system_health/clock_sync_latency_metri
c.html"> |
| 11 <link rel="import" href="/tracing/value/histogram.html"> | 11 <link rel="import" href="/tracing/value/histogram.html"> |
| 12 <link rel="import" href="/tracing/value/unit_scale.html"> | 12 <link rel="import" href="/tracing/value/unit_scale.html"> |
| 13 <link rel="import" href="/tracing/value/value.html"> | 13 <link rel="import" href="/tracing/value/value.html"> |
| 14 | 14 |
| 15 <script> | 15 <script> |
| 16 'use strict'; | 16 'use strict'; |
| 17 | 17 |
| 18 tr.exportTo('tr.metrics.sh', function() { | 18 tr.exportTo('tr.metrics.sh', function() { |
| 19 var TIME_NUMERIC_BUILDER = tr.v.NumericBuilder.createExponential( | |
| 20 tr.v.Unit.byName.timeDurationInMs_smallerIsBetter, | |
| 21 tr.b.Range.fromExplicitRange(1e-3, 1e6), 50); | |
| 22 | |
| 23 var ENERGY_NUMERIC_BUILDER = tr.v.NumericBuilder.createExponential( | |
| 24 tr.v.Unit.byName.energyInJoules_smallerIsBetter, | |
| 25 tr.b.Range.fromExplicitRange(1e-3, 1e3), 50); | |
| 26 | |
| 27 var POWER_NUMERIC_BUILDER = tr.v.NumericBuilder.createExponential( | |
| 28 tr.v.Unit.byName.powerInWatts_smallerIsBetter, | |
| 29 tr.b.Range.fromExplicitRange(1e-3, 1e3), 50); | |
| 30 | |
| 31 function railPowerMetricHelper(values, model) { | 19 function railPowerMetricHelper(values, model) { |
| 32 var railStageTimes = new Map(); | 20 var railStageTimes = new Map(); |
| 33 var railStageEnergy = new Map(); | 21 var railStageEnergy = new Map(); |
| 34 | 22 |
| 35 for (var exp of model.userModel.expectations) { | 23 for (var exp of model.userModel.expectations) { |
| 36 var currTitle = exp.title.toLowerCase().replace(' ', '_'); | 24 var currTitle = exp.title.toLowerCase().replace(' ', '_'); |
| 37 var currTime = 0; | 25 var currTime = 0; |
| 38 var currEnergy = 0; | 26 var currEnergy = 0; |
| 39 if (railStageTimes.has(currTitle)) { | 27 if (railStageTimes.has(currTitle)) { |
| 40 currTime = railStageTimes.get(currTitle); | 28 currTime = railStageTimes.get(currTitle); |
| 41 currEnergy = railStageEnergy.get(currTitle); | 29 currEnergy = railStageEnergy.get(currTitle); |
| 42 } | 30 } |
| 43 var thisTime = exp.duration; | 31 var thisTime = exp.duration; |
| 44 var thisEnergy = model.device.powerSeries.getEnergyConsumedInJ( | 32 var thisEnergy = model.device.powerSeries.getEnergyConsumedInJ( |
| 45 exp.start, exp.end); | 33 exp.start, exp.end); |
| 46 railStageTimes.set(currTitle, currTime + thisTime); | 34 railStageTimes.set(currTitle, currTime + thisTime); |
| 47 railStageEnergy.set(currTitle, currEnergy + thisEnergy); | 35 railStageEnergy.set(currTitle, currEnergy + thisEnergy); |
| 48 } | 36 } |
| 49 | 37 |
| 50 for (var [title, durationMs] of railStageTimes) { | 38 for (var [title, durationMs] of railStageTimes) { |
| 51 var energyInJ = railStageEnergy.get(title); | 39 var energyInJ = railStageEnergy.get(title); |
| 52 var durationInMs = railStageTimes.get(title); | 40 var durationInMs = railStageTimes.get(title); |
| 53 var durationInS = tr.v.convertUnit(durationInMs, | 41 var durationInS = tr.v.convertUnit(durationInMs, |
| 54 tr.v.UnitScale.Metric.MILLI, tr.v.UnitScale.Metric.NONE); | 42 tr.v.UnitScale.Metric.MILLI, tr.v.UnitScale.Metric.NONE); |
| 55 var powerInW = energyInJ / durationInS; | 43 var powerInW = energyInJ / durationInS; |
| 56 | 44 |
| 57 var durationHist = TIME_NUMERIC_BUILDER.build(); | 45 var durationHist = new tr.v.Histogram( |
| 46 tr.v.Unit.byName.timeDurationInMs_smallerIsBetter); |
| 58 durationHist.add(durationInMs); | 47 durationHist.add(durationInMs); |
| 59 values.addValue(new tr.v.NumericValue('total_time_' + title, durationHist, | 48 values.addValue(new tr.v.NumericValue('total_time_' + title, durationHist, |
| 60 {description: 'Time spent in RAIL stage ' + title})); | 49 {description: 'Time spent in RAIL stage ' + title})); |
| 61 | 50 |
| 62 var energyHist = ENERGY_NUMERIC_BUILDER.build(); | 51 var energyHist = new tr.v.Histogram( |
| 52 tr.v.Unit.byName.energyInJoules_smallerIsBetter); |
| 63 energyHist.add(energyInJ); | 53 energyHist.add(energyInJ); |
| 64 values.addValue(new tr.v.NumericValue('total_energy_' + title, energyHist, | 54 values.addValue(new tr.v.NumericValue('total_energy_' + title, energyHist, |
| 65 {description: 'Energy consumed in RAIL stage ' + title})); | 55 {description: 'Energy consumed in RAIL stage ' + title})); |
| 66 | 56 |
| 67 var powerHist = POWER_NUMERIC_BUILDER.build(); | 57 var powerHist = new tr.v.Histogram( |
| 58 tr.v.Unit.byName.powerInWatts_smallerIsBetter); |
| 68 powerHist.add(powerInW); | 59 powerHist.add(powerInW); |
| 69 values.addValue(new tr.v.NumericValue('energy_consumption_rate_' + title, | 60 values.addValue(new tr.v.NumericValue('energy_consumption_rate_' + title, |
| 70 powerHist, | 61 powerHist, {description: 'Energy consumption rate for RAIL stage ' + |
| 71 {description: 'Energy consumption rate for RAIL stage ' + title})); | 62 title})); |
| 72 } | 63 } |
| 73 } | 64 } |
| 74 | 65 |
| 75 function railPowerMetric(values, model) { | 66 function railPowerMetric(values, model) { |
| 76 if (!model.device.powerSeries) | 67 if (!model.device.powerSeries) |
| 77 return; | 68 return; |
| 78 railPowerMetricHelper(values, model); | 69 railPowerMetricHelper(values, model); |
| 79 } | 70 } |
| 80 | 71 |
| 81 tr.metrics.MetricRegistry.register(railPowerMetric); | 72 tr.metrics.MetricRegistry.register(railPowerMetric); |
| 82 | 73 |
| 83 return { | 74 return { |
| 84 railPowerMetric: railPowerMetric | 75 railPowerMetric: railPowerMetric |
| 85 }; | 76 }; |
| 86 }); | 77 }); |
| 87 </script> | 78 </script> |
| OLD | NEW |