Index: tracing/tracing/value/value_set.html |
diff --git a/tracing/tracing/value/value_set.html b/tracing/tracing/value/value_set.html |
index 9aed25a58196777d8c2c44d205f663d258bcf764..4446e59e5052b4ddbe023a759df71beb1d5cf70c 100644 |
--- a/tracing/tracing/value/value_set.html |
+++ b/tracing/tracing/value/value_set.html |
@@ -14,6 +14,8 @@ found in the LICENSE file. |
'use strict'; |
tr.exportTo('tr.v', function() { |
+ var SUMMARY_VALUE_MAP_DIAGNOSTIC_NAME = 'summary values'; |
+ |
function ValueSet(opt_values) { |
this.values_ = {}; |
@@ -32,13 +34,34 @@ tr.exportTo('tr.v', function() { |
return this.values_[guid]; |
}, |
+ toArray: function() { |
+ return tr.b.dictionaryValues(this.values_); |
+ }, |
+ |
+ *[Symbol.iterator]() { |
+ for (var guid in this.values_) |
+ yield this.values_[guid]; |
+ }, |
+ |
/** |
* @param {!function(!tr.v.Value):*} callback |
* @param {*=} opt_this |
*/ |
map: function(callback, opt_this) { |
- return tr.b.dictionaryValues(this.values_).map( |
- callback, opt_this || this); |
+ return this.toArray().map(callback, opt_this || this); |
+ }, |
+ |
+ get organizedByName() { |
+ return this.getValuesOrganizedByCallback(v => v.name); |
+ }, |
+ |
+ /** |
+ * @param {!function(!tr.v.Value):*} callback |
+ * @param {*=} opt_this |
+ * @return {!Object} |
+ */ |
+ getValuesOrganizedByCallback: function(callback, opt_this) { |
+ return tr.b.group(this.toArray(), callback, opt_this || this); |
}, |
/** |
@@ -50,7 +73,7 @@ tr.exportTo('tr.v', function() { |
addValuesFromDicts: function(dicts) { |
dicts.forEach(function(dict) { |
var value = tr.v.Value.fromDict(dict); |
- this.addValue(value); |
+ this.addValueInternal_(value); |
}, this); |
// Now resolve the RelatedValueSet references between values. |
@@ -94,19 +117,21 @@ tr.exportTo('tr.v', function() { |
}, |
getValuesWithName: function(name) { |
- return tr.b.dictionaryValues(this.values_).filter(function(value) { |
- return value.name.indexOf(name) > -1; |
- }); |
+ return this.toArray().filter(v => v.name.indexOf(name) > -1); |
}, |
- addValue: function(v) { |
- if (this.values_[v.guid]) { |
- var err = new Error('Tried to add same value twice'); |
- err.name = 'ValueError'; |
- throw err; |
- } |
+ getValuesNamed: function(name) { |
+ return this.toArray().filter(v => v.name == name); |
+ }, |
+ addValueInternal_: function(v) { |
+ if (this.values_[v.guid]) |
+ throw new Error('Tried to add same value twice'); |
this.values_[v.guid] = v; |
+ }, |
+ |
+ addValue: function(v) { |
+ this.addValueInternal_(v); |
if (v.numeric instanceof tr.v.Numeric) { |
ValueSet.computeSummaryValuesForNumericValue(v).forEach(function(s) { |
@@ -120,15 +145,21 @@ tr.exportTo('tr.v', function() { |
if (!(value instanceof tr.v.NumericValue && |
value.numeric instanceof tr.v.Numeric)) |
throw new Error('Tried to compute summary values for non-numeric'); |
- return value.numeric.getSummarizedScalarNumericsWithNames().map( |
- function(stat) { |
- return new tr.v.NumericValue( |
- value.name + '_' + stat.name, stat.scalar, |
- { description: value.description }); |
- }); |
+ |
+ var summaryValueMap = new tr.v.d.RelatedValueMap(); |
+ value.diagnostics.add(SUMMARY_VALUE_MAP_DIAGNOSTIC_NAME, summaryValueMap); |
+ var options = {description: value.description}; |
+ var stats = value.numeric.getSummarizedScalarNumericsWithNames(); |
+ return stats.map(function(stat) { |
+ var summaryValue = new tr.v.NumericValue( |
+ value.name + '_' + stat.name, stat.scalar, options); |
+ summaryValueMap.set(stat.name, summaryValue); |
+ return summaryValue; |
+ }); |
}; |
return { |
+ SUMMARY_VALUE_MAP_DIAGNOSTIC_NAME: SUMMARY_VALUE_MAP_DIAGNOSTIC_NAME, |
ValueSet: ValueSet |
}; |
}); |