| Index: tools/memory_watcher/scripts/memprof.pl
|
| diff --git a/tools/memory_watcher/scripts/memprof.pl b/tools/memory_watcher/scripts/memprof.pl
|
| deleted file mode 100755
|
| index d902e5e4faca581b9fa882bb2158f7456c6a9b0c..0000000000000000000000000000000000000000
|
| --- a/tools/memory_watcher/scripts/memprof.pl
|
| +++ /dev/null
|
| @@ -1,116 +0,0 @@
|
| -#!/usr/bin/perl
|
| -# Copyright (c) 2012 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.
|
| -#
|
| -# Given a memwatcher logfile, group memory allocations by callstack.
|
| -#
|
| -# Usage:
|
| -#
|
| -# memprof.pl <logfile>
|
| -#
|
| -# logfile -- The memwatcher.logXXXX file to summarize.
|
| -#
|
| -#
|
| -#
|
| -# Sample output:
|
| -#
|
| -# 54,061,617 100.00% AllocationStack::AllocationStack
|
| -# 41,975,368 77.64% malloc
|
| -# 11,886,592 21.99% VirtualAlloc
|
| -# 7,168,000 13.26% v8::internal::OS::Allocate
|
| -# 7,168,000 13.26% v8::internal::MemoryAllocator::AllocateRawMemory
|
| -# 5,976,184 11.05% WebCore::V8Bridge::evaluate
|
| -# 5,767,168 10.67% v8::internal::MemoryAllocator::AllocatePages
|
| -# 5,451,776 10.08% WebCore::V8Proxy::initContextIfNeeded
|
| -# ....
|
| -#
|
| -#
|
| -#
|
| -# ********
|
| -# Note: The output is currently sorted by decreasing size.
|
| -# ********
|
| -#
|
| -
|
| -sub process_raw($$) {
|
| - my $file = shift;
|
| - my $filter = shift;
|
| -
|
| - my %leaks = ();
|
| - my %stackframes = ();
|
| -
|
| - my $blamed = 0;
|
| - my $bytes = 0;
|
| - my $hits = 0;
|
| - open (LOGFILE, "$file") or die("could not open $file");
|
| - while(<LOGFILE>) {
|
| - my $line = $_;
|
| -#print "$line";
|
| - chomp($line);
|
| - if ($line =~ m/([0-9]*) bytes, ([0-9]*) allocs/) {
|
| -
|
| - # If we didn't find any frames to account this to, log that.
|
| - if ($blamed == 0) {
|
| - $leaks{"UNACCOUNTED"} += $bytes;
|
| - }
|
| -
|
| -#print "START\n";
|
| - #print("stackframe " . $1 . ", " . $2 . "\n");
|
| - $hits = $2;
|
| - $bytes = $1;
|
| - %stackframes = (); # we have a new frame, clear the list.
|
| - $blamed = 0; # we haven't blamed anyone yet
|
| - }
|
| - elsif ($line =~ m/Total Bytes:[ ]*([0-9]*)/) {
|
| - $total_bytes += $1;
|
| - }
|
| - elsif ($line =~ m/=============/) {
|
| - next;
|
| - }
|
| - elsif ($line =~ m/[ ]*([\-a-zA-Z_\\0-9\.]*) \(([0-9]*)\):[ ]*([<>_a-zA-Z_0-9:]*)/) {
|
| -# print("junk: " . $line . "\n");
|
| -# print("file: $1\n");
|
| -# print("line: $2\n");
|
| -# print("function: $3\n");
|
| -#
|
| -
|
| - # blame the function
|
| - my $pig = $3;
|
| -# my $pig = $1;
|
| -
|
| - # only add the memory if this function is not yet on our callstack
|
| - if (!exists $stackframes{$pig}) {
|
| - $leaks{$pig} += $bytes;
|
| - }
|
| -
|
| - $stackframes{$pig}++;
|
| - $blamed++;
|
| - }
|
| - }
|
| -
|
| - # now dump our hash table
|
| - my $sum = 0;
|
| - my @keys = sort { $leaks{$b} <=> $leaks{$a} }keys %leaks;
|
| - for ($i=0; $i<@keys; $i++) {
|
| - my $key = @keys[$i];
|
| - printf "%11s\t%3.2f%%\t%s\n", comma_print($leaks{$key}), (100* $leaks{$key} / $total_bytes), $key;
|
| - $sum += $leaks{$key};
|
| - }
|
| - printf("TOTAL: %s\n", comma_print($sum));
|
| -}
|
| -
|
| -# Insert commas into an integer after each three digits for printing.
|
| -sub comma_print {
|
| - my $num = "$_[0]";
|
| - $num =~ s/(\d{1,3}?)(?=(\d{3})+$)/$1,/g;
|
| - return $num;
|
| -}
|
| -
|
| -# ----- Main ------------------------------------------------
|
| -
|
| -# Get the command line argument
|
| -my $filename = shift;
|
| -my $filter = shift;
|
| -
|
| -# Process the file.
|
| -process_raw($filename, $filter);
|
|
|