OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <!-- | 2 <!-- |
3 Copyright 2016 The Chromium Authors. All rights reserved. | 3 Copyright 2016 The Chromium Authors. All rights reserved. |
4 Use of this source code is governed by a BSD-style license that can be | 4 Use of this source code is governed by a BSD-style license that can be |
5 found in the LICENSE file. | 5 found in the LICENSE file. |
6 --> | 6 --> |
7 | 7 |
8 <link rel="import" href="/tracing/core/test_utils.html"> | 8 <link rel="import" href="/tracing/core/test_utils.html"> |
9 <link rel="import" href="/tracing/value/diagnostics/diagnostic_map.html"> | 9 <link rel="import" href="/tracing/value/diagnostics/diagnostic_map.html"> |
10 <link rel="import" href="/tracing/value/histogram_set.html"> | 10 <link rel="import" href="/tracing/value/histogram_set.html"> |
11 | 11 |
12 <script> | 12 <script> |
13 'use strict'; | 13 'use strict'; |
14 | 14 |
15 tr.b.unittest.testSuite(function() { | 15 tr.b.unittest.testSuite(function() { |
16 test('clone', function() { | 16 test('clone', function() { |
17 const diagnostics = new tr.v.d.DiagnosticMap(); | 17 const diagnostics = new tr.v.d.DiagnosticMap(); |
18 diagnostics.set('generic', new tr.v.d.GenericSet([{a: ['b', 3]}])); | 18 diagnostics.set('generic', new tr.v.d.GenericSet([{a: ['b', 3]}])); |
19 diagnostics.set('breakdown', new tr.v.d.Breakdown()); | 19 diagnostics.set('breakdown', new tr.v.d.Breakdown()); |
20 diagnostics.set('events', new tr.v.d.RelatedEventSet()); | 20 diagnostics.set('events', new tr.v.d.RelatedEventSet()); |
21 diagnostics.set('set', new tr.v.d.RelatedHistogramSet()); | |
22 diagnostics.set('map', new tr.v.d.RelatedHistogramMap()); | 21 diagnostics.set('map', new tr.v.d.RelatedHistogramMap()); |
23 diagnostics.set('histogram breakdown', | 22 diagnostics.set('histogram breakdown', |
24 new tr.v.d.RelatedHistogramBreakdown()); | 23 new tr.v.d.RelatedHistogramBreakdown()); |
25 | 24 |
26 const clone = tr.v.d.DiagnosticMap.fromDict(diagnostics.asDict()); | 25 const clone = tr.v.d.DiagnosticMap.fromDict(diagnostics.asDict()); |
27 assert.instanceOf(clone.get('generic'), tr.v.d.GenericSet); | 26 assert.instanceOf(clone.get('generic'), tr.v.d.GenericSet); |
28 assert.deepEqual(tr.b.getOnlyElement(clone.get('generic')), | 27 assert.deepEqual(tr.b.getOnlyElement(clone.get('generic')), |
29 tr.b.getOnlyElement(diagnostics.get('generic'))); | 28 tr.b.getOnlyElement(diagnostics.get('generic'))); |
30 assert.instanceOf(clone.get('breakdown'), tr.v.d.Breakdown); | 29 assert.instanceOf(clone.get('breakdown'), tr.v.d.Breakdown); |
31 assert.instanceOf(clone.get('events'), tr.v.d.RelatedEventSet); | 30 assert.instanceOf(clone.get('events'), tr.v.d.RelatedEventSet); |
32 assert.instanceOf(clone.get('set'), tr.v.d.RelatedHistogramSet); | |
33 assert.instanceOf(clone.get('map'), tr.v.d.RelatedHistogramMap); | 31 assert.instanceOf(clone.get('map'), tr.v.d.RelatedHistogramMap); |
34 assert.instanceOf(clone.get('histogram breakdown'), | 32 assert.instanceOf(clone.get('histogram breakdown'), |
35 tr.v.d.RelatedHistogramBreakdown); | 33 tr.v.d.RelatedHistogramBreakdown); |
36 }); | 34 }); |
37 | 35 |
38 test('cloneWithRef', function() { | 36 test('cloneWithRef', function() { |
39 const diagnostics = new tr.v.d.DiagnosticMap(); | 37 const diagnostics = new tr.v.d.DiagnosticMap(); |
40 diagnostics.set('ref', new tr.v.d.DiagnosticRef('abc')); | 38 diagnostics.set('ref', new tr.v.d.DiagnosticRef('abc')); |
41 | 39 |
42 const clone = tr.v.d.DiagnosticMap.fromDict(diagnostics.asDict()); | 40 const clone = tr.v.d.DiagnosticMap.fromDict(diagnostics.asDict()); |
(...skipping 19 matching lines...) Expand all Loading... |
62 duration: 1, | 60 duration: 1, |
63 }); | 61 }); |
64 event.parentContainer = { | 62 event.parentContainer = { |
65 sliceGroup: { | 63 sliceGroup: { |
66 stableId: 'fake_thread', | 64 stableId: 'fake_thread', |
67 slices: [event], | 65 slices: [event], |
68 }, | 66 }, |
69 }; | 67 }; |
70 const generic = new tr.v.d.GenericSet(['generic diagnostic']); | 68 const generic = new tr.v.d.GenericSet(['generic diagnostic']); |
71 const generic2 = new tr.v.d.GenericSet(['generic diagnostic 2']); | 69 const generic2 = new tr.v.d.GenericSet(['generic diagnostic 2']); |
72 const relatedSet = new tr.v.d.RelatedHistogramSet(); | 70 const relatedMap = new tr.v.d.RelatedHistogramMap(); |
73 const events = new tr.v.d.RelatedEventSet([event]); | 71 const events = new tr.v.d.RelatedEventSet([event]); |
74 | 72 |
75 // When Histograms are merged, first an empty clone is created with an empty | 73 // When Histograms are merged, first an empty clone is created with an empty |
76 // DiagnosticMap. | 74 // DiagnosticMap. |
77 const hist = new tr.v.Histogram('', tr.b.Unit.byName.count); | 75 const hist = new tr.v.Histogram('', tr.b.Unit.byName.count); |
78 | 76 |
79 const hist2 = new tr.v.Histogram('', tr.b.Unit.byName.count); | 77 const hist2 = new tr.v.Histogram('', tr.b.Unit.byName.count); |
80 hist2.diagnostics.set('a', generic); | 78 hist2.diagnostics.set('a', generic); |
81 hist.diagnostics.addDiagnostics(hist2.diagnostics); | 79 hist.diagnostics.addDiagnostics(hist2.diagnostics); |
82 assert.strictEqual(tr.b.getOnlyElement(generic), | 80 assert.strictEqual(tr.b.getOnlyElement(generic), |
83 tr.b.getOnlyElement(hist.diagnostics.get('a'))); | 81 tr.b.getOnlyElement(hist.diagnostics.get('a'))); |
84 | 82 |
85 // Separate keys are not merged. | 83 // Separate keys are not merged. |
86 const hist3 = new tr.v.Histogram('', tr.b.Unit.byName.count); | 84 const hist3 = new tr.v.Histogram('', tr.b.Unit.byName.count); |
87 hist3.diagnostics.set('b', generic2); | 85 hist3.diagnostics.set('b', generic2); |
88 hist.diagnostics.addDiagnostics(hist3.diagnostics); | 86 hist.diagnostics.addDiagnostics(hist3.diagnostics); |
89 assert.strictEqual( | 87 assert.strictEqual( |
90 tr.b.getOnlyElement(generic), | 88 tr.b.getOnlyElement(generic), |
91 tr.b.getOnlyElement(hist.diagnostics.get('a'))); | 89 tr.b.getOnlyElement(hist.diagnostics.get('a'))); |
92 assert.strictEqual( | 90 assert.strictEqual( |
93 tr.b.getOnlyElement(generic2), | 91 tr.b.getOnlyElement(generic2), |
94 tr.b.getOnlyElement(hist.diagnostics.get('b'))); | 92 tr.b.getOnlyElement(hist.diagnostics.get('b'))); |
95 | 93 |
96 // Merging unmergeable diagnostics should produce an | 94 // Merging unmergeable diagnostics should produce an |
97 // UnmergeableDiagnosticSet. | 95 // UnmergeableDiagnosticSet. |
98 const hist4 = new tr.v.Histogram('', tr.b.Unit.byName.count); | 96 const hist4 = new tr.v.Histogram('', tr.b.Unit.byName.count); |
99 hist4.diagnostics.set('a', relatedSet); | 97 hist4.diagnostics.set('a', relatedMap); |
100 hist.diagnostics.addDiagnostics(hist4.diagnostics); | 98 hist.diagnostics.addDiagnostics(hist4.diagnostics); |
101 assert.instanceOf(hist.diagnostics.get('a'), | 99 assert.instanceOf(hist.diagnostics.get('a'), |
102 tr.v.d.UnmergeableDiagnosticSet); | 100 tr.v.d.UnmergeableDiagnosticSet); |
103 let diagnostics = Array.from(hist.diagnostics.get('a')); | 101 let diagnostics = Array.from(hist.diagnostics.get('a')); |
104 assert.strictEqual( | 102 assert.strictEqual( |
105 tr.b.getOnlyElement(generic), tr.b.getOnlyElement(diagnostics[0])); | 103 tr.b.getOnlyElement(generic), tr.b.getOnlyElement(diagnostics[0])); |
106 // Don't test merging relationships here. | 104 // Don't test merging relationships here. |
107 assert.instanceOf(diagnostics[1], tr.v.d.RelatedHistogramSet); | 105 assert.instanceOf(diagnostics[1], tr.v.d.RelatedHistogramMap); |
108 | 106 |
109 // UnmergeableDiagnosticSets are mergeable. | 107 // UnmergeableDiagnosticSets are mergeable. |
110 const hist5 = new tr.v.Histogram('', tr.b.Unit.byName.count); | 108 const hist5 = new tr.v.Histogram('', tr.b.Unit.byName.count); |
111 hist5.diagnostics.set('a', new tr.v.d.UnmergeableDiagnosticSet([ | 109 hist5.diagnostics.set('a', new tr.v.d.UnmergeableDiagnosticSet([ |
112 events, generic2])); | 110 events, generic2])); |
113 hist.diagnostics.addDiagnostics(hist5.diagnostics); | 111 hist.diagnostics.addDiagnostics(hist5.diagnostics); |
114 assert.instanceOf(hist.diagnostics.get('a'), | 112 assert.instanceOf(hist.diagnostics.get('a'), |
115 tr.v.d.UnmergeableDiagnosticSet); | 113 tr.v.d.UnmergeableDiagnosticSet); |
116 diagnostics = Array.from(hist.diagnostics.get('a')); | 114 diagnostics = Array.from(hist.diagnostics.get('a')); |
117 assert.lengthOf(diagnostics, 3); | 115 assert.lengthOf(diagnostics, 3); |
118 assert.instanceOf(diagnostics[0], tr.v.d.GenericSet); | 116 assert.instanceOf(diagnostics[0], tr.v.d.GenericSet); |
119 assert.deepEqual(Array.from(diagnostics[0]), [...generic, ...generic2]); | 117 assert.deepEqual(Array.from(diagnostics[0]), [...generic, ...generic2]); |
120 assert.instanceOf(diagnostics[1], tr.v.d.RelatedHistogramSet); | 118 assert.instanceOf(diagnostics[1], tr.v.d.RelatedHistogramMap); |
121 assert.instanceOf(diagnostics[2], tr.v.d.CollectedRelatedEventSet); | 119 assert.instanceOf(diagnostics[2], tr.v.d.CollectedRelatedEventSet); |
122 }); | 120 }); |
123 | 121 |
124 test('mergeRelationships', function() { | 122 test('mergeRelationships', function() { |
125 const aHist0 = new tr.v.Histogram('a', tr.b.Unit.byName.count); | 123 const aHist0 = new tr.v.Histogram('a', tr.b.Unit.byName.count); |
126 const bHist0 = new tr.v.Histogram('b', tr.b.Unit.byName.count); | 124 const bHist0 = new tr.v.Histogram('b', tr.b.Unit.byName.count); |
127 | 125 |
128 aHist0.diagnostics.set('set', new tr.v.d.RelatedHistogramSet([bHist0])); | |
129 let map = new tr.v.d.RelatedHistogramMap(); | 126 let map = new tr.v.d.RelatedHistogramMap(); |
130 map.set('c', bHist0); | 127 map.set('c', bHist0); |
131 aHist0.diagnostics.set('map', map); | 128 aHist0.diagnostics.set('map', map); |
132 let breakdown = new tr.v.d.RelatedHistogramBreakdown(); | 129 let breakdown = new tr.v.d.RelatedHistogramBreakdown(); |
133 breakdown.set('d', bHist0); | 130 breakdown.set('d', bHist0); |
134 aHist0.diagnostics.set('breakdown', breakdown); | 131 aHist0.diagnostics.set('breakdown', breakdown); |
135 aHist0.diagnostics.set('unmergeable', | 132 aHist0.diagnostics.set('unmergeable', |
136 new tr.v.d.GenericSet(['unmergeable'])); | 133 new tr.v.d.GenericSet(['unmergeable'])); |
137 | 134 |
138 const histograms0 = new tr.v.HistogramSet([aHist0, bHist0]); | 135 const histograms0 = new tr.v.HistogramSet([aHist0, bHist0]); |
139 | 136 |
140 histograms0.addSharedDiagnostic( | 137 histograms0.addSharedDiagnostic( |
141 tr.v.d.RESERVED_NAMES.LABELS, new tr.v.d.GenericSet(['0'])); | 138 tr.v.d.RESERVED_NAMES.LABELS, new tr.v.d.GenericSet(['0'])); |
142 | 139 |
143 const aHist1 = new tr.v.Histogram('a', tr.b.Unit.byName.count); | 140 const aHist1 = new tr.v.Histogram('a', tr.b.Unit.byName.count); |
144 const bHist1 = new tr.v.Histogram('b', tr.b.Unit.byName.count); | 141 const bHist1 = new tr.v.Histogram('b', tr.b.Unit.byName.count); |
145 | 142 |
146 aHist1.diagnostics.set('set', new tr.v.d.RelatedHistogramSet([bHist1])); | |
147 map = new tr.v.d.RelatedHistogramMap(); | 143 map = new tr.v.d.RelatedHistogramMap(); |
148 map.set('c', bHist1); | 144 map.set('c', bHist1); |
149 aHist1.diagnostics.set('map', map); | 145 aHist1.diagnostics.set('map', map); |
150 breakdown = new tr.v.d.RelatedHistogramBreakdown(); | 146 breakdown = new tr.v.d.RelatedHistogramBreakdown(); |
151 breakdown.set('d', bHist1); | 147 breakdown.set('d', bHist1); |
152 aHist1.diagnostics.set('breakdown', breakdown); | 148 aHist1.diagnostics.set('breakdown', breakdown); |
153 aHist1.diagnostics.set('unmergeable', new tr.v.d.RelatedHistogramSet( | 149 aHist1.diagnostics.set('unmergeable', new tr.v.d.RelatedHistogramMap()); |
154 [bHist1])); | |
155 | 150 |
156 const histograms1 = new tr.v.HistogramSet([aHist1, bHist1]); | 151 const histograms1 = new tr.v.HistogramSet([aHist1, bHist1]); |
157 | 152 |
158 histograms1.addSharedDiagnostic( | 153 histograms1.addSharedDiagnostic( |
159 tr.v.d.RESERVED_NAMES.LABELS, new tr.v.d.GenericSet(['1'])); | 154 tr.v.d.RESERVED_NAMES.LABELS, new tr.v.d.GenericSet(['1'])); |
160 | 155 |
161 const aMergedHist = aHist0.clone(); | 156 const aMergedHist = aHist0.clone(); |
162 aMergedHist.addHistogram(aHist1); | 157 aMergedHist.addHistogram(aHist1); |
163 new tr.v.d.GroupingPath([]).addToHistogram(aMergedHist); | 158 new tr.v.d.GroupingPath([]).addToHistogram(aMergedHist); |
164 | 159 |
165 const bMergedHist = bHist0.clone(); | 160 const bMergedHist = bHist0.clone(); |
166 bMergedHist.addHistogram(bHist1); | 161 bMergedHist.addHistogram(bHist1); |
167 new tr.v.d.GroupingPath([]).addToHistogram(bMergedHist); | 162 new tr.v.d.GroupingPath([]).addToHistogram(bMergedHist); |
168 | 163 |
169 const mergedHists = new tr.v.HistogramSet([aMergedHist, bMergedHist]); | 164 const mergedHists = new tr.v.HistogramSet([aMergedHist, bMergedHist]); |
170 mergedHists.deduplicateDiagnostics(); | 165 mergedHists.deduplicateDiagnostics(); |
171 | 166 |
172 aMergedHist.diagnostics.mergeRelationships(aMergedHist); | 167 aMergedHist.diagnostics.mergeRelationships(aMergedHist); |
173 bMergedHist.diagnostics.mergeRelationships(bMergedHist); | 168 bMergedHist.diagnostics.mergeRelationships(bMergedHist); |
174 | 169 |
175 const aMergedSet = aMergedHist.diagnostics.get('set'); | |
176 assert.instanceOf(aMergedSet, tr.v.d.RelatedHistogramSet); | |
177 assert.strictEqual(bMergedHist, tr.b.getOnlyElement(aMergedSet)); | |
178 | |
179 const aMergedMap = aMergedHist.diagnostics.get('map'); | 170 const aMergedMap = aMergedHist.diagnostics.get('map'); |
180 assert.instanceOf(aMergedMap, tr.v.d.RelatedHistogramMap); | 171 assert.instanceOf(aMergedMap, tr.v.d.RelatedHistogramMap); |
181 assert.lengthOf(aMergedMap, 1); | 172 assert.lengthOf(aMergedMap, 1); |
182 assert.strictEqual(bMergedHist, aMergedMap.get('c')); | 173 assert.strictEqual(bMergedHist, aMergedMap.get('c')); |
183 | 174 |
184 const aMergedBreakdown = aMergedHist.diagnostics.get('breakdown'); | 175 const aMergedBreakdown = aMergedHist.diagnostics.get('breakdown'); |
185 assert.instanceOf(aMergedBreakdown, tr.v.d.RelatedHistogramBreakdown); | 176 assert.instanceOf(aMergedBreakdown, tr.v.d.RelatedHistogramBreakdown); |
186 assert.lengthOf(aMergedBreakdown, 1); | 177 assert.lengthOf(aMergedBreakdown, 1); |
187 assert.strictEqual(bMergedHist, aMergedBreakdown.get('d')); | 178 assert.strictEqual(bMergedHist, aMergedBreakdown.get('d')); |
188 | 179 |
189 const aMergedUnmergeable = aMergedHist.diagnostics.get('unmergeable'); | 180 const aMergedUnmergeable = aMergedHist.diagnostics.get('unmergeable'); |
190 assert.instanceOf(aMergedUnmergeable, tr.v.d.UnmergeableDiagnosticSet); | 181 assert.instanceOf(aMergedUnmergeable, tr.v.d.UnmergeableDiagnosticSet); |
191 }); | 182 }); |
192 | 183 |
193 test('validateDiagnosticTypes', function() { | 184 test('validateDiagnosticTypes', function() { |
194 const hist = new tr.v.Histogram('', tr.b.Unit.byName.count); | 185 const hist = new tr.v.Histogram('', tr.b.Unit.byName.count); |
195 function addInvalidDiagnosticType() { | 186 function addInvalidDiagnosticType() { |
196 hist.diagnostics.set( | 187 hist.diagnostics.set( |
197 tr.v.d.RESERVED_NAMES.GROUPING_PATH, new tr.v.d.GenericSet()); | 188 tr.v.d.RESERVED_NAMES.GROUPING_PATH, new tr.v.d.GenericSet()); |
198 } | 189 } |
199 assert.throw(addInvalidDiagnosticType, Error, | 190 assert.throw(addInvalidDiagnosticType, Error, |
200 `Diagnostics named "${tr.v.d.RESERVED_NAMES.GROUPING_PATH}" must be ` + | 191 `Diagnostics named "${tr.v.d.RESERVED_NAMES.GROUPING_PATH}" must be ` + |
201 'GroupingPath, not GenericSet'); | 192 'GroupingPath, not GenericSet'); |
202 }); | 193 }); |
203 }); | 194 }); |
204 </script> | 195 </script> |
OLD | NEW |