blob: fec16911a467e48e13d25c6ebac6ffc5ca694798 [file] [log] [blame]
<!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>