blob: b12c675499a60d127b29b0a8eb0a671a02c03a48 [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/scroll_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.AnimationExpectation(
model, "Scroll", 0, 500));
model.userModel.expectations.push(new tr.model.um.IdleExpectation(
model, 500, 500));
tr.metrics.sh.scrollPowerMetric(valueSet, model);
assert.equal(getMetricValueSum(valueSet,
'time:scroll'), 500);
assert.closeTo(getMetricValueSum(valueSet,
'energy:scroll'), 125, 0.5);
assert.closeTo(getMetricValueAvg(valueSet,
'power:scroll'), 250, 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.AnimationExpectation(
model, "Scroll", 0, 200));
model.userModel.expectations.push(new tr.model.um.IdleExpectation(
model, 200, 300));
model.userModel.expectations.push(new tr.model.um.AnimationExpectation(
model, "Touch, Scroll, Tap", 500, 200));
model.userModel.expectations.push(new tr.model.um.IdleExpectation(
model, 700, 300));
tr.metrics.sh.scrollPowerMetric(valueSet, model);
assert.equal(getMetricValueSum(valueSet,
'time:scroll'), 400);
assert.closeTo(getMetricValueSum(valueSet,
'energy:scroll'), 140, 0.5);
assert.closeTo(getMetricValueAvg(valueSet,
'power:scroll'), 350, 0.5);
});
test('railPowerMetric_noPowerSeries', function() {
var model = new tr.Model();
var valueSet = new tr.v.ValueSet();
tr.metrics.sh.scrollPowerMetric(valueSet, model);
var powerEntries = valueSet.valueDicts.filter(
(dict) => dict.name.indexOf('time:') === 0);
assert.lengthOf(powerEntries, 0);
});
});
</script>