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
parent 3b2511ed
......@@ -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 = []
......
......@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment