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/metrics/metric_registry.html"> | 8 <link rel="import" href="/tracing/metrics/metric_registry.html"> |
9 <link rel="import" href="/tracing/value/histogram.html"> | 9 <link rel="import" href="/tracing/value/histogram.html"> |
10 <link rel="import" href="/tracing/value/value.html"> | |
11 | 10 |
12 <script> | 11 <script> |
13 'use strict'; | 12 'use strict'; |
14 | 13 |
15 tr.exportTo('tr.metrics.sh', function() { | 14 tr.exportTo('tr.metrics.sh', function() { |
16 function getCpuSnapshotsFromModel(model) { | 15 function getCpuSnapshotsFromModel(model) { |
17 var snapshots = []; | 16 var snapshots = []; |
18 for (var pid in model.processes) { | 17 for (var pid in model.processes) { |
19 var snapshotInstances = model.processes[pid].objects.getAllInstancesNamed( | 18 var snapshotInstances = model.processes[pid].objects.getAllInstancesNamed( |
20 'CPUSnapshots'); | 19 'CPUSnapshots'); |
(...skipping 20 matching lines...) Expand all Loading... |
41 return processSums; | 40 return processSums; |
42 } | 41 } |
43 | 42 |
44 function buildNumericsFromSnapshots(snapshots) { | 43 function buildNumericsFromSnapshots(snapshots) { |
45 var processNumerics = new Map(); | 44 var processNumerics = new Map(); |
46 for (var snapshot of snapshots) { | 45 for (var snapshot of snapshots) { |
47 var processSums = getProcessSumsFromSnapshot(snapshot); | 46 var processSums = getProcessSumsFromSnapshot(snapshot); |
48 for (var [processName, processData] of processSums.entries()) { | 47 for (var [processName, processData] of processSums.entries()) { |
49 if (!(processNumerics.has(processName))) { | 48 if (!(processNumerics.has(processName))) { |
50 processNumerics.set(processName, { | 49 processNumerics.set(processName, { |
51 numeric: new tr.v.Histogram( | 50 numeric: new tr.v.Histogram('cpu:percent:' + processName, |
52 tr.b.Unit.byName.normalizedPercentage_smallerIsBetter), | 51 tr.b.Unit.byName.normalizedPercentage_smallerIsBetter), |
53 paths: new Set() | 52 paths: new Set() |
54 }); | 53 }); |
55 } | 54 } |
56 processNumerics.get(processName).numeric.addSample( | 55 processNumerics.get(processName).numeric.addSample( |
57 processData.sum / 100.0); | 56 processData.sum / 100.0); |
58 for (var path of processData.paths) | 57 for (var path of processData.paths) |
59 processNumerics.get(processName).paths.add(path); | 58 processNumerics.get(processName).paths.add(path); |
60 } | 59 } |
61 } | 60 } |
62 return processNumerics; | 61 return processNumerics; |
63 } | 62 } |
64 | 63 |
65 function cpuProcessMetric(values, model) { | 64 function cpuProcessMetric(values, model) { |
66 var snapshots = getCpuSnapshotsFromModel(model); | 65 var snapshots = getCpuSnapshotsFromModel(model); |
67 var processNumerics = buildNumericsFromSnapshots(snapshots); | 66 var processNumerics = buildNumericsFromSnapshots(snapshots); |
68 for (var [processName, processData] of processNumerics.entries()) { | 67 for (var [processName, processData] of processNumerics) { |
69 var numeric = processData.numeric; | 68 var numeric = processData.numeric; |
70 // Treat missing snapshots as zeros. A process is missing from a snapshots | 69 // Treat missing snapshots as zeros. A process is missing from a snapshots |
71 // when its CPU usage was below minimum threshold when the snapshot was | 70 // when its CPU usage was below minimum threshold when the snapshot was |
72 // taken. | 71 // taken. |
73 var missingSnapshotCount = snapshots.length - numeric.numValues; | 72 var missingSnapshotCount = snapshots.length - numeric.numValues; |
74 for (var i = 0; i < missingSnapshotCount; i++) | 73 for (var i = 0; i < missingSnapshotCount; i++) |
75 numeric.addSample(0); | 74 numeric.addSample(0); |
76 var value = new tr.v.NumericValue('cpu:percent:' + processName, numeric); | 75 numeric.diagnostics.set('paths', new |
77 value.diagnostics.set('paths', new | |
78 tr.v.d.Generic([...processData.paths])); | 76 tr.v.d.Generic([...processData.paths])); |
79 values.addValue(value); | 77 values.addHistogram(numeric); |
80 } | 78 } |
81 } | 79 } |
82 | 80 |
83 tr.metrics.MetricRegistry.register(cpuProcessMetric); | 81 tr.metrics.MetricRegistry.register(cpuProcessMetric); |
84 | 82 |
85 return { | 83 return { |
86 cpuProcessMetric: cpuProcessMetric | 84 cpuProcessMetric: cpuProcessMetric |
87 }; | 85 }; |
88 }); | 86 }); |
89 </script> | 87 </script> |
OLD | NEW |