| Index: tracing/tracing/metrics/system_health/memory_metric.html | 
| diff --git a/tracing/tracing/metrics/system_health/memory_metric.html b/tracing/tracing/metrics/system_health/memory_metric.html | 
| index 3000abbdb5770d4121e7961319805438368ce6cf..ee7eda13e0b7c2f5d05b1aa1fdba571de5a119c1 100644 | 
| --- a/tracing/tracing/metrics/system_health/memory_metric.html | 
| +++ b/tracing/tracing/metrics/system_health/memory_metric.html | 
| @@ -1089,7 +1089,7 @@ tr.exportTo('tr.metrics.sh', function() { | 
| * (corresponding to global memory dumps associated with the given browser) | 
| * |values| for each process (e.g. 'gpu_process', 'browser_process', etc). | 
| * We also report a special 'all_processes' histogram which agregates all | 
| -   * others, this has a RelatedHistogramBreakdown diagnostic explaining | 
| +   * others, this has a RelatedNameMap diagnostic explaining | 
| * how it is built from the other histograms. | 
| * | 
| * See addMemoryDumpValues for more details. | 
| @@ -1121,32 +1121,30 @@ tr.exportTo('tr.metrics.sh', function() { | 
| } | 
| cachedHistograms.set(histogram.name, histogram); | 
|  | 
| -    const processBreakdown = new tr.v.d.RelatedHistogramBreakdown(); | 
| -    processBreakdown.colorScheme = | 
| -      tr.e.chrome.chrome_processes.PROCESS_COLOR_SCHEME_NAME; | 
| +    const processNames = new tr.v.d.RelatedNameMap(); | 
| for (const [childProcessName, childProcessNode] of tree.children[0]) { | 
| processPath.push(childProcessName); | 
| const childProcessHistogram = | 
| recurse(processPath, componentPath, childProcessNode); | 
| -      processBreakdown.set(childProcessName, childProcessHistogram); | 
| +      processNames.set(childProcessName, childProcessHistogram.name); | 
| processPath.pop(); | 
| } | 
|  | 
| -    const componentBreakdown = new tr.v.d.RelatedHistogramBreakdown(); | 
| +    const componentNames = new tr.v.d.RelatedNameMap(); | 
| for (const [childComponentName, childComponentNode] of tree.children[1]) { | 
| componentPath.push(childComponentName); | 
| const childComponentHistogram = | 
| recurse(processPath, componentPath, childComponentNode); | 
| -      componentBreakdown.set(childComponentName, childComponentHistogram); | 
| +      componentNames.set(childComponentName, childComponentHistogram.name); | 
| componentPath.pop(); | 
| } | 
|  | 
| values.addHistogram(histogram); | 
| if (tree.children[0].size > 0) { | 
| -      histogram.diagnostics.set('processes', processBreakdown); | 
| +      histogram.diagnostics.set('processes', processNames); | 
| } | 
| if (tree.children[1].size > 0) { | 
| -      histogram.diagnostics.set('components', componentBreakdown); | 
| +      histogram.diagnostics.set('components', componentNames); | 
| } | 
|  | 
| return histogram; | 
| @@ -1198,6 +1196,33 @@ tr.exportTo('tr.metrics.sh', function() { | 
| return numeric; | 
| } | 
|  | 
| +  function buildSampleDiagnostics(value, node) { | 
| +    if (node.children.length < 2) return undefined; | 
| +    const diagnostics = new Map(); | 
| +    const i = node.values.indexOf(value); | 
| + | 
| +    const processBreakdown = new tr.v.d.Breakdown(); | 
| +    processBreakdown.colorScheme = | 
| +      tr.e.chrome.chrome_processes.PROCESS_COLOR_SCHEME_NAME; | 
| +    for (const [name, subNode] of node.children[0]) { | 
| +      processBreakdown.set(name, subNode.values[i].total); | 
| +    } | 
| +    if (processBreakdown.size > 0) { | 
| +      diagnostics.set('processes', processBreakdown); | 
| +    } | 
| + | 
| +    const componentBreakdown = new tr.v.d.Breakdown(); | 
| +    for (const [name, subNode] of node.children[1]) { | 
| +      componentBreakdown.set(name, subNode.values[i].total); | 
| +    } | 
| +    if (componentBreakdown.size > 0) { | 
| +      diagnostics.set('components', componentBreakdown); | 
| +    } | 
| + | 
| +    if (diagnostics.size === 0) return undefined; | 
| +    return diagnostics; | 
| +  } | 
| + | 
| /** | 
| * Create a memory tr.v.Histogram with |unit| and add all total values in | 
| * |node| to it. | 
| @@ -1205,7 +1230,10 @@ tr.exportTo('tr.metrics.sh', function() { | 
| function buildMemoryNumericFromNode(name, node, unit) { | 
| const histogram = new tr.v.Histogram( | 
| name, unit, BOUNDARIES_FOR_UNIT_MAP.get(unit)); | 
| -    node.values.forEach(v => histogram.addSample(v.total)); | 
| + | 
| +    node.values.forEach(v => histogram.addSample( | 
| +        v.total, buildSampleDiagnostics(v, node))); | 
| + | 
| return histogram; | 
| } | 
|  | 
|  |