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

Unified Diff: tracing/tracing/metrics/system_health/memory_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 side-by-side diff with in-line comments
Download patch
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 2e4777061e56977099b6021e8f8b97e02c0dc73e..4cb0ab377f6f9bb3ba7a81b026afa7bc080e99c9 100644
--- a/tracing/tracing/metrics/system_health/memory_metric.html
+++ b/tracing/tracing/metrics/system_health/memory_metric.html
@@ -11,6 +11,7 @@ found in the LICENSE file.
<link rel="import" href="/tracing/base/utils.html">
<link rel="import" href="/tracing/extras/chrome/chrome_processes.html">
<link rel="import" href="/tracing/metrics/metric_registry.html">
+<link rel="import" href="/tracing/metrics/system_health/utils.html">
<link rel="import" href="/tracing/model/container_memory_dump.html">
<link rel="import" href="/tracing/model/helpers/chrome_model_helper.html">
<link rel="import" href="/tracing/model/memory_allocator_dump.html">
@@ -57,75 +58,12 @@ tr.exportTo('tr.metrics.sh', function() {
const rangeOfInterest =
opt_options ? opt_options.rangeOfInterest : undefined;
const browserNameToGlobalDumps =
- splitGlobalDumpsByBrowserName(model, rangeOfInterest);
+ tr.metrics.sh.splitGlobalDumpsByBrowserName(model, rangeOfInterest);
addGeneralMemoryDumpValues(browserNameToGlobalDumps, values);
addDetailedMemoryDumpValues(browserNameToGlobalDumps, values);
addMemoryDumpCountValues(browserNameToGlobalDumps, values);
}
- /**
- * Splits the global memory dumps in |model| by browser name.
- *
- * @param {!tr.Model} model The trace model from which the global dumps
- * should be extracted.
- * @param {!tr.b.math.Range=} opt_rangeOfInterest If provided, global memory
- * dumps that do not inclusively intersect the range will be skipped.
- * @return {!Map<string, !Array<!tr.model.GlobalMemoryDump>} A map from
- * browser names to the associated global memory dumps.
- */
- function splitGlobalDumpsByBrowserName(model, opt_rangeOfInterest) {
- const chromeModelHelper =
- model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);
- const browserNameToGlobalDumps = new Map();
- const globalDumpToBrowserHelper = new WeakMap();
-
- // 1. For each browser process in the model, add its global memory dumps to
- // |browserNameToGlobalDumps|. |chromeModelHelper| can be undefined if
- // it fails to find any browser, renderer or GPU process (see
- // tr.model.helpers.ChromeModelHelper.supportsModel).
- if (chromeModelHelper) {
- chromeModelHelper.browserHelpers.forEach(function(helper) {
- // Retrieve the associated global memory dumps and check that they
- // haven't been classified as belonging to another browser process.
- const globalDumps = skipDumpsThatDoNotIntersectRange(
- helper.process.memoryDumps.map(d => d.globalMemoryDump),
- opt_rangeOfInterest);
- globalDumps.forEach(function(globalDump) {
- const existingHelper = globalDumpToBrowserHelper.get(globalDump);
- if (existingHelper !== undefined) {
- throw new Error('Memory dump ID clash across multiple browsers ' +
- 'with PIDs: ' + existingHelper.pid + ' and ' + helper.pid);
- }
- globalDumpToBrowserHelper.set(globalDump, helper);
- });
-
- makeKeyUniqueAndSet(browserNameToGlobalDumps,
- tr.e.chrome.chrome_processes.canonicalizeName(helper.browserName),
- globalDumps);
- });
- }
-
- // 2. If any global memory dump does not have any associated browser
- // process for some reason, associate it with an 'unknown_browser' browser
- // so that we don't lose the data.
- const unclassifiedGlobalDumps = skipDumpsThatDoNotIntersectRange(
- model.globalMemoryDumps.filter(g => !globalDumpToBrowserHelper.has(g)),
- opt_rangeOfInterest);
- if (unclassifiedGlobalDumps.length > 0) {
- makeKeyUniqueAndSet(
- browserNameToGlobalDumps, 'unknown_browser', unclassifiedGlobalDumps);
- }
-
- return browserNameToGlobalDumps;
- }
-
- function skipDumpsThatDoNotIntersectRange(dumps, opt_range) {
- if (!opt_range) return dumps;
- return dumps.filter(d => opt_range.intersectsExplicitRangeInclusive(
- d.start, d.end));
- }
-
-
const USER_FRIENDLY_BROWSER_NAMES = {
'chrome': 'Chrome',
'webview': 'WebView',
@@ -184,36 +122,6 @@ tr.exportTo('tr.metrics.sh', function() {
}
}
- /**
- * Function for adding entries with duplicate keys to a map without
- * overriding existing entries.
- *
- * This is achieved by appending numeric indices (2, 3, 4, ...) to duplicate
- * keys. Example:
- *
- * const map = new Map();
- * // map = Map {}.
- *
- * makeKeyUniqueAndSet(map, 'key', 'a');
- * // map = Map {"key" => "a"}.
- *
- * makeKeyUniqueAndSet(map, 'key', 'b');
- * // map = Map {"key" => "a", "key2" => "b"}.
- * ^^^^
- * makeKeyUniqueAndSet(map, 'key', 'c');
- * // map = Map {"key" => "a", "key2" => "b", "key3" => "c"}.
- * ^^^^ ^^^^
- */
- function makeKeyUniqueAndSet(map, key, value) {
- let uniqueKey = key;
- let nextIndex = 2;
- while (map.has(uniqueKey)) {
- uniqueKey = key + nextIndex;
- nextIndex++;
- }
- map.set(uniqueKey, value);
- }
-
/**
* Add general memory dump values calculated from all global memory dumps to
* |values|. In particular, this function adds the following values:
« no previous file with comments | « tracing/tracing/metrics/blink/leak_detection_metric_test.html ('k') | tracing/tracing/metrics/system_health/utils.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698