Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(17)

Side by Side Diff: tracing/tracing/value/diagnostics/related_histogram_set.html

Issue 2998043002: Remove RelatedHistogramSet. (Closed)
Patch Set: Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 <!DOCTYPE html>
2 <!--
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
5 found in the LICENSE file.
6 -->
7
8 <link rel="import" href="/tracing/base/iteration_helpers.html">
9 <link rel="import" href="/tracing/value/diagnostics/diagnostic.html">
10 <link rel="import" href="/tracing/value/diagnostics/histogram_ref.html">
11
12 <script>
13 'use strict';
14
15 tr.exportTo('tr.v.d', function() {
16 class RelatedHistogramSet extends tr.v.d.Diagnostic {
17 constructor(opt_histograms) {
18 super();
19 this.histogramsByGuid_ = new Map();
20
21 if (opt_histograms) {
22 for (const hist of opt_histograms) {
23 this.add(hist);
24 }
25 }
26 }
27
28 canAddDiagnostic(otherDiagnostic) {
29 return otherDiagnostic instanceof RelatedHistogramSet;
30 }
31
32 addDiagnostic(otherDiagnostic) {
33 // Related Histograms might not exist yet.
34 }
35
36 mergeRelationships(otherDiagnostic, parentHist, otherParentHist) {
37 /*
38 Modify |this| to contain Histograms that should be related to
39 |parentHist|.
40
41 |otherParentHist| was merged to |parentHist|.
42 |otherDiagnostic| contains Histograms that are related to
43 |otherParentHist|.
44
45 Since mergeRelationships() is called after all Histograms are merged,
46 then the MERGED_TO diagnostics of the Histograms in |otherDiagnostic|
47 contain Histograms that should be related to |parentHist| via |this|
48 RelatedHistogramSet.
49
50 otherParentHist -----------------------------> parentHist
51 | merged to RelatedHistogramSet |
52 | |
53 | otherDiagnostic | this
54 | RelatedHistogramSet | RelatedHistogramSet
55 v v
56 otherRelatedHist -----------------------------> relatedHist
57 merged to RelatedHistogramSet
58
59 However, |otherRelatedHist| may have been merged to Histograms using
60 different grouping keys, so if |relatedHist|'s merge path is different
61 from |parentHist|'s merge path, then |relatedHist| should not be related
62 to |parentHist|.
63 */
64 const parentGroupingPath = tr.v.d.GroupingPath.getFromHistogram(
65 parentHist);
66 for (const otherRelatedHist of otherDiagnostic) {
67 const mergedTo = otherRelatedHist.diagnostics.get(
68 tr.v.d.RESERVED_NAMES.MERGED_TO);
69 if (mergedTo === undefined) continue;
70
71 for (const relatedHist of mergedTo) {
72 if (this.has(relatedHist)) continue;
73
74 const relatedGroupingPath = tr.v.d.GroupingPath.getFromHistogram(
75 relatedHist);
76 if (relatedGroupingPath === undefined) continue;
77 if (!parentGroupingPath.equals(relatedGroupingPath)) continue;
78
79 this.add(relatedHist);
80 }
81 }
82 }
83
84 /**
85 * @param {!(tr.v.d.HistogramRef|tr.v.Histogram)} v
86 */
87 add(hist) {
88 if (!(hist instanceof tr.v.Histogram) &&
89 !(hist instanceof tr.v.d.HistogramRef)) {
90 throw new Error('Must be instanceof Histogram or HistogramRef: ' +
91 hist);
92 }
93
94 if (this.histogramsByGuid_.has(hist.guid)) {
95 throw new Error('Tried to add same hist twice');
96 }
97
98 this.histogramsByGuid_.set(hist.guid, hist);
99 }
100
101 has(hist) {
102 return this.histogramsByGuid_.has(hist.guid);
103 }
104
105 get length() {
106 return this.histogramsByGuid_.size;
107 }
108
109 * [Symbol.iterator]() {
110 for (const [guid, hist] of this.histogramsByGuid_) {
111 yield hist;
112 }
113 }
114
115 /**
116 * Resolve all HistogramRefs into Histograms by looking up their guids in
117 * |histograms|.
118 * If a Histogram cannot be found and |opt_required| is true, then throw an
119 * Error.
120 * If a Histogram cannot be found and |opt_required| is false, then the
121 * HistogramRef will remain a HistogramRef.
122 *
123 * @param {!tr.v.HistogramSet} histograms
124 * @param {boolean=} opt_required
125 */
126 resolve(histograms, opt_required) {
127 for (const [guid, value] of this.histogramsByGuid_) {
128 if (!(value instanceof tr.v.d.HistogramRef)) continue;
129
130 const hist = histograms.lookupHistogram(guid);
131 if (hist instanceof tr.v.Histogram) {
132 this.histogramsByGuid_.set(guid, hist);
133 } else if (opt_required) {
134 throw new Error('Unable to find Histogram ' + guid);
135 }
136 }
137 }
138
139 asDictInto_(d) {
140 d.guids = [];
141 for (const hist of this) {
142 d.guids.push(hist.guid);
143 }
144 }
145
146 static fromDict(d) {
147 return new RelatedHistogramSet(d.guids.map(
148 guid => new tr.v.d.HistogramRef(guid)));
149 }
150 }
151
152 tr.v.d.Diagnostic.register(RelatedHistogramSet, {
153 elementName: 'tr-v-ui-related-histogram-set-span'
154 });
155
156 return {
157 RelatedHistogramSet,
158 };
159 });
160 </script>
OLDNEW
« no previous file with comments | « tracing/tracing/value/diagnostics/related_histogram_map.html ('k') | tracing/tracing/value/diagnostics/reserved_infos.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698