blob: 64493d1c7088509a998e0ca91d3ca417a371f48f [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/base/range.html">
<link rel="import" href="/tracing/base/unit.html">
<link rel="import" href="/tracing/value/diagnostics/diagnostic_map.html">
<link rel="import" href="/tracing/value/diagnostics/generic.html">
<link rel="import" href="/tracing/value/histogram.html">
<link rel="import" href="/tracing/value/value_set.html">
<script>
'use strict';
tr.b.unittest.testSuite(function() {
test('addValuesFromDicts', function() {
var n = new tr.v.Histogram('foo', tr.b.Unit.byName.unitlessNumber);
var values = new tr.v.ValueSet([n]);
var values2 = new tr.v.ValueSet();
values2.addValuesFromDicts(values.valueDicts);
assert.lengthOf(values2.getValuesNamed('foo'), 1);
});
test('addValueFromDictsWithSampleDiagnostic', function() {
var n = new tr.v.Histogram('foo', tr.b.Unit.byName.count);
n.addSample(10, {bar: new tr.v.d.Generic('baz')});
var values = new tr.v.ValueSet([n]);
var values2 = new tr.v.ValueSet();
values2.addValuesFromDicts(values.valueDicts);
assert.lengthOf(values2.getValuesNamed('foo'), 1);
var v = values2.getValuesNamed('foo')[0];
assert.lengthOf(v.getBinForValue(10).diagnosticMaps, 1);
var dm = v.getBinForValue(10).diagnosticMaps[0];
assert.strictEqual(dm.size, 1);
assert.instanceOf(dm.get('bar'), tr.v.d.Generic);
assert.strictEqual(dm.get('bar').value, 'baz');
});
test('relatedValueSetDiagnostic', function() {
var unit = tr.b.Unit.byName.unitlessNumber;
var a = new tr.v.Histogram('a', unit);
var b = new tr.v.Histogram('b', unit);
var c = new tr.v.Histogram('c', unit);
a.diagnostics.set('rvs', new tr.v.d.RelatedValueSet([b, c]));
// Don't serialize c just yet.
var values = new tr.v.ValueSet([a, b]);
var sourceValues = values.sourceValues;
assert.lengthOf(sourceValues, 1);
assert.strictEqual(sourceValues[0], a);
var values2 = new tr.v.ValueSet();
values2.addValuesFromDicts(values.valueDicts);
var a2 = values2.getValuesNamed('a');
assert.lengthOf(a2, 1);
a2 = a2[0];
assert.strictEqual(a2.guid, a.guid);
assert.instanceOf(a2, tr.v.Histogram);
assert.notStrictEqual(a2, a);
var b2 = values2.getValuesNamed('b');
assert.lengthOf(b2, 1);
b2 = b2[0];
assert.strictEqual(b2.guid, b.guid);
assert.instanceOf(b2, tr.v.Histogram);
assert.notStrictEqual(b2, b);
var rvs2 = a2.diagnostics.get('rvs');
assert.instanceOf(rvs2, tr.v.d.RelatedValueSet);
assert.lengthOf(rvs2, 2);
// Assert that b and c are in a2's RelatedValueSet.
var rvs2vs = [...rvs2];
var rvs2guids = rvs2vs.map(v => v.guid);
var b2i = rvs2guids.indexOf(b.guid);
assert.strictEqual(rvs2vs[b2i], b2);
var c2i = rvs2guids.indexOf(c.guid);
assert.strictEqual(rvs2vs[c2i].guid, c.guid);
assert.instanceOf(rvs2vs[c2i], tr.v.d.ValueRef);
// Now serialize c and add it to values2.
// Related value resolution is idempotent.
// Old values can refer to new values.
values2.addValuesFromDicts([c.asDict()]);
var c2 = values2.getValuesNamed('c');
assert.lengthOf(c2, 1);
c2 = c2[0];
assert.strictEqual(c2.guid, c.guid);
assert.notStrictEqual(c2, c);
// Now a real c2 Value should be in a2's RelatedValueSet.
rvs2vs = [...rvs2];
rvs2guids = rvs2vs.map(v => v.guid);
b2i = rvs2guids.indexOf(b.guid);
c2i = rvs2guids.indexOf(c.guid);
assert.strictEqual(b2, rvs2vs[b2i]);
assert.strictEqual(c2, rvs2vs[c2i]);
});
test('relatedValueMapDiagnostic', function() {
var unit = tr.b.Unit.byName.unitlessNumber;
var a = new tr.v.Histogram('a', unit);
var b = new tr.v.Histogram('b', unit);
var c = new tr.v.Histogram('c', unit);
var rvm = new tr.v.d.RelatedValueMap();
rvm.set('y', b);
rvm.set('z', c);
a.diagnostics.set('rvm', rvm);
// Don't serialize c just yet.
var values = new tr.v.ValueSet([a, b]);
var sourceValues = values.sourceValues;
assert.lengthOf(sourceValues, 1);
assert.strictEqual(sourceValues[0], a);
var values2 = new tr.v.ValueSet();
values2.addValuesFromDicts(values.valueDicts);
var a2 = values2.getValuesNamed('a');
assert.lengthOf(a2, 1);
a2 = a2[0];
assert.strictEqual(a2.guid, a.guid);
assert.instanceOf(a2, tr.v.Histogram);
assert.notStrictEqual(a2, a);
var b2 = values2.getValuesNamed('b');
assert.lengthOf(b2, 1);
b2 = b2[0];
assert.strictEqual(b2.guid, b.guid);
assert.instanceOf(b2, tr.v.Histogram);
assert.notStrictEqual(b2, b);
var rvm2 = a2.diagnostics.get('rvm');
assert.instanceOf(rvm2, tr.v.d.RelatedValueMap);
assert.lengthOf(rvm2, 2);
// Assert that b and c are in a2's RelatedValueMap.
// |c| should still be a ValueRef since it wasn't in values2.
assert.strictEqual(rvm2.get('y'), b2);
assert.instanceOf(rvm2.get('z'), tr.v.d.ValueRef);
// Now serialize c and add it to values2.
// Related value resolution is idempotent.
// Old values can refer to new values.
values2.addValuesFromDicts([c.asDict()]);
var c2 = values2.getValuesNamed('c');
assert.lengthOf(c2, 1);
c2 = c2[0];
assert.strictEqual(c2.guid, c.guid);
assert.instanceOf(c2, tr.v.Histogram);
assert.notStrictEqual(c2, c);
// b2 should still be in a2's RelatedValueMap.
assert.strictEqual(rvm2.get('y'), b2);
// Now a real c2 Value should be in a2's RelatedValueMap.
assert.strictEqual(rvm2.get('z'), c2);
});
test('sourceValuesWithSampleDiagnostic', function() {
var unit = tr.b.Unit.byName.unitlessNumber;
var aHist = new tr.v.Histogram('a', unit);
aHist.addSample(1);
var numeric = new tr.v.Histogram('b', tr.b.Unit.byName.unitlessNumber);
numeric.addSample(1, {rvs: new tr.v.d.RelatedValueSet([aHist])});
var values = new tr.v.ValueSet([aHist, numeric]);
assert.lengthOf(values.sourceValues, 1);
assert.strictEqual(values.sourceValues[0], numeric);
});
});
</script>