Index: tools/traceline/traceline/scripts/heap.js |
diff --git a/tools/traceline/traceline/scripts/heap.js b/tools/traceline/traceline/scripts/heap.js |
new file mode 100755 |
index 0000000000000000000000000000000000000000..e8b57a781fa1c99dcac472076f2598393b0a1e49 |
--- /dev/null |
+++ b/tools/traceline/traceline/scripts/heap.js |
@@ -0,0 +1,69 @@ |
+// Copyright (c) 2009 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. |
+ |
+// You should run this with v8, like v8_shell_sample alloc.js datafile.json |
+ |
+function toHex(num) { |
+ var str = ""; |
+ var table = "0123456789abcdef"; |
+ while (num != 0) { |
+ str = table.charAt(num & 0xf) + str; |
+ num >>= 4; |
+ } |
+ return str; |
+} |
+ |
+function dump(obj) { |
+ for (var key in obj) { |
+ print('key: ' + key); |
+ print(' ' + obj[key]); |
+ } |
+} |
+ |
+function TopN(n) { |
+ this.n = n; |
+ this.min = 0; |
+ this.sorted = [ ]; |
+} |
+ |
+TopN.prototype.add = |
+function(num, data) { |
+ if (num < this.min) |
+ return; |
+ |
+ this.sorted.push([num, data]); |
+ this.sorted.sort(function(a, b) { return b[0] - a[0] }); |
+ if (this.sorted.length > this.n) |
+ this.sorted.pop(); |
+ |
+ this.min = this.sorted[this.sorted.lenth - 1]; |
+}; |
+ |
+TopN.prototype.datas = |
+function() { |
+ var datas = [ ]; |
+ for (var i = 0, il = this.sorted.length; i < il; ++i) { |
+ datas.push(this.sorted[i][1]); |
+ } |
+ return datas; |
+}; |
+ |
+function parseEvents(z) { |
+ var topper = new TopN(1000); |
+ |
+ // Find the largest allocation. |
+ for (var i = 0, il = z.length; i < il; ++i) { |
+ var e = z[i]; |
+ |
+ if (e['eventtype'] == 'EVENT_TYPE_ALLOCHEAP') { |
+ var size = e['heapsize']; |
+ topper.add(e['heapsize'], e); |
+ } |
+ } |
+ |
+ var datas = topper.datas(); |
+ for (var i = 0, il = datas.length; i < il; ++i) { |
+ dump(datas[i]); |
+ } |
+} |