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

Side by Side Diff: tracing/tracing/metrics/blink/leak_detection_metric.html

Issue 3012153002: Add leakDetectionMetric for tracing (Closed)
Patch Set: Reflect comments Created 3 years, 3 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 2017 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/unit.html">
9 <link rel="import" href="/tracing/metrics/metric_registry.html">
10 <link rel="import" href="/tracing/metrics/system_health/utils.html">
11 <link rel="import" href="/tracing/value/histogram.html">
12
13 <script>
14 'use strict';
15
16 tr.exportTo('tr.metrics.blink', function() {
17 function leakDetectionMetric(histograms, model) {
18 // Extract renderer pids.
19 const modelHelper = model.getOrCreateHelper(
20 tr.model.helpers.ChromeModelHelper);
21 if (modelHelper === undefined) {
22 throw new Error('Chrome is not present.');
23 }
24 const rendererHelpers = modelHelper.rendererHelpers;
25 if (Object.keys(rendererHelpers).length === 0) {
26 throw new Error('Renderer process is not present.');
27 }
28 const pids = Object.keys(rendererHelpers);
29
30 // Get the dumps.
31 const chromeDumps = tr.metrics.sh
32 .splitGlobalDumpsByBrowserName(model, undefined).get('chrome');
33
34 const sumCounter = new Map();
35 // Add up counters for all the renderer processes.
36
37 for (const pid of pids) {
38 for (const [key, count] of countLeakedBlinkObjects(chromeDumps, pid)) {
39 sumCounter.set(key, (sumCounter.get(key) || 0) + count);
40 }
41 }
42
43 for (const [key, count] of sumCounter) {
44 histograms.createHistogram('Leaked ' + key,
45 tr.b.Unit.byName.count_smallerIsBetter, count);
46 }
47 }
48
49 tr.metrics.MetricRegistry.register(leakDetectionMetric);
50
51 function countLeakedBlinkObjects(dumps, pid) {
52 if (dumps === undefined || dumps.length < 2) {
53 throw new Error('Expected at least two memory dumps.');
54 }
55 const firstCounter = countBlinkObjects(dumps[0], pid);
56 const lastCounter = countBlinkObjects(dumps[dumps.length - 1], pid);
57 const diffCounter = new Map();
58 for (const [key, lastCount] of lastCounter) {
59 diffCounter.set(key, lastCount - firstCounter.get(key));
60 }
61 return diffCounter;
62 }
63
64 function countBlinkObjects(dump, pid) {
65 const counter = new Map();
66 const processesMemoryDumps = dump.processMemoryDumps;
67 if (processesMemoryDumps[pid] === undefined) return counter;
68 const blinkObjectsDump = processesMemoryDumps[pid].memoryAllocatorDumps
69 .find(dump => dump.fullName === 'blink_objects');
70 for (const v of blinkObjectsDump.children) {
71 counter.set(v.name, v.numerics.object_count.value);
72 }
73 return counter;
74 }
75
76 return {
77 leakDetectionMetric,
78 };
79 });
80 </script>
OLDNEW
« no previous file with comments | « tracing/tracing/metrics/all_metrics.html ('k') | tracing/tracing/metrics/blink/leak_detection_metric_test.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698