michael@0: #!/usr/bin/perl michael@0: # This Source Code Form is subject to the terms of the Mozilla Public michael@0: # License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: # file, You can obtain one at http://mozilla.org/MPL/2.0/. michael@0: michael@0: michael@0: $argv = $ARGV[0]; michael@0: open( bloatFile, $argv ) or die "Can't open $argv: $!\n"; michael@0: while () { michael@0: if (/name=/) { michael@0: ($td,$name,$func,$a,$ntd) = split(/>/, $_); michael@0: ($fname, $memSize) = split( / /, $func ); michael@0: ($trash, $linkName) = split( /"/, $name ); michael@0: $namesLinks{$fname} = $linkName; michael@0: if ($namesSizes{$fname}) { michael@0: $namesSizes{$fname} = $namesSizes{$fname} + $memSize; michael@0: } michael@0: else { michael@0: $namesSizes{$fname} = $memSize; michael@0: } michael@0: } michael@0: } michael@0: michael@0: $argv = $ARGV[1]; michael@0: if ($argv) michael@0: { michael@0: open( bloatFile, $argv ) or die "Can't open $argv: $!\n"; michael@0: while () { michael@0: if (/name=/) { michael@0: ($td,$name,$func,$a,$ntd) = split(/>/, $_); michael@0: ($fname, $memSize) = split( / /, $func ); michael@0: $namesSizes{$fname} = $namesSizes{$fname} - $memSize; michael@0: } michael@0: } michael@0: } michael@0: michael@0: sub byvalue { $namesSizes{$b} <=> $namesSizes{$a} } michael@0: michael@0: michael@0: print ''; michael@0: print "\n\n"; michael@0: print "Bloat Blame Delta\n"; michael@0: print ''; michael@0: print "\n\n\n\n"; michael@0: print "\n"; michael@0: michael@0: foreach $key (sort byvalue keys %namesSizes) { michael@0: if ($namesSizes{$key}) michael@0: { michael@0: print "\n"; michael@0: print ' \n"; michael@0: print " \n"; michael@0: print "\n" michael@0: } michael@0: } michael@0: michael@0: print "
Memory AllocatedFunction NameLink
', $namesSizes{$key}," ", $key, "
\n";