mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-01 14:45:29 +00:00
136 lines
4.4 KiB
Perl
136 lines
4.4 KiB
Perl
# Page loader/cycling mechanism (mozilla -f option):
|
|
# If you are building optimized, you need to add
|
|
# --enable-logrefcnt
|
|
# to turn the pageloader code on. These are on by default for debug.
|
|
#
|
|
sub BloatTest {
|
|
my ($binary, $build_dir, $bloat_args, $bloatdiff_label, $timeout_secs) = @_;
|
|
my $binary_basename = File::Basename::basename($binary);
|
|
my $binary_dir = File::Basename::dirname($binary);
|
|
my $binary_log = "$build_dir/bloat-cur.log";
|
|
my $old_binary_log = "$build_dir/bloat-prev.log";
|
|
local $_;
|
|
|
|
rename($binary_log, $old_binary_log);
|
|
|
|
unless (-e "$binary_dir/bloaturls.txt") {
|
|
Util::print_log("Error: bloaturls.txt does not exist.\n");
|
|
return 'testfailed';
|
|
}
|
|
|
|
my $platform = $Settings::OS =~ /^WIN/ ? 'windows' : 'unix';
|
|
# If on Windows, make sure the urls file has dos lineendings, or
|
|
# mozilla won't parse the file correctly
|
|
if ($platform eq 'windows') {
|
|
my $bu = "$binary_dir/bloaturls.txt";
|
|
open(IN,"$bu") || die ("$bu: $!\n");
|
|
open(OUT,">$bu.new") || die ("$bu.new: $!\n");
|
|
while (<IN>) {
|
|
if (! m/\r\n$/) {
|
|
s/\n$/\r\n/;
|
|
}
|
|
print OUT "$_";
|
|
}
|
|
close(IN);
|
|
close(OUT);
|
|
File::Copy::move("$bu.new", "$bu") or die("move: $!\n");
|
|
}
|
|
|
|
$ENV{XPCOM_MEM_BLOAT_LOG} = 1; # Turn on ref counting to track leaks.
|
|
|
|
# Build up binary command, look for profile.
|
|
my @args = ($binary_basename);
|
|
unless (($Settings::MozProfileName eq "") or
|
|
($Settings::BinaryName eq "TestGtkEmbed")) {
|
|
@args = (@args, "-P", $Settings::MozProfileName);
|
|
}
|
|
@args = (@args, @$bloat_args);
|
|
|
|
my $result = Util::run_cmd($build_dir, $binary_dir, \@args, $timeout_secs);
|
|
$ENV{XPCOM_MEM_BLOAT_LOG} = 0;
|
|
delete $ENV{XPCOM_MEM_BLOAT_LOG};
|
|
|
|
Util::print_logfile($binary_log, "$bloatdiff_label bloat test");
|
|
|
|
if ($result->{timed_out}) {
|
|
Util::print_log("Error: bloat test timed out after"
|
|
." $timeout_secs seconds.\n");
|
|
return 'testfailed';
|
|
} elsif ($result->{exit_value}) {
|
|
Util::print_test_errors($result, $binary_basename);
|
|
Util::print_log("Error: bloat test failed.\n");
|
|
return 'testfailed';
|
|
}
|
|
|
|
# Print out bloatdiff stats, also look for TOTAL line for leak/bloat #s.
|
|
Util::print_log("<a href=#bloat>\n######################## BLOAT STATISTICS\n");
|
|
my $found_total_line = 0;
|
|
my @total_line_array;
|
|
open DIFF, "perl $build_dir/../bloatdiff.pl $build_dir/bloat-prev.log $binary_log $bloatdiff_label|"
|
|
or die "Unable to run bloatdiff.pl";
|
|
while (<DIFF>) {
|
|
Util::print_log($_);
|
|
|
|
# Look for fist TOTAL line
|
|
unless ($found_total_line) {
|
|
if (/TOTAL/) {
|
|
@total_line_array = split(" ", $_);
|
|
$found_total_line = 1;
|
|
}
|
|
}
|
|
}
|
|
close DIFF;
|
|
Util::print_log("######################## END BLOAT STATISTICS\n</a>\n");
|
|
|
|
|
|
# Scrape for leak/bloat totals from TOTAL line
|
|
# TOTAL 23 0% 876224
|
|
my $leaks = $total_line_array[1];
|
|
my $bloat = $total_line_array[3];
|
|
|
|
Util::print_log("leaks = $leaks\n");
|
|
Util::print_log("bloat = $bloat\n");
|
|
|
|
# Figure out what the label prefix is.
|
|
my $label_prefix = "";
|
|
my $testname_prefix = "";
|
|
unless($bloatdiff_label eq "") {
|
|
$label_prefix = "$bloatdiff_label ";
|
|
$testname_prefix = "$bloatdiff_label" . "_";
|
|
}
|
|
|
|
# Figure out testnames to send to server
|
|
my $leaks_testname = "refcnt_leaks";
|
|
my $bloat_testname = "refcnt_bloat";
|
|
unless($bloatdiff_label eq "") {
|
|
$leaks_testname = $testname_prefix . "refcnt_leaks";
|
|
$bloat_testname = $testname_prefix . "refcnt_bloat";
|
|
}
|
|
|
|
# Figure out testname labels
|
|
my $leaks_testname_label = "refcnt Leaks";
|
|
my $bloat_testname_label = "refcnt Bloat";
|
|
unless($bloatdiff_label eq "") {
|
|
$leaks_testname_label = $label_prefix . $leaks_testname_label;
|
|
$bloat_testname_label = $label_prefix . $bloat_testname_label;
|
|
}
|
|
|
|
my $embed_prefix = "";
|
|
if($Settings::BinaryName eq "TestGtkEmbed") {
|
|
$embed_prefix = "m";
|
|
}
|
|
|
|
Util::print_log_test_result_bytes($leaks_testname, $leaks_testname_label,
|
|
$leaks,
|
|
$label_prefix . $embed_prefix . 'RLk', 3);
|
|
|
|
if($Settings::TestsPhoneHome) {
|
|
# Report numbers to server.
|
|
Util::send_results_to_server($leaks, "--", $leaks_testname);
|
|
}
|
|
|
|
return 'success';
|
|
}
|
|
|
|
1;
|