| Index: tools/memory_watcher/scripts/summary.pl
|
| ===================================================================
|
| --- tools/memory_watcher/scripts/summary.pl (revision 30172)
|
| +++ tools/memory_watcher/scripts/summary.pl (working copy)
|
| @@ -20,16 +20,29 @@
|
| chomp($line);
|
| my $bytes, $loc;
|
| ($bytes, $loc) = ($line =~ m/[ \t]*([0-9]*)[ \t]*[0-9\.%]*[ \t]*(.*)/);
|
| + chomp($loc);
|
| + while(<STDIN>) {
|
| + my $cont = $_;
|
| + chomp($cont);
|
| + last if $cont =~ m/=====/;
|
| + $loc .= "\n" . $cont;
|
| + }
|
| my $location_blame = "";
|
|
|
| # print "Found: $bytes, $loc\n";
|
| -
|
| - $total_bytes += $bytes;
|
| -
|
| - if ($loc =~ m/v8/) {
|
| +
|
| + if ($loc =~ m/v8::internal::Snapshot::Deserialize/) {
|
| + $location_blame = "v8 Snapshot Deserialize";
|
| + } elsif ($loc =~ m/v8::internal::OldSpace::SlowAllocateRaw/) {
|
| + $location_blame = "v8 OldSpace";
|
| + } elsif ($loc =~ m/v8/) {
|
| $location_blame = "v8";
|
| } elsif ($loc =~ m/sqlite/) {
|
| $location_blame = "sqlite";
|
| + } elsif ($loc =~ m/ TransportDIB::Map/) {
|
| + $location_blame = "Shared Memory Backing Store";
|
| + } elsif ($loc =~ m/imagedecoder/) {
|
| + $location_blame = "img decoder";
|
| } elsif ($loc =~ m/SkBitmap/) {
|
| $location_blame = "skia";
|
| } elsif ($loc =~ m/disk_cache/) {
|
| @@ -58,8 +71,6 @@
|
| $location_blame = "plugin";
|
| } elsif ($loc =~ m/hunspell/) {
|
| $location_blame = "hunspell";
|
| - } elsif ($loc =~ m/decoder/) {
|
| - $location_blame = "img decoder";
|
| } elsif ($loc =~ m/TextCodec/) {
|
| $location_blame = "fonts";
|
| } elsif ($loc =~ m/glyph/) {
|
| @@ -70,6 +81,10 @@
|
| $location_blame = "webkit css";
|
| } elsif ($loc =~ m/Arena/) {
|
| $location_blame = "webkit arenas";
|
| + } elsif ($loc =~ m/WebCore::.*ResourceLoader::addData/) {
|
| + $location_blame = "WebCore *ResourceLoader addData";
|
| + } elsif ($loc =~ m/OnUpdateVisitedLinks/) {
|
| + $location_blame = "OnUpdateVisitedLinks";
|
| } elsif ($loc =~ m/IPC/) {
|
| $location_blame = "ipc";
|
| } elsif ($loc =~ m/trunk\\chrome\\browser/) {
|
| @@ -86,31 +101,52 @@
|
| $location_blame = "webkit javascriptcore";
|
| } elsif ($loc =~ m/webkit/) {
|
| $location_blame = "webkit other";
|
| -# print "$location_blame: ($bytes) $loc\n";
|
| + } elsif ($loc =~ m/safe_browsing/) {
|
| + $location_blame = "safe_browsing";
|
| + } elsif ($loc =~ m/VisitedLinkMaster/) {
|
| + $location_blame = "VisitedLinkMaster";
|
| + } elsif ($loc =~ m/NewDOMUI/) {
|
| + $location_blame = "NewDOMUI";
|
| + } elsif ($loc =~ m/RegistryControlledDomainService/) {
|
| + $location_blame = "RegistryControlledDomainService";
|
| + } elsif ($loc =~ m/URLRequestChromeJob::DataAvailable/) {
|
| + $location_blame = "URLRequestChromeJob DataAvailable";
|
| + } elsif ($loc =~ m/history_publisher/) {
|
| + $location_blame = "history publisher";
|
| } else {
|
| $location_blame = "unknown";
|
| # print "$location_blame: ($bytes) $loc\n";
|
| }
|
|
|
| - # surface large outliers
|
| - if ($bytes > 1000000 && $location_blame eq "unknown") {
|
| - $location_blame = $loc;
|
| + # Surface large outliers in an "interesting" group.
|
| + # When questioned about a specific group listed above, we
|
| + # can just enter its name here, and get details.
|
| + # TODO(jar): Add this as a pair of shell arguments.
|
| + if ($bytes > 10000000 && $location_blame eq "unknown") {
|
| + $location_blame = "\n" . $loc;
|
| }
|
|
|
| + $total_bytes += $bytes;
|
| $leaks{$location_blame} += $bytes;
|
| }
|
|
|
| # now dump our hash table
|
| my $sum = 0;
|
| - my @keys = keys(%leaks);
|
| + my @keys = sort { $leaks{$b} <=> $leaks{$a} }keys %leaks;
|
| for ($i=0; $i<@keys; $i++) {
|
| my $key = @keys[$i];
|
| - printf "%8d\t%3.2f%%\t%s\n", $leaks{$key}, (100* $leaks{$key} / $total_bytes), $key;
|
| + printf "%11s\t%3.2f%%\t%s\n", comma_print($leaks{$key}), (100* $leaks{$key} / $total_bytes), $key;
|
| $sum += $leaks{$key};
|
| }
|
| - print("TOTAL: $sum\n");
|
| + 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 ------------------------------------------------
|
|
|
|
|