summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/catapult/tracing/tracing/metrics/system_health
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/catapult/tracing/tracing/metrics/system_health')
-rw-r--r--chromium/third_party/catapult/tracing/tracing/metrics/system_health/clock_sync_latency_metric.html59
-rw-r--r--chromium/third_party/catapult/tracing/tracing/metrics/system_health/clock_sync_latency_metric_test.html61
-rw-r--r--chromium/third_party/catapult/tracing/tracing/metrics/system_health/efficiency_metric.html78
-rw-r--r--chromium/third_party/catapult/tracing/tracing/metrics/system_health/efficiency_metric_test.html56
-rw-r--r--chromium/third_party/catapult/tracing/tracing/metrics/system_health/first_paint_metric.html423
-rw-r--r--chromium/third_party/catapult/tracing/tracing/metrics/system_health/first_paint_metric_test.html235
-rw-r--r--chromium/third_party/catapult/tracing/tracing/metrics/system_health/hazard_metric.html145
-rw-r--r--chromium/third_party/catapult/tracing/tracing/metrics/system_health/hazard_metric_test.html88
-rw-r--r--chromium/third_party/catapult/tracing/tracing/metrics/system_health/long_tasks_metric.html107
-rw-r--r--chromium/third_party/catapult/tracing/tracing/metrics/system_health/memory_metric.html1023
-rw-r--r--chromium/third_party/catapult/tracing/tracing/metrics/system_health/memory_metric_test.html2473
-rw-r--r--chromium/third_party/catapult/tracing/tracing/metrics/system_health/power_metric.html57
-rw-r--r--chromium/third_party/catapult/tracing/tracing/metrics/system_health/power_metric_test.html65
-rw-r--r--chromium/third_party/catapult/tracing/tracing/metrics/system_health/responsiveness_metric.html158
-rw-r--r--chromium/third_party/catapult/tracing/tracing/metrics/system_health/system_health_metrics.html33
-rw-r--r--chromium/third_party/catapult/tracing/tracing/metrics/system_health/utils.html43
-rw-r--r--chromium/third_party/catapult/tracing/tracing/metrics/system_health/webview_startup_metric.html64
-rw-r--r--chromium/third_party/catapult/tracing/tracing/metrics/system_health/webview_startup_metric_test.html68
18 files changed, 0 insertions, 5236 deletions
diff --git a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/clock_sync_latency_metric.html b/chromium/third_party/catapult/tracing/tracing/metrics/system_health/clock_sync_latency_metric.html
deleted file mode 100644
index c30d0790d8c..00000000000
--- a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/clock_sync_latency_metric.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright 2016 The Chromium Authors. All rights reserved.
-Use of this source code is governed by a BSD-style license that can be
-found in the LICENSE file.
--->
-
-<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/model.html">
-<link rel="import" href="/tracing/value/numeric.html">
-<link rel="import" href="/tracing/value/value.html">
-
-<script>
-'use strict';
-
-tr.exportTo('tr.metrics.sh', function() {
-
- function syncIsComplete(markers) {
- return markers.length === 2;
- }
-
- function syncInvolvesTelemetry(markers) {
- for (var marker of markers)
- if (marker.domainId === tr.model.ClockDomainId.TELEMETRY)
- return true;
-
- return false;
- }
-
- function clockSyncLatencyMetric(values, model) {
- for (var markers of model.clockSyncManager.markersBySyncId.values()) {
- var latency = undefined;
- var targetDomain = undefined;
- if (!syncIsComplete(markers) || !syncInvolvesTelemetry(markers))
- continue;
- for (var marker of markers) {
- var domain = marker.domainId;
- if (domain === tr.model.ClockDomainId.TELEMETRY)
- latency = (marker.endTs - marker.startTs);
- else
- targetDomain = domain;
- }
- values.addValue(new tr.v.NumericValue(
- 'clock_sync_latency_' + targetDomain,
- new tr.v.ScalarNumeric(
- tr.v.Unit.byName.timeDurationInMs_smallerIsBetter,
- latency),
- { description: 'Clock sync latency for domain ' + targetDomain }));
- }
- };
-
- tr.metrics.MetricRegistry.register(clockSyncLatencyMetric);
-
- return {
- clockSyncLatencyMetric: clockSyncLatencyMetric
- };
-});
-</script>
diff --git a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/clock_sync_latency_metric_test.html b/chromium/third_party/catapult/tracing/tracing/metrics/system_health/clock_sync_latency_metric_test.html
deleted file mode 100644
index fe6a37d4819..00000000000
--- a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/clock_sync_latency_metric_test.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright 2016 The Chromium Authors. All rights reserved.
-Use of this source code is governed by a BSD-style license that can be
-found in the LICENSE file.
--->
-
-<link rel="import" href="/tracing/core/test_utils.html">
-<link rel="import" href="/tracing/metrics/system_health/clock_sync_latency_metric.html">
-<link rel="import" href="/tracing/model/model.html">
-<link rel="import" href="/tracing/value/value_set.html">
-
-<script>
-'use strict';
-
-tr.b.unittest.testSuite(function() {
- test('clockSyncLatencyMetric', function() {
- var model = new tr.Model();
- model.clockSyncManager.addClockSyncMarker(
- tr.model.ClockDomainId.TELEMETRY, 'ID01', 1.0, 4.0);
- model.clockSyncManager.addClockSyncMarker(
- tr.model.ClockDomainId.TELEMETRY, 'ID02', 2.0, 8.0);
- model.clockSyncManager.addClockSyncMarker(
- tr.model.ClockDomainId.BATTOR, 'ID01', 2.5);
- model.clockSyncManager.addClockSyncMarker(
- tr.model.ClockDomainId.WIN_QPC, 'ID02', 5.0);
-
- var battorName = 'clock_sync_latency_' + tr.model.ClockDomainId.BATTOR;
- var winQpcName = 'clock_sync_latency_' + tr.model.ClockDomainId.WIN_QPC;
-
- var valueSet = new tr.v.ValueSet();
- tr.metrics.sh.clockSyncLatencyMetric(valueSet, model);
-
- var battorEntry = tr.b.getOnlyElement(
- valueSet.valueDicts.filter(
- (dict) => dict.name === battorName));
-
- var winQpcEntry = tr.b.getOnlyElement(
- valueSet.valueDicts.filter(
- (dict) => dict.name === winQpcName));
-
- assert.equal(battorEntry.numeric.value, 3.0);
- assert.equal(winQpcEntry.numeric.value, 6.0);
- });
-
- test('clockSyncLatencyMetric_noTelemetry', function() {
- var model = new tr.Model();
- model.clockSyncManager.addClockSyncMarker(
- tr.model.ClockDomainId.TELEMETRY, 'ID01', 1.0, 4.0);
- model.clockSyncManager.addClockSyncMarker(
- tr.model.ClockDomainId.BATTOR, 'ID02', 2.5);
- model.clockSyncManager.addClockSyncMarker(
- tr.model.ClockDomainId.WIN_QPC, 'ID02', 5.0);
-
- var valueSet = new tr.v.ValueSet();
- tr.metrics.sh.clockSyncLatencyMetric(valueSet, model);
-
- assert.lengthOf(valueSet.valueDicts, 0);
- });
-});
-</script>
diff --git a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/efficiency_metric.html b/chromium/third_party/catapult/tracing/tracing/metrics/system_health/efficiency_metric.html
deleted file mode 100644
index 6274def9412..00000000000
--- a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/efficiency_metric.html
+++ /dev/null
@@ -1,78 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2015 The Chromium Authors. All rights reserved.
-Use of this source code is governed by a BSD-style license that can be
-found in the LICENSE file.
--->
-
-<link rel="import" href="/tracing/base/statistics.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/user_model/animation_expectation.html">
-<link rel="import" href="/tracing/model/user_model/idle_expectation.html">
-<link rel="import" href="/tracing/value/numeric.html">
-<link rel="import" href="/tracing/value/value.html">
-
-<script>
-'use strict';
-
-tr.exportTo('tr.metrics.sh', function() {
- var UNIT = tr.v.Unit.byName.normalizedPercentage_biggerIsBetter;
-
- var DESCRIPTION = 'Normalized CPU budget consumption';
-
- function efficiencyMetric(values, model) {
- var scores = [];
-
- model.userModel.expectations.forEach(function(ue) {
- var options = {};
- options.description = DESCRIPTION;
-
- var score = undefined;
-
- if ((ue.totalCpuMs === undefined) ||
- (ue.totalCpuMs == 0))
- return;
-
- var cpuFractionBudget = tr.b.Range.fromExplicitRange(0.5, 1.5);
-
- if (ue instanceof tr.model.um.IdleExpectation) {
- cpuFractionBudget = tr.b.Range.fromExplicitRange(0.1, 1);
- } else if (ue instanceof tr.model.um.AnimationExpectation) {
- cpuFractionBudget = tr.b.Range.fromExplicitRange(1, 2);
- }
-
- var cpuMsBudget = tr.b.Range.fromExplicitRange(
- ue.duration * cpuFractionBudget.min,
- ue.duration * cpuFractionBudget.max);
- var normalizedCpu = tr.b.normalize(
- ue.totalCpuMs, cpuMsBudget.min, cpuMsBudget.max);
- score = 1 - tr.b.clamp(normalizedCpu, 0, 1);
-
- scores.push(score);
-
- values.addValue(new tr.v.NumericValue(
- 'efficiency', new tr.v.ScalarNumeric(UNIT, score), options));
- });
-
- // Manually reduce scores.
- // https://github.com/catapult-project/catapult/issues/2036
-
- var options = {};
- options.description = DESCRIPTION;
- var overallScore = tr.b.Statistics.weightedMean(
- scores, tr.metrics.sh.perceptualBlend);
- if (overallScore === undefined)
- return;
-
- values.addValue(new tr.v.NumericValue(
- 'efficiency', new tr.v.ScalarNumeric(UNIT, overallScore), options));
- }
-
- tr.metrics.MetricRegistry.register(efficiencyMetric);
-
- return {
- efficiencyMetric: efficiencyMetric
- };
-});
-</script>
diff --git a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/efficiency_metric_test.html b/chromium/third_party/catapult/tracing/tracing/metrics/system_health/efficiency_metric_test.html
deleted file mode 100644
index 5fe0f1a4561..00000000000
--- a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/efficiency_metric_test.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2015 The Chromium Authors. All rights reserved.
-Use of this source code is governed by a BSD-style license that can be
-found in the LICENSE file.
--->
-
-<link rel="import" href="/tracing/base/iteration_helpers.html">
-<link rel="import" href="/tracing/core/test_utils.html">
-<link rel="import"
- href="/tracing/metrics/system_health/efficiency_metric.html">
-<link rel="import" href="/tracing/model/user_model/idle_expectation.html">
-<link rel="import" href="/tracing/value/value_set.html">
-
-<script>
-'use strict';
-
-tr.b.unittest.testSuite(function() {
- function createModel() {
- return tr.c.TestUtils.newModel(function(model) {
- model.p1 = model.getOrCreateProcess(1);
- model.t2 = model.p1.getOrCreateThread(2);
-
- var slice = tr.c.TestUtils.newSliceEx({
- title: 'foo',
- start: 0,
- end: 100,
- type: tr.model.ThreadSlice
- });
- slice.isTopLevel = true;
-
- var idle = new tr.model.um.IdleExpectation(model, 0, 100);
- idle.associatedEvents.push(slice);
- model.userModel.expectations.push(idle);
- });
- }
-
- test('optimalEfficiency', function() {
- var model = createModel();
- var exp = model.userModel.expectations[0];
- tr.b.getOnlyElement(exp.associatedEvents).cpuSelfTime = 10;
- var values = new tr.v.ValueSet();
- tr.metrics.sh.efficiencyMetric(values, model);
- assert.equal(1, values.valueDicts[0].numeric.value);
- });
-
- test('pessimalEfficiency', function() {
- var model = createModel();
- var exp = model.userModel.expectations[0];
- tr.b.getOnlyElement(exp.associatedEvents).cpuSelfTime = 100;
- var values = new tr.v.ValueSet();
- tr.metrics.sh.efficiencyMetric(values, model);
- assert.equal(0, values.valueDicts[0].numeric.value);
- });
-});
-</script>
diff --git a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/first_paint_metric.html b/chromium/third_party/catapult/tracing/tracing/metrics/system_health/first_paint_metric.html
deleted file mode 100644
index bc1aa3828ca..00000000000
--- a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/first_paint_metric.html
+++ /dev/null
@@ -1,423 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright 2016 The Chromium Authors. All rights reserved.
-Use of this source code is governed by a BSD-style license that can be
-found in the LICENSE file.
--->
-
-<link rel="import" href="/tracing/base/statistics.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/helpers/chrome_model_helper.html">
-<link rel="import" href="/tracing/model/timed_event.html">
-<link rel="import" href="/tracing/value/numeric.html">
-<link rel="import" href="/tracing/value/value.html">
-
-<script>
-'use strict';
-
-tr.exportTo('tr.metrics.sh', function() {
- var timeDurationInMs_smallerIsBetter =
- tr.v.Unit.byName.timeDurationInMs_smallerIsBetter;
-
- function findTargetRendererHelper(chromeHelper) {
- var largestPid = -1;
- for (var pid in chromeHelper.rendererHelpers) {
- var rendererHelper = chromeHelper.rendererHelpers[pid];
- if (rendererHelper.isChromeTracingUI)
- continue;
- if (pid > largestPid)
- largestPid = pid;
- }
-
- if (largestPid === -1)
- return undefined;
-
- return chromeHelper.rendererHelpers[largestPid];
- }
-
- /**
- * A utility class for finding navigationStart event for given frame and
- * timestamp.
- * @constructor
- */
- function NavigationStartFinder(rendererHelper) {
- this.navigationStartsForFrameId_ = {};
- for (var ev of rendererHelper.mainThread.sliceGroup.childEvents()) {
- if (ev.category !== 'blink.user_timing' ||
- ev.title !== 'navigationStart')
- continue;
- var frameIdRef = ev.args['frame'];
- var list = this.navigationStartsForFrameId_[frameIdRef];
- if (list === undefined)
- this.navigationStartsForFrameId_[frameIdRef] = list = [];
- list.unshift(ev);
- }
- }
-
- NavigationStartFinder.prototype = {
- findNavigationStartEventForFrameBeforeTimestamp: function(frameIdRef, ts) {
- var list = this.navigationStartsForFrameId_[frameIdRef];
- if (list === undefined) {
- console.warn('No navigationStartEvent found for frame id "' +
- frameIdRef + '"');
- return undefined;
- }
- var eventBeforeTimestamp;
- for (var ev of list) {
- if (ev.start > ts)
- continue;
- if (eventBeforeTimestamp === undefined)
- eventBeforeTimestamp = ev;
- }
- if (eventBeforeTimestamp === undefined) {
- console.warn('Failed to find navigationStartEvent.');
- return undefined;
- }
- return eventBeforeTimestamp;
- }
- };
-
- /**
- * A utility class for finding Paint event for given frame and timestamp.
- * @constructor
- */
- function PaintFinder(rendererHelper) {
- this.paintsForFrameId_ = {};
- for (var ev of rendererHelper.mainThread.sliceGroup.childEvents()) {
- if (ev.category !== 'devtools.timeline' || ev.title !== 'Paint')
- continue;
- var frameIdRef = ev.args['data']['frame'];
- var list = this.paintsForFrameId_[frameIdRef];
- if (list === undefined)
- this.paintsForFrameId_[frameIdRef] = list = [];
- list.push(ev);
- }
- }
-
- PaintFinder.prototype = {
- findPaintEventForFrameAfterTimestamp: function(frameIdRef, ts) {
- var list = this.paintsForFrameId_[frameIdRef];
- if (list === undefined)
- return undefined;
-
- var eventAfterTimestamp;
- for (var ev of list) {
- if (ev.start < ts)
- continue;
- if (eventAfterTimestamp === undefined)
- eventAfterTimestamp = ev;
- }
- return eventAfterTimestamp;
- }
- };
-
- var FIRST_PAINT_NUMERIC_BUILDER =
- new tr.v.NumericBuilder(timeDurationInMs_smallerIsBetter, 0)
- .addLinearBins(1000, 20) // 50ms step to 1s
- .addLinearBins(3000, 20) // 100ms step to 3s
- .addExponentialBins(20000, 20);
- function createHistogram() {
- var histogram = FIRST_PAINT_NUMERIC_BUILDER.build();
- histogram.customizeSummaryOptions({
- avg: true,
- count: false,
- max: true,
- min: true,
- std: true,
- sum: false,
- percentile: [0.90, 0.95, 0.99],
- });
- return histogram;
- }
-
- function findFrameLoaderSnapshotAt(rendererHelper, frameIdRef, ts) {
- var snapshot;
-
- var objects = rendererHelper.process.objects;
- var frameLoaderInstances = objects.instancesByTypeName_['FrameLoader'];
- if (frameLoaderInstances === undefined) {
- console.warn('Failed to find FrameLoader for frameId "' + frameIdRef +
- '" at ts ' + ts + ', the trace maybe incomplete or from an old' +
- 'Chrome.');
- return undefined;
- }
-
- var snapshot;
- for (var instance of frameLoaderInstances) {
- if (!instance.isAliveAt(ts))
- continue;
- var maybeSnapshot = instance.getSnapshotAt(ts);
- if (frameIdRef !== maybeSnapshot.args['frame']['id_ref'])
- continue;
- snapshot = maybeSnapshot;
- }
-
- return snapshot;
- }
-
- function findAllUserTimingEvents(rendererHelper, title) {
- var targetEvents = [];
-
- for (var ev of rendererHelper.process.getDescendantEvents()) {
- if (ev.category !== 'blink.user_timing' || ev.title !== title)
- continue;
- targetEvents.push(ev);
- }
-
- return targetEvents;
- }
-
- function findAllLayoutEvents(rendererHelper) {
- var isTelemetryInternalEvent =
- prepareTelemetryInternalEventPredicate(rendererHelper);
- var layoutsForFrameId = {};
- for (var ev of rendererHelper.process.getDescendantEvents()) {
- if (ev.category !==
- 'blink,benchmark,disabled-by-default-blink.debug.layout' ||
- ev.title !== 'FrameView::performLayout')
- continue;
- if (isTelemetryInternalEvent(ev))
- continue;
- if (ev.args.counters === undefined) {
- console.warn('Ignoring FrameView::performLayout event with no ' +
- 'counters arg (END event is missing).');
- continue;
- }
- var frameIdRef = ev.args.counters['frame'];
- if (frameIdRef === undefined)
- continue;
- var list = layoutsForFrameId[frameIdRef];
- if (list === undefined)
- layoutsForFrameId[frameIdRef] = list = [];
- list.push(ev);
- }
- return layoutsForFrameId;
- }
-
- function prepareTelemetryInternalEventPredicate(rendererHelper) {
- var ignoreRegions = [];
-
- var internalRegionStart;
- for (var slice of
- rendererHelper.mainThread.asyncSliceGroup.getDescendantEvents()) {
- if (!!slice.title.match(/^telemetry\.internal\.[^.]*\.start$/))
- internalRegionStart = slice.start;
- if (!!slice.title.match(/^telemetry\.internal\.[^.]*\.end$/)) {
- var timedEvent = new tr.model.TimedEvent(internalRegionStart);
- timedEvent.duration = slice.end - internalRegionStart;
- ignoreRegions.push(timedEvent);
- }
- }
-
- return function isTelemetryInternalEvent(slice) {
- for (var region of ignoreRegions)
- if (region.bounds(slice))
- return true;
- return false;
- }
- }
-
- var URL_BLACKLIST = [
- 'about:blank',
- // Chrome on Android creates main frames with the below URL for plugins.
- 'data:text/html,pluginplaceholderdata'
- ];
- function shouldIgnoreURL(url) {
- return URL_BLACKLIST.indexOf(url) >= 0;
- }
-
- var METRICS = [
- {
- valueName: 'firstContentfulPaint',
- title: 'firstContentfulPaint',
- description: 'time to first contentful paint'
- },
- {
- valueName: 'timeToOnload',
- title: 'loadEventStart',
- description: 'time to onload. ' +
- 'This is temporary metric used for PCv1/v2 sanity checking'
- }];
-
- function firstContentfulPaintMetric(values, model) {
- var chromeHelper = model.getOrCreateHelper(
- tr.model.helpers.ChromeModelHelper);
- var rendererHelper = findTargetRendererHelper(chromeHelper);
- var isTelemetryInternalEvent =
- prepareTelemetryInternalEventPredicate(rendererHelper);
- var navigationStartFinder = new NavigationStartFinder(rendererHelper);
-
- for (var metric of METRICS) {
- var histogram = createHistogram();
- var targetEvents = findAllUserTimingEvents(rendererHelper, metric.title);
- for (var ev of targetEvents) {
- if (isTelemetryInternalEvent(ev))
- continue;
- var frameIdRef = ev.args['frame'];
- var snapshot =
- findFrameLoaderSnapshotAt(rendererHelper, frameIdRef, ev.start);
- if (snapshot === undefined || !snapshot.args.isLoadingMainFrame)
- continue;
- var url = snapshot.args.documentLoaderURL;
- if (shouldIgnoreURL(url))
- continue;
- var navigationStartEvent = navigationStartFinder.
- findNavigationStartEventForFrameBeforeTimestamp(frameIdRef, ev.start);
- // Ignore layout w/o preceding navigationStart, as they are not
- // attributed to any time-to-X metric.
- if (navigationStartEvent === undefined)
- continue;
-
- var timeToEvent = ev.start - navigationStartEvent.start;
- histogram.add(timeToEvent, {url: url});
- }
- values.addValue(new tr.v.NumericValue(
- metric.valueName, histogram,
- { description: metric.description }));
- }
- }
-
- /**
- * Compute significance of given layout event.
- *
- * Significance of a layout is the number of layout objects newly added to the
- * layout tree, weighted by page height (before and after the layout).
- */
- function layoutSignificance(event) {
- var newObjects = event.args.counters['LayoutObjectsThatHadNeverHadLayout'];
- var visibleHeight = event.args['counters']['visibleHeight'];
- if (!newObjects || !visibleHeight)
- return 0;
-
- var heightBefore = event.args['contentsHeightBeforeLayout'];
- var heightAfter = event.args['counters']['contentsHeightAfterLayout'];
- var ratioBefore = Math.max(1, heightBefore / visibleHeight);
- var ratioAfter = Math.max(1, heightAfter / visibleHeight);
- return newObjects / ((ratioBefore + ratioAfter) / 2);
- }
-
- /**
- * If there are loading fonts when layout happened, the layout change
- * accounting is postponed until the font is displayed. However, icon fonts
- * shouldn't block first meaningful paint. We use a threshold that only web
- * fonts that laid out more than 200 characters should block first meaningful
- * paint.
- */
- function hasTooManyBlankCharactersToBeMeaningful(event) {
- var BLOCK_FIRST_MEANINGFUL_PAINT_IF_BLANK_CHARACTERS_MORE_THAN = 200;
- return event.args['counters']['approximateBlankCharacterCount'] >
- BLOCK_FIRST_MEANINGFUL_PAINT_IF_BLANK_CHARACTERS_MORE_THAN;
- }
-
- /**
- * Computes Time to first meaningful paint (TTFMP) from |model| and add it to
- * |value|.
- *
- * TTFMP is computed from three types of events: NavigationStart, Layout, and
- * Paint. Each Layout event has associated "significance" value, indicating
- * how the layout was visually significant.
- *
- * TTFMP is the time between NavigationStart and Paint that follows the Layout
- * with biggest significance value.
- *
- * Design doc: https://goo.gl/vpaxv6
- */
- function firstMeaningfulPaintMetric(values, model) {
- var chromeHelper = model.getOrCreateHelper(
- tr.model.helpers.ChromeModelHelper);
- var rendererHelper = findTargetRendererHelper(chromeHelper);
- var navigationStartFinder = new NavigationStartFinder(rendererHelper);
- var paintFinder = new PaintFinder(rendererHelper);
- var firstMeaningfulPaintHistogram = createHistogram();
-
- function addFirstMeaningfulPaintSampleToHistogram(
- frameIdRef, navigationStart, mostSignificantLayout) {
- var snapshot = findFrameLoaderSnapshotAt(
- rendererHelper, frameIdRef, mostSignificantLayout.start);
- if (snapshot === undefined || !snapshot.args.isLoadingMainFrame)
- return;
- var url = snapshot.args.documentLoaderURL;
- if (shouldIgnoreURL(url))
- return;
- var paintEvent = paintFinder.findPaintEventForFrameAfterTimestamp(
- frameIdRef, mostSignificantLayout.start);
- if (paintEvent === undefined) {
- console.warn('Failed to find paint event after the most significant ' +
- 'layout for frameId "' + frameIdRef + '".');
- return;
- }
- var timeToFirstMeaningfulPaint = paintEvent.start - navigationStart.start;
- firstMeaningfulPaintHistogram.add(timeToFirstMeaningfulPaint, {url: url});
- }
-
- var layoutsForFrameId = findAllLayoutEvents(rendererHelper);
-
- for (var frameIdRef in layoutsForFrameId) {
- var navigationStart;
- var mostSignificantLayout;
- var maxSignificanceSoFar = 0;
- var accumulatedSignificanceWhileHavingBlankText = 0;
-
- // Iterate over the layout events, remembering one with largest
- // significance.
- for (var ev of layoutsForFrameId[frameIdRef]) {
- var navigationStartForThisLayout = navigationStartFinder.
- findNavigationStartEventForFrameBeforeTimestamp(frameIdRef, ev.start);
- // Ignore layout w/o preceding navigationStart, as they are not
- // attributed to any TTFMP.
- if (navigationStartForThisLayout === undefined)
- continue;
-
- if (navigationStart !== navigationStartForThisLayout) {
- // New navigation is found. Compute TTFMP for current navigation, and
- // reset the state variables.
- if (navigationStart !== undefined &&
- mostSignificantLayout !== undefined)
- addFirstMeaningfulPaintSampleToHistogram(
- frameIdRef, navigationStart, mostSignificantLayout);
- navigationStart = navigationStartForThisLayout;
- mostSignificantLayout = undefined;
- maxSignificanceSoFar = 0;
- accumulatedSignificanceWhileHavingBlankText = 0;
- }
-
- // Check if |ev| has the largest significance. If the page has many
- // blank characters, the significance value is accumulated until
- // the text become visible.
- var significance = layoutSignificance(ev);
- if (hasTooManyBlankCharactersToBeMeaningful(ev)) {
- accumulatedSignificanceWhileHavingBlankText += significance;
- } else {
- significance += accumulatedSignificanceWhileHavingBlankText;
- accumulatedSignificanceWhileHavingBlankText = 0;
- if (significance > maxSignificanceSoFar) {
- maxSignificanceSoFar = significance;
- mostSignificantLayout = ev;
- }
- }
- }
-
- // Emit TTFMP for the last navigation.
- if (mostSignificantLayout !== undefined)
- addFirstMeaningfulPaintSampleToHistogram(
- frameIdRef, navigationStart, mostSignificantLayout);
- }
-
- values.addValue(new tr.v.NumericValue(
- 'firstMeaningfulPaint', firstMeaningfulPaintHistogram,
- { description: 'time to first meaningful paint' }));
- }
-
- function firstPaintMetric(values, model) {
- firstContentfulPaintMetric(values, model);
- firstMeaningfulPaintMetric(values, model);
- }
-
- tr.metrics.MetricRegistry.register(firstPaintMetric);
-
- return {
- firstPaintMetric: firstPaintMetric
- };
-});
-</script>
diff --git a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/first_paint_metric_test.html b/chromium/third_party/catapult/tracing/tracing/metrics/system_health/first_paint_metric_test.html
deleted file mode 100644
index be318aa3600..00000000000
--- a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/first_paint_metric_test.html
+++ /dev/null
@@ -1,235 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2016 The Chromium Authors. All rights reserved.
-Use of this source code is governed by a BSD-style license that can be
-found in the LICENSE file.
--->
-
-<link rel="import" href="/tracing/core/test_utils.html">
-<link rel="import"
- href="/tracing/metrics/system_health/first_paint_metric.html">
-<link rel="import" href="/tracing/value/value_set.html">
-
-<script>
-'use strict';
-
-tr.b.unittest.testSuite(function() {
- test('firstContentfulPaint', function() {
- var model = tr.c.TestUtils.newModel(function(model) {
- var rendererProcess = model.getOrCreateProcess(1);
- var mainThread = rendererProcess.getOrCreateThread(2);
- mainThread.name = 'CrRendererMain';
- mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
- cat: 'blink.user_timing',
- title: 'navigationStart',
- start: 200,
- duration: 0.0,
- args: {frame: '0xdeadbeef'}
- }));
- rendererProcess.objects.addSnapshot('ptr', 'loading', 'FrameLoader', 300,
- {isLoadingMainFrame: true, frame: {id_ref: '0xdeadbeef'},
- documentLoaderURL: 'http://example.com'});
- mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
- cat: 'blink.user_timing',
- title: 'firstContentfulPaint',
- start: 1000,
- duration: 0.0,
- args: {frame: '0xdeadbeef'}
- }));
- });
- var values = new tr.v.ValueSet();
- tr.metrics.sh.firstPaintMetric(values, model);
- var numeric = values.valueDicts[0].numeric;
- assert.equal(1, numeric.running.count);
- assert.equal(800, numeric.running.mean);
- });
-
- test('firstContentfulPaintIgnoringWarmCache', function() {
- var model = tr.c.TestUtils.newModel(function(model) {
- var rendererProcess = model.getOrCreateProcess(1);
- var mainThread = rendererProcess.getOrCreateThread(2);
- mainThread.name = 'CrRendererMain';
-
- // warm cache navigation
- mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
- cat: 'blink.user_timing',
- title: 'navigationStart',
- start: 200,
- duration: 0.0,
- args: {frame: '0xdeadbeef'}
- }));
- mainThread.asyncSliceGroup.push(tr.c.TestUtils.newAsyncSliceEx({
- cat: 'blink.console',
- title: 'telemetry.internal.warmCache.start',
- start: 250,
- duration: 0.0
- }));
- rendererProcess.objects.addSnapshot('ptr', 'loading', 'FrameLoader', 300,
- {isLoadingMainFrame: true, frame: {id_ref: '0xdeadbeef'},
- documentLoaderURL: 'http://example.com'});
- mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
- cat: 'blink.user_timing',
- title: 'firstContentfulPaint',
- start: 1000,
- duration: 0.0,
- args: {frame: '0xdeadbeef'}
- }));
- mainThread.asyncSliceGroup.push(tr.c.TestUtils.newAsyncSliceEx({
- cat: 'blink.console',
- title: 'telemetry.internal.warmCache.end',
- start: 1250,
- duration: 0.0
- }));
-
- // measurement navigation
- mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
- cat: 'blink.user_timing',
- title: 'navigationStart',
- start: 2000,
- duration: 0.0,
- args: {frame: '0xdeadbeef'}
- }));
- rendererProcess.objects.addSnapshot('ptr', 'loading', 'FrameLoader', 2100,
- {isLoadingMainFrame: true, frame: {id_ref: '0xdeadbeef'},
- documentLoaderURL: 'http://example.com'});
- mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
- cat: 'blink.user_timing',
- title: 'firstContentfulPaint',
- start: 2400,
- duration: 0.0,
- args: {frame: '0xdeadbeef'}
- }));
- });
- var values = new tr.v.ValueSet();
- tr.metrics.sh.firstPaintMetric(values, model);
- var numeric = values.valueDicts[0].numeric;
- assert.equal(1, numeric.running.count);
- assert.equal(400, numeric.running.mean);
- });
-
- test('firstMeaningfulPaint', function() {
- var model = tr.c.TestUtils.newModel(function(model) {
- var rendererProcess = model.getOrCreateProcess(1);
- var mainThread = rendererProcess.getOrCreateThread(2);
- mainThread.name = 'CrRendererMain';
- mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
- cat: 'blink.user_timing',
- title: 'navigationStart',
- start: 200,
- duration: 0.0,
- args: {frame: '0xdeadbeef'}
- }));
- rendererProcess.objects.addSnapshot('ptr', 'loading', 'FrameLoader', 300,
- {isLoadingMainFrame: true, frame: {id_ref: '0xdeadbeef'},
- documentLoaderURL: 'http://example.com'});
- mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
- cat: 'blink,benchmark,disabled-by-default-blink.debug.layout',
- title: 'FrameView::performLayout',
- start: 500,
- duration: 10.0,
- args: {
- counters: {
- frame: '0xdeadbeef',
- LayoutObjectsThatHadNeverHadLayout: 10,
- contentsHeightAfterLayout: 800,
- visibleHeight: 1000,
- },
- contentsHeightBeforeLayout: 0
- }
- }));
- mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
- cat: 'devtools.timeline',
- title: 'Paint',
- start: 600,
- duration: 1.0,
- args: {data: {frame: '0xdeadbeef'}}
- }));
- mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
- cat: 'blink,benchmark,disabled-by-default-blink.debug.layout',
- title: 'FrameView::performLayout',
- start: 800,
- duration: 10.0,
- args: {
- counters: {
- frame: '0xdeadbeef',
- LayoutObjectsThatHadNeverHadLayout: 100,
- contentsHeightAfterLayout: 800,
- visibleHeight: 1000
- },
- contentsHeightBeforeLayout: 800
- }
- }));
- mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
- cat: 'devtools.timeline',
- title: 'Paint',
- start: 1000,
- duration: 1.0,
- args: {data: {frame: '0xdeadbeef'}}
- }));
- });
- var values = new tr.v.ValueSet();
- tr.metrics.sh.firstPaintMetric(values, model);
- var fmpEntries = values.valueDicts.filter(
- (dict) => dict.name === 'firstMeaningfulPaint');
- var numeric = fmpEntries[0].numeric;
- assert.equal(1, numeric.running.count);
- assert.equal(800, numeric.running.mean);
- });
-
- test('firstMeaningfulPaintWithInvalidLayoutCounters', function() {
- var model = tr.c.TestUtils.newModel(function(model) {
- var rendererProcess = model.getOrCreateProcess(1);
- var mainThread = rendererProcess.getOrCreateThread(2);
- mainThread.name = 'CrRendererMain';
- mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
- cat: 'blink.user_timing',
- title: 'navigationStart',
- start: 200,
- duration: 0.0,
- args: {frame: '0xdeadbeef'}
- }));
- rendererProcess.objects.addSnapshot('ptr', 'loading', 'FrameLoader', 300,
- {isLoadingMainFrame: true, frame: {id_ref: '0xdeadbeef'},
- documentLoaderURL: 'http://example.com'});
-
- // FrameView::performLayout trace event does not have frame ID
- // if blink.debug.layout category is not enabled.
- mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
- cat: 'blink,benchmark,disabled-by-default-blink.debug.layout',
- title: 'FrameView::performLayout',
- start: 500,
- duration: 10.0,
- args: {
- counters: {},
- contentsHeightBeforeLayout: 0
- }
- }));
-
- // Incomplete slice: counters argument is missing.
- mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
- cat: 'blink,benchmark,disabled-by-default-blink.debug.layout',
- title: 'FrameView::performLayout',
- start: 550,
- duration: 10.0,
- args: {
- contentsHeightBeforeLayout: 0
- }
- }));
-
- mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
- cat: 'devtools.timeline',
- title: 'Paint',
- start: 600,
- duration: 1.0,
- args: {data: {frame: '0xdeadbeef'}}
- }));
- });
- var values = new tr.v.ValueSet();
- tr.metrics.sh.firstPaintMetric(values, model);
- var fmpEntries = values.valueDicts.filter(
- (dict) => dict.name === 'firstMeaningfulPaint');
- var numeric = fmpEntries[0].numeric;
- assert.equal(0, numeric.running.count);
- });
-});
-</script>
diff --git a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/hazard_metric.html b/chromium/third_party/catapult/tracing/tracing/metrics/system_health/hazard_metric.html
deleted file mode 100644
index 96961779782..00000000000
--- a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/hazard_metric.html
+++ /dev/null
@@ -1,145 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2015 The Chromium Authors. All rights reserved.
-Use of this source code is governed by a BSD-style license that can be
-found in the LICENSE file.
--->
-
-<link rel="import" href="/tracing/metrics/metric_registry.html">
-<link rel="import" href="/tracing/metrics/system_health/long_tasks_metric.html">
-<link rel="import" href="/tracing/value/numeric.html">
-<link rel="import" href="/tracing/value/value.html">
-
-<script>
-'use strict';
-
-tr.exportTo('tr.metrics.sh', function() {
- var normalizedPercentage_smallerIsBetter =
- tr.v.Unit.byName.normalizedPercentage_smallerIsBetter;
-
- // The following math is easier if the units are seconds rather than ms,
- // so durations will be converted from ms to s.
- var MS_PER_S = 1000;
-
- // https://www.desmos.com/calculator/ysabhcc42g
- var RESPONSE_RISK =
- tr.b.Statistics.LogNormalDistribution.fromMedianAndDiminishingReturns(
- 100 / MS_PER_S, 50 / MS_PER_S);
-
- /**
- * This helper function computes the risk that a task of the given duration
- * would impact the responsiveness of a speculative input.
- *
- * @param {number} durationMs
- * @return {number} task hazard
- */
- function computeResponsivenessRisk(durationMs) {
- // Returns 0 when the risk of impacting responsiveness is minimal.
- // Returns 1 when it is maximal.
- // durationMs is the duration of a long task.
- // It is at least LONG_TASK_MS.
- // The FAST_RESPONSE_HISTOGRAM was designed to permit both a 50ms task
- // when a Scroll Response begins, plus 16ms latency between the task
- // and the first frame of the scroll, without impacting the responsiveness
- // score.
- // Add 16ms to durationMs to simulate the standard (maximum ideal) scroll
- // response latency, and use the FAST_RESPONSE_HISTOGRAM to punish every ms
- // that the long task exceeds LONG_TASK_MS.
-
- durationMs += 16;
-
- // This returns a normalized percentage that
- // represents the fraction of users that would be satisfied with a
- // Scroll Response that takes durationMs to respond.
- // The risk of impacting responsiveness is approximated as the long task's
- // impact on a hypothetical Scroll Response that starts when the long task
- // starts, and then takes the standard 16ms to respond after the long task
- // finishes.
- // We imagine a Scroll Response instead of a Load or another type of
- // Response because the Scroll Response carries the strictest expectation.
- // The risk of impacting responsiveness is framed as the fraction of users
- // that would be *un*satisifed with the responsiveness of that hypothetical
- // Scroll Response. The fraction of users who are unsatisfied with something
- // is equal to 1 - the fraction of users who are satisfied with it.
- return RESPONSE_RISK.computePercentile(durationMs / MS_PER_S);
- }
-
- /**
- * This weighting function is similar to tr.metrics.sh.perceptualBlend,
- * but this version is appropriate for SmallerIsBetter metrics, whereas
- * that version is for BiggerIsBetter metrics.
- * (This would not be necessary if hazard were reframed as a BiggerIsBetter
- * metric such as "input readiness".)
- * Also, that version assumes that the 'ary' will be UserExpectations, whereas
- * this version assumes that the 'ary' will be scores.
- *
- * @param {number} hazardScore
- * @return {number} weight
- */
- function perceptualBlendSmallerIsBetter(hazardScore) {
- return Math.exp(hazardScore);
- }
-
- /**
- * Compute and return the normalized score for the risk that a speculative
- * input's responsiveness would have been impacted by long tasks on the given
- * thread in the given range.
- *
- * @param {tr.model.Thread} thread
- * @param {tr.b.Range=} opt_range
- * @return {number} hazard
- */
- function computeHazardForLongTasksInRangeOnThread(thread, opt_range) {
- var taskHazardScores = [];
- tr.metrics.sh.iterateLongTopLevelTasksOnThreadInRange(
- thread, opt_range, function(task) {
- taskHazardScores.push(computeResponsivenessRisk(task.duration));
- });
- return tr.b.Statistics.weightedMean(
- taskHazardScores, perceptualBlendSmallerIsBetter);
- }
-
- /**
- * Compute and return the normalized score for the risk that a speculative
- * input's responsiveness would have been impacted by long tasks.
- *
- * @param {tr.model.Model} model The model.
- * @return {number} hazard
- */
- function computeHazardForLongTasks(model) {
- var threadHazardScores = [];
- tr.metrics.sh.iterateRendererMainThreads(model, function(thread) {
- threadHazardScores.push(computeHazardForLongTasksInRangeOnThread(
- thread));
- });
- return tr.b.Statistics.weightedMean(
- threadHazardScores, perceptualBlendSmallerIsBetter);
- }
-
- /**
- * This EXPERIMENTAL metric computes a scalar normalized score that
- * represents the risk that a speculative input's responsiveness would have
- * been impacted by long tasks.
- * This metric requires only the 'toplevel' tracing category.
- */
- function hazardMetric(values, model) {
- var overallHazard = computeHazardForLongTasks(model);
- if (overallHazard === undefined)
- overallHazard = 0;
-
- values.addValue(new tr.v.NumericValue(
- 'hazard', new tr.v.ScalarNumeric(
- normalizedPercentage_smallerIsBetter, overallHazard)));
- }
-
- tr.metrics.MetricRegistry.register(hazardMetric);
-
- return {
- hazardMetric: hazardMetric,
- computeHazardForLongTasksInRangeOnThread:
- computeHazardForLongTasksInRangeOnThread,
- computeHazardForLongTasks: computeHazardForLongTasks,
- computeResponsivenessRisk: computeResponsivenessRisk
- };
-});
-</script>
diff --git a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/hazard_metric_test.html b/chromium/third_party/catapult/tracing/tracing/metrics/system_health/hazard_metric_test.html
deleted file mode 100644
index 629f608e942..00000000000
--- a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/hazard_metric_test.html
+++ /dev/null
@@ -1,88 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2015 The Chromium Authors. All rights reserved.
-Use of this source code is governed by a BSD-style license that can be
-found in the LICENSE file.
--->
-
-<link rel="import" href="/tracing/core/test_utils.html">
-<link rel="import"
- href="/tracing/metrics/system_health/hazard_metric.html">
-<link rel="import" href="/tracing/value/value_set.html">
-
-<script>
-'use strict';
-
-tr.b.unittest.testSuite(function() {
- function computeHazardValue(customizeModelCallback) {
- var model = tr.c.TestUtils.newModel(function(model) {
- model.rendererProcess = model.getOrCreateProcess(2);
- model.rendererMain = model.rendererProcess.getOrCreateThread(3);
- model.rendererMain.name = 'CrRendererMain';
-
- customizeModelCallback(model);
- });
- var values = new tr.v.ValueSet();
- tr.metrics.sh.hazardMetric(values, model);
- var valueDicts = values.valueDicts;
- assert.equal(1, valueDicts.length);
- return valueDicts[0];
- }
-
- test('minimalHazard', function() {
- var duration = 50 + 1e-4;
- var value = computeHazardValue(function(model) {
- model.rendererMain.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
- type: tr.model.ThreadSlice,
- isTopLevel: true,
- start: 0,
- duration: duration
- }));
- });
- assert.notEqual(0, value.numeric.value);
- assert.closeTo(value.numeric.value, 0.1611, 1e-5);
- });
-
- test('maximalHazard', function() {
- var value = computeHazardValue(function(model) {
- model.rendererMain.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
- type: tr.model.ThreadSlice,
- isTopLevel: true,
- start: 0,
- duration: 2200
- }));
- });
- assert.closeTo(value.numeric.value, 1, 1e-5);
- });
-
- test('blendedHazards', function() {
- var value = computeHazardValue(function(model) {
- model.rendererMain.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
- type: tr.model.ThreadSlice,
- isTopLevel: true,
- start: 0,
- duration: 100
- }));
- model.rendererMain.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
- type: tr.model.ThreadSlice,
- isTopLevel: true,
- start: 0,
- duration: 200
- }));
- model.rendererMain.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
- type: tr.model.ThreadSlice,
- isTopLevel: true,
- start: 0,
- duration: 300
- }));
- model.rendererMain.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
- type: tr.model.ThreadSlice,
- isTopLevel: true,
- start: 0,
- duration: 400
- }));
- });
- assert.closeTo(0.92144, value.numeric.value, 1e-4);
- });
-});
-</script>
diff --git a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/long_tasks_metric.html b/chromium/third_party/catapult/tracing/tracing/metrics/system_health/long_tasks_metric.html
deleted file mode 100644
index 1e2fea97a19..00000000000
--- a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/long_tasks_metric.html
+++ /dev/null
@@ -1,107 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright 2016 The Chromium Authors. All rights reserved.
-Use of this source code is governed by a BSD-style license that can be
-found in the LICENSE file.
--->
-
-<link rel="import" href="/tracing/metrics/metric_registry.html">
-<link rel="import" href="/tracing/model/helpers/chrome_model_helper.html">
-<link rel="import" href="/tracing/value/numeric.html">
-<link rel="import" href="/tracing/value/value.html">
-
-<script>
-'use strict';
-
-tr.exportTo('tr.metrics.sh', function() {
- var LONG_TASK_MS = 50;
-
- // Anything longer than this should be so rare that its length beyond this is
- // uninteresting.
- var LONGEST_TASK_MS = 1000;
-
- var timeDurationInMs_smallerIsBetter =
- tr.v.Unit.byName.timeDurationInMs_smallerIsBetter;
-
- /**
- * This helper function calls |cb| for each of the top-level tasks on the
- * given thread in the given range whose duration is longer than LONG_TASK_MS.
- *
- * @param {tr.model.Thread} thread
- * @param {tr.b.Range=} opt_range
- * @param {function()} cb
- * @param {Object=} opt_this
- */
- function iterateLongTopLevelTasksOnThreadInRange(
- thread, opt_range, cb, opt_this) {
- thread.sliceGroup.topLevelSlices.forEach(function(slice) {
- if (opt_range &&
- !opt_range.intersectsExplicitRangeExclusive(slice.start, slice.end))
- return;
-
- if (slice.duration < LONG_TASK_MS)
- return;
-
- cb.call(opt_this, slice);
- });
- }
-
- /**
- * This helper function calls |cb| for each of the main renderer threads in
- * the model.
- *
- * @param {tr.model.Model} model The model.
- * @param {function()} cb Callback.
- * @param {Object=} opt_this Context object.
- */
- function iterateRendererMainThreads(model, cb, opt_this) {
- var modelHelper = model.getOrCreateHelper(
- tr.model.helpers.ChromeModelHelper);
- tr.b.dictionaryValues(modelHelper.rendererHelpers).forEach(
- function(rendererHelper) {
- if (!rendererHelper.mainThread)
- return;
- cb.call(opt_this, rendererHelper.mainThread);
- });
- }
-
- var LONG_TASK_NUMERIC_BUILDER = tr.v.NumericBuilder.createLinear(
- tr.v.Unit.byName.timeDurationInMs_smallerIsBetter,
- tr.b.Range.fromExplicitRange(LONG_TASK_MS, LONGEST_TASK_MS), 50);
-
- /**
- * This metric directly measures long tasks on renderer main threads.
- * This metric requires only the 'toplevel' tracing category.
- *
- * @param {!tr.v.ValueSet} values
- * @param {!tr.model.Model} model
- * @param {!Object=} opt_options
- */
- function longTasksMetric(values, model, opt_options) {
- var rangeOfInterest = opt_options ? opt_options.rangeOfInterest : undefined;
- var longTaskNumeric = LONG_TASK_NUMERIC_BUILDER.build();
- iterateRendererMainThreads(model, function(thread) {
- iterateLongTopLevelTasksOnThreadInRange(
- thread, rangeOfInterest, function(task) {
- longTaskNumeric.add(task.duration, task.stableId);
- });
- });
- var options = {description: 'durations of long tasks'};
- values.addValue(new tr.v.NumericValue(
- 'long tasks', longTaskNumeric, options));
- }
-
- tr.metrics.MetricRegistry.register(longTasksMetric, {
- supportsRangeOfInterest: true
- });
-
- return {
- longTasksMetric: longTasksMetric,
- iterateLongTopLevelTasksOnThreadInRange:
- iterateLongTopLevelTasksOnThreadInRange,
- iterateRendererMainThreads: iterateRendererMainThreads,
- LONG_TASK_MS: LONG_TASK_MS,
- LONGEST_TASK_MS: LONGEST_TASK_MS
- };
-});
-</script>
diff --git a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/memory_metric.html b/chromium/third_party/catapult/tracing/tracing/metrics/system_health/memory_metric.html
deleted file mode 100644
index 1aa81e05b2b..00000000000
--- a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/memory_metric.html
+++ /dev/null
@@ -1,1023 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright 2016 The Chromium Authors. All rights reserved.
-Use of this source code is governed by a BSD-style license that can be
-found in the LICENSE file.
--->
-
-<link rel="import" href="/tracing/base/iteration_helpers.html">
-<link rel="import" href="/tracing/base/multi_dimensional_view.html">
-<link rel="import" href="/tracing/base/range.html">
-<link rel="import" href="/tracing/metrics/metric_registry.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">
-<link rel="import" href="/tracing/value/numeric.html">
-<link rel="import" href="/tracing/value/unit.html">
-<link rel="import" href="/tracing/value/value.html">
-
-<script>
-'use strict';
-
-tr.exportTo('tr.metrics.sh', function() {
- var LIGHT = tr.model.ContainerMemoryDump.LevelOfDetail.LIGHT;
- var DETAILED = tr.model.ContainerMemoryDump.LevelOfDetail.DETAILED;
- var ScalarNumeric = tr.v.ScalarNumeric;
- var sizeInBytes_smallerIsBetter =
- tr.v.Unit.byName.sizeInBytes_smallerIsBetter;
- var unitlessNumber_smallerIsBetter =
- tr.v.Unit.byName.unitlessNumber_smallerIsBetter;
- var DISPLAYED_SIZE_NUMERIC_NAME =
- tr.model.MemoryAllocatorDump.DISPLAYED_SIZE_NUMERIC_NAME;
-
- var LEVEL_OF_DETAIL_NAMES = new Map();
- LEVEL_OF_DETAIL_NAMES.set(LIGHT, 'light');
- LEVEL_OF_DETAIL_NAMES.set(DETAILED, 'detailed');
-
- var MEMORY_NUMERIC_BUILDER_MAP = new WeakMap();
- // For unitless numerics (process counts), we use 20 linearly scaled bins
- // from 0 to 20.
- MEMORY_NUMERIC_BUILDER_MAP.set(unitlessNumber_smallerIsBetter,
- tr.v.NumericBuilder.createLinear(
- tr.v.Unit.byName.unitlessNumber_smallerIsBetter,
- tr.b.Range.fromExplicitRange(0, 20), 20));
- // For size numerics (subsystem and vm stats), we use 1 bin from 0 B to
- // 1 KiB and 4*24 exponentially scaled bins from 1 KiB to 16 GiB (=2^24 KiB).
- MEMORY_NUMERIC_BUILDER_MAP.set(sizeInBytes_smallerIsBetter,
- new tr.v.NumericBuilder(sizeInBytes_smallerIsBetter, 0)
- .addBinBoundary(1024 /* 1 KiB */)
- .addExponentialBins(16 * 1024 * 1024 * 1024 /* 16 GiB */, 4 * 24));
-
- function memoryMetric(values, model) {
- var browserNameToGlobalDumps = splitGlobalDumpsByBrowserName(model);
- 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.
- * @return {!Map<string, !Array<!tr.model.GlobalMemoryDump>} A map from
- * browser names to the associated global memory dumps.
- */
- function splitGlobalDumpsByBrowserName(model) {
- var chromeModelHelper =
- model.getOrCreateHelper(tr.model.helpers.ChromeModelHelper);
- var browserNameToGlobalDumps = new Map();
- var 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.
- var globalDumps = helper.process.memoryDumps.map(
- d => d.globalMemoryDump);
- globalDumps.forEach(function(globalDump) {
- var 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,
- 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.
- var unclassifiedGlobalDumps =
- model.globalMemoryDumps.filter(g => !globalDumpToBrowserHelper.has(g));
- if (unclassifiedGlobalDumps.length > 0) {
- makeKeyUniqueAndSet(
- browserNameToGlobalDumps, 'unknown_browser', unclassifiedGlobalDumps);
- }
-
- return browserNameToGlobalDumps;
- }
-
- function canonicalizeName(name) {
- return name.toLowerCase().replace(' ', '_');
- };
-
- var USER_FRIENDLY_BROWSER_NAMES = {
- 'chrome': 'Chrome',
- 'webview': 'WebView',
- 'unknown_browser': 'an unknown browser'
- };
-
- /**
- * Convert a canonical browser name used in value names to a user-friendly
- * name used in value descriptions.
- *
- * Examples:
- *
- * CANONICAL BROWSER NAME -> USER-FRIENDLY NAME
- * chrome -> Chrome
- * unknown_browser -> an unknown browser
- * webview2 -> WebView(2)
- * unexpected -> 'unexpected' browser
- */
- function convertBrowserNameToUserFriendlyName(browserName) {
- for (var baseName in USER_FRIENDLY_BROWSER_NAMES) {
- if (!browserName.startsWith(baseName))
- continue;
- var userFriendlyBaseName = USER_FRIENDLY_BROWSER_NAMES[baseName];
- var suffix = browserName.substring(baseName.length);
- if (suffix.length === 0)
- return userFriendlyBaseName;
- else if (/^\d+$/.test(suffix))
- return userFriendlyBaseName + '(' + suffix + ')';
- }
- return '\'' + browserName + '\' browser';
- }
-
- function canonicalizeProcessName(rawProcessName) {
- if (!rawProcessName)
- return 'unknown_processes';
- var baseCanonicalName = canonicalizeName(rawProcessName);
- switch (baseCanonicalName) {
- case 'renderer':
- return 'renderer_processes'; // Intentionally plural.
- case 'browser':
- return 'browser_process';
- default:
- return baseCanonicalName;
- }
- }
-
- /**
- * Convert a canonical process name used in value names to a user-friendly
- * name used in value descriptions.
- */
- function convertProcessNameToUserFriendlyName(processName,
- opt_requirePlural) {
- switch (processName) {
- case 'browser_process':
- return opt_requirePlural ? 'browser processes' : 'the browser process';
- case 'renderer_processes':
- return 'renderer processes';
- case 'gpu_process':
- return opt_requirePlural ? 'GPU processes' : 'the GPU process';
- case 'ppapi_process':
- return opt_requirePlural ? 'PPAPI processes' : 'the PPAPI process';
- case 'all_processes':
- return 'all processes';
- case 'unknown_processes':
- return 'unknown processes';
- default:
- return '\'' + processName + '\' processes';
- }
- }
-
- /**
- * 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:
- *
- * var 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) {
- var uniqueKey = key;
- var 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:
- *
- * * PROCESS COUNTS
- * memory:{chrome, webview}:
- * {browser_process, renderer_processes, ..., all_processes}:
- * process_count
- * type: tr.v.Numeric (histogram over all matching global memory dumps)
- * unit: unitlessNumber_smallerIsBetter
- *
- * * MEMORY USAGE REPORTED BY CHROME
- * memory:{chrome, webview}:
- * {browser_process, renderer_processes, ..., all_processes}:
- * reported_by_chrome[:{v8, malloc, ...}]:
- * {effective_size, allocated_objects_size, locked_size}
- * type: tr.v.Numeric (histogram over all matching global memory dumps)
- * unit: sizeInBytes_smallerIsBetter
- */
- function addGeneralMemoryDumpValues(browserNameToGlobalDumps, values) {
- addMemoryDumpValues(browserNameToGlobalDumps,
- gmd => true /* process all global memory dumps */,
- function(processDump, addProcessScalar) {
- // Increment memory:<browser-name>:<process-name>:process_count value.
- addProcessScalar({
- source: 'process_count',
- value: 1,
- unit: unitlessNumber_smallerIsBetter,
- descriptionPrefixBuilder: buildProcessCountDescriptionPrefix
- });
-
- // Add memory:<browser-name>:<process-name>:reported_by_chrome:...
- // values.
- if (processDump.memoryAllocatorDumps === undefined)
- return;
- processDump.memoryAllocatorDumps.forEach(function(rootAllocatorDump) {
- CHROME_VALUE_PROPERTIES.forEach(function(spec) {
- addProcessScalar({
- source: 'reported_by_chrome',
- component: [rootAllocatorDump.name],
- property: spec.propertyName,
- value: rootAllocatorDump.numerics[spec.propertyName],
- descriptionPrefixBuilder: spec.descriptionPrefixBuilder
- });
- });
- });
- },
- function(componentTree) {
- // Subtract memory:<browser-name>:<process-name>:reported_by_chrome:
- // tracing:<size-property> from memory:<browser-name>:<process-name>:
- // reported_by_chrome:<size-property> if applicable.
- var tracingNode = componentTree.children[1].get('tracing');
- if (tracingNode === undefined)
- return;
- for (var i = 0; i < componentTree.values.length; i++)
- componentTree.values[i].total -= tracingNode.values[i].total;
- }, values);
- }
-
- /**
- * Build a description prefix for a memory:<browser-name>:<process-name>:
- * process_count value.
- *
- * @param {!Array<string>} componentPath The underlying component path (must
- * be empty).
- * @param {string} processName The canonical name of the process.
- * @return {string} Prefix for the value's description (always
- * 'total number of renderer processes').
- */
- function buildProcessCountDescriptionPrefix(componentPath, processName) {
- if (componentPath.length > 0) {
- throw new Error('Unexpected process count non-empty component path: ' +
- componentPath.join(':'));
- }
- return 'total number of ' + convertProcessNameToUserFriendlyName(
- processName, true /* opt_requirePlural */);
- }
-
- /**
- * Build a description prefix for a memory:<browser-name>:<process-name>:
- * reported_by_chrome:... value.
- *
- * @param {{
- * userFriendlyPropertyName: string,
- * userFriendlyPropertyNamePrefix: (string|undefined),
- * totalUserFriendlyPropertyName: (string|undefined),
- * componentPreposition: (string|undefined) }}
- * formatSpec Specification of how the property should be formatted.
- * @param {!Array<string>} componentPath The underlying component path (e.g.
- * ['malloc']).
- * @param {string} processName The canonical name of the process.
- * @return {string} Prefix for the value's description (e.g.
- * 'effective size of malloc in the browser process').
- */
- function buildChromeValueDescriptionPrefix(
- formatSpec, componentPath, processName) {
- var nameParts = [];
- if (componentPath.length === 0) {
- nameParts.push('total');
- if (formatSpec.totalUserFriendlyPropertyName) {
- nameParts.push(formatSpec.totalUserFriendlyPropertyName);
- } else {
- if (formatSpec.userFriendlyPropertyNamePrefix)
- nameParts.push(formatSpec.userFriendlyPropertyNamePrefix);
- nameParts.push(formatSpec.userFriendlyPropertyName);
- }
- nameParts.push('reported by Chrome for');
- } else {
- if (formatSpec.componentPreposition === undefined) {
- // Use component name as an adjective
- // (e.g. 'size of V8 code and metadata').
- if (formatSpec.userFriendlyPropertyNamePrefix)
- nameParts.push(formatSpec.userFriendlyPropertyNamePrefix);
- nameParts.push(componentPath.join(':'));
- nameParts.push(formatSpec.userFriendlyPropertyName);
- } else {
- // Use component name as a noun with a preposition
- // (e.g. 'size of all objects allocated BY MALLOC').
- if (formatSpec.userFriendlyPropertyNamePrefix)
- nameParts.push(formatSpec.userFriendlyPropertyNamePrefix);
- nameParts.push(formatSpec.userFriendlyPropertyName);
- nameParts.push(formatSpec.componentPreposition);
- nameParts.push(componentPath.join(':'));
- }
- nameParts.push('in');
- }
- nameParts.push(convertProcessNameToUserFriendlyName(processName));
- return nameParts.join(' ');
- }
-
- // Specifications of properties reported by Chrome.
- var CHROME_VALUE_PROPERTIES = [
- {
- propertyName: 'effective_size',
- descriptionPrefixBuilder: buildChromeValueDescriptionPrefix.bind(
- undefined, {
- userFriendlyPropertyName: 'effective size',
- componentPreposition: 'of'
- })
- },
- {
- propertyName: 'allocated_objects_size',
- descriptionPrefixBuilder: buildChromeValueDescriptionPrefix.bind(
- undefined, {
- userFriendlyPropertyName: 'size of all objects allocated',
- totalUserFriendlyPropertyName: 'size of all allocated objects',
- componentPreposition: 'by'
- })
- },
- {
- propertyName: 'locked_size',
- descriptionPrefixBuilder: buildChromeValueDescriptionPrefix.bind(
- undefined, {
- userFriendlyPropertyName: 'locked (pinned) size',
- componentPreposition: 'of'
- })
- }
- ];
-
- /**
- * Add heavy memory dump values calculated from heavy global memory dumps to
- * |values|. In particular, this function adds the following values:
- *
- * * MEMORY USAGE REPORTED BY THE OS
- * memory:{chrome, webview}:
- * {browser_process, renderer_processes, ..., all_processes}:
- * reported_by_os:system_memory:[{ashmem, native_heap, java_heap}:]
- * {proportional_resident_size, private_dirty_size}
- * memory:{chrome, webview}:
- * {browser_process, renderer_processes, ..., all_processes}:
- * reported_by_os:gpu_memory:[{gl, graphics, ...}:]
- * proportional_resident_size
- * type: tr.v.Numeric (histogram over matching heavy global memory dumps)
- * unit: sizeInBytes_smallerIsBetter
- *
- * * MEMORY USAGE REPORTED BY CHROME
- * memory:{chrome, webview}:
- * {browser_process, renderer_processes, ..., all_processes}:
- * reported_by_chrome:v8:code_and_metadata_size
- * type: tr.v.Numeric (histogram over matching heavy global memory dumps)
- * unit: sizeInBytes_smallerIsBetter
- */
- function addDetailedMemoryDumpValues(browserNameToGlobalDumps, values) {
- addMemoryDumpValues(browserNameToGlobalDumps,
- g => g.levelOfDetail === DETAILED,
- function(processDump, addProcessScalar) {
- // Add memory:<browser-name>:<process-name>:reported_by_os:
- // system_memory:... values.
- tr.b.iterItems(
- SYSTEM_VALUE_COMPONENTS,
- function(componentName, componentSpec) {
- tr.b.iterItems(
- SYSTEM_VALUE_PROPERTIES,
- function(propertyName, propertySpec) {
- var node = getDescendantVmRegionClassificationNode(
- processDump.vmRegions,
- componentSpec.classificationPath);
- var componentPath = ['system_memory'];
- if (componentName)
- componentPath.push(componentName);
- addProcessScalar({
- source: 'reported_by_os',
- component: componentPath,
- property: propertyName,
- value: node === undefined ?
- 0 : (node.byteStats[propertySpec.byteStat] || 0),
- unit: sizeInBytes_smallerIsBetter,
- descriptionPrefixBuilder:
- propertySpec.descriptionPrefixBuilder
- });
- });
- });
-
- // Add memory:<browser-name>:<process-name>:reported_by_os:
- // gpu_memory:... values.
- var memtrackDump = processDump.getMemoryAllocatorDumpByFullName(
- 'gpu/android_memtrack');
- if (memtrackDump !== undefined) {
- var descriptionPrefixBuilder = SYSTEM_VALUE_PROPERTIES[
- 'proportional_resident_size'].descriptionPrefixBuilder;
- memtrackDump.children.forEach(function(memtrackChildDump) {
- var childName = memtrackChildDump.name;
- addProcessScalar({
- source: 'reported_by_os',
- component: ['gpu_memory', childName],
- property: 'proportional_resident_size',
- value: memtrackChildDump.numerics['memtrack_pss'],
- descriptionPrefixBuilder: descriptionPrefixBuilder
- });
- });
- }
-
- // Add memory:<browser-name>:<process-name>:reported_by_chrome:v8:
- // code_and_metadata_size when available.
- var v8Dump = processDump.getMemoryAllocatorDumpByFullName('v8');
- if (v8Dump !== undefined) {
- // V8 generates bytecode when interpreting and code objects when
- // compiling the javascript. Total code size includes the size
- // of code and bytecode objects.
- addProcessScalar({
- source: 'reported_by_chrome',
- component: ['v8'],
- property: 'code_and_metadata_size',
- value: v8Dump.numerics['code_and_metadata_size'],
- descriptionPrefixBuilder:
- buildCodeAndMetadataSizeValueDescriptionPrefix
- });
- addProcessScalar({
- source: 'reported_by_chrome',
- component: ['v8'],
- property: 'code_and_metadata_size',
- value: v8Dump.numerics['bytecode_and_metadata_size'],
- descriptionPrefixBuilder:
- buildCodeAndMetadataSizeValueDescriptionPrefix
- });
- }
- }, function(componentTree) {}, values);
- }
-
- // Specifications of components reported by the system.
- var SYSTEM_VALUE_COMPONENTS = {
- '': {
- classificationPath: [],
- },
- 'java_heap': {
- classificationPath: ['Android', 'Java runtime', 'Spaces'],
- userFriendlyName: 'the Java heap'
- },
- 'ashmem': {
- classificationPath: ['Android', 'Ashmem'],
- userFriendlyName: 'ashmem'
- },
- 'native_heap': {
- classificationPath: ['Native heap'],
- userFriendlyName: 'the native heap'
- }
- };
-
- // Specifications of properties reported by the system.
- var SYSTEM_VALUE_PROPERTIES = {
- 'proportional_resident_size': {
- byteStat: 'proportionalResident',
- descriptionPrefixBuilder: buildOsValueDescriptionPrefix.bind(
- undefined, 'proportional resident size (PSS)')
- },
- 'private_dirty_size': {
- byteStat: 'privateDirtyResident',
- descriptionPrefixBuilder: buildOsValueDescriptionPrefix.bind(
- undefined, 'private dirty size')
- }
- };
-
- /**
- * Build a description prefix for a memory:<browser-name>:<process-name>:
- * reported_by_os:... value.
- *
- * @param {string} userFriendlyPropertyName User-friendly name of the
- * underlying property (e.g. 'private dirty size').
- * @param {!Array<string>} componentPath The underlying component path (e.g.
- * ['system', 'java_heap']).
- * @param {string} processName The canonical name of the process.
- * @return {string} Prefix for the value's description (e.g.
- * 'total private dirty size of the Java heal in the GPU process').
- */
- function buildOsValueDescriptionPrefix(
- userFriendlyPropertyName, componentPath, processName) {
- if (componentPath.length > 2) {
- throw new Error('OS value component path for \'' +
- userFriendlyPropertyName + '\' too long: ' + componentPath.join(':'));
- }
-
- var nameParts = [];
- if (componentPath.length < 2)
- nameParts.push('total');
-
- nameParts.push(userFriendlyPropertyName);
-
- if (componentPath.length > 0) {
- switch (componentPath[0]) {
- case 'system_memory':
- if (componentPath.length > 1) {
- var userFriendlyComponentName =
- SYSTEM_VALUE_COMPONENTS[componentPath[1]].userFriendlyName;
- if (userFriendlyComponentName === undefined) {
- throw new Error('System value sub-component for \'' +
- userFriendlyPropertyName + '\' unknown: ' +
- componentPath.join(':'));
- }
- nameParts.push('of', userFriendlyComponentName, 'in');
- } else {
- nameParts.push('of system memory (RAM) used by');
- }
- break;
-
- case 'gpu_memory':
- if (componentPath.length > 1) {
- nameParts.push('of the', componentPath[1]);
- nameParts.push('Android memtrack component in');
- } else {
- nameParts.push('of GPU memory (Android memtrack) used by');
- }
- break;
-
- default:
- throw new Error('OS value component for \'' +
- userFriendlyPropertyName + '\' unknown: ' +
- componentPath.join(':'));
- }
- } else {
- nameParts.push('reported by the OS for');
- }
-
- nameParts.push(convertProcessNameToUserFriendlyName(processName));
- return nameParts.join(' ');
- }
-
- /**
- * Build a description prefix for a memory:<browser-name>:<process-name>:
- * reported_by_chrome:...:code_and_metadata_size value.
- *
- * @param {!Array<string>} componentPath The underlying component path (e.g.
- * ['v8']).
- * @param {string} processName The canonical name of the process.
- * @return {string} Prefix for the value's description (e.g.
- * 'size of v8 code and metadata in').
- */
- function buildCodeAndMetadataSizeValueDescriptionPrefix(
- componentPath, processName) {
- return buildChromeValueDescriptionPrefix({
- userFriendlyPropertyNamePrefix: 'size of',
- userFriendlyPropertyName: 'code and metadata'
- }, componentPath, processName);
- }
-
- /**
- * Get the descendant of a VM region classification |node| specified by the
- * given |path| of child node titles. If |node| is undefined or such a
- * descendant does not exist, this function returns undefined.
- */
- function getDescendantVmRegionClassificationNode(node, path) {
- for (var i = 0; i < path.length; i++) {
- if (node === undefined)
- break;
- node = tr.b.findFirstInArray(node.children, c => c.title === path[i]);
- }
- return node;
- }
-
- /**
- * Add global memory dump counts to |values|. In particular, this function
- * adds the following values:
- *
- * * DUMP COUNTS
- * memory:{chrome, webview}:all_processes:dump_count[:{light, detailed}]
- * type: tr.v.ScalarNumeric (scalar over the whole trace)
- * unit: unitlessNumber_smallerIsBetter
- *
- * Note that unlike all other values generated by the memory metric, the
- * global memory dump counts are NOT instances of tr.v.Numeric (histogram)
- * because it doesn't make sense to aggregate them (they are already counts
- * over all global dumps associated with the relevant browser).
- */
- function addMemoryDumpCountValues(browserNameToGlobalDumps, values) {
- browserNameToGlobalDumps.forEach(function(globalDumps, browserName) {
- var totalDumpCount = 0;
- var levelOfDetailNameToDumpCount = {};
- LEVEL_OF_DETAIL_NAMES.forEach(function(levelOfDetailName) {
- levelOfDetailNameToDumpCount[levelOfDetailName] = 0;
- });
-
- globalDumps.forEach(function(globalDump) {
- totalDumpCount++;
-
- // Increment the level-of-detail-specific dump count (if possible).
- var levelOfDetailName =
- LEVEL_OF_DETAIL_NAMES.get(globalDump.levelOfDetail);
- if (!(levelOfDetailName in levelOfDetailNameToDumpCount))
- return; // Unknown level of detail.
- levelOfDetailNameToDumpCount[levelOfDetailName]++;
- });
-
- // Add memory:<browser-name>:all_processes:dump_count[:<level>] values.
- reportMemoryDumpCountAsValue(browserName, undefined /* total */,
- totalDumpCount, values);
- tr.b.iterItems(levelOfDetailNameToDumpCount,
- function(levelOfDetailName, levelOfDetailDumpCount) {
- reportMemoryDumpCountAsValue(browserName, levelOfDetailName,
- levelOfDetailDumpCount, values);
- });
- });
- }
-
- /**
- * Add a tr.v.ScalarNumeric value to |values| reporting that the number of
- * |levelOfDetailName| memory dumps added by |browserName| was
- * |levelOfDetailCount|.
- */
- function reportMemoryDumpCountAsValue(
- browserName, levelOfDetailName, levelOfDetailDumpCount, values) {
- // Construct the name of the memory value.
- var nameParts = ['memory', browserName, 'all_processes', 'dump_count'];
- if (levelOfDetailName !== undefined)
- nameParts.push(levelOfDetailName);
- var name = nameParts.join(':');
-
- // Build the underlying numeric for the memory value.
- var numeric = new ScalarNumeric(
- unitlessNumber_smallerIsBetter, levelOfDetailDumpCount);
-
- // Build the options for the memory value.
- var description = [
- 'total number of',
- levelOfDetailName || 'all',
- 'memory dumps added by',
- convertBrowserNameToUserFriendlyName(browserName),
- 'to the trace'
- ].join(' ');
- var options = { description: description };
-
- // Report the memory value.
- values.addValue(new tr.v.NumericValue(name, numeric, options));
- }
-
- /**
- * Add generic values extracted from process memory dumps and aggregated by
- * process name and component path into |values|.
- *
- * For each browser and set of global dumps in |browserNameToGlobalDumps|,
- * |customProcessDumpValueExtractor| is applied to every process memory dump
- * associated with the global memory dump. The second argument provided to the
- * callback is a function for adding extracted values:
- *
- * function sampleProcessDumpCallback(processDump, addProcessValue) {
- * ...
- * addProcessScalar({
- * source: 'reported_by_chrome',
- * component: ['system', 'native_heap'],
- * property: 'proportional_resident_size',
- * value: pssExtractedFromProcessDump2,
- * descriptionPrefixBuilder: function(componentPath) {
- * return 'PSS of ' + componentPath.join('/') + ' in';
- * }
- * });
- * ...
- * }
- *
- * For each global memory dump, the extracted values are summed by process
- * name (browser_process, renderer_processes, ..., all_processes) and
- * component path (e.g. gpu is a sum of gpu:gl, gpu:graphics, ...). The sums
- * are then aggregated over all global memory dumps associated with the given
- * browser. For example, assuming that |customProcessDumpValueExtractor|
- * extracts 'proportional_resident_size' values for component paths
- * ['X', 'A'], ['X', 'B'] and ['Y'] under the same 'source' from each process
- * memory dump, the following values will be reported (for Chrome):
- *
- * memory:chrome:browser_process:source:X:A:proportional_resident_size :
- * Numeric aggregated over [
- * sum of X:A in all 'browser' process dumps in global dump 1,
- * ...
- * sum of X:A in all 'browser' process dumps in global dump N
- * ]
- *
- * memory:chrome:browser_process:source:X:B:proportional_resident_size :
- * Numeric aggregated over [
- * sum of X:B in all 'browser' process dumps in global dump 1,
- * ...
- * sum of X:B in all 'browser' process dumps in global dump N
- * ]
- *
- * memory:chrome:browser_process:source:X:proportional_resident_size :
- * Numeric aggregated over [
- * sum of X:A+X:B in all 'browser' process dumps in global dump 1,
- * ...
- * sum of X:A+X:B in all 'browser' process dumps in global dump N
- * ]
- *
- * memory:chrome:browser_process:source:Y:proportional_resident_size :
- * Numeric aggregated over [
- * sum of Y in all 'browser' process dumps in global dump 1,
- * ...
- * sum of Y in all 'browser' process dumps in global dump N
- * ]
- *
- * memory:chrome:browser_process:source:proportional_resident_size :
- * Numeric aggregated over [
- * sum of X:A+X:B+Y in all 'browser' process dumps in global dump 1,
- * ...
- * sum of X:A+X:B+Y in all 'browser' process dumps in global dump N
- * ]
- *
- * ...
- *
- * memory:chrome:all_processes:source:X:A:proportional_resident_size :
- * Numeric aggregated over [
- * sum of X:A in all process dumps in global dump 1,
- * ...
- * sum of X:A in all process dumps in global dump N,
- * ]
- *
- * memory:chrome:all_processes:source:X:B:proportional_resident_size :
- * Numeric aggregated over [
- * sum of X:B in all process dumps in global dump 1,
- * ...
- * sum of X:B in all process dumps in global dump N,
- * ]
- *
- * memory:chrome:all_processes:source:X:proportional_resident_size :
- * Numeric aggregated over [
- * sum of X:A+X:B in all process dumps in global dump 1,
- * ...
- * sum of X:A+X:B in all process dumps in global dump N,
- * ]
- *
- * memory:chrome:all_processes:source:Y:proportional_resident_size :
- * Numeric aggregated over [
- * sum of Y in all process dumps in global dump 1,
- * ...
- * sum of Y in all process dumps in global dump N
- * ]
- *
- * memory:chrome:all_processes:source:proportional_resident_size :
- * Numeric aggregated over [
- * sum of X:A+X:B+Y in all process dumps in global dump 1,
- * ...
- * sum of X:A+X:B+Y in all process dumps in global dump N
- * ]
- *
- * where global dumps 1 to N are the global dumps associated with the given
- * browser.
- *
- * @param {!Map<string, !Array<!tr.model.GlobalMemoryDump>}
- * browserNameToGlobalDumps Map from browser names to arrays of global
- * memory dumps. The generic values will be extracted from the associated
- * process memory dumps.
- * @param {!function(!tr.model.GlobalMemoryDump): boolean}
- * customGlobalDumpFilter Predicate for filtering global memory dumps.
- * @param {!function(
- * !tr.model.ProcessMemoryDump,
- * !function(!{
- * source: string,
- * componentPath: (!Array<string>|undefined),
- * propertyName: (string|undefined),
- * value: (!tr.v.ScalarNumeric|number|undefined),
- * unit: (!tr.v.Unit|undefined),
- * descriptionPrefixBuilder: (!function(!Array<string>): string)
- * }))}
- * customProcessDumpValueExtractor Callback for extracting values from a
- * process memory dump.
- * @param {!function(!tr.b.MultiDimensionalViewNode)}
- * customComponentTreeModifier Callback applied to every component tree
- * wrt each process name.
- * @param {!tr.v.ValueSet} values List of values to which the
- * resulting aggregated values are added.
- */
- function addMemoryDumpValues(browserNameToGlobalDumps, customGlobalDumpFilter,
- customProcessDumpValueExtractor, customComponentTreeModifier,
- values) {
- browserNameToGlobalDumps.forEach(function(globalDumps, browserName) {
- var filteredGlobalDumps = globalDumps.filter(customGlobalDumpFilter);
- var sourceToPropertyToData = extractDataFromGlobalDumps(
- filteredGlobalDumps, customProcessDumpValueExtractor);
- reportDataAsValues(sourceToPropertyToData, browserName,
- customComponentTreeModifier, values);
- });
- }
-
- /**
- * For each global memory dump in |globalDumps|, calculate per-process-name
- * sums of values extracted by |customProcessDumpValueExtractor| from the
- * associated process memory dumps.
- *
- * This function returns the following nested map structure:
- *
- * Source name (Map key, e.g. 'reported_by_os')
- * -> Property name (Map key, e.g. 'proportional_resident_size')
- * -> {unit, descriptionPrefixBuilder, processAndComponentTreeBuilder}
- *
- * where |processAndComponentTreeBuilder| is a
- * tr.b.MultiDimensionalViewBuilder:
- *
- * Browser name (0th dimension key, e.g. 'webview') x
- * -> Component path (1st dimension keys, e.g. ['system', 'native_heap'])
- * -> Sum of value over the processes (number).
- *
- * See addMemoryDumpValues for more details.
- */
- function extractDataFromGlobalDumps(
- globalDumps, customProcessDumpValueExtractor) {
- var sourceToPropertyToData = new Map();
- var dumpCount = globalDumps.length;
- globalDumps.forEach(function(globalDump, dumpIndex) {
- tr.b.iterItems(globalDump.processMemoryDumps, function(_, processDump) {
- extractDataFromProcessDump(
- processDump, sourceToPropertyToData, dumpIndex, dumpCount,
- customProcessDumpValueExtractor);
- });
- });
- return sourceToPropertyToData;
- }
-
- function extractDataFromProcessDump(processDump, sourceToPropertyToData,
- dumpIndex, dumpCount, customProcessDumpValueExtractor) {
- // Process name is typically 'browser', 'renderer', etc.
- var rawProcessName = processDump.process.name;
- var processNamePath = [canonicalizeProcessName(rawProcessName)];
-
- customProcessDumpValueExtractor(
- processDump,
- function addProcessScalar(spec) {
- if (spec.value === undefined)
- return;
-
- var component = spec.component || [];
- function createDetailsForErrorMessage() {
- var propertyUserFriendlyName =
- spec.property === undefined ? '(undefined)' : spec.property;
- var componentUserFriendlyName =
- component.length === 0 ? '(empty)' : component.join(':');
- return ['source=', spec.source, ', property=',
- propertyUserFriendlyName, ', component=',
- componentUserFriendlyName, ' in ',
- processDump.process.userFriendlyName].join('');
- }
-
- var value, unit;
- if (spec.value instanceof ScalarNumeric) {
- value = spec.value.value;
- unit = spec.value.unit;
- if (spec.unit !== undefined) {
- throw new Error('ScalarNumeric value for ' +
- createDetailsForErrorMessage() + ' already specifies a unit');
- }
- } else {
- value = spec.value;
- unit = spec.unit;
- }
-
- var propertyToData = sourceToPropertyToData.get(spec.source);
- if (propertyToData === undefined) {
- propertyToData = new Map();
- sourceToPropertyToData.set(spec.source, propertyToData);
- }
-
- var data = propertyToData.get(spec.property);
- if (data === undefined) {
- data = {
- processAndComponentTreeBuilder:
- new tr.b.MultiDimensionalViewBuilder(
- 2 /* dimensions (process name and component path) */,
- dumpCount /* valueCount */),
- unit: unit,
- descriptionPrefixBuilder: spec.descriptionPrefixBuilder
- };
- propertyToData.set(spec.property, data);
- } else if (data.unit !== unit) {
- throw new Error('Multiple units provided for ' +
- createDetailsForErrorMessage() + ':' +
- data.unit.unitName + ' and ' + unit.unitName);
- } else if (data.descriptionPrefixBuilder !==
- spec.descriptionPrefixBuilder) {
- throw new Error(
- 'Multiple description prefix builders provided for' +
- createDetailsForErrorMessage());
- }
-
- var values = new Array(dumpCount);
- values[dumpIndex] = value;
-
- data.processAndComponentTreeBuilder.addPath(
- [processNamePath, component] /* path */, values,
- tr.b.MultiDimensionalViewBuilder.ValueKind.TOTAL /* valueKind */);
- });
- }
-
- function reportDataAsValues(sourceToPropertyToData, browserName,
- customComponentTreeModifier, values) {
- // For each source name (e.g. 'reported_by_os')...
- sourceToPropertyToData.forEach(function(propertyToData, sourceName) {
- // For each property name (e.g. 'effective_size')...
- propertyToData.forEach(function(data, propertyName) {
- var tree = data.processAndComponentTreeBuilder.buildTopDownTreeView();
- var unit = data.unit;
- var descriptionPrefixBuilder = data.descriptionPrefixBuilder;
-
- // Total over 'all' processes...
- customComponentTreeModifier(tree);
- reportComponentDataAsValues(browserName, sourceName,
- propertyName, 'all_processes', [] /* componentPath */, tree,
- unit, descriptionPrefixBuilder, values);
-
- // For each process name (e.g. 'renderer')...
- tree.children[0].forEach(function(processTree, processName) {
- if (processTree.children[0].size > 0) {
- throw new Error('Multi-dimensional view node for source=' +
- sourceName + ', property=' +
- (propertyName === undefined ? '(undefined)' : propertyName) +
- ', process=' + processName +
- ' has children wrt the process name dimension');
- }
- customComponentTreeModifier(processTree);
- reportComponentDataAsValues(browserName, sourceName,
- propertyName, processName, [] /* componentPath */, processTree,
- unit, descriptionPrefixBuilder, values);
- });
- });
- });
- }
-
- /**
- * For the given |browserName| (e.g. 'chrome'), |processName|
- * (e.g. 'gpu_process'), |propertyName| (e.g. 'effective_size'),
- * |componentPath| (e.g. ['v8']), add a tr.v.Numeric with |unit| aggregating
- * the total values of the associated |componentNode| across all timestamps
- * (corresponding to global memory dumps associated with the given browser)
- * to |values|.
- *
- * See addMemoryDumpValues for more details.
- */
- function reportComponentDataAsValues(
- browserName, sourceName, propertyName, processName, componentPath,
- componentNode, unit, descriptionPrefixBuilder, values) {
- // Construct the name of the memory value.
- var nameParts = ['memory', browserName, processName, sourceName].concat(
- componentPath);
- if (propertyName !== undefined)
- nameParts.push(propertyName);
- var name = nameParts.join(':');
-
- // Build the underlying numeric for the memory value.
- var numeric = buildMemoryNumericFromNode(componentNode, unit);
-
- // Build the options for the memory value.
- var description = [
- descriptionPrefixBuilder(componentPath, processName),
- 'in',
- convertBrowserNameToUserFriendlyName(browserName)
- ].join(' ');
- var options = { description: description };
-
- // Report the memory value.
- values.addValue(new tr.v.NumericValue(name, numeric, options));
-
- // Recursively report memory values for sub-components.
- var depth = componentPath.length;
- componentPath.push(undefined);
- componentNode.children[1].forEach(function(childNode, childName) {
- componentPath[depth] = childName;
- reportComponentDataAsValues(
- browserName, sourceName, propertyName, processName, componentPath,
- childNode, unit, descriptionPrefixBuilder, values);
- });
- componentPath.pop();
- }
-
- /**
- * Create a memory tr.v.Numeric (histogram) with |unit| and add all total
- * values in |node| to it.
- */
- function buildMemoryNumericFromNode(node, unit) {
- var numeric = MEMORY_NUMERIC_BUILDER_MAP.get(unit).build();
- node.values.forEach(v => numeric.add(v.total));
- return numeric;
- }
-
- tr.metrics.MetricRegistry.register(memoryMetric);
-
- return {
- memoryMetric: memoryMetric
- };
-});
-</script>
diff --git a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/memory_metric_test.html b/chromium/third_party/catapult/tracing/tracing/metrics/system_health/memory_metric_test.html
deleted file mode 100644
index 500333d61f9..00000000000
--- a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/memory_metric_test.html
+++ /dev/null
@@ -1,2473 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright 2016 The Chromium Authors. All rights reserved.
-Use of this source code is governed by a BSD-style license that can be
-found in the LICENSE file.
--->
-
-<link rel="import" href="/tracing/core/test_utils.html">
-<link rel="import" href="/tracing/metrics/system_health/memory_metric.html">
-<link rel="import" href="/tracing/model/container_memory_dump.html">
-<link rel="import" href="/tracing/model/memory_dump_test_utils.html">
-<link rel="import" href="/tracing/model/vm_region.html">
-<link rel="import" href="/tracing/value/value.html">
-<link rel="import" href="/tracing/value/value_set.html">
-
-<script>
-'use strict';
-
-tr.b.unittest.testSuite(function() {
- var VMRegion = tr.model.VMRegion;
- var VMRegionClassificationNode = tr.model.VMRegionClassificationNode;
- var LIGHT = tr.model.ContainerMemoryDump.LevelOfDetail.LIGHT;
- var DETAILED = tr.model.ContainerMemoryDump.LevelOfDetail.DETAILED;
- var SIZE_DELTA = tr.model.MemoryDumpTestUtils.SIZE_DELTA;
- var addProcessMemoryDump = tr.model.MemoryDumpTestUtils.addProcessMemoryDump;
- var addGlobalMemoryDump = tr.model.MemoryDumpTestUtils.addGlobalMemoryDump;
- var newAllocatorDump = tr.model.MemoryDumpTestUtils.newAllocatorDump;
- var addChildDump = tr.model.MemoryDumpTestUtils.addChildDump;
- var addOwnershipLink = tr.model.MemoryDumpTestUtils.addOwnershipLink;
- var unitlessNumber_smallerIsBetter =
- tr.v.Unit.byName.unitlessNumber_smallerIsBetter;
- var sizeInBytes_smallerIsBetter =
- tr.v.Unit.byName.sizeInBytes_smallerIsBetter;
-
- function memoryMetricTest(name, modelCallback, expectedNumerics) {
- test(name, function() {
- // Create a model and a fake value list.
- var model = tr.c.TestUtils.newModel(modelCallback);
- var valueNameToValues = {};
- var fakeValueList = {
- addValue: function(value) {
- var values = valueNameToValues[value.name];
- if (values === undefined)
- valueNameToValues[value.name] = values = [];
- values.push(value);
- }
- };
-
- // Run the memory metric on the model.
- tr.metrics.sh.memoryMetric(fakeValueList, model);
-
- // Check that the names of the added values match expectations.
- var actualValueNames = Object.keys(valueNameToValues).sort();
- var expectedValueNames = Object.keys(expectedNumerics).sort();
- assert.deepEqual(actualValueNames, expectedValueNames, {
- // Build the long error message lazily.
- toString: function() {
- var errorMessageParts = [];
- function addValueNamesToError(type, valueNames, otherValueNames) {
- var otherValueNamesSet = new Set(otherValueNames);
- errorMessageParts.push(type, ' value names:');
- if (valueNames.length === 0) {
- errorMessageParts.push('\n(empty)');
- } else {
- valueNames.forEach(function(valueName) {
- errorMessageParts.push('\n');
- if (!otherValueNamesSet.has(valueName))
- errorMessageParts.push('+++');
- errorMessageParts.push(valueName);
- });
- }
- }
- addValueNamesToError('Expected', expectedValueNames,
- actualValueNames);
- errorMessageParts.push('\n');
- addValueNamesToError('Actual', actualValueNames, expectedValueNames);
- return errorMessageParts.join('');
- }
- });
-
- // Check that the numeric values of the added values match expectations.
- tr.b.iterItems(valueNameToValues, function(valueName, actualValues) {
- assert.lengthOf(actualValues, 1,
- 'Multiple \'' + valueName + '\' values');
- var actualValue = actualValues[0];
- assert.instanceOf(actualValue, tr.v.NumericValue);
-
- var actualNumeric = actualValue.numeric;
- var expectedNumeric = expectedNumerics[valueName];
- assert.strictEqual(actualNumeric.unit, expectedNumeric.unit,
- 'Invalid \'' + valueName + '\' unit (expected: ' +
- expectedNumeric.unit.unitName, + ', actual: ' +
- actualNumeric.unit.unitName + ')');
-
- if (typeof expectedNumeric.value === 'number') {
- // Scalar.
- assert.instanceOf(actualNumeric, tr.v.ScalarNumeric,
- 'Invalid \'' + valueName + '\' class');
- assert.closeTo(actualNumeric.value, expectedNumeric.value,
- SIZE_DELTA, 'Invalid \'' + valueName + '\' numeric value');
- } else if (expectedNumeric.value instanceof Array) {
- // Histogram.
- assert.instanceOf(actualNumeric, tr.v.Numeric,
- 'Invalid \'' + valueName + '\' class');
- assert.strictEqual(actualNumeric.numValues,
- expectedNumeric.value.length,
- 'Invalid \'' + valueName + '\' Numeric numValues');
- assert.closeTo(actualNumeric.sum,
- expectedNumeric.value.reduce((a, b) => a + b, 0), SIZE_DELTA,
- 'Invalid \'' + valueName + '\' Numeric sum');
-
- // Check that the bin counts match.
- var binToCount = new Map();
- expectedNumeric.value.forEach(function(value) {
- var bin = actualNumeric.getBinForValue(value);
- binToCount.set(bin, (binToCount.get(bin) || 0) + 1);
- });
- actualNumeric.allBins.forEach(function(bin) {
- binToCount.set(bin, (binToCount.get(bin) || 0) - bin.count);
- });
- binToCount.forEach(function(count, bin) {
- assert.strictEqual(count, 0, 'Invalid \'' + valueName +
- '\' bin count for range ' + bin.min + '-' + bin.max);
- });
- } else {
- assert.fail(
- 'Test sanity check: expected value must be a number or an array');
- }
-
- // Check that the description matches expectations.
- //if (expectedNumeric.description !== '')
- assert.strictEqual(
- actualValue.description, expectedNumeric.description,
- 'Invalid \'' + valueName + '\' description');
- });
- });
- }
-
- function createProcessWithName(model, name) {
- var uniquePid =
- Math.max.apply(null, Object.keys(model.processes).concat([0])) + 1;
- var process = model.getOrCreateProcess(uniquePid);
- process.name = name;
- return process;
- }
-
- function createChromeBrowserProcess(model) {
- var process = createProcessWithName(model, 'Browser');
- process.getOrCreateThread(1).name = 'CrBrowserMain';
- return process;
- }
-
- function createWebViewProcess(model) {
- var process = createChromeBrowserProcess(model);
- process.getOrCreateThread(2).name = 'Chrome_InProcRendererThread';
- return process;
- }
-
- memoryMetricTest('noDumps_noBrowser', function(model) {
- createProcessWithName(model, 'Non-browser');
- }, {
- /* no values */
- });
-
- memoryMetricTest('noDumps_chrome', function(model) {
- createChromeBrowserProcess(model);
- }, {
- 'memory:chrome:all_processes:dump_count:detailed': {
- value: 0,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of detailed memory dumps added by Chrome to ' +
- 'the trace'
- },
- 'memory:chrome:all_processes:dump_count:light': {
- value: 0,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of light memory dumps added by Chrome to ' +
- 'the trace'
- },
- 'memory:chrome:all_processes:dump_count': {
- value: 0,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of all memory dumps added by Chrome to the ' +
- 'trace'
- }
- });
-
- memoryMetricTest('noDumps_multipleBrowsers', function(model) {
- createChromeBrowserProcess(model);
- createWebViewProcess(model);
- createProcessWithName(model, 'Non-browser');
- createChromeBrowserProcess(model);
- }, {
- 'memory:chrome2:all_processes:dump_count:detailed': {
- value: 0,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of detailed memory dumps added by Chrome(2) ' +
- 'to the trace'
- },
- 'memory:chrome2:all_processes:dump_count:light': {
- value: 0,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of light memory dumps added by Chrome(2) to ' +
- 'the trace'
- },
- 'memory:chrome2:all_processes:dump_count': {
- value: 0,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of all memory dumps added by Chrome(2) to ' +
- 'the trace'
- },
- 'memory:chrome:all_processes:dump_count:detailed': {
- value: 0,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of detailed memory dumps added by Chrome to ' +
- 'the trace'
- },
- 'memory:chrome:all_processes:dump_count:light': {
- value: 0,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of light memory dumps added by Chrome to ' +
- 'the trace'
- },
- 'memory:chrome:all_processes:dump_count': {
- value: 0,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of all memory dumps added by Chrome to the ' +
- 'trace'
- },
- 'memory:webview:all_processes:dump_count:detailed': {
- value: 0,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of detailed memory dumps added by WebView ' +
- 'to the trace'
- },
- 'memory:webview:all_processes:dump_count:light': {
- value: 0,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of light memory dumps added by WebView to ' +
- 'the trace'
- },
- 'memory:webview:all_processes:dump_count': {
- value: 0,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of all memory dumps added by WebView to the ' +
- 'trace'
- }
- });
-
- memoryMetricTest('dumpCountsOnly_unknownBrowser', function(model) {
- addGlobalMemoryDump(model, 45, DETAILED);
- addGlobalMemoryDump(model, 68, LIGHT);
- addGlobalMemoryDump(model, 89, DETAILED);
- }, {
- 'memory:unknown_browser:all_processes:dump_count:detailed': {
- value: 2,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of detailed memory dumps added by an ' +
- 'unknown browser to the trace'
- },
- 'memory:unknown_browser:all_processes:dump_count:light': {
- value: 1,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of light memory dumps added by an unknown ' +
- 'browser to the trace'
- },
- 'memory:unknown_browser:all_processes:dump_count': {
- value: 3,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of all memory dumps added by an unknown ' +
- 'browser to the trace'
- }
- });
-
- memoryMetricTest('dumpCountsOnly_webview', function(model) {
- var p = createWebViewProcess(model);
- addProcessMemoryDump(addGlobalMemoryDump(model, 45, LIGHT), p, 45);
- addProcessMemoryDump(addGlobalMemoryDump(model, 68, LIGHT), p, 68);
- }, {
- 'memory:webview:all_processes:dump_count:detailed': {
- value: 0,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of detailed memory dumps added by WebView ' +
- 'to the trace'
- },
- 'memory:webview:all_processes:dump_count:light': {
- value: 2,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of light memory dumps added by WebView to ' +
- 'the trace'
- },
- 'memory:webview:all_processes:dump_count': {
- value: 2,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of all memory dumps added by WebView to the ' +
- 'trace'
- },
- 'memory:webview:all_processes:process_count': {
- value: [1, 1],
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of all processes in WebView'
- },
- 'memory:webview:browser_process:process_count': {
- value: [1, 1],
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of browser processes in WebView'
- }
- });
-
- memoryMetricTest('generalValues_chrome', function(model) {
- var pBrowser = createChromeBrowserProcess(model);
- var pRendererA = createProcessWithName(model, 'Renderer');
- var pRendererB = createProcessWithName(model, 'Renderer');
- var pPpapi = createProcessWithName(model, 'PPAPI Process');
- var pUnknown = createProcessWithName(model, undefined);
-
- // Timestamp 1.
- var gmd1 = addGlobalMemoryDump(model, 20);
- var pmdBrowser1 = addProcessMemoryDump(gmd1, pBrowser, 19);
- pmdBrowser1.memoryAllocatorDumps = [
- newAllocatorDump(pmdBrowser1, 'malloc', {
- 'size': 8,
- 'allocated_objects_size': 4
- })
- ];
- var pmdRendererA1 = addProcessMemoryDump(gmd1, pRendererA, 20);
- pmdRendererA1.memoryAllocatorDumps = (function() {
- var mallocDump =
- newAllocatorDump(pmdRendererA1, 'malloc', { 'size': 16 });
- var partitionAllocDump =
- newAllocatorDump(pmdRendererA1, 'partition_alloc');
- addOwnershipLink(
- addChildDump(partitionAllocDump, 'allocated_objects', { 'size': 32 }),
- addChildDump(partitionAllocDump, 'partitions', { 'size': 24 }));
- return [mallocDump, partitionAllocDump];
- })();
- var pmdGpu1 = addProcessMemoryDump(gmd1, pPpapi, 21);
- pmdGpu1.memoryAllocatorDumps = [
- newAllocatorDump(pmdGpu1, 'gpu', {
- 'size': 30,
- 'allocated_objects_size': 25
- })
- ];
-
- // Timestamp 2.
- var gmd2 = addGlobalMemoryDump(model, 40);
- var pmdBrowser2 = addProcessMemoryDump(gmd2, pBrowser, 41);
- pmdBrowser2.memoryAllocatorDumps = (function() {
- var mallocDump = newAllocatorDump(pmdBrowser2, 'malloc', { 'size': 120 });
- var tracingDump =
- newAllocatorDump(pmdBrowser2, 'tracing', { 'size': 40 });
- return [mallocDump, tracingDump];
- })();
- var pmdRendererA2 = addProcessMemoryDump(gmd2, pRendererA, 39);
- pmdRendererA2.memoryAllocatorDumps = (function() {
- var partitionAllocDump =
- newAllocatorDump(pmdRendererA2, 'partition_alloc');
- addOwnershipLink(
- addChildDump(partitionAllocDump, 'allocated_objects',
- { 'size': 320 }),
- addChildDump(partitionAllocDump, 'partitions', { 'size': 240 }));
- var v8Dump = newAllocatorDump(pmdRendererA2, 'v8', { 'size': 650 });
- return [partitionAllocDump, v8Dump];
- })();
- var pmdRendererB2 = addProcessMemoryDump(gmd2, pRendererB, 40);
- pmdRendererB2.memoryAllocatorDumps = [
- newAllocatorDump(pmdRendererB2, 'v8', {
- 'size': 970,
- 'allocated_objects_size': 860
- }),
- newAllocatorDump(pmdRendererB2, 'malloc', {
- 'allocated_objects_size': 750
- })
- ];
- var pmdUnknown = addProcessMemoryDump(gmd2, pUnknown, 42);
- pmdUnknown.memoryAllocatorDumps = [
- newAllocatorDump(pmdRendererB2, 'v8', {
- 'size': 111
- })
- ];
-
- // Timestamp 3.
- var gmd3 = addGlobalMemoryDump(model, 60);
- var pmdBrowser3 = addProcessMemoryDump(gmd3, pBrowser, 60);
- pmdBrowser3.memoryAllocatorDumps = [
- newAllocatorDump(pmdBrowser3, 'malloc', {
- 'size': 8000,
- 'allocated_objects_size': 4000
- })
- ];
- var pmdRendererB3 = addProcessMemoryDump(gmd3, pRendererB, 61);
- // Intentionally pmdRendererB3.memoryAllocatorDumps undefined.
- var pmdGpu3 = addProcessMemoryDump(gmd3, pPpapi, 59);
- pmdGpu3.memoryAllocatorDumps = [
- newAllocatorDump(pmdGpu3, 'gpu', { 'size': 300 })
- ];
-
- // Timestamp 4.
- var gmd4 = addGlobalMemoryDump(model, 80);
- var pmdBrowser4 = addProcessMemoryDump(gmd4, pBrowser, 81);
- pmdBrowser4.memoryAllocatorDumps = [
- newAllocatorDump(pmdBrowser4, 'malloc', { 'size': 80000 })
- ];
- var pmdRendererB4 = addProcessMemoryDump(gmd4, pRendererB, 79);
- pmdRendererB4.memoryAllocatorDumps = (function() {
- var v8Dump = newAllocatorDump(pmdRendererB4, 'v8', { 'size': 9e5 });
- var partitionAllocDump = newAllocatorDump(pmdRendererB4,
- 'partition_alloc', { 'size': 5e5 });
- addOwnershipLink(partitionAllocDump, v8Dump);
- return [v8Dump, partitionAllocDump];
- })();
- var pmdGpu4 = addProcessMemoryDump(gmd4, pPpapi, 80);
- pmdGpu4.memoryAllocatorDumps = [
- newAllocatorDump(pmdGpu4, 'gpu', { 'memtrack_pss': 666 /* ignored */ })
- ];
- }, {
- 'memory:chrome:all_processes:dump_count:detailed': {
- value: 0,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of detailed memory dumps added by Chrome to ' +
- 'the trace'
- },
- 'memory:chrome:all_processes:dump_count:light': {
- value: 4,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of light memory dumps added by Chrome to ' +
- 'the trace'
- },
- 'memory:chrome:all_processes:dump_count': {
- value: 4,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of all memory dumps added by Chrome to the ' +
- 'trace'
- },
- 'memory:chrome:all_processes:process_count': {
- value: [3, 4, 3, 3],
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of all processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_chrome:effective_size': {
- value: [30 + (8 + 16) + 32, (120 - 40) + 320 + (650 + 970) + 111,
- 300 + 8000, 80000 + 5e5 + 4e5],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total effective size reported by Chrome for all ' +
- 'processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_chrome:allocated_objects_size': {
- value: [25 + 4, 750 + 860, 4000, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total size of all allocated objects reported by Chrome ' +
- 'for all processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_chrome:gpu:effective_size': {
- value: [30, 0, 300, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of gpu in all processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_chrome:gpu:allocated_objects_size':
- {
- value: [25, 0, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'size of all objects allocated by gpu in all ' +
- 'processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_chrome:malloc:effective_size': {
- value: [8 + 16, 120 - 40, 8000, 80000],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of malloc in all processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_chrome:malloc:allocated_objects_size':
- {
- value: [4, 750, 4000, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'size of all objects allocated by malloc in all ' +
- 'processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_chrome:partition_alloc:effective_size':
- {
- value: [32, 320, 0, 5e5],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of partition_alloc in all processes ' +
- 'in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_chrome:tracing:effective_size': {
- value: [0, 40, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of tracing in all processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_chrome:v8:effective_size': {
- value: [0, 650 + 970 + 111, 0, 4e5],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of v8 in all processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_chrome:v8:allocated_objects_size':
- {
- value: [0, 860, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'size of all objects allocated by v8 in all processes ' +
- 'in Chrome'
- },
- 'memory:chrome:browser_process:process_count': {
- value: [1, 1, 1, 1],
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of browser processes in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_chrome:effective_size': {
- value: [8, (120 - 40), 8000, 80000],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total effective size reported by Chrome for the browser ' +
- 'process in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_chrome:allocated_objects_size': {
- value: [4, 0, 4000, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total size of all allocated objects reported by Chrome ' +
- 'for the browser process in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_chrome:malloc:effective_size': {
- value: [8, 120 - 40, 8000, 80000],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of malloc in the browser process in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_chrome:malloc:allocated_objects_size':
- {
- value: [4, 0, 4000, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'size of all objects allocated by malloc in the ' +
- 'browser process in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_chrome:tracing:effective_size': {
- value: [0, 40, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of tracing in the browser process in Chrome'
- },
- 'memory:chrome:ppapi_process:process_count': {
- value: [1, 0, 1, 1],
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of PPAPI processes in Chrome'
- },
- 'memory:chrome:ppapi_process:reported_by_chrome:effective_size': {
- value: [30, 0, 300, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total effective size reported by Chrome for the PPAPI ' +
- 'process in Chrome'
- },
- 'memory:chrome:ppapi_process:reported_by_chrome:allocated_objects_size': {
- value: [25, 0, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total size of all allocated objects reported by Chrome ' +
- 'for the PPAPI process in Chrome'
- },
- 'memory:chrome:ppapi_process:reported_by_chrome:gpu:effective_size': {
- value: [30, 0, 300, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of gpu in the PPAPI process in Chrome'
- },
- 'memory:chrome:ppapi_process:reported_by_chrome:gpu:allocated_objects_size':
- {
- value: [25, 0, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'size of all objects allocated by gpu in the PPAPI ' +
- 'process in Chrome'
- },
- 'memory:chrome:renderer_processes:process_count': {
- value: [1, 2, 1, 1],
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of renderer processes in Chrome'
- },
- 'memory:chrome:renderer_processes:reported_by_chrome:effective_size': {
- value: [16 + 32, 320 + 650 + 970, 0, 5e5 + 4e5],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total effective size reported by Chrome for renderer ' +
- 'processes in Chrome'
- },
- 'memory:chrome:renderer_processes:reported_by_chrome:allocated_objects_size':
- {
- value: [0, 750 + 860, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total size of all allocated objects reported by ' +
- 'Chrome for renderer processes in Chrome'
- },
- 'memory:chrome:renderer_processes:reported_by_chrome:malloc:effective_size':
- {
- value: [16, 0, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of malloc in renderer processes in ' +
- 'Chrome'
- },
- 'memory:chrome:renderer_processes:reported_by_chrome:malloc:allocated_objects_size':
- {
- value: [0, 750, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'size of all objects allocated by malloc in renderer ' +
- 'processes in Chrome'
- },
- 'memory:chrome:renderer_processes:reported_by_chrome:partition_alloc:effective_size':
- {
- value: [32, 320, 0, 5e5],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of partition_alloc in renderer ' +
- 'processes in Chrome'
- },
- 'memory:chrome:renderer_processes:reported_by_chrome:v8:effective_size': {
- value: [0, 650 + 970, 0, 4e5],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of v8 in renderer processes in Chrome'
- },
- 'memory:chrome:renderer_processes:reported_by_chrome:v8:allocated_objects_size':
- {
- value: [0, 860, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'size of all objects allocated by v8 in renderer ' +
- 'processes in Chrome'
- },
- 'memory:chrome:unknown_processes:process_count': {
- value: [0, 1, 0, 0],
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of unknown processes in Chrome'
- },
- 'memory:chrome:unknown_processes:reported_by_chrome:effective_size': {
- value: [0, 111, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total effective size reported by Chrome for unknown ' +
- 'processes in Chrome'
- },
- 'memory:chrome:unknown_processes:reported_by_chrome:v8:effective_size': {
- value: [0, 111, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of v8 in unknown processes in Chrome'
- },
- });
-
- memoryMetricTest('detailedValues_unknownBrowser', function(model) {
- var pBrowser = createProcessWithName(model, 'Browser');
- var pRendererA = createProcessWithName(model, 'Renderer');
- var pRendererB = createProcessWithName(model, 'Renderer');
- var pRendererC = createProcessWithName(model, 'Renderer');
- var pGpu = createProcessWithName(model, 'GPU Process');
-
- // Timestamp 1.
- var gmd1 = addGlobalMemoryDump(model, 10, DETAILED);
- var pmdBrowser1 = addProcessMemoryDump(gmd1, pBrowser, 9);
- pmdBrowser1.vmRegions = VMRegionClassificationNode.fromRegions([
- new VMRegion(0xABCD, 128, 0, '/dev/ashmem/dalvik-non moving space',
- { 'privateDirtyResident': 8 })
- ]);
- var pmdRendererA1 = addProcessMemoryDump(gmd1, pRendererA, 10);
- pmdRendererA1.vmRegions = VMRegionClassificationNode.fromRegions([
- new VMRegion(0xEF01, 256, 0, '[anon:libc_malloc]',
- { 'privateDirtyResident': 17 })
- ]);
- var pmdRendererB1 = addProcessMemoryDump(gmd1, pRendererB, 11);
- pmdRendererB1.vmRegions = VMRegionClassificationNode.fromRegions([
- new VMRegion(0x2345, 512, 0, '[heap]',
- { 'proportionalResident': 67, 'privateDirtyResident': 34 })
- ]);
- pmdRendererB1.memoryAllocatorDumps = [
- newAllocatorDump(pmdRendererA4, 'v8', { 'code_and_metadata_size': 16 })
- ];
- var pmdGpu1 = addProcessMemoryDump(gmd1, pGpu, 10);
- pmdGpu1.memoryAllocatorDumps = (function() {
- var gpuDump = newAllocatorDump(pmdGpu1, 'gpu');
- var memtrackDump = addChildDump(gpuDump, 'android_memtrack');
- addChildDump(memtrackDump, 'gl', { 'memtrack_pss': 100 });
- addChildDump(memtrackDump, 'graphics', { 'memtrack_pss': 200 });
- return [gpuDump];
- })();
-
- // Timestamp 2 (light global memory dump, so it should be skipped for
- // mmaps_* values).
- var gmd2 = addGlobalMemoryDump(model, 20, LIGHT);
- var pmdBrowser2 = addProcessMemoryDump(gmd2, pBrowser, 18);
- pmdBrowser2.vmRegions = VMRegionClassificationNode.fromRegions([
- new VMRegion(0x999, 999, 999, '/dev/ashmem/dalvik-main space',
- { 'proportionalResident': 999 })
- ]);
- var pmdRendererA2 = addProcessMemoryDump(gmd2, pRendererA, 19);
- pmdRendererA2.memoryAllocatorDumps = [
- newAllocatorDump(pmdRendererA4, 'v8', {
- 'bytecode_and_metadata_size': 678
- })
- ];
- var pmdRendererB2 = addProcessMemoryDump(gmd2, pRendererB, 21);
- var pmdRendererC2 = addProcessMemoryDump(gmd2, pRendererC, 22);
- var pmdGpu2 = addProcessMemoryDump(gmd2, pGpu, 20);
- pmdGpu2.memoryAllocatorDumps = (function() {
- var gpuDump = newAllocatorDump(pmdGpu2, 'gpu');
- var memtrackDump = addChildDump(gpuDump, 'android_memtrack');
- addChildDump(memtrackDump, 'gl', { 'memtrack_pss': 12345 });
- return [gpuDump];
- })();
-
- // Timestamp 3.
- var gmd3 = addGlobalMemoryDump(model, 30, DETAILED);
- var pmdBrowser3 = addProcessMemoryDump(gmd3, pBrowser, 30);
- pmdBrowser3.vmRegions = VMRegionClassificationNode.fromRegions([
- new VMRegion(0xABCD, 1024, 0, '/dev/ashmem/dalvik-non moving space',
- { 'proportionalResident': 3, 'privateDirtyResident': 80 })
- ]);
- var pmdRendererA3 = addProcessMemoryDump(gmd3, pRendererA, 29);
- // Intentionally pmdRendererA3.vmRegions undefined.
- var pmdRendererC3 = addProcessMemoryDump(gmd3, pRendererC, 31);
- pmdRendererC3.vmRegions = VMRegionClassificationNode.fromRegions([
- new VMRegion(0x2345, 2048, 0, '/no/matching/category',
- { 'proportionalResident': 200 }),
- new VMRegion(0x2345, 2048, 0, '/dev/ashmem',
- { 'proportionalResident': 500 }),
- ]);
- var pmdGpu3 = addProcessMemoryDump(gmd3, pGpu, 30);
- pmdGpu3.memoryAllocatorDumps = (function() {
- var gpuDump = newAllocatorDump(pmdGpu3, 'gpu',
- { 'memtrack_pss': 6000 /* ignored */ });
- var memtrackDump = addChildDump(gpuDump, 'android_memtrack',
- { 'memtrack_pss': 5000 /* ignored */ });
- addChildDump(memtrackDump, 'gl', { 'memtrack_pss': 3000 });
- addChildDump(memtrackDump, 'graphics', { 'ignored': 2000 });
- addChildDump(memtrackDump, 'gfx', { 'memtrack_pss': 1000 });
- return [gpuDump];
- })();
- pmdGpu3.vmRegions = VMRegionClassificationNode.fromRegions([
- new VMRegion(0xCDCD, 4096, 0, '/dev/ashmem/dalvik-zygote space',
- { 'proportionalResident': 150, 'privateDirtyResident': 90 })
- ]);
-
- // Timestamp 4.
- var gmd4 = addGlobalMemoryDump(model, 40, DETAILED);
- var pmdBrowser4 = addProcessMemoryDump(gmd4, pBrowser, 40);
- var pmdRendererA4 = addProcessMemoryDump(gmd4, pRendererA, 40);
- pmdRendererA4.memoryAllocatorDumps = [
- newAllocatorDump(pmdRendererA4, 'v8', {
- 'code_and_metadata_size': 21,
- 'bytecode_and_metadata_size': 35
- })
- ];
- }, {
- 'memory:unknown_browser:all_processes:dump_count:detailed': {
- value: 3,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of detailed memory dumps added by an ' +
- 'unknown browser to the trace'
- },
- 'memory:unknown_browser:all_processes:dump_count:light': {
- value: 1,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of light memory dumps added by an unknown ' +
- 'browser to the trace'
- },
- 'memory:unknown_browser:all_processes:dump_count': {
- value: 4,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of all memory dumps added by an unknown ' +
- 'browser to the trace'
- },
- 'memory:unknown_browser:all_processes:process_count': {
- value: [4, 5, 4, 2],
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of all processes in an unknown browser'
- },
- 'memory:unknown_browser:all_processes:reported_by_chrome:code_and_metadata_size':
- {
- value: [16, 0, 21 + 35],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total size of code and metadata reported by Chrome ' +
- 'for all processes in an unknown browser'
- },
- 'memory:unknown_browser:all_processes:reported_by_chrome:v8:code_and_metadata_size':
- {
- value: [16, 0, 21 + 35],
- unit: sizeInBytes_smallerIsBetter,
- description: 'size of v8 code and metadata in all processes in an ' +
- 'unknown browser'
- },
- 'memory:unknown_browser:all_processes:reported_by_os:gpu_memory:proportional_resident_size':
- {
- value: [100 + 200, 3000 + 1000, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) of GPU memory ' +
- '(Android memtrack) used by all processes in an unknown browser'
- },
- 'memory:unknown_browser:all_processes:reported_by_os:gpu_memory:gfx:proportional_resident_size':
- {
- value: [0, 1000, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the gfx Android ' +
- 'memtrack component in all processes in an unknown browser'
- },
- 'memory:unknown_browser:all_processes:reported_by_os:gpu_memory:gl:proportional_resident_size':
- {
- value: [100, 3000, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the gl Android ' +
- 'memtrack component in all processes in an unknown browser'
- },
- 'memory:unknown_browser:all_processes:reported_by_os:gpu_memory:graphics:proportional_resident_size':
- {
- value: [200, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the graphics ' +
- 'Android memtrack component in all processes in an unknown ' +
- 'browser'
- },
- 'memory:unknown_browser:all_processes:reported_by_os:private_dirty_size': {
- value: [17 + 34 + 8, 80 + 90, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size reported by the OS for all ' +
- 'processes in an unknown browser'
- },
- 'memory:unknown_browser:all_processes:reported_by_os:proportional_resident_size':
- {
- value: [67 + 100 + 200, 700 + 3 + 1000 + 150 + 3000, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) reported by ' +
- 'the OS for all processes in an unknown browser'
- },
- 'memory:unknown_browser:all_processes:reported_by_os:system_memory:private_dirty_size':
- {
- value: [17 + 34 + 8, 80 + 90, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size of system memory (RAM) used ' +
- 'by all processes in an unknown browser'
- },
- 'memory:unknown_browser:all_processes:reported_by_os:system_memory:proportional_resident_size':
- {
- value: [67, 700 + 3 + 150, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) of system ' +
- 'memory (RAM) used by all processes in an unknown browser'
- },
- 'memory:unknown_browser:all_processes:reported_by_os:system_memory:ashmem:private_dirty_size':
- {
- value: [0, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of ashmem in all processes in an ' +
- 'unknown browser'
- },
- 'memory:unknown_browser:all_processes:reported_by_os:system_memory:ashmem:proportional_resident_size':
- {
- value: [0, 500, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of ashmem in all ' +
- 'processes in an unknown browser'
- },
- 'memory:unknown_browser:all_processes:reported_by_os:system_memory:java_heap:private_dirty_size':
- {
- value: [8, 80 + 90, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the Java heap in all processes ' +
- 'in an unknown browser'
- },
- 'memory:unknown_browser:all_processes:reported_by_os:system_memory:java_heap:proportional_resident_size':
- {
- value: [0, 3 + 150, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the Java heap in ' +
- 'all processes in an unknown browser'
- },
- 'memory:unknown_browser:all_processes:reported_by_os:system_memory:native_heap:private_dirty_size':
- {
- value: [17 + 34, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the native heap in all ' +
- 'processes in an unknown browser'
- },
- 'memory:unknown_browser:all_processes:reported_by_os:system_memory:native_heap:proportional_resident_size':
- {
- value: [67, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the native heap ' +
- 'in all processes in an unknown browser'
- },
- 'memory:unknown_browser:browser_process:process_count': {
- value: [1, 1, 1, 1],
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of browser processes in an unknown browser'
- },
- 'memory:unknown_browser:browser_process:reported_by_os:private_dirty_size':
- {
- value: [8, 80, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size reported by the OS for the ' +
- 'browser process in an unknown browser'
- },
- 'memory:unknown_browser:browser_process:reported_by_os:proportional_resident_size':
- {
- value: [0, 3, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) reported by ' +
- 'the OS for the browser process in an unknown browser'
- },
- 'memory:unknown_browser:browser_process:reported_by_os:system_memory:private_dirty_size':
- {
- value: [8, 80, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size of system memory (RAM) used ' +
- 'by the browser process in an unknown browser'
- },
- 'memory:unknown_browser:browser_process:reported_by_os:system_memory:proportional_resident_size':
- {
- value: [0, 3, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) of system ' +
- 'memory (RAM) used by the browser process in an unknown browser'
- },
- 'memory:unknown_browser:browser_process:reported_by_os:system_memory:ashmem:private_dirty_size':
- {
- value: [0, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of ashmem in the browser process ' +
- 'in an unknown browser'
- },
- 'memory:unknown_browser:browser_process:reported_by_os:system_memory:ashmem:proportional_resident_size':
- {
- value: [0, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of ashmem in the ' +
- 'browser process in an unknown browser'
- },
- 'memory:unknown_browser:browser_process:reported_by_os:system_memory:java_heap:private_dirty_size':
- {
- value: [8, 80, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the Java heap in the browser ' +
- 'process in an unknown browser'
- },
- 'memory:unknown_browser:browser_process:reported_by_os:system_memory:java_heap:proportional_resident_size':
- {
- value: [0, 3, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the Java heap in ' +
- 'the browser process in an unknown browser'
- },
- 'memory:unknown_browser:browser_process:reported_by_os:system_memory:native_heap:private_dirty_size':
- {
- value: [0, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the native heap in the browser ' +
- 'process in an unknown browser'
- },
- 'memory:unknown_browser:browser_process:reported_by_os:system_memory:native_heap:proportional_resident_size':
- {
- value: [0, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the native heap ' +
- 'in the browser process in an unknown browser'
- },
- 'memory:unknown_browser:gpu_process:process_count': {
- value: [1, 1, 1, 0],
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of GPU processes in an unknown browser'
- },
- 'memory:unknown_browser:gpu_process:reported_by_os:proportional_resident_size':
- {
- value: [100 + 200, 3000 + 1000 + 150, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) reported by ' +
- 'the OS for the GPU process in an unknown browser'
- },
- 'memory:unknown_browser:gpu_process:reported_by_os:private_dirty_size': {
- value: [0, 90, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size reported by the OS for the GPU ' +
- 'process in an unknown browser'
- },
- 'memory:unknown_browser:gpu_process:reported_by_os:gpu_memory:proportional_resident_size':
- {
- value: [100 + 200, 3000 + 1000, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) of GPU memory ' +
- '(Android memtrack) used by the GPU process in an unknown browser'
- },
- 'memory:unknown_browser:gpu_process:reported_by_os:gpu_memory:gfx:proportional_resident_size':
- {
- value: [0, 1000, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the gfx Android ' +
- 'memtrack component in the GPU process in an unknown browser'
- },
- 'memory:unknown_browser:gpu_process:reported_by_os:gpu_memory:gl:proportional_resident_size':
- {
- value: [100, 3000, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the gl Android ' +
- 'memtrack component in the GPU process in an unknown browser'
- },
- 'memory:unknown_browser:gpu_process:reported_by_os:gpu_memory:graphics:proportional_resident_size':
- {
- value: [200, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the graphics ' +
- 'Android memtrack component in the GPU process in an unknown ' +
- 'browser'
- },
- 'memory:unknown_browser:gpu_process:reported_by_os:system_memory:private_dirty_size':
- {
- value: [0, 90, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size of system memory (RAM) used ' +
- 'by the GPU process in an unknown browser'
- },
- 'memory:unknown_browser:gpu_process:reported_by_os:system_memory:proportional_resident_size':
- {
- value: [0, 150, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) of system ' +
- 'memory (RAM) used by the GPU process in an unknown browser'
- },
- 'memory:unknown_browser:gpu_process:reported_by_os:system_memory:ashmem:private_dirty_size':
- {
- value: [0, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of ashmem in the GPU process in ' +
- 'an unknown browser'
- },
- 'memory:unknown_browser:gpu_process:reported_by_os:system_memory:ashmem:proportional_resident_size':
- {
- value: [0, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of ashmem in the ' +
- 'GPU process in an unknown browser'
- },
- 'memory:unknown_browser:gpu_process:reported_by_os:system_memory:java_heap:private_dirty_size':
- {
- value: [0, 90, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the Java heap in the GPU ' +
- 'process in an unknown browser'
- },
- 'memory:unknown_browser:gpu_process:reported_by_os:system_memory:java_heap:proportional_resident_size':
- {
- value: [0, 150, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the Java heap in ' +
- 'the GPU process in an unknown browser'
- },
- 'memory:unknown_browser:gpu_process:reported_by_os:system_memory:native_heap:private_dirty_size':
- {
- value: [0, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the native heap in the GPU ' +
- 'process in an unknown browser'
- },
- 'memory:unknown_browser:gpu_process:reported_by_os:system_memory:native_heap:proportional_resident_size':
- {
- value: [0, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the native heap ' +
- 'in the GPU process in an unknown browser'
- },
- 'memory:unknown_browser:renderer_processes:process_count': {
- value: [2, 3, 2, 1],
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of renderer processes in an unknown browser'
- },
- 'memory:unknown_browser:renderer_processes:reported_by_chrome:code_and_metadata_size':
- {
- value: [16, 0, 21 + 35],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total size of code and metadata reported by Chrome ' +
- 'for renderer processes in an unknown browser'
- },
- 'memory:unknown_browser:renderer_processes:reported_by_chrome:v8:code_and_metadata_size':
- {
- value: [16, 0, 21 + 35],
- unit: sizeInBytes_smallerIsBetter,
- description: 'size of v8 code and metadata in renderer processes ' +
- 'in an unknown browser'
- },
- 'memory:unknown_browser:renderer_processes:reported_by_os:private_dirty_size':
- {
- value: [17 + 34, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size reported by the OS for ' +
- 'renderer processes in an unknown browser'
- },
- 'memory:unknown_browser:renderer_processes:reported_by_os:proportional_resident_size':
- {
- value: [67, 700, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) reported by ' +
- 'the OS for renderer processes in an unknown browser'
- },
- 'memory:unknown_browser:renderer_processes:reported_by_os:system_memory:private_dirty_size':
- {
- value: [17 + 34, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size of system memory (RAM) used ' +
- 'by renderer processes in an unknown browser'
- },
- 'memory:unknown_browser:renderer_processes:reported_by_os:system_memory:proportional_resident_size':
- {
- value: [67, 700, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) of system ' +
- 'memory (RAM) used by renderer processes in an unknown browser'
- },
- 'memory:unknown_browser:renderer_processes:reported_by_os:system_memory:ashmem:private_dirty_size':
- {
- value: [0, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of ashmem in renderer processes ' +
- 'in an unknown browser'
- },
- 'memory:unknown_browser:renderer_processes:reported_by_os:system_memory:ashmem:proportional_resident_size':
- {
- value: [0, 500, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of ashmem in ' +
- 'renderer processes in an unknown browser'
- },
- 'memory:unknown_browser:renderer_processes:reported_by_os:system_memory:java_heap:private_dirty_size':
- {
- value: [0, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the Java heap in renderer ' +
- 'processes in an unknown browser'
- },
- 'memory:unknown_browser:renderer_processes:reported_by_os:system_memory:java_heap:proportional_resident_size':
- {
- value: [0, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the Java heap in ' +
- 'renderer processes in an unknown browser'
- },
- 'memory:unknown_browser:renderer_processes:reported_by_os:system_memory:native_heap:private_dirty_size':
- {
- value: [17 + 34, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the native heap in renderer ' +
- 'processes in an unknown browser'
- },
- 'memory:unknown_browser:renderer_processes:reported_by_os:system_memory:native_heap:proportional_resident_size':
- {
- value: [67, 0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the native heap ' +
- 'in renderer processes in an unknown browser'
- }
- });
-
- memoryMetricTest('combined_chrome', function(model) {
- var pBrowser = createChromeBrowserProcess(model);
-
- // Timestamp 1.
- var gmd1 = addGlobalMemoryDump(model, 10, DETAILED);
- var pmdBrowser1 = addProcessMemoryDump(gmd1, pBrowser, 10);
- pmdBrowser1.vmRegions = VMRegionClassificationNode.fromRegions([
- new VMRegion(0xABCD, 128, 0, '/dev/ashmem/dalvik-non moving space',
- { 'privateDirtyResident': 100 })
- ]);
-
- // Timestamp 2 (light global memory dump, so it should be skipped for
- // mmaps_* values).
- var gmd2 = addGlobalMemoryDump(model, 20, LIGHT);
- var pmdBrowser2 = addProcessMemoryDump(gmd2, pBrowser, 20);
- pmdBrowser2.memoryAllocatorDumps = [
- newAllocatorDump(pmdBrowser2, 'malloc', { size: 32 })
- ];
-
- // Timestamp 3.
- var gmd3 = addGlobalMemoryDump(model, 30, DETAILED);
- var pmdBrowser3 = addProcessMemoryDump(gmd3, pBrowser, 30);
- pmdBrowser3.memoryAllocatorDumps = [
- newAllocatorDump(pmdBrowser3, 'malloc', { size: 48 })
- ];
- pmdBrowser3.vmRegions = VMRegionClassificationNode.fromRegions([
- new VMRegion(0xABCD, 1024, 0, '/dev/ashmem/dalvik-non moving space',
- { 'privateDirtyResident': 150 })
- ]);
- }, {
- 'memory:chrome:all_processes:dump_count:detailed': {
- value: 2,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of detailed memory dumps added by Chrome to ' +
- 'the trace'
- },
- 'memory:chrome:all_processes:dump_count:light': {
- value: 1,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of light memory dumps added by Chrome to ' +
- 'the trace'
- },
- 'memory:chrome:all_processes:dump_count': {
- value: 3,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of all memory dumps added by Chrome to the ' +
- 'trace'
- },
- 'memory:chrome:all_processes:process_count': {
- value: [1, 1, 1],
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of all processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_chrome:effective_size': {
- value: [0, 32, 48],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total effective size reported by Chrome for all ' +
- 'processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_chrome:malloc:effective_size': {
- value: [0, 32, 48],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of malloc in all processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_os:private_dirty_size': {
- value: [100, 150],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size reported by the OS for all ' +
- 'processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_os:proportional_resident_size': {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) reported by the ' +
- 'OS for all processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_os:system_memory:ashmem:private_dirty_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of ashmem in all processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_os:system_memory:ashmem:proportional_resident_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of ashmem in all ' +
- 'processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_os:system_memory:java_heap:private_dirty_size':
- {
- value: [100, 150],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the Java heap in all processes ' +
- 'in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_os:system_memory:java_heap:proportional_resident_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the Java heap in ' +
- 'all processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_os:system_memory:native_heap:private_dirty_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the native heap in all ' +
- 'processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_os:system_memory:native_heap:proportional_resident_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the native heap ' +
- 'in all processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_os:system_memory:private_dirty_size':
- {
- value: [100, 150],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size of system memory (RAM) used ' +
- 'by all processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_os:system_memory:proportional_resident_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) of system ' +
- 'memory (RAM) used by all processes in Chrome'
- },
- 'memory:chrome:browser_process:process_count': {
- value: [1, 1, 1],
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of browser processes in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_chrome:effective_size': {
- value: [0, 32, 48],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total effective size reported by Chrome for the browser ' +
- 'process in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_chrome:malloc:effective_size': {
- value: [0, 32, 48],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of malloc in the browser process in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_os:private_dirty_size': {
- value: [100, 150],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size reported by the OS for the ' +
- 'browser process in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_os:proportional_resident_size': {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) reported by the ' +
- 'OS for the browser process in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_os:system_memory:ashmem:private_dirty_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of ashmem in the browser process ' +
- 'in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_os:system_memory:ashmem:proportional_resident_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of ashmem in the ' +
- 'browser process in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_os:system_memory:java_heap:private_dirty_size':
- {
- value: [100, 150],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the Java heap in the browser ' +
- 'process in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_os:system_memory:java_heap:proportional_resident_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the Java heap in ' +
- 'the browser process in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_os:system_memory:native_heap:private_dirty_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the native heap in the browser ' +
- 'process in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_os:system_memory:native_heap:proportional_resident_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the native heap ' +
- 'in the browser process in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_os:system_memory:private_dirty_size':
- {
- value: [100, 150],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size of system memory (RAM) used ' +
- 'by the browser process in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_os:system_memory:proportional_resident_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) of system ' +
- 'memory (RAM) used by the browser process in Chrome'
- }
- });
-
- memoryMetricTest('combined_multipleBrowsers', function(model) {
- var pWebView = createWebViewProcess(model);
- var pChrome1 = createChromeBrowserProcess(model);
- var pRenderer1 = createProcessWithName(model, 'Renderer');
- var pGpu1 = createProcessWithName(model, 'GPU Process');
- var pUnknownBrowser = createProcessWithName(model, 'Browser');
- var pChrome2 = createChromeBrowserProcess(model);
- var pRenderer2 = createProcessWithName(model, 'Renderer');
-
- // Timestamp 1 (WebView).
- var gmd1 = addGlobalMemoryDump(model, 0, LIGHT);
- var pmdBrowser1 = addProcessMemoryDump(gmd1, pWebView, 0);
- pmdBrowser1.memoryAllocatorDumps = [
- newAllocatorDump(pmdBrowser1, 'malloc', { size: 2 }),
- newAllocatorDump(pmdBrowser1, 'v8', { size: 4 })
- ];
-
- // Timestamp 2 (Chrome 1 + Renderer + GPU Process).
- var gmd2 = addGlobalMemoryDump(model, 10, DETAILED);
- var pmdBrowser2 = addProcessMemoryDump(gmd2, pChrome1, 12);
- pmdBrowser2.vmRegions = VMRegionClassificationNode.fromRegions([
- new VMRegion(0xABCD, 9999, 0, '/dev/ashmem/dalvik-non moving space',
- { 'privateDirtyResident': 8 })
- ]);
- var pmdGpu2 = addProcessMemoryDump(gmd2, pGpu1, 8);
- pmdGpu2.vmRegions = VMRegionClassificationNode.fromRegions([
- new VMRegion(0xABCD, 9999, 0, '/dev/ashmem/dalvik-non moving space',
- { 'privateDirtyResident': 16 })
- ]);
- var pmdRenderer2 = addProcessMemoryDump(gmd2, pRenderer1, 8);
- pmdRenderer2.memoryAllocatorDumps = [
- newAllocatorDump(pmdBrowser2, 'malloc', { size: 32 })
- ];
-
- // Timestamp 3 (Chrome 2).
- var gmd3 = addGlobalMemoryDump(model, 20, DETAILED);
- var pmdBrowser3 = addProcessMemoryDump(gmd3, pChrome2, 20);
- pmdBrowser3.memoryAllocatorDumps = [
- newAllocatorDump(pmdBrowser3, 'malloc', { size: 64 }),
- newAllocatorDump(pmdBrowser3, 'sqlite', { size: 128 }),
- newAllocatorDump(pmdBrowser3, 'discardable', {
- size: 8388608,
- locked_size: 4194304
- })
- ];
- pmdBrowser3.vmRegions = VMRegionClassificationNode.fromRegions([
- new VMRegion(0xABCD, 99, 0, '/dev/ashmem/dalvik-non moving space',
- { 'privateDirtyResident': 256 })
- ]);
-
- // Timestamp 4 (Chrome 2 + Renderer).
- var gmd4 = addGlobalMemoryDump(model, 30, LIGHT);
- var pmdBrowser4 = addProcessMemoryDump(gmd4, pChrome2, 28);
- pmdBrowser4.memoryAllocatorDumps = [
- newAllocatorDump(pmdBrowser4, 'malloc', { size: 512 }),
- newAllocatorDump(pmdBrowser3, 'discardable', { size: 16777216 })
- ];
- var pmdRenderer4 = addProcessMemoryDump(gmd4, pRenderer2, 32);
- pmdRenderer4.memoryAllocatorDumps = [
- newAllocatorDump(pmdRenderer4, 'malloc', { size: 1024 }),
- newAllocatorDump(pmdRenderer4, 'v8', { size: 2048 })
- ];
-
- // Timestamp 5 (Unknown browser).
- var gmd5 = addGlobalMemoryDump(model, 40, LIGHT);
- var pmdBrowser5 = addProcessMemoryDump(gmd5, pUnknownBrowser, 40);
- pmdBrowser5.memoryAllocatorDumps = [
- newAllocatorDump(pmdBrowser5, 'malloc', { size: 4096 }),
- newAllocatorDump(pmdBrowser5, 'sqlite', { size: 8192 }),
- ];
-
- // Timestamp 6 (WebView).
- var gmd6 = addGlobalMemoryDump(model, 50, DETAILED);
- var pmdBrowser6 = addProcessMemoryDump(gmd6, pWebView, 50);
- pmdBrowser6.memoryAllocatorDumps = [
- newAllocatorDump(pmdBrowser6, 'malloc', { size: 16384 }),
- newAllocatorDump(pmdBrowser6, 'v8', {
- 'allocated_objects_size': 32768,
- 'code_and_metadata_size': 33554432,
- 'size': 67108864
- })
- ];
- pmdBrowser6.vmRegions = VMRegionClassificationNode.fromRegions([
- new VMRegion(0xABCD, 99999, 0, '/dev/ashmem/dalvik-non moving space',
- { 'privateDirtyResident': 65536 })
- ]);
-
- // Timestamp 7 (Chrome 1 + GPU Process).
- var gmd7 = addGlobalMemoryDump(model, 60, DETAILED);
- var pmdBrowser7 = addProcessMemoryDump(gmd7, pChrome1, 63);
- pmdBrowser7.memoryAllocatorDumps = [
- newAllocatorDump(pmdBrowser4, 'malloc', { size: 131072 }),
- newAllocatorDump(pmdBrowser4, 'sqlite', { size: 262144 })
- ];
- pmdBrowser7.vmRegions = VMRegionClassificationNode.fromRegions([
- new VMRegion(0xABCD, 999999, 0, '/dev/ashmem/dalvik-non moving space',
- { 'privateDirtyResident': 524288 })
- ]);
- var pmdGpu7 = addProcessMemoryDump(gmd7, pGpu1, 57);
- pmdGpu7.memoryAllocatorDumps = (function() {
- var gpuDump = newAllocatorDump(pmdGpu7, 'gpu', { 'size': 1048576 });
- var memtrackDump = addChildDump(gpuDump, 'android_memtrack');
- addChildDump(memtrackDump, 'gl', { 'memtrack_pss': 2097152 });
- return [gpuDump];
- })();
- }, {
- // WebView (GMD1, GMD6).
- 'memory:webview:all_processes:dump_count:detailed': {
- value: 1,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of detailed memory dumps added by WebView ' +
- 'to the trace'
- },
- 'memory:webview:all_processes:dump_count:light': {
- value: 1,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of light memory dumps added by WebView to ' +
- 'the trace'
- },
- 'memory:webview:all_processes:dump_count': {
- value: 2,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of all memory dumps added by WebView to the ' +
- 'trace'
- },
- 'memory:webview:all_processes:process_count': {
- value: [1, 1],
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of all processes in WebView'
- },
- 'memory:webview:all_processes:reported_by_chrome:effective_size': {
- value: [4 + 2, 16384 + 67108864],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total effective size reported by Chrome for all ' +
- 'processes in WebView'
- },
- 'memory:webview:all_processes:reported_by_chrome:code_and_metadata_size': {
- value: [33554432],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total size of code and metadata reported by Chrome for ' +
- 'all processes in WebView'
- },
- 'memory:webview:all_processes:reported_by_chrome:allocated_objects_size': {
- value: [0, 32768],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total size of all allocated objects reported by Chrome ' +
- 'for all processes in WebView'
- },
- 'memory:webview:all_processes:reported_by_chrome:malloc:effective_size': {
- value: [2, 16384],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of malloc in all processes in WebView'
- },
- 'memory:webview:all_processes:reported_by_chrome:v8:effective_size': {
- value: [4, 67108864],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of v8 in all processes in WebView'
- },
- 'memory:webview:all_processes:reported_by_chrome:v8:code_and_metadata_size':
- {
- value: [33554432],
- unit: sizeInBytes_smallerIsBetter,
- description: 'size of v8 code and metadata in all processes in ' +
- 'WebView'
- },
- 'memory:webview:all_processes:reported_by_chrome:v8:allocated_objects_size':
- {
- value: [0, 32768],
- unit: sizeInBytes_smallerIsBetter,
- description: 'size of all objects allocated by v8 in all processes ' +
- 'in WebView'
- },
- 'memory:webview:all_processes:reported_by_os:private_dirty_size': {
- value: [65536],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size reported by the OS for all ' +
- 'processes in WebView'
- },
- 'memory:webview:all_processes:reported_by_os:proportional_resident_size': {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) reported by the ' +
- 'OS for all processes in WebView'
- },
- 'memory:webview:all_processes:reported_by_os:system_memory:ashmem:private_dirty_size':
- {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of ashmem in all processes in ' +
- 'WebView'
- },
- 'memory:webview:all_processes:reported_by_os:system_memory:ashmem:proportional_resident_size':
- {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of ashmem in all ' +
- 'processes in WebView'
- },
- 'memory:webview:all_processes:reported_by_os:system_memory:java_heap:private_dirty_size':
- {
- value: [65536],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the Java heap in all processes ' +
- 'in WebView'
- },
- 'memory:webview:all_processes:reported_by_os:system_memory:java_heap:proportional_resident_size':
- {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the Java heap in ' +
- 'all processes in WebView'
- },
- 'memory:webview:all_processes:reported_by_os:system_memory:native_heap:private_dirty_size':
- {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the native heap in all ' +
- 'processes in WebView'
- },
- 'memory:webview:all_processes:reported_by_os:system_memory:native_heap:proportional_resident_size':
- {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the native heap ' +
- 'in all processes in WebView'
- },
- 'memory:webview:all_processes:reported_by_os:system_memory:private_dirty_size':
- {
- value: [65536],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size of system memory (RAM) used ' +
- 'by all processes in WebView'
- },
- 'memory:webview:all_processes:reported_by_os:system_memory:proportional_resident_size':
- {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) of system ' +
- 'memory (RAM) used by all processes in WebView'
- },
- 'memory:webview:browser_process:process_count': {
- value: [1, 1],
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of browser processes in WebView'
- },
- 'memory:webview:browser_process:reported_by_chrome:effective_size': {
- value: [4 + 2, 16384 + 67108864],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total effective size reported by Chrome for the browser ' +
- 'process in WebView'
- },
- 'memory:webview:browser_process:reported_by_chrome:allocated_objects_size':
- {
- value: [0, 32768],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total size of all allocated objects reported by ' +
- 'Chrome for the browser process in WebView'
- },
- 'memory:webview:browser_process:reported_by_chrome:code_and_metadata_size':
- {
- value: [33554432],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total size of code and metadata reported by Chrome ' +
- 'for the browser process in WebView'
- },
- 'memory:webview:browser_process:reported_by_chrome:malloc:effective_size': {
- value: [2, 16384],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of malloc in the browser process in WebView'
- },
- 'memory:webview:browser_process:reported_by_chrome:v8:effective_size': {
- value: [4, 67108864],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of v8 in the browser process in WebView'
- },
- 'memory:webview:browser_process:reported_by_chrome:v8:allocated_objects_size':
- {
- value: [0, 32768],
- unit: sizeInBytes_smallerIsBetter,
- description: 'size of all objects allocated by v8 in the browser ' +
- 'process in WebView'
- },
- 'memory:webview:browser_process:reported_by_chrome:v8:code_and_metadata_size':
- {
- value: [33554432],
- unit: sizeInBytes_smallerIsBetter,
- description: 'size of v8 code and metadata in the browser process ' +
- 'in WebView'
- },
- 'memory:webview:browser_process:reported_by_os:private_dirty_size': {
- value: [65536],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size reported by the OS for the ' +
- 'browser process in WebView'
- },
- 'memory:webview:browser_process:reported_by_os:proportional_resident_size':
- {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) reported by ' +
- 'the OS for the browser process in WebView'
- },
- 'memory:webview:browser_process:reported_by_os:system_memory:ashmem:private_dirty_size':
- {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of ashmem in the browser process ' +
- 'in WebView'
- },
- 'memory:webview:browser_process:reported_by_os:system_memory:ashmem:proportional_resident_size':
- {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of ashmem in the ' +
- 'browser process in WebView'
- },
- 'memory:webview:browser_process:reported_by_os:system_memory:java_heap:private_dirty_size':
- {
- value: [65536],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the Java heap in the browser ' +
- 'process in WebView'
- },
- 'memory:webview:browser_process:reported_by_os:system_memory:java_heap:proportional_resident_size':
- {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the Java heap in ' +
- 'the browser process in WebView'
- },
- 'memory:webview:browser_process:reported_by_os:system_memory:native_heap:private_dirty_size':
- {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the native heap in the browser ' +
- 'process in WebView'
- },
- 'memory:webview:browser_process:reported_by_os:system_memory:native_heap:proportional_resident_size':
- {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the native heap ' +
- 'in the browser process in WebView'
- },
- 'memory:webview:browser_process:reported_by_os:system_memory:private_dirty_size':
- {
- value: [65536],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size of system memory (RAM) used ' +
- 'by the browser process in WebView'
- },
- 'memory:webview:browser_process:reported_by_os:system_memory:proportional_resident_size':
- {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) of system ' +
- 'memory (RAM) used by the browser process in WebView'
- },
-
- // Chrome 1 (GMD3, GMD4).
- 'memory:chrome:all_processes:reported_by_os:gpu_memory:gl:proportional_resident_size':
- {
- value: [0, 2097152],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the gl Android ' +
- 'memtrack component in all processes in Chrome'
- },
- 'memory:chrome:all_processes:dump_count:detailed': {
- value: 2,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of detailed memory dumps added by Chrome to ' +
- 'the trace'
- },
- 'memory:chrome:all_processes:dump_count:light': {
- value: 0,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of light memory dumps added by Chrome to ' +
- 'the trace'
- },
- 'memory:chrome:all_processes:dump_count': {
- value: 2,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of all memory dumps added by Chrome to the ' +
- 'trace'
- },
- 'memory:chrome:all_processes:process_count': {
- value: [3, 2],
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of all processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_chrome:effective_size': {
- value: [32, 1048576 + 131072 + 262144],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total effective size reported by Chrome for all ' +
- 'processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_chrome:gpu:effective_size': {
- value: [0, 1048576],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of gpu in all processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_chrome:malloc:effective_size': {
- value: [32, 131072],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of malloc in all processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_chrome:sqlite:effective_size': {
- value: [0, 262144],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of sqlite in all processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_os:private_dirty_size': {
- value: [8 + 16, 524288],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size reported by the OS for all ' +
- 'processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_os:proportional_resident_size': {
- value: [0, 2097152],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) reported by the ' +
- 'OS for all processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_os:gpu_memory:proportional_resident_size':
- {
- value: [0, 2097152],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) of GPU memory ' +
- '(Android memtrack) used by all processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_os:system_memory:ashmem:private_dirty_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of ashmem in all processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_os:system_memory:ashmem:proportional_resident_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of ashmem in all ' +
- 'processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_os:system_memory:java_heap:private_dirty_size':
- {
- value: [8 + 16, 524288],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the Java heap in all processes ' +
- 'in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_os:system_memory:java_heap:proportional_resident_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the Java heap in ' +
- 'all processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_os:system_memory:native_heap:private_dirty_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the native heap in all ' +
- 'processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_os:system_memory:native_heap:proportional_resident_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the native heap ' +
- 'in all processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_os:system_memory:private_dirty_size':
- {
- value: [8 + 16, 524288],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size of system memory (RAM) used ' +
- 'by all processes in Chrome'
- },
- 'memory:chrome:all_processes:reported_by_os:system_memory:proportional_resident_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) of system ' +
- 'memory (RAM) used by all processes in Chrome'
- },
- 'memory:chrome:browser_process:process_count': {
- value: [1, 1],
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of browser processes in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_chrome:effective_size': {
- value: [0, 131072 + 262144],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total effective size reported by Chrome for the browser ' +
- 'process in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_chrome:malloc:effective_size': {
- value: [0, 131072],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of malloc in the browser process in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_chrome:sqlite:effective_size': {
- value: [0, 262144],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of sqlite in the browser process in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_os:private_dirty_size': {
- value: [8, 524288],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size reported by the OS for the ' +
- 'browser process in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_os:proportional_resident_size': {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) reported by the ' +
- 'OS for the browser process in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_os:system_memory:ashmem:private_dirty_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of ashmem in the browser process ' +
- 'in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_os:system_memory:ashmem:proportional_resident_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of ashmem in the ' +
- 'browser process in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_os:system_memory:java_heap:private_dirty_size':
- {
- value: [8, 524288],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the Java heap in the browser ' +
- 'process in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_os:system_memory:java_heap:proportional_resident_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the Java heap in ' +
- 'the browser process in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_os:system_memory:native_heap:private_dirty_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the native heap in the browser ' +
- 'process in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_os:system_memory:native_heap:proportional_resident_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the native heap ' +
- 'in the browser process in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_os:system_memory:private_dirty_size':
- {
- value: [8, 524288],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size of system memory (RAM) used ' +
- 'by the browser process in Chrome'
- },
- 'memory:chrome:browser_process:reported_by_os:system_memory:proportional_resident_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) of system ' +
- 'memory (RAM) used by the browser process in Chrome'
- },
- 'memory:chrome:gpu_process:reported_by_chrome:effective_size': {
- value: [0, 1048576],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total effective size reported by Chrome for the GPU ' +
- 'process in Chrome'
- },
- 'memory:chrome:gpu_process:reported_by_os:gpu_memory:proportional_resident_size':
- {
- value: [0, 2097152],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) of GPU memory ' +
- '(Android memtrack) used by the GPU process in Chrome'
- },
- 'memory:chrome:gpu_process:reported_by_os:gpu_memory:gl:proportional_resident_size':
- {
- value: [0, 2097152],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the gl Android ' +
- 'memtrack component in the GPU process in Chrome'
- },
- 'memory:chrome:gpu_process:process_count': {
- value: [1, 1],
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of GPU processes in Chrome'
- },
- 'memory:chrome:gpu_process:reported_by_chrome:gpu:effective_size': {
- value: [0, 1048576],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of gpu in the GPU process in Chrome'
- },
- 'memory:chrome:gpu_process:reported_by_os:private_dirty_size': {
- value: [16, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size reported by the OS for the GPU ' +
- 'process in Chrome'
- },
- 'memory:chrome:gpu_process:reported_by_os:proportional_resident_size': {
- value: [0, 2097152],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) reported by the ' +
- 'OS for the GPU process in Chrome'
- },
- 'memory:chrome:gpu_process:reported_by_os:system_memory:ashmem:private_dirty_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of ashmem in the GPU process in ' +
- 'Chrome'
- },
- 'memory:chrome:gpu_process:reported_by_os:system_memory:ashmem:proportional_resident_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of ashmem in the ' +
- 'GPU process in Chrome'
- },
- 'memory:chrome:gpu_process:reported_by_os:system_memory:java_heap:private_dirty_size':
- {
- value: [16, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the Java heap in the GPU ' +
- 'process in Chrome'
- },
- 'memory:chrome:gpu_process:reported_by_os:system_memory:java_heap:proportional_resident_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the Java heap in ' +
- 'the GPU process in Chrome'
- },
- 'memory:chrome:gpu_process:reported_by_os:system_memory:native_heap:private_dirty_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the native heap in the GPU ' +
- 'process in Chrome'
- },
- 'memory:chrome:gpu_process:reported_by_os:system_memory:native_heap:proportional_resident_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the native heap ' +
- 'in the GPU process in Chrome'
- },
- 'memory:chrome:gpu_process:reported_by_os:system_memory:private_dirty_size':
- {
- value: [16, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size of system memory (RAM) used ' +
- 'by the GPU process in Chrome'
- },
- 'memory:chrome:gpu_process:reported_by_os:system_memory:proportional_resident_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) of system ' +
- 'memory (RAM) used by the GPU process in Chrome'
- },
- 'memory:chrome:renderer_processes:process_count': {
- value: [1, 0],
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of renderer processes in Chrome'
- },
- 'memory:chrome:renderer_processes:reported_by_chrome:effective_size': {
- value: [32, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total effective size reported by Chrome for renderer ' +
- 'processes in Chrome'
- },
- 'memory:chrome:renderer_processes:reported_by_chrome:malloc:effective_size':
- {
- value: [32, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of malloc in renderer processes in ' +
- 'Chrome'
- },
- 'memory:chrome:renderer_processes:reported_by_os:private_dirty_size': {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size reported by the OS for renderer ' +
- 'processes in Chrome'
- },
- 'memory:chrome:renderer_processes:reported_by_os:proportional_resident_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) reported by ' +
- 'the OS for renderer processes in Chrome'
- },
- 'memory:chrome:renderer_processes:reported_by_os:system_memory:ashmem:private_dirty_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of ashmem in renderer processes ' +
- 'in Chrome'
- },
- 'memory:chrome:renderer_processes:reported_by_os:system_memory:ashmem:proportional_resident_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of ashmem in ' +
- 'renderer processes in Chrome'
- },
- 'memory:chrome:renderer_processes:reported_by_os:system_memory:java_heap:private_dirty_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the Java heap in renderer ' +
- 'processes in Chrome'
- },
- 'memory:chrome:renderer_processes:reported_by_os:system_memory:java_heap:proportional_resident_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the Java heap in ' +
- 'renderer processes in Chrome'
- },
- 'memory:chrome:renderer_processes:reported_by_os:system_memory:native_heap:private_dirty_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the native heap in renderer ' +
- 'processes in Chrome'
- },
- 'memory:chrome:renderer_processes:reported_by_os:system_memory:native_heap:proportional_resident_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the native heap ' +
- 'in renderer processes in Chrome'
- },
- 'memory:chrome:renderer_processes:reported_by_os:system_memory:private_dirty_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size of system memory (RAM) used ' +
- 'by renderer processes in Chrome'
- },
- 'memory:chrome:renderer_processes:reported_by_os:system_memory:proportional_resident_size':
- {
- value: [0, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) of system ' +
- 'memory (RAM) used by renderer processes in Chrome'
- },
-
- // Chrome 2 (GMD2, GMD7).
- 'memory:chrome2:all_processes:dump_count:detailed': {
- value: 1,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of detailed memory dumps added by Chrome(2) ' +
- 'to the trace'
- },
- 'memory:chrome2:all_processes:dump_count:light': {
- value: 1,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of light memory dumps added by Chrome(2) to ' +
- 'the trace'
- },
- 'memory:chrome2:all_processes:dump_count': {
- value: 2,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of all memory dumps added by Chrome(2) to ' +
- 'the trace'
- },
- 'memory:chrome2:all_processes:process_count': {
- value: [1, 2],
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of all processes in Chrome(2)'
- },
- 'memory:chrome2:all_processes:reported_by_chrome:discardable:effective_size':
- {
- value: [8388608, 16777216],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of discardable in all processes in ' +
- 'Chrome(2)'
- },
- 'memory:chrome2:all_processes:reported_by_chrome:locked_size': {
- value: [4194304, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total locked (pinned) size reported by Chrome for all ' +
- 'processes in Chrome(2)'
- },
- 'memory:chrome2:all_processes:reported_by_chrome:discardable:locked_size': {
- value: [4194304, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'locked (pinned) size of discardable in all processes in ' +
- 'Chrome(2)'
- },
- 'memory:chrome2:all_processes:reported_by_chrome:effective_size': {
- value: [64 + 8388608 + 128, 512 + 1024 + 2048 + 16777216],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total effective size reported by Chrome for all ' +
- 'processes in Chrome(2)'
- },
- 'memory:chrome2:all_processes:reported_by_chrome:malloc:effective_size': {
- value: [64, 512 + 1024],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of malloc in all processes in Chrome(2)'
- },
- 'memory:chrome2:all_processes:reported_by_chrome:sqlite:effective_size': {
- value: [128, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of sqlite in all processes in Chrome(2)'
- },
- 'memory:chrome2:all_processes:reported_by_chrome:v8:effective_size': {
- value: [0, 2048],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of v8 in all processes in Chrome(2)'
- },
- 'memory:chrome2:all_processes:reported_by_os:private_dirty_size': {
- value: [256],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size reported by the OS for all ' +
- 'processes in Chrome(2)'
- },
- 'memory:chrome2:all_processes:reported_by_os:proportional_resident_size': {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) reported by the ' +
- 'OS for all processes in Chrome(2)'
- },
- 'memory:chrome2:all_processes:reported_by_os:system_memory:ashmem:private_dirty_size':
- {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of ashmem in all processes in ' +
- 'Chrome(2)'
- },
- 'memory:chrome2:all_processes:reported_by_os:system_memory:ashmem:proportional_resident_size':
- {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of ashmem in all ' +
- 'processes in Chrome(2)'
- },
- 'memory:chrome2:all_processes:reported_by_os:system_memory:java_heap:private_dirty_size':
- {
- value: [256],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the Java heap in all processes ' +
- 'in Chrome(2)'
- },
- 'memory:chrome2:all_processes:reported_by_os:system_memory:java_heap:proportional_resident_size':
- {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the Java heap in ' +
- 'all processes in Chrome(2)'
- },
- 'memory:chrome2:all_processes:reported_by_os:system_memory:native_heap:private_dirty_size':
- {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the native heap in all ' +
- 'processes in Chrome(2)'
- },
- 'memory:chrome2:all_processes:reported_by_os:system_memory:native_heap:proportional_resident_size':
- {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the native heap ' +
- 'in all processes in Chrome(2)'
- },
- 'memory:chrome2:all_processes:reported_by_os:system_memory:private_dirty_size':
- {
- value: [256],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size of system memory (RAM) used ' +
- 'by all processes in Chrome(2)'
- },
- 'memory:chrome2:all_processes:reported_by_os:system_memory:proportional_resident_size':
- {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) of system ' +
- 'memory (RAM) used by all processes in Chrome(2)'
- },
- 'memory:chrome2:browser_process:process_count': {
- value: [1, 1],
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of browser processes in Chrome(2)'
- },
- 'memory:chrome2:browser_process:reported_by_chrome:effective_size': {
- value: [64 + 8388608 + 128, 512 + 16777216],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total effective size reported by Chrome for the browser ' +
- 'process in Chrome(2)'
- },
- 'memory:chrome2:browser_process:reported_by_chrome:locked_size': {
- value: [4194304, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total locked (pinned) size reported by Chrome for the ' +
- 'browser process in Chrome(2)'
- },
- 'memory:chrome2:browser_process:reported_by_chrome:malloc:effective_size': {
- value: [64, 512],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of malloc in the browser process in ' +
- 'Chrome(2)'
- },
- 'memory:chrome2:browser_process:reported_by_chrome:discardable:effective_size':
- {
- value: [8388608, 16777216],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of discardable in the browser process ' +
- 'in Chrome(2)'
- },
- 'memory:chrome2:browser_process:reported_by_chrome:discardable:locked_size':
- {
- value: [4194304, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'locked (pinned) size of discardable in the browser ' +
- 'process in Chrome(2)'
- },
- 'memory:chrome2:browser_process:reported_by_chrome:sqlite:effective_size': {
- value: [128, 0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of sqlite in the browser process in ' +
- 'Chrome(2)'
- },
- 'memory:chrome2:browser_process:reported_by_os:private_dirty_size': {
- value: [256],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size reported by the OS for the ' +
- 'browser process in Chrome(2)'
- },
- 'memory:chrome2:browser_process:reported_by_os:proportional_resident_size':
- {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) reported by ' +
- 'the OS for the browser process in Chrome(2)'
- },
- 'memory:chrome2:browser_process:reported_by_os:system_memory:ashmem:private_dirty_size':
- {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of ashmem in the browser process ' +
- 'in Chrome(2)'
- },
- 'memory:chrome2:browser_process:reported_by_os:system_memory:ashmem:proportional_resident_size':
- {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of ashmem in the ' +
- 'browser process in Chrome(2)'
- },
- 'memory:chrome2:browser_process:reported_by_os:system_memory:java_heap:private_dirty_size':
- {
- value: [256],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the Java heap in the browser ' +
- 'process in Chrome(2)'
- },
- 'memory:chrome2:browser_process:reported_by_os:system_memory:java_heap:proportional_resident_size':
- {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the Java heap in ' +
- 'the browser process in Chrome(2)'
- },
- 'memory:chrome2:browser_process:reported_by_os:system_memory:native_heap:private_dirty_size':
- {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'private dirty size of the native heap in the browser ' +
- 'process in Chrome(2)'
- },
- 'memory:chrome2:browser_process:reported_by_os:system_memory:native_heap:proportional_resident_size':
- {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'proportional resident size (PSS) of the native heap ' +
- 'in the browser process in Chrome(2)'
- },
- 'memory:chrome2:browser_process:reported_by_os:system_memory:private_dirty_size':
- {
- value: [256],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total private dirty size of system memory (RAM) used ' +
- 'by the browser process in Chrome(2)'
- },
- 'memory:chrome2:browser_process:reported_by_os:system_memory:proportional_resident_size':
- {
- value: [0],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total proportional resident size (PSS) of system ' +
- 'memory (RAM) used by the browser process in Chrome(2)'
- },
- 'memory:chrome2:renderer_processes:process_count': {
- value: [0, 1],
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of renderer processes in Chrome(2)'
- },
- 'memory:chrome2:renderer_processes:reported_by_chrome:effective_size': {
- value: [0, 1024 + 2048],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total effective size reported by Chrome for renderer ' +
- 'processes in Chrome(2)'
- },
- 'memory:chrome2:renderer_processes:reported_by_chrome:malloc:effective_size':
- {
- value: [0, 1024],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of malloc in renderer processes in ' +
- 'Chrome(2)'
- },
- 'memory:chrome2:renderer_processes:reported_by_chrome:v8:effective_size': {
- value: [0, 2048],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of v8 in renderer processes in Chrome(2)'
- },
-
- // Unknown browser (GMD5).
- 'memory:unknown_browser:all_processes:dump_count:detailed': {
- value: 0,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of detailed memory dumps added by an ' +
- 'unknown browser to the trace'
- },
- 'memory:unknown_browser:all_processes:dump_count:light': {
- value: 1,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of light memory dumps added by an unknown ' +
- 'browser to the trace'
- },
- 'memory:unknown_browser:all_processes:dump_count': {
- value: 1,
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of all memory dumps added by an unknown ' +
- 'browser to the trace'
- },
- 'memory:unknown_browser:all_processes:process_count': {
- value: [1],
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of all processes in an unknown browser'
- },
- 'memory:unknown_browser:all_processes:reported_by_chrome:effective_size': {
- value: [4096 + 8192],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total effective size reported by Chrome for all ' +
- 'processes in an unknown browser'
- },
- 'memory:unknown_browser:all_processes:reported_by_chrome:malloc:effective_size':
- {
- value: [4096],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of malloc in all processes in an ' +
- 'unknown browser'
- },
- 'memory:unknown_browser:all_processes:reported_by_chrome:sqlite:effective_size':
- {
- value: [8192],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of sqlite in all processes in an ' +
- 'unknown browser'
- },
- 'memory:unknown_browser:browser_process:process_count': {
- value: [1],
- unit: unitlessNumber_smallerIsBetter,
- description: 'total number of browser processes in an unknown browser'
- },
- 'memory:unknown_browser:browser_process:reported_by_chrome:effective_size':
- {
- value: [4096 + 8192],
- unit: sizeInBytes_smallerIsBetter,
- description: 'total effective size reported by Chrome for the ' +
- 'browser process in an unknown browser'
- },
- 'memory:unknown_browser:browser_process:reported_by_chrome:malloc:effective_size':
- {
- value: [4096],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of malloc in the browser process in ' +
- 'an unknown browser'
- },
- 'memory:unknown_browser:browser_process:reported_by_chrome:sqlite:effective_size':
- {
- value: [8192],
- unit: sizeInBytes_smallerIsBetter,
- description: 'effective size of sqlite in the browser process in ' +
- 'an unknown browser'
- }
- });
-
- test('dumpIdBrowserClashThrows', function() {
- var model = tr.c.TestUtils.newModel(function(model) {
- var pWebView = createWebViewProcess(model);
- var pChrome = createChromeBrowserProcess(model);
-
- var gmd = addGlobalMemoryDump(model, 10);
- addProcessMemoryDump(gmd, pWebView, 9);
- addProcessMemoryDump(gmd, pChrome, 11);
- });
- var values = new tr.v.ValueSet();
-
- assert.throws(function() {
- tr.metrics.sh.memoryMetric(values, model);
- }, 'Memory dump ID clash across multiple browsers with PIDs: 1 and 2');
- });
-});
-</script>
diff --git a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/power_metric.html b/chromium/third_party/catapult/tracing/tracing/metrics/system_health/power_metric.html
deleted file mode 100644
index eec9635a5a5..00000000000
--- a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/power_metric.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright 2016 The Chromium Authors. All rights reserved.
-Use of this source code is governed by a BSD-style license that can be
-found in the LICENSE file.
--->
-
-<link rel="import" href="/tracing/base/statistics.html">
-<link rel="import" href="/tracing/metrics/metric_registry.html">
-<link rel="import" href="/tracing/metrics/system_health/clock_sync_latency_metric.html">
-<link rel="import" href="/tracing/value/numeric.html">
-<link rel="import" href="/tracing/value/value.html">
-
-<script>
-'use strict';
-
-tr.exportTo('tr.metrics.sh', function() {
-
- var IDEAL_FRAME_RATE = 60;
- var IDEAL_FRAME_DURATION = 1000 / IDEAL_FRAME_RATE;
-
- function energyConsumedPerFrame(valueList, model) {
- var frameEnergyConsumed = tr.v.NumericBuilder.createLinear(
- tr.v.Unit.byName.energyInJoules_smallerIsBetter,
- tr.b.Range.fromExplicitRange(0, .5), 20).build();
- var frameStartTs = parseFloat(model.device.powerSeries.samples[0].start);
- while (model.device.powerSeries.getSamplesWithinRange(
- frameStartTs, frameStartTs + IDEAL_FRAME_DURATION).length) {
- var currentFrameEnergy = model.device.powerSeries.getEnergyConsumed(
- frameStartTs, frameStartTs + IDEAL_FRAME_DURATION);
- frameStartTs += IDEAL_FRAME_DURATION;
- frameEnergyConsumed.add(currentFrameEnergy);
- }
-
- valueList.addValue(new tr.v.NumericValue(
- 'energy_consumed_per_frame', frameEnergyConsumed,
- {description: 'Energy consumption per frame in joules'}));
- }
-
- function powerMetric(valueList, model) {
- // TODO(alexandermont): Once it's possible to specify multiple metrics
- // in a Telemetry benchmark, separate out this metric from the power
- // metric and have the benchmark use both.
- // (See: https://github.com/catapult-project/catapult/issues/2430.)
- tr.metrics.sh.clockSyncLatencyMetric(valueList, model);
- if (!model.device.powerSeries)
- return;
- energyConsumedPerFrame(valueList, model);
- }
-
- tr.metrics.MetricRegistry.register(powerMetric);
-
- return {
- powerMetric: powerMetric
- };
-});
-</script>
diff --git a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/power_metric_test.html b/chromium/third_party/catapult/tracing/tracing/metrics/system_health/power_metric_test.html
deleted file mode 100644
index bdc034e63a7..00000000000
--- a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/power_metric_test.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright 2016 The Chromium Authors. All rights reserved.
-Use of this source code is governed by a BSD-style license that can be
-found in the LICENSE file.
--->
-
-<link rel="import" href="/tracing/core/test_utils.html">
-<link rel="import" href="/tracing/metrics/system_health/power_metric.html">
-<link rel="import" href="/tracing/value/value_set.html">
-
-<script>
-'use strict';
-
-tr.b.unittest.testSuite(function() {
- test('powerMetric_multipleFrames', function() {
- var model = new tr.Model();
- var valueSet = new tr.v.ValueSet();
- model.device.powerSeries = new tr.model.PowerSeries(model.device);
- // We want values in different frames, so they must go up by more than 16.66
- // milliseconds.
- model.device.powerSeries.addPowerSample('1', '.1');
- model.device.powerSeries.addPowerSample('2', '.1');
- model.device.powerSeries.addPowerSample('18', '.2');
- model.device.powerSeries.addPowerSample('36', '.3');
- model.device.powerSeries.addPowerSample('53', '.4');
- model.device.powerSeries.addPowerSample('70', '.5');
- tr.metrics.sh.powerMetric(valueSet, model);
- var powerEntries = valueSet.valueDicts.filter(
- (dict) => dict.name === 'energy_consumed_per_frame');
- var powerEntry = tr.b.getOnlyElement(powerEntries);
- assert.equal(powerEntry.numeric.centralBins[0].count, 5);
- assert.closeTo(powerEntry.numeric.running.sum, 0.0172, 1e-4);
- });
-
- test('powerMetric_oneFrame', function() {
- var model = new tr.Model();
- var valueSet = new tr.v.ValueSet();
- model.device.powerSeries = new tr.model.PowerSeries(model.device);
- // We want values in the same frame, so they must go up by less than 16.66
- // milliseconds.
- model.device.powerSeries.addPowerSample('1', '.1');
- model.device.powerSeries.addPowerSample('2', '.1');
- model.device.powerSeries.addPowerSample('3', '.2');
- model.device.powerSeries.addPowerSample('4', '.3');
- model.device.powerSeries.addPowerSample('5', '.4');
- model.device.powerSeries.addPowerSample('6', '.5');
- tr.metrics.sh.powerMetric(valueSet, model);
- var powerEntries = valueSet.valueDicts.filter(
- (dict) => dict.name === 'energy_consumed_per_frame');
- var powerEntry = tr.b.getOnlyElement(powerEntries);
- assert.equal(powerEntry.numeric.centralBins[0].count, 1);
- assert.closeTo(powerEntry.numeric.running.sum, 0.0011, 1e-4);
- });
-
- test('powerMetric_noPowerSeries', function() {
- var model = new tr.Model();
- var valueSet = new tr.v.ValueSet();
- tr.metrics.sh.powerMetric(valueSet, model);
- var powerEntries = valueSet.valueDicts.filter(
- (dict) => dict.name === 'energy_consumed_per_frame');
- assert.lengthOf(powerEntries, 0);
- });
-});
-</script>
diff --git a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/responsiveness_metric.html b/chromium/third_party/catapult/tracing/tracing/metrics/system_health/responsiveness_metric.html
deleted file mode 100644
index 5098c535277..00000000000
--- a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/responsiveness_metric.html
+++ /dev/null
@@ -1,158 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2015 The Chromium Authors. All rights reserved.
-Use of this source code is governed by a BSD-style license that can be
-found in the LICENSE file.
--->
-
-<link rel="import" href="/tracing/base/statistics.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/user_model/animation_expectation.html">
-<link rel="import" href="/tracing/model/user_model/load_expectation.html">
-<link rel="import" href="/tracing/model/user_model/response_expectation.html">
-<link rel="import" href="/tracing/value/numeric.html">
-<link rel="import" href="/tracing/value/value.html">
-
-<script>
-'use strict';
-
-tr.exportTo('tr.metrics.sh', function() {
- // In the case of Response, Load, and DiscreteAnimation IRs, Responsiveness is
- // derived from the time between when the user thinks they begin an interation
- // (expectedStart) and the time when the screen first changes to reflect the
- // interaction (actualEnd). There may be a delay between expectedStart and
- // when chrome first starts processing the interaction (actualStart) if the
- // main thread is busy. The user doesn't know when actualStart is, they only
- // know when expectedStart is. User responsiveness, by definition, considers
- // only what the user experiences, so "duration" is defined as actualEnd -
- // expectedStart.
-
- function computeAnimationThroughput(animationExpectation) {
- if (animationExpectation.frameEvents === undefined ||
- animationExpectation.frameEvents.length === 0)
- throw new Error('Animation missing frameEvents ' +
- animationExpectation.stableId);
-
- var durationSeconds = animationExpectation.duration / 1000;
- return animationExpectation.frameEvents.length / durationSeconds;
- }
-
- function computeAnimationframeTimeDiscrepancy(animationExpectation) {
- if (animationExpectation.frameEvents === undefined ||
- animationExpectation.frameEvents.length === 0)
- throw new Error('Animation missing frameEvents ' +
- animationExpectation.stableId);
-
- var frameTimestamps = animationExpectation.frameEvents;
- frameTimestamps = frameTimestamps.toArray().map(function(event) {
- return event.start;
- });
-
- var absolute = false;
- return tr.b.Statistics.timestampsDiscrepancy(frameTimestamps, absolute);
- }
-
- var RESPONSE_NUMERIC_BUILDER = tr.v.NumericBuilder.createLinear(
- tr.v.Unit.byName.timeDurationInMs_smallerIsBetter,
- tr.b.Range.fromExplicitRange(100, 1000), 90);
-
- var THROUGHPUT_NUMERIC_BUILDER = tr.v.NumericBuilder.createLinear(
- tr.v.Unit.byName.unitlessNumber_biggerIsBetter,
- tr.b.Range.fromExplicitRange(10, 60), 10);
-
- var DISCREPANCY_NUMERIC_BUILDER = tr.v.NumericBuilder.createLinear(
- tr.v.Unit.byName.unitlessNumber_smallerIsBetter,
- tr.b.Range.fromExplicitRange(0, 1), 50);
-
- var LATENCY_NUMERIC_BUILDER = tr.v.NumericBuilder.createLinear(
- tr.v.Unit.byName.timeDurationInMs_smallerIsBetter,
- tr.b.Range.fromExplicitRange(0, 300), 60);
-
- /**
- * @param {!tr.v.ValueSet} values
- * @param {!tr.model.Model} model
- * @param {!Object=} opt_options
- */
- function responsivenessMetric(values, model, opt_options) {
- // TODO(benjhayden): Add categories to benchmark to support:
- // tr.metrics.sh.firstPaintMetric(values, model);
-
- var responseNumeric = RESPONSE_NUMERIC_BUILDER.build();
- var throughputNumeric = THROUGHPUT_NUMERIC_BUILDER.build();
- var frameTimeDiscrepancyNumeric = DISCREPANCY_NUMERIC_BUILDER.build();
- var latencyNumeric = LATENCY_NUMERIC_BUILDER.build();
-
- model.userModel.expectations.forEach(function(ue) {
- if (opt_options && opt_options.rangeOfInterest &&
- !opt_options.rangeOfInterest.intersectsExplicitRangeExclusive(
- ue.start, ue.end))
- return;
-
- var sourceInfo = {userExpectationId: ue.stableId};
-
- // Responsiveness is not defined for Idle.
- if (ue instanceof tr.model.um.IdleExpectation) {
- return;
- } else if (ue instanceof tr.model.um.LoadExpectation) {
- // This is already covered by firstPaintMetric.
- } else if (ue instanceof tr.model.um.ResponseExpectation) {
- responseNumeric.add(ue.duration, sourceInfo);
- } else if (ue instanceof tr.model.um.AnimationExpectation) {
- var throughput = computeAnimationThroughput(ue);
- if (throughput === undefined)
- throw new Error('Missing throughput for ' +
- ue.stableId);
-
- throughputNumeric.add(throughput, sourceInfo);
-
- var frameTimeDiscrepancy = computeAnimationframeTimeDiscrepancy(ue);
- if (frameTimeDiscrepancy === undefined)
- throw new Error('Missing frameTimeDiscrepancy for ' +
- ue.stableId);
-
- frameTimeDiscrepancyNumeric.add(frameTimeDiscrepancy, sourceInfo);
-
- ue.associatedEvents.forEach(function(event) {
- if (!(event instanceof tr.e.cc.InputLatencyAsyncSlice))
- return;
-
- latencyNumeric.add(event.duration, sourceInfo);
- });
- } else {
- throw new Error('Unrecognized stage for ' + ue.stableId);
- }
- });
-
- [
- responseNumeric, throughputNumeric, frameTimeDiscrepancyNumeric,
- latencyNumeric
- ].forEach(function(numeric) {
- numeric.customizeSummaryOptions({
- avg: true,
- max: true,
- min: true,
- std: true
- });
- });
-
- values.addValue(new tr.v.NumericValue(
- 'response latency', responseNumeric));
- values.addValue(new tr.v.NumericValue(
- 'animation throughput', throughputNumeric));
- values.addValue(new tr.v.NumericValue(
- 'animation frameTimeDiscrepancy',
- frameTimeDiscrepancyNumeric));
- values.addValue(new tr.v.NumericValue(
- 'animation latency', latencyNumeric));
- }
-
- tr.metrics.MetricRegistry.register(responsivenessMetric, {
- supportsRangeOfInterest: true
- });
-
- return {
- responsivenessMetric: responsivenessMetric,
- };
-});
-</script>
diff --git a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/system_health_metrics.html b/chromium/third_party/catapult/tracing/tracing/metrics/system_health/system_health_metrics.html
deleted file mode 100644
index 723e526b554..00000000000
--- a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/system_health_metrics.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2016 The Chromium Authors. All rights reserved.
-Use of this source code is governed by a BSD-style license that can be
-found in the LICENSE file.
--->
-
-<link rel="import" href="/tracing/metrics/system_health/efficiency_metric.html">
-<link rel="import" href="/tracing/metrics/system_health/hazard_metric.html">
-<link rel="import" href="/tracing/metrics/system_health/long_tasks_metric.html">
-<link rel="import" href="/tracing/metrics/system_health/power_metric.html"
-<link rel="import"
- href="/tracing/metrics/system_health/responsiveness_metric.html">
-
-<script>
-'use strict';
-
-tr.exportTo('tr.metrics.sh', function() {
- function systemHealthMetrics(values, model) {
- tr.metrics.sh.responsivenessMetric(values, model);
- tr.metrics.sh.efficiencyMetric(values, model);
- tr.metrics.sh.longTasksMetric(values, model);
- tr.metrics.sh.hazardMetric(values, model);
- tr.metrics.sh.powerMetric(values, model);
- }
-
- tr.metrics.MetricRegistry.register(systemHealthMetrics);
-
- return {
- systemHealthMetrics: systemHealthMetrics
- };
-});
-</script>
diff --git a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/utils.html b/chromium/third_party/catapult/tracing/tracing/metrics/system_health/utils.html
deleted file mode 100644
index 9e0d09bd32f..00000000000
--- a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/utils.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2015 The Chromium Authors. All rights reserved.
-Use of this source code is governed by a BSD-style license that can be
-found in the LICENSE file.
--->
-<link rel="import" href="/tracing/model/user_model/user_expectation.html">
-
-<script>
-'use strict';
-
-tr.exportTo('tr.metrics.sh', function() {
- // Returns a weight for this score.
- // score should be a number between 0 and 1 inclusive.
- // This function is expected to be passed to tr.b.Statistics.weightedMean as
- // its weightCallback.
- function perceptualBlend(ir, index, score) {
- // Lower scores are exponentially more important than higher scores
- // due to the Peak-end rule.
- // Other than that general rule, there is no specific reasoning behind this
- // specific formula -- it is fairly arbitrary.
- return Math.exp(1 - score);
- }
-
- function filterExpectationsByRange(irs, opt_range) {
- var filteredExpectations = [];
- irs.forEach(function(ir) {
- if (!(ir instanceof tr.model.um.UserExpectation))
- return;
-
- if (!opt_range ||
- opt_range.intersectsExplicitRangeExclusive(ir.start, ir.end))
- filteredExpectations.push(ir);
- });
- return filteredExpectations;
- }
-
- return {
- perceptualBlend: perceptualBlend,
- filterExpectationsByRange: filterExpectationsByRange
- };
-});
-</script>
diff --git a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/webview_startup_metric.html b/chromium/third_party/catapult/tracing/tracing/metrics/system_health/webview_startup_metric.html
deleted file mode 100644
index 10e873b97f5..00000000000
--- a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/webview_startup_metric.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright 2016 The Chromium Authors. All rights reserved.
-Use of this source code is governed by a BSD-style license that can be
-found in the LICENSE file.
--->
-
-<link rel="import" href="/tracing/metrics/metric_registry.html">
-<link rel="import" href="/tracing/metrics/system_health/utils.html">
-<link rel="import" href="/tracing/value/numeric.html">
-<link rel="import" href="/tracing/value/value.html">
-
-<script>
-'use strict';
-
-tr.exportTo('tr.metrics.sh', function() {
- function webviewStartupMetric(values, model) {
- for (var slice of model.getDescendantEvents()) {
- // WebViewStartupInterval is the title of the section of code that is
- // entered (via android.os.Trace.beginSection) when WebView is started
- // up. This value is defined in TelemetryActivity.java.
- if (!(slice instanceof tr.model.Slice))
- return;
- if (slice.title === 'WebViewStartupInterval') {
- values.addValue(new tr.v.NumericValue(
- 'webview_startup_wall_time',
- new tr.v.ScalarNumeric(
- tr.v.Unit.byName.timeDurationInMs_smallerIsBetter,
- slice.duration),
- { description: 'WebView startup wall time' }));
- values.addValue(new tr.v.NumericValue(
- 'webview_startup_cpu_time',
- new tr.v.ScalarNumeric(
- tr.v.Unit.byName.timeDurationInMs_smallerIsBetter,
- slice.cpuDuration),
- { description: 'WebView startup CPU time' }));
- }
- // WebViewBlankUrlLoadInterval is the title of the section of code
- // that is entered (via android.os.Trace.beginSection) when WebView
- // is started up. This value is defined in TelemetryActivity.java.
- if (slice.title === 'WebViewBlankUrlLoadInterval') {
- values.addValue(new tr.v.NumericValue(
- 'webview_url_load_wall_time',
- new tr.v.ScalarNumeric(
- tr.v.Unit.byName.timeDurationInMs_smallerIsBetter,
- slice.duration),
- { description: 'WebView blank URL load wall time' }));
- values.addValue(new tr.v.NumericValue(
- 'webview_url_load_cpu_time',
- new tr.v.ScalarNumeric(
- tr.v.Unit.byName.timeDurationInMs_smallerIsBetter,
- slice.cpuDuration),
- { description: 'WebView blank URL load CPU time' }));
- }
- }
- };
-
- tr.metrics.MetricRegistry.register(webviewStartupMetric);
-
- return {
- webviewStartupMetric: webviewStartupMetric
- };
-});
-</script>
diff --git a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/webview_startup_metric_test.html b/chromium/third_party/catapult/tracing/tracing/metrics/system_health/webview_startup_metric_test.html
deleted file mode 100644
index fa4da093afc..00000000000
--- a/chromium/third_party/catapult/tracing/tracing/metrics/system_health/webview_startup_metric_test.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright 2016 The Chromium Authors. All rights reserved.
-Use of this source code is governed by a BSD-style license that can be
-found in the LICENSE file.
--->
-
-<link rel="import" href="/tracing/core/test_utils.html">
-<link rel="import" href="/tracing/metrics/system_health/webview_startup_metric.html">
-<link rel="import" href="/tracing/value/value_set.html">
-
-<script>
-'use strict';
-
-function makeTestModel() {
- return tr.c.TestUtils.newModel(function(model) {
- var mainThread = model.getOrCreateProcess(1).getOrCreateThread(2);
- mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
- cat: 'webview',
- title: 'WebViewStartupInterval',
- start: 200,
- duration: 42.0,
- cpuStart: 150,
- cpuDuration: 32.0
- }));
- mainThread.sliceGroup.pushSlice(tr.c.TestUtils.newSliceEx({
- cat: 'webview',
- title: 'WebViewBlankUrlLoadInterval',
- start: 250,
- duration: 27.0,
- cpuStart: 190,
- cpuDuration: 17.0
- }));
- });
-}
-
-tr.b.unittest.testSuite(function() {
- test('webviewStartupMetric_allIntervals', function() {
- var values = new tr.v.ValueSet();
- tr.metrics.sh.webviewStartupMetric(values, makeTestModel());
- assert.lengthOf(values.valueDicts, 4);
- });
-
- test('webviewStartupMetric_startupWallInterval', function() {
- var values = new tr.v.ValueSet();
- tr.metrics.sh.webviewStartupMetric(values, makeTestModel());
- assert.equal(values.valueDicts[0].numeric.value, 42);
- });
-
- test('webviewStartupMetric_startupCpuInterval', function() {
- var values = new tr.v.ValueSet();
- tr.metrics.sh.webviewStartupMetric(values, makeTestModel());
- assert.equal(values.valueDicts[1].numeric.value, 32);
- });
-
- test('webviewStartupMetric_urlLoadWallInterval', function() {
- var values = new tr.v.ValueSet();
- tr.metrics.sh.webviewStartupMetric(values, makeTestModel());
- assert.equal(values.valueDicts[2].numeric.value, 27);
- });
-
- test('webviewStartupMetric_urlLoadCpuInterval', function() {
- var values = new tr.v.ValueSet();
- tr.metrics.sh.webviewStartupMetric(values, makeTestModel());
- assert.equal(values.valueDicts[3].numeric.value, 17);
- });
-});
-</script>