| <!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> |