Bug 538388 - Make find-leakers.pl work with the output of XPCOM_MEM_ALLOC_LOG as it dose with XPCOM_MEM_REFCNT_LOG, r=dbaron
--- a/tools/rb/find-leakers.pl
+++ b/tools/rb/find-leakers.pl
@@ -47,28 +47,42 @@ LINE: while (<>) {
my @fields = split(/ /, $_);
my $class = shift(@fields);
my $obj = shift(@fields);
my $sno = shift(@fields);
my $op = shift(@fields);
my $cnt = shift(@fields);
+ # for AddRef/Release $cnt is the refcount, for Ctor/Dtor it's the size
+
if ($op eq 'AddRef' && $cnt == 1) {
# Example: <nsStringBuffer> 0x01AFD3B8 1 AddRef 1
$allocs{$obj} = ++$counter{$class}; # the order of allocation
$classes{$obj} = $class;
}
elsif ($op eq 'Release' && $cnt == 0) {
# Example: <nsStringBuffer> 0x01AFD3B8 1 Release 0
delete($allocs{$obj});
delete($classes{$obj});
}
+ elsif ($op eq 'Ctor') {
+ # Example: <PStreamNotifyParent> 0x08880BD0 8 Ctor (20)
+
+ $allocs{$obj} = ++$counter{$class};
+ $classes{$obj} = $class;
+ }
+ elsif ($op eq 'Dtor') {
+ # Example: <PStreamNotifyParent> 0x08880BD0 8 Dtor (20)
+
+ delete($allocs{$obj});
+ delete($classes{$obj});
+ }
}
sub sort_by_value {
my %x = @_;
sub _by_value($) { my %x = @_; $x{$a} cmp $x{$b}; }
sort _by_value keys(%x);
}