+2012-10-03 Philip Rogers <pdr@google.com>
+
+ Force GC between PageLoad tests.
+ https://bugs.webkit.org/show_bug.cgi?id=98203
+
+ Reviewed by Ryosuke Niwa.
+
+ Previously, our PageLoad PerfTests had multi-modal distributions,
+ typically with a small cluster at 1-2x the median. This turned out
+ to be caused by not garbage collecting between tests!
+
+ This patch adds a new file, force-gc.html, and loads this file between
+ PageLoad tests to force a GC. I manually verified that this cleans up
+ our perf test outliers.
+
+ * Scripts/webkitpy/performance_tests/perftest.py:
+ (PageLoadingPerfTest.__init__):
+ (PageLoadingPerfTest):
+ (PageLoadingPerfTest.run_single):
+
+ This function now loads two pages: one to force a gc and
+ then the test to run.
+
+ * Scripts/webkitpy/performance_tests/perftest_unittest.py:
+
+ Modified several existing tests to show that the force-gc file
+ is loaded.
+
+ (MockPort):
+ (MockPort.__init__):
+ (MockPort.perf_tests_dir):
+ (TestPageLoadingPerfTest.MockDriver.__init__):
+ (TestPageLoadingPerfTest.MockDriver.run_test):
+ (TestPageLoadingPerfTest.test_run):
+ (TestPageLoadingPerfTest.test_run_with_bad_output):
+ (TestReplayPerfTest.ReplayTestPort):
+ (TestReplayPerfTest.ReplayTestPort.__init__):
+ (TestReplayPerfTest.test_run_single.run_test):
+ (TestReplayPerfTest.test_run_single):
+ (TestReplayPerfTest.test_run_single_fails_when_output_has_error):
+ (TestPerfTestFactory.test_regular_test):
+ (TestPerfTestFactory.test_inspector_test):
+ (TestPerfTestFactory.test_page_loading_test):
+
2012-10-03 Christophe Dumez <christophe.dumez@intel.com>
[EFL] Enable use of X11 in DumpRenderTree / WebKitTestRunner
from webkitpy.performance_tests.perftest import ReplayPerfTest
+class MockPort(TestPort):
+ def __init__(self, custom_run_test=None):
+ super(MockPort, self).__init__(host=MockHost(), custom_run_test=custom_run_test)
+
class MainTest(unittest.TestCase):
def test_parse_output(self):
output = DriverOutput('\n'.join([
class TestPageLoadingPerfTest(unittest.TestCase):
class MockDriver(object):
- def __init__(self, values):
+ def __init__(self, values, test):
self._values = values
self._index = 0
+ self._test = test
def run_test(self, input, stop_when_done):
+ if input.test_name == self._test.force_gc_test:
+ return
value = self._values[self._index]
self._index += 1
if isinstance(value, str):
return DriverOutput('some output', image=None, image_hash=None, audio=None, test_time=self._values[self._index - 1])
def test_run(self):
- test = PageLoadingPerfTest(None, 'some-test', '/path/some-dir/some-test')
- driver = TestPageLoadingPerfTest.MockDriver(range(1, 21))
+ port = MockPort()
+ test = PageLoadingPerfTest(port, 'some-test', '/path/some-dir/some-test')
+ driver = TestPageLoadingPerfTest.MockDriver(range(1, 21), test)
output_capture = OutputCapture()
output_capture.capture_output()
try:
output_capture = OutputCapture()
output_capture.capture_output()
try:
- test = PageLoadingPerfTest(None, 'some-test', '/path/some-dir/some-test')
- driver = TestPageLoadingPerfTest.MockDriver([1, 2, 3, 4, 5, 6, 7, 'some error', 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
+ port = MockPort()
+ test = PageLoadingPerfTest(port, 'some-test', '/path/some-dir/some-test')
+ driver = TestPageLoadingPerfTest.MockDriver([1, 2, 3, 4, 5, 6, 7, 'some error', 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], test)
self.assertEqual(test.run(driver, None), None)
finally:
actual_stdout, actual_stderr, actual_logs = output_capture.restore_output()
class TestReplayPerfTest(unittest.TestCase):
- class ReplayTestPort(TestPort):
+ class ReplayTestPort(MockPort):
def __init__(self, custom_run_test=None):
class ReplayTestDriver(TestDriver):
return custom_run_test(text_input, stop_when_done) if custom_run_test else None
self._custom_driver_class = ReplayTestDriver
- super(self.__class__, self).__init__(host=MockHost())
+ super(self.__class__, self).__init__()
def _driver_class(self):
return self._custom_driver_class
loaded_pages = []
def run_test(test_input, stop_when_done):
+ if test_input.test_name == test.force_gc_test:
+ loaded_pages.append(test_input)
+ return
if test_input.test_name != "about:blank":
self.assertEqual(test_input.test_name, 'http://some-test/')
loaded_pages.append(test_input)
finally:
actual_stdout, actual_stderr, actual_logs = output_capture.restore_output()
- self.assertEqual(len(loaded_pages), 1)
- self.assertEqual(loaded_pages[0].test_name, 'http://some-test/')
+ self.assertEqual(len(loaded_pages), 2)
+ self.assertEqual(loaded_pages[0].test_name, test.force_gc_test)
+ self.assertEqual(loaded_pages[1].test_name, 'http://some-test/')
self.assertEqual(actual_stdout, '')
self.assertEqual(actual_stderr, '')
self.assertEqual(actual_logs, '')
finally:
actual_stdout, actual_stderr, actual_logs = output_capture.restore_output()
- self.assertEqual(len(loaded_pages), 1)
- self.assertEqual(loaded_pages[0].test_name, 'http://some-test/')
+ self.assertEqual(len(loaded_pages), 2)
+ self.assertEqual(loaded_pages[0].test_name, test.force_gc_test)
+ self.assertEqual(loaded_pages[1].test_name, 'http://some-test/')
self.assertEqual(actual_stdout, '')
self.assertEqual(actual_stderr, '')
self.assertEqual(actual_logs, 'error: some-test.replay\nsome error\n')
class TestPerfTestFactory(unittest.TestCase):
def test_regular_test(self):
- test = PerfTestFactory.create_perf_test(None, 'some-dir/some-test', '/path/some-dir/some-test')
+ test = PerfTestFactory.create_perf_test(MockPort(), 'some-dir/some-test', '/path/some-dir/some-test')
self.assertEqual(test.__class__, PerfTest)
def test_inspector_test(self):
- test = PerfTestFactory.create_perf_test(None, 'inspector/some-test', '/path/inspector/some-test')
+ test = PerfTestFactory.create_perf_test(MockPort(), 'inspector/some-test', '/path/inspector/some-test')
self.assertEqual(test.__class__, ChromiumStylePerfTest)
def test_page_loading_test(self):
- test = PerfTestFactory.create_perf_test(None, 'PageLoad/some-test', '/path/PageLoad/some-test')
+ test = PerfTestFactory.create_perf_test(MockPort(), 'PageLoad/some-test', '/path/PageLoad/some-test')
self.assertEqual(test.__class__, PageLoadingPerfTest)