| Index: tools/testrunner/local/execution.py
|
| diff --git a/tools/testrunner/local/execution.py b/tools/testrunner/local/execution.py
|
| index a6dce636e1182b86c4952ee284c367b026aa3d17..36ce7be83f64adbd31d42927a821e063c647f3b9 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 = []
|
|
|