summaryrefslogtreecommitdiffstats
path: root/chromium/v8/tools/zone-stats/model.js
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-12 14:27:29 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-13 09:35:20 +0000
commitc30a6232df03e1efbd9f3b226777b07e087a1122 (patch)
treee992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/v8/tools/zone-stats/model.js
parent7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff)
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/v8/tools/zone-stats/model.js')
-rw-r--r--chromium/v8/tools/zone-stats/model.js92
1 files changed, 92 insertions, 0 deletions
diff --git a/chromium/v8/tools/zone-stats/model.js b/chromium/v8/tools/zone-stats/model.js
new file mode 100644
index 00000000000..80f45237631
--- /dev/null
+++ b/chromium/v8/tools/zone-stats/model.js
@@ -0,0 +1,92 @@
+// Copyright 2020 the V8 project authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+'use strict';
+
+export class Isolate {
+ constructor(address) {
+ this.address = address;
+ this.start = null;
+ this.end = null;
+ this.peakUsageTime = null;
+ // Maps zone name to per-zone statistics.
+ this.zones = new Map();
+ // Zone names sorted by memory usage (from low to high).
+ this.sorted_zone_names = [];
+ // Maps time to total and per-zone memory usages.
+ this.samples = new Map();
+
+ this.peakAllocatedMemory = 0;
+
+ // Maps zone name to their max memory consumption.
+ this.zonePeakMemory = Object.create(null);
+ // Peak memory consumed by a single zone.
+ this.singleZonePeakMemory = 0;
+ }
+
+ finalize() {
+ this.samples.forEach(sample => this.finalizeSample(sample));
+ this.start = Math.floor(this.start);
+ this.end = Math.ceil(this.end);
+ this.sortZoneNamesByPeakMemory();
+ }
+
+ getLabel() {
+ let label = `${this.address}: `;
+ label += ` peak=${formatBytes(this.peakAllocatedMemory)}`;
+ label += ` time=[${this.start}, ${this.end}] ms`;
+ return label;
+ }
+
+ finalizeSample(sample) {
+ const time = sample.time;
+ if (this.start == null) {
+ this.start = time;
+ this.end = time;
+ } else {
+ this.end = Math.max(this.end, time);
+ }
+
+ const allocated = sample.allocated;
+ if (allocated > this.peakAllocatedMemory) {
+ this.peakUsageTime = time;
+ this.peakAllocatedMemory = allocated;
+ }
+
+ const sample_zones = sample.zones;
+ if (sample_zones !== undefined) {
+ sample.zones.forEach((zone_sample, zone_name) => {
+ let zone_stats = this.zones.get(zone_name);
+ if (zone_stats === undefined) {
+ zone_stats = {max_allocated: 0, max_used: 0};
+ this.zones.set(zone_name, zone_stats);
+ }
+
+ zone_stats.max_allocated =
+ Math.max(zone_stats.max_allocated, zone_sample.allocated);
+ zone_stats.max_used = Math.max(zone_stats.max_used, zone_sample.used);
+ });
+ }
+ }
+
+ sortZoneNamesByPeakMemory() {
+ let entries = [...this.zones.keys()];
+ entries.sort((a, b) =>
+ this.zones.get(a).max_allocated - this.zones.get(b).max_allocated
+ );
+ this.sorted_zone_names = entries;
+
+ let max = 0;
+ for (let [key, value] of entries) {
+ this.zonePeakMemory[key] = value;
+ max = Math.max(max, value);
+ }
+ this.singleZonePeakMemory = max;
+ }
+
+ getInstanceTypePeakMemory(type) {
+ if (!(type in this.zonePeakMemory)) return 0;
+ return this.zonePeakMemory[type];
+ }
+}