From 500b76d5be0c547f8425d458c17594ae25adb815 Mon Sep 17 00:00:00 2001 From: "machenbach@chromium.org" Date: Thu, 10 Jul 2014 09:48:31 +0000 Subject: [PATCH] Only compare allocation output in predictable mode. This also adds an assert that makes sure allocations are printed. BUG=391747 LOG=n R=ishell@chromium.org Review URL: https://codereview.chromium.org/377213005 git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@22313 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- tools/testrunner/local/execution.py | 20 ++++++++++++++++---- tools/testrunner/objects/output.py | 6 ------ 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/tools/testrunner/local/execution.py b/tools/testrunner/local/execution.py index a6dce63..36ce7be 100644 --- a/tools/testrunner/local/execution.py +++ b/tools/testrunner/local/execution.py @@ -65,6 +65,7 @@ class Runner(object): self.perf_data_manager = perfdata.PerfDataManager(self.datapath) self.perfdata = self.perf_data_manager.GetStore(context.arch, context.mode) self.perf_failures = False + self.printed_allocations = False self.tests = [ t for s in suites for t in s.tests ] if not context.no_sorting: for t in self.tests: @@ -149,6 +150,15 @@ class Runner(object): return not has_unexpected_output def _ProcessTestPredictable(self, test, result, pool): + def HasDifferentAllocations(output1, output2): + def AllocationStr(stdout): + for line in reversed((stdout or "").splitlines()): + if line.startswith("### Allocations = "): + self.printed_allocations = True + return line + return "" + return (AllocationStr(output1.stdout) != AllocationStr(output2.stdout)) + # Always pass the test duration for the database update. test.duration = result[2] if test.run == 1 and result[1].HasTimedOut(): @@ -159,10 +169,10 @@ class Runner(object): self.remaining -= 1 self.failed.append(test) self.indicator.HasRun(test, True) - if test.run > 1 and test.output != result[1]: - # From the second run on, check for differences. If a difference is - # found, call the indicator twice to report both tests. All runs of each - # test are counted as one for the statistic. + if test.run > 1 and HasDifferentAllocations(test.output, result[1]): + # From the second run on, check for different allocations. If a + # difference is found, call the indicator twice to report both tests. + # All runs of each test are counted as one for the statistic. self.indicator.AboutToRun(test) self.remaining -= 1 self.failed.append(test) @@ -233,6 +243,8 @@ class Runner(object): if queued_exception: raise queued_exception + # Make sure that any allocations were printed in predictable mode. + assert not self.context.predictable or self.printed_allocations def GetCommand(self, test): d8testflag = [] diff --git a/tools/testrunner/objects/output.py b/tools/testrunner/objects/output.py index 6b5b0cd..87b4c84 100644 --- a/tools/testrunner/objects/output.py +++ b/tools/testrunner/objects/output.py @@ -38,12 +38,6 @@ class Output(object): self.stdout = stdout self.stderr = stderr - def __ne__(self, other): - return (self.exit_code != other.exit_code or - self.timed_out != other.timed_out or - self.stdout != other.stdout or - self.stderr != other.stderr) - def HasCrashed(self): if utils.IsWindows(): return 0x80000000 & self.exit_code and not (0x3FFFFF00 & self.exit_code) -- 2.7.4