| <!DOCTYPE html> |
| <!-- |
| Copyright 2016 The Chromium Authors. All rights reserved. |
| Use of this source code is governed by a BSD-style license that can be |
| found in the LICENSE file. |
| --> |
| |
| <link rel="import" href="/tracing/core/test_utils.html"> |
| <link rel="import" href="/tracing/metrics/system_health/rail_power_metric.html"> |
| <link rel="import" href="/tracing/model/user_model/idle_expectation.html"> |
| <link rel="import" href="/tracing/model/user_model/load_expectation.html"> |
| <link rel="import" href="/tracing/value/value_set.html"> |
| |
| <script> |
| 'use strict'; |
| |
| function getMetricValueSum(values, name) { |
| for (var value of values) |
| if (value.name === name) |
| return value.sum; |
| } |
| |
| function getMetricValueAvg(values, name) { |
| for (var value of values) |
| if (value.name === name) |
| return value.average; |
| } |
| |
| tr.b.unittest.testSuite(function() { |
| test('railPowerMetric_oneStageEachType', function() { |
| var model = new tr.Model(); |
| var valueSet = new tr.v.ValueSet(); |
| model.device.powerSeries = new tr.model.PowerSeries(model.device); |
| for (var i = 0; i <= 1000; i++) { |
| model.device.powerSeries.addPowerSample(i.toString(), i.toString()); |
| } |
| model.userModel.expectations.push(new tr.model.um.LoadExpectation( |
| model, tr.model.um.LOAD_SUBTYPE_NAMES.SUCCESSFUL, 0, 500)); |
| model.userModel.expectations.push(new tr.model.um.IdleExpectation( |
| model, 500, 500)); |
| tr.metrics.sh.railPowerMetric(valueSet, model); |
| |
| assert.equal(getMetricValueSum(valueSet, |
| 'time:successful_load'), 500); |
| assert.equal(getMetricValueSum(valueSet, |
| 'time:idle'), 500); |
| assert.closeTo(getMetricValueSum(valueSet, |
| 'energy:successful_load'), 125, 0.5); |
| assert.closeTo(getMetricValueSum(valueSet, |
| 'energy:idle'), 375, 0.5); |
| assert.closeTo(getMetricValueAvg(valueSet, |
| 'power:successful_load'), 250, 0.5); |
| assert.closeTo(getMetricValueAvg(valueSet, |
| 'power:idle'), 750, 0.5); |
| }); |
| |
| test('railPowerMetric_multipleStagesEachType', function() { |
| var model = new tr.Model(); |
| var valueSet = new tr.v.ValueSet(); |
| model.device.powerSeries = new tr.model.PowerSeries(model.device); |
| for (var i = 0; i <= 1000; i++) { |
| model.device.powerSeries.addPowerSample(i.toString(), i.toString()); |
| } |
| model.userModel.expectations.push(new tr.model.um.LoadExpectation( |
| model, tr.model.um.LOAD_SUBTYPE_NAMES.SUCCESSFUL, 0, 200)); |
| model.userModel.expectations.push(new tr.model.um.IdleExpectation( |
| model, 200, 300)); |
| model.userModel.expectations.push(new tr.model.um.LoadExpectation( |
| model, tr.model.um.LOAD_SUBTYPE_NAMES.SUCCESSFUL, 500, 200)); |
| model.userModel.expectations.push(new tr.model.um.IdleExpectation( |
| model, 700, 300)); |
| tr.metrics.sh.railPowerMetric(valueSet, model); |
| |
| assert.equal(getMetricValueSum(valueSet, |
| 'time:successful_load'), 400); |
| assert.equal(getMetricValueSum(valueSet, |
| 'time:idle'), 600); |
| assert.closeTo(getMetricValueSum(valueSet, |
| 'energy:successful_load'), 140, 0.5); |
| assert.closeTo(getMetricValueSum(valueSet, |
| 'energy:idle'), 360, 0.5); |
| assert.closeTo(getMetricValueAvg(valueSet, |
| 'power:successful_load'), 350, 0.5); |
| assert.closeTo(getMetricValueAvg(valueSet, |
| 'power:idle'), 600, 0.5); |
| }); |
| |
| test('railPowerMetric_noPowerSeries', function() { |
| var model = new tr.Model(); |
| var valueSet = new tr.v.ValueSet(); |
| tr.metrics.sh.railPowerMetric(valueSet, model); |
| assert.lengthOf(valueSet, 0); |
| }); |
| }); |
| </script> |