blob: 79585ccd25dcfbc55c807f687669dd64f98daa3f [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright 2015 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/base/time_display_modes.html">
<link rel="import" href="/tracing/base/unit.html">
<link rel="import" href="/tracing/base/unit_scale.html">
<script>
'use strict';
tr.b.unittest.testSuite(function() {
var ImprovementDirection = tr.b.ImprovementDirection;
var Unit = tr.b.Unit;
var UnitScale = tr.b.UnitScale;
test('Unit.display-mode-changed', function() {
var TimeDisplayModes = tr.b.TimeDisplayModes;
var listenerWasCalled = false;
function listener(e) {
listenerWasCalled = true;
}
try {
Unit.currentTimeDisplayMode = TimeDisplayModes.ms;
Unit.addEventListener('display-mode-changed', listener);
listenerWasCalled = false;
Unit.currentTimeDisplayMode = TimeDisplayModes.ns;
assert.isTrue(listenerWasCalled);
assert.equal(Unit.currentTimeDisplayMode, TimeDisplayModes.ns);
} finally {
Unit.removeEventListener('display-mode-changed', listener);
Unit.reset();
}
});
function checkTimeUnit(unit) {
try {
// Use milliseconds to display time (default behavior).
Unit.currentTimeDisplayMode = tr.b.TimeDisplayModes.ms;
assert.strictEqual(unit.format(0), '0.000 ms');
assert.strictEqual(unit.format(0.02), '0.020 ms');
assert.strictEqual(unit.format(0.001), '0.001 ms');
assert.strictEqual(unit.format(0.0005), '0.001 ms');
assert.strictEqual(unit.format(0.00049), '0.000 ms');
assert.strictEqual(unit.format(999.999), '999.999 ms');
assert.strictEqual(unit.format(1000.001), '1,000.001 ms');
assert.strictEqual(unit.format(123456789), '123,456,789.000 ms');
assert.strictEqual(unit.format(-0.00051), '-0.001 ms');
assert.strictEqual(unit.format(-123456789), '-123,456,789.000 ms');
// Change the unit to nanoseconds.
Unit.currentTimeDisplayMode = tr.b.TimeDisplayModes.ns;
assert.strictEqual(unit.format(0), '0 ns');
assert.strictEqual(unit.format(1), '1,000,000 ns');
assert.strictEqual(unit.format(0.000042), '42 ns');
assert.strictEqual(unit.format(0.000001), '1 ns');
assert.strictEqual(unit.format(0.0000005), '1 ns');
assert.strictEqual(unit.format(0.00000049), '0 ns');
assert.strictEqual(unit.format(123.456), '123,456,000 ns');
assert.strictEqual(unit.format(-0.07), '-70,000 ns');
} finally {
Unit.reset();
}
}
test('timeStampInMs', function() {
assert.strictEqual(Unit.byName.timeStampInMs.unitName, 'timeStampInMs');
assert.strictEqual(Unit.byName.timeStampInMs.asJSON(), 'tsMs');
checkTimeUnit(Unit.byName.timeStampInMs);
});
test('timeDurationInMs', function() {
assert.strictEqual(Unit.byName.timeDurationInMs.unitName,
'timeDurationInMs');
assert.strictEqual(Unit.byName.timeDurationInMs.asJSON(), 'ms');
checkTimeUnit(Unit.byName.timeDurationInMs);
});
test('sizeInBytes', function() {
var SOURCE_VALUES = [0, 1, 1536, 424.5 * 1024 * 1024,
1025 * 1024 * 1024 * 1024 * 1024, -2.5 * 1024 * 1024];
var EXPECTED_REGULAR_FORMATTED_VALUES = ['0.0 B', '1.0 B', '1.5 KiB',
'424.5 MiB', '1,025.0 TiB', '-2.5 MiB'];
var EXPECTED_DELTA_FORMATTED_VALUES = ['\u00B10.0 B', '+1.0 B', '+1.5 KiB',
'+424.5 MiB', '+1,025.0 TiB', '-2.5 MiB'];
function checkSizeUnit(unit, expectation) {
assert.strictEqual(unit.unitName, expectation.unitName);
assert.strictEqual(unit.asJSON(), expectation.asJSON);
assert.strictEqual(unit.isDelta, expectation.isDelta);
assert.strictEqual(unit.baseUnit, expectation.baseUnit);
assert.strictEqual(unit.correspondingDeltaUnit,
expectation.correspondingDeltaUnit);
assert.strictEqual(unit.improvementDirection,
expectation.improvementDirection);
assert.deepEqual(SOURCE_VALUES.map(v => unit.format(v)),
expectation.formattedValues);
}
// Regular (non-delta).
checkSizeUnit(Unit.byName.sizeInBytes, {
unitName: 'sizeInBytes',
asJSON: 'sizeInBytes',
isDelta: false,
baseUnit: Unit.byName.sizeInBytes,
correspondingDeltaUnit: Unit.byName.sizeInBytesDelta,
improvementDirection: ImprovementDirection.DONT_CARE,
formattedValues: EXPECTED_REGULAR_FORMATTED_VALUES
});
checkSizeUnit(Unit.byName.sizeInBytes_smallerIsBetter, {
unitName: 'sizeInBytes_smallerIsBetter',
asJSON: 'sizeInBytes_smallerIsBetter',
isDelta: false,
baseUnit: Unit.byName.sizeInBytes,
correspondingDeltaUnit: Unit.byName.sizeInBytesDelta_smallerIsBetter,
improvementDirection: ImprovementDirection.SMALLER_IS_BETTER,
formattedValues: EXPECTED_REGULAR_FORMATTED_VALUES
});
checkSizeUnit(Unit.byName.sizeInBytes_biggerIsBetter, {
unitName: 'sizeInBytes_biggerIsBetter',
asJSON: 'sizeInBytes_biggerIsBetter',
isDelta: false,
baseUnit: Unit.byName.sizeInBytes,
correspondingDeltaUnit: Unit.byName.sizeInBytesDelta_biggerIsBetter,
improvementDirection: ImprovementDirection.BIGGER_IS_BETTER,
formattedValues: EXPECTED_REGULAR_FORMATTED_VALUES
});
// Delta.
checkSizeUnit(Unit.byName.sizeInBytesDelta, {
unitName: 'sizeInBytesDelta',
asJSON: 'sizeInBytesDelta',
isDelta: true,
baseUnit: Unit.byName.sizeInBytes,
correspondingDeltaUnit: Unit.byName.sizeInBytesDelta,
improvementDirection: ImprovementDirection.DONT_CARE,
formattedValues: EXPECTED_DELTA_FORMATTED_VALUES
});
checkSizeUnit(Unit.byName.sizeInBytesDelta_smallerIsBetter, {
unitName: 'sizeInBytesDelta_smallerIsBetter',
asJSON: 'sizeInBytesDelta_smallerIsBetter',
isDelta: true,
baseUnit: Unit.byName.sizeInBytes,
correspondingDeltaUnit: Unit.byName.sizeInBytesDelta_smallerIsBetter,
improvementDirection: ImprovementDirection.SMALLER_IS_BETTER,
formattedValues: EXPECTED_DELTA_FORMATTED_VALUES
});
checkSizeUnit(Unit.byName.sizeInBytesDelta_biggerIsBetter, {
unitName: 'sizeInBytesDelta_biggerIsBetter',
asJSON: 'sizeInBytesDelta_biggerIsBetter',
isDelta: true,
baseUnit: Unit.byName.sizeInBytes,
correspondingDeltaUnit: Unit.byName.sizeInBytesDelta_biggerIsBetter,
improvementDirection: ImprovementDirection.BIGGER_IS_BETTER,
formattedValues: EXPECTED_DELTA_FORMATTED_VALUES
});
});
test('context', function() {
assert.strictEqual(Unit.byName.timeStampInMs.format(0, {}), '0.000 ms');
assert.strictEqual(Unit.byName.normalizedPercentageDelta.format(1.23456,
{ maximumFractionDigits: 2 }), '+123.46%');
assert.strictEqual(Unit.byName.powerInWatts.format(999.999,
{ minimumFractionDigits: 5 }), '999.99900 W');
assert.strictEqual(Unit.byName.powerInWatts_biggerIsBetter.format(8.88,
{ minimumFractionDigits: 1 }), '8.88 W');
assert.strictEqual(Unit.byName.unitlessNumber.format(0.00789,
{ maximumFractionDigits: 6 }), '0.00789');
assert.strictEqual(Unit.byName.unitlessNumber.format(41.9,
{ maximumFractionDigits: 0 }), '42');
assert.strictEqual(
Unit.byName.energyInJoules.format(0.4444,
{ minimumFractionDigits: 2, maximumFractionDigits: 3 }),
'0.444 J');
assert.strictEqual(
Unit.byName.energyInJoules.format(0.6,
{ minimumFractionDigits: 2, maximumFractionDigits: 3 }),
'0.60 J');
assert.strictEqual(
Unit.byName.sizeInBytesDelta_smallerIsBetter.format(0,
{ minimumFractionDigits: 1, maximumFractionDigits: 1 }),
'\u00B10.0 B');
assert.strictEqual(
Unit.byName.sizeInBytes.format(25600000000,
{ unitPrefix: UnitScale.Binary.KIBI }),
'25,000,000.0 KiB');
assert.strictEqual(
Unit.byName.sizeInBytes.format(5243,
{ unitPrefix: UnitScale.Binary.MEBI, minimumFractionDigits: 2 }),
'0.01 MiB');
});
test('energyInJoules', function() {
assert.equal(Unit.byName.energyInJoules.format(1000), '1,000.000 J');
assert.equal(Unit.byName.energyInJoules.format(1), '1.000 J');
assert.equal(Unit.byName.energyInJoules.format(.005), '0.005 J');
assert.equal(Unit.byName.energyInJoules.format(.0005), '0.001 J');
assert.equal(Unit.byName.energyInJoules.format(.0004), '0.000 J');
});
test('powerInWatts', function() {
assert.equal(Unit.byName.powerInWatts.format(1000), '1,000.000 W');
assert.equal(Unit.byName.powerInWatts.format(1), '1.000 W');
assert.equal(Unit.byName.powerInWatts.format(.001), '0.001 W');
assert.equal(Unit.byName.powerInWatts.format(.001005), '0.001 W');
});
test('unitlessNumber', function() {
assert.equal(Unit.byName.unitlessNumber.format(1), '1.000');
assert.equal(Unit.byName.unitlessNumber.format(1.23), '1.230');
assert.equal(Unit.byName.unitlessNumber.format(-1.23), '-1.230');
assert.equal(Unit.byName.unitlessNumber.format(0), '0.000');
});
test('count', function() {
assert.equal(Unit.byName.count.format(0), '0');
assert.equal(Unit.byName.count.format(1), '1');
assert.equal(Unit.byName.count.format(100), '100');
});
});
</script>