Extract a class to represent a test result to simplify PerfTest.parse_output and...
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 7 Jan 2013 18:28:05 +0000 (18:28 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 7 Jan 2013 18:28:05 +0000 (18:28 +0000)
commit4024fd470d027147fd41fea8795d665c0e0574de
tree047ff8b9d02eb11a14b1a2489a0bd38e43e120ac
parent93d574736ca2a7f0a2cf31ec8dfa1d66ddafc910
Extract a class to represent a test result to simplify PerfTest.parse_output and PageLoadPerfTest._run_with_driver
https://bugs.webkit.org/show_bug.cgi?id=106172

Reviewed by Tony Chang.

Extracted PerfTestMetric, which represents a test result and knows how to compute statistics and convert itself
to a dictionary. A metric is a type of measurement each test makes such as "Time", "Malloc", and "JSHeap".
A single test (e.g. html5-full-render.html) may have multiple metrics, each of which is reported as a separate
test on perf-o-matic and perf. test's results page.

Also, use python's compute_statistics instead of reading statistics off of DriverOutput to simplify the code.

* Scripts/webkitpy/performance_tests/perftest.py:
(PerfTestMetric): Added.
(PerfTestMetric.__init__): Added.
(PerfTestMetric.metric): Added.
(PerfTestMetric.has_values): Added.
(PerfTestMetric.legacy_chromium_bot_compatible_test_name): Added. Following the legacy convention, "Malloc" and
"JSHeap" will use "test_name:Malloc" whereas "Time" uses "test_name" itself. We should eventually move these
conversions to be done on the client side (perf-o-matic and results page).
(PerfTestMetric.append): Added.
(PerfTestMetric.to_dict): Added. Computes the statistics and generates the dictionary object that represents
a result for this metric.
(PerfTestMetric.metric_to_unit): Added. Each metric maps to exactly one unit (it's not one-to-one).
(PerfTestMetric.compute_statistics): Moved from PerfTest.

(PerfTest._create_driver): Extracted from PerfTest.run.
(PerfTest.run): Given an array of PerfTestMetric, generate the results dictionary. Also print out results
as needed.
(PerfTest._run_with_driver):
(PerfTest): Removed _result_classes and _result_class_regex. "result class" is the old name for "metric".
(PerfTest.parse_output): Dramatically simplified. We now just return an array of PerfTestMetric's. Also ignore
all keys except "values". We rely on PerfTestMetric to compute the statistics for us.

(ChromiumStylePerfTest.run): Added and merged _run_with_driver. Since chromium style perf tests are so different
from other perf tests, there isn't much point in sharing the code here.

(PageLoadingPerfTest._run_with_driver): Simplified. Just create an array of PerfTestMetric's without computing
statistics for the measured values.

* Scripts/webkitpy/performance_tests/perftest_unittest.py:
(TestPerfTestMetric): Added.
(TestPerfTestMetric.test_init_set_missing_unit): Added.
(TestPerfTestMetric.test_legacy_chromium_bot_compatible_test_name): Added.
(TestPerfTestMetric.test_has_values): Added.
(TestPerfTestMetric.test_append): Added.
(TestPerfTestMetric.test_compute_statistics.compute_statistics):
(TestPerfTestMetric.test_compute_statistics): Added a trivial test case.

(TestPerfTest._assert_results_are_correct): Updated as needed.
(TestPageLoadingPerfTest.test_run): Ditto. Notice that we no longer log anything in _run_with_driver. It's done
in PerfTest.run now after generating the results dictionary.
(TestPageLoadingPerfTest.test_run_with_memory_output): Ditto.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@138955 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Tools/ChangeLog
Tools/Scripts/webkitpy/performance_tests/perftest.py
Tools/Scripts/webkitpy/performance_tests/perftest_unittest.py