2017-11-03 06:20:22 +00:00
|
|
|
|
<!--
|
[MotionMark] Add support for version numbers
https://bugs.webkit.org/show_bug.cgi?id=186479
Reviewed by Said Abou-Hallawa.
Add support for displaying the version number as well as including it in the JSON results.
When loading the front page, script replaces any element with classname version with the
version number of the benchmark, which is stored in Strings.version.
The JSON structure for the results includes a new version property:
{
"version": "1.0",
"options": { ... },
"data": [ ... ]
}
When dragging a results file, the version listed will come from the JSON file. Older
results will not have had the version property, in which case it will default to "1.0".
* MotionMark/index.html: Update title to some other default. Script will update it.
Include the version number in the logo title.
* MotionMark/developer.html: Ditto.
* MotionMark/about.html: Ditto.
* MotionMark/resources/runner/motionmark.js:
(ResultsDashboard): Update constructor to include version. This is used when serializing
results out to JSON, and displaying the results panel in developer mode.
(ResultsDashboard._processData): When running the benchmark, include benchmark version string
in the results object.
(ResultsDashboard.version):
(window.benchmarkRunnerClient.willStartFirstIteration): When running the benchmark, pass the
benchmark version string to the dashboard, which holds the results.
(window.sectionsManager.setSectionVersion): Helper function to update the element in the
section with the class name version.
(window.benchmarkController.initialize): Populate all DOM elements with class name "version"
with the version string. Update the page title.
(window.benchmarkController.showResults): When showing results, update the version string
based on what is included in the JSON results, which would be the same as the benchmark version.
* MotionMark/resources/runner/motionmark.css: Include missing copyright. Wrap the SVG logo
in a div and include the version string.
* MotionMark/resources/strings.js: Add strings for the page title template, and the version.
* MotionMark/resources/debug-runner/motionmark.css:
* MotionMark/resources/debug-runner/motionmark.js:
(window.benchmarkRunnerClient.willStartFirstIteration): When running the benchmark, pass the
benchmark version string to the dashboard, which holds the results.
(window.benchmarkController.initialize): Populate all DOM elements with class name "version"
with the version string. Update the page title. When dragging in JSON results, look for
version to pass to the dashboard. If it doesn't exist, default to "1.0".
(window.benchmarkController.showResults): When showing results, update the version string
based on what is included in the JSON results, instead of the current benchmark version.
* MotionMark/resources/debug-runner/tests.js: Update page title template.
Canonical link: https://commits.webkit.org/202238@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@233147 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-06-25 15:38:03 +00:00
|
|
|
|
Copyright (C) 2015-2018 Apple Inc. All rights reserved.
|
2017-11-03 06:20:22 +00:00
|
|
|
|
|
|
|
|
|
Redistribution and use in source and binary forms, with or without
|
|
|
|
|
modification, are permitted provided that the following conditions
|
|
|
|
|
are met:
|
|
|
|
|
1. Redistributions of source code must retain the above copyright
|
|
|
|
|
notice, this list of conditions and the following disclaimer.
|
|
|
|
|
2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
|
notice, this list of conditions and the following disclaimer in the
|
|
|
|
|
documentation and/or other materials provided with the distribution.
|
|
|
|
|
|
|
|
|
|
THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
|
|
|
|
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
|
|
|
|
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
|
|
|
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
|
|
|
|
|
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
|
|
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
|
|
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
|
|
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
|
|
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
|
|
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
|
|
|
|
THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
|
-->
|
Split benchmark into two different pages
https://bugs.webkit.org/show_bug.cgi?id=152458
Reviewed by Simon Fraser.
Address comments.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunner.prototype._runTestAndRecordResults): When the testing is complete the frame owning the
sampler goes away, and a later call to get the JSON data is no longer available. Process the data
right here, instead, and just reference it when displaying the results in ResultsDashboard.prototype._processData.
* Animometer/resources/extensions.js:
(Array.prototype.fill.Array.prototype.fill): Add a null check. Remove braces around single-line clause.
(Array.prototype.find.Array.prototype.find): Update the null check.
(ResultsDashboard.prototype._processData): Use the already-processed data.
* Animometer/resources/runner/animometer.css:
(.frame-container > iframe): Remove calc().
Move Array functions to extensions.js since that is included by the harness.
Add ES6 Array polyfills.
* Animometer/resources/algorithm.js:
(Array.prototype.swap): Moved to extensions.js.
* Animometer/resources/extensions.js:
(Array.prototype.swap):
(Array.prototype.fill): Added.
(Array.prototype.find): Added.
Adjust styles for iPad.
* Animometer/resources/runner/animometer.css:
(@media screen and (min-device-width: 768px)): Apply to iPad as well.
(@media screen and (max-device-width: 1024px)): Update width for iPads.
Adjustment styles for iOS.
* Animometer/developer.html: Different divs contain the iframe, so use a class instead and
update the style rules.
* Animometer/index.html:
* Animometer/resources/debug-runner/animometer.css: Remove extraneous rules.
(@media screen and (min-device-width: 1800px)): Move this up.
* Animometer/resources/runner/animometer.css: Add rules to accomodate iOS.
Get rid of prefixed flex properties for now.
* Animometer/resources/debug-runner/animometer.css:
* Animometer/resources/runner/animometer.css:
Update the structure of the harness. Remove the JSON-per-test but keep
the JSON of the whole test run. Use the full page in order to display
the graph.
* Animometer/developer.html: Update several of the JS file includes to UTF-8. Remove header and footer. Test results screen includes score,
average, and worst 5% statistics.
* Animometer/index.html: Make structure similar to developer.html.
* Animometer/resources/debug-runner/animometer.css: Remove most of the
button rules since they are superfluous. Move the progress bar to the
top, fixed. Update the results page rules.
* Animometer/resources/debug-runner/animometer.js: Remove most of the
additions to sectionsManager since they are no longer needed.
(setSectionHeader): Updates header of the section.
(window.suitesManager._updateStartButtonState): Update selector.
(showResults): Add keypress event for selecting different data for
copy/paste. Update how the results are populated. Include full test
JSON in a textarea, rather than requiring a button press.
(showTestGraph):
* Animometer/resources/debug-runner/tests.js: Update structure of Headers. Define different kinds of headers. Headers can control their
title, and the text used as the cell contents, including class name.
* Animometer/resources/extensions.js:
(ResultsTable): Update to include a flattened version of the headers,
used while populating table contents. Remove unneeded helper functions
for creating the table. Rename "show" to "add".
* Animometer/resources/runner/animometer.css: Update rules to
accommodate the new structure.
* Animometer/resources/runner/animometer.js:
(window.sectionsManager.setSectionScore): Helper function to set the
score and mean for a section.
(window.sectionsManager.populateTable): Helper function to set the table.
(window.benchmarkController.showResults): Refactor.
(window.benchmarkController.selectResults): Update selectors.
* Animometer/resources/runner/tests.js: Set Headers. Debug harness
extends it.
Update debug runner to have similar names to the basic runner. Include
that page's CSS and remove extraneous CSS rules.
Get rid of the statistics table #record.
* Animometer/developer.html: Rename #home to #intro. Rename .spacer to hr.
* Animometer/resources/debug-runner/animometer.css: Set to flexbox when selected.
* Animometer/resources/debug-runner/animometer.js: Remove recordTable.
(window.suitesManager._updateStartButtonState): Update selector to #intro.
(setupRunningSectionStyle): Deleted.
* Animometer/resources/runner/animometer.css:
(#test-container.selected): Change to flex-box only when visible.
Remove recordTable.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunner.prototype._runTestAndRecordResults):
* Animometer/resources/runner/tests.js:
* Animometer/tests/bouncing-particles/resources/bouncing-canvas-images.js:
* Animometer/tests/bouncing-particles/resources/bouncing-canvas-particles.js:
* Animometer/tests/bouncing-particles/resources/bouncing-canvas-shapes.js:
* Animometer/tests/bouncing-particles/resources/bouncing-css-images.js:
* Animometer/tests/bouncing-particles/resources/bouncing-css-shapes.js:
* Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
* Animometer/tests/bouncing-particles/resources/bouncing-svg-images.js:
* Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js:
* Animometer/tests/examples/resources/canvas-electrons.js:
* Animometer/tests/examples/resources/canvas-stars.js:
* Animometer/tests/misc/resources/compositing-transforms.js:
* Animometer/tests/resources/main.js:
* Animometer/tests/resources/stage.js:
(StageBenchmark): Remove _recordTable.
* Animometer/tests/simple/resources/simple-canvas-paths.js:
* Animometer/tests/simple/resources/simple-canvas.js:
* Animometer/tests/template/resources/template-canvas.js:
* Animometer/tests/template/resources/template-css.js:
* Animometer/tests/template/resources/template-svg.js:
* Animometer/tests/text/resources/layering-text.js:
* Animometer/resources/debug-runner/animometer.js:
(willStartFirstIteration): Fix selector, since results-table is used
in multiple places, so it cannot be an id.
Make it possible to select the scores, or the whole table data,
by cycling through different selections through key press of 's'.
* Animometer/resources/runner/animometer.js:
(window.benchmarkController.showResults): Attach a keypress handler
if it hasn't been added already.
(window.benchmarkController.selectResults):
* Animometer/resources/runner/tests.js: Cycle through different
ranges.
Fix a few fly-by errors.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunnerState.prototype.prepareCurrentTest): Update the frame relative path
since the files are now in the top directory instead of inside runner/.
(BenchmarkRunner.prototype._runTestAndRecordResults): Incorrect reference to function.
(BenchmarkRunner.prototype.step): Member variable is never used.
A little stylistic cleanup.
* Animometer/resources/debug-runner/benchmark-runner.js:
* Animometer/resources/extensions.js:
(window.DocumentExtension.createElement):
* Animometer/tests/resources/main.js:
(Benchmark.prototype.record):
* Animometer/tests/resources/stage.js:
(StageBenchmark.prototype.showResults): Reverse progress and message.
The message appears less frequently than the progress.
* Animometer/tests/simple/resources/simple-canvas.js:
(SimpleCanvasBenchmark): Remove unused options.
Add newer version of harness in a new page. Consolidate differences between the two
pages.
* Animometer/developer.html: Include runner/animometer.js. Rename the JS function
to run the benchmark to startBenchmark() instead of startTest(). Rename #running to
#test-container.
* Animometer/index.html: Added. Similarly calls startBenchmark() and has #test-container.
* Animometer/resources/debug-runner/animometer.css: Make the canvas 2:1 (1200px x 800px)
instead of 4:3.
Split out benchmarkRunnerClient and benchmarkController.
* Animometer/resources/debug-runner/animometer.js: Move needed functions out of
benchmarkRunnerClient, and leave the rest here to extend that object. Get rid of _resultsTable
and move populating the results table into benchmarkController. Rename _resultsDashboard
to results and make it accessible for other objects to use.
(willAddTestFrame): This is unnecessary. Remove.
(window.sectionsManager.showScore): Grab it from the results object instead of
benchmarkRunnerClient.
(window.sectionsManager.showSection): Deleted. Moved to runner/animometer.js.
(window.benchmarkController._runBenchmark): Deleted. Mostly moved into _startBenchmark.
(window.benchmarkController.startBenchmark): Refactor to call _startBenchmark.
(window.benchmarkController.showResults): Include most of benchmarkRunnerClient.didFinishLastIteration()
here.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunner.prototype._appendFrame): Remove unneeded call to willAddTestFrame.
* Animometer/resources/extensions.js:
(ResultsDashboard): Change the class to process the sampler data on-demand and hold onto that data
for later referencing.
(ResultsDashboard.prototype.toJSON): Deleted.
(ResultsDashboard.prototype._processData): Rename toJSON to _processData since it's not really
outputting JSON. Store the processed data into a member variable that can be referenced later.
(ResultsDashboard.prototype.get data): Process the data if it hasn't already.
(ResultsDashboard.prototype.get score): Process the data if it hasn't already, then return the
aggregate score.
(ResultsTable.prototype._showHeader): When outputting the results to a table, don't force the
need for an empty children array. This was to allow for a header row in the table that spanned
multiple columns. In the simpler harness, this is not needed.
(ResultsTable.prototype._showEmptyCells):
(ResultsTable.prototype._showTest): This hardcoded the columns. At least for the name and score,
which is the bare minimum needed for the simpler harness, key off of the header name provided.
* Animometer/resources/runner/animometer.css: Added. Use a similar 2:1 ratio. The score tables are
split into the data and the headers, and are also displayed RTL so that a later patch allows a
user to copy-paste the data easily.
* Animometer/resources/runner/animometer.js: Added. Use a simpler version of benchmarkRunnerClient.
The debug harness will extend these classes.
(window.benchmarkController._startBenchmark): Used by both harnesses.
(window.benchmarkController.startBenchmark): Set hard-coded options.
(window.benchmarkController.showResults): Includes most of benchmarkRunnerClient.didFinishLastIteration()
here.
Get rid of utilities.js. Move it all into extensions.js.
* Animometer/resources/extensions.js:
* Animometer/tests/resources/utilities.js: Removed.
* Animometer/tests/bouncing-particles/bouncing-canvas-images.html: Remove script link.
* Animometer/tests/bouncing-particles/bouncing-canvas-shapes.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-css-images.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-css-shapes.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-svg-images.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-svg-shapes.html: Ditto.
* Animometer/tests/examples/canvas-electrons.html: Ditto.
* Animometer/tests/examples/canvas-stars.html: Ditto.
* Animometer/tests/misc/compositing-transforms.html: Ditto.
* Animometer/tests/simple/simple-canvas-paths.html: Ditto.
* Animometer/tests/template/template-canvas.html: Ditto.
* Animometer/tests/template/template-css.html: Ditto.
* Animometer/tests/template/template-svg.html: Ditto.
* Animometer/tests/text/layering-text.html: Ditto.
Split tests.js into two. Add a new suite to runner/tests.js.
* Animometer/developer.html: Update the script order. Scripts from
debug-runner/ will always build on those from runner/, and have the
same name.
* Animometer/resources/debug-runner/tests.js: Move "complex examples"
suite into "miscellaneous tests".
(Suite): Deleted.
(Suite.prototype.prepare): Deleted.
(Suite.prototype.run): Deleted.
(suiteFromName): Deleted.
* Animometer/resources/runner/tests.js: Added. Take definitions and
functions needed by the test harness. Leave the test suites behind.
(Suite): Moved from debug script.
(Suite.prototype.prepare): Ditto.
(Suite.prototype.run): Ditto.
(suiteFromName): Ditto.
(testFromName): Ditto.
Move benchmark resources out into resources/debug-runner, and update URLs.
* Animometer/developer.html: Renamed from PerformanceTests/Animometer/runner/animometer.html.
* Animometer/resources/debug-runner/animometer.css: Renamed from PerformanceTests/Animometer/runner/resources/animometer.css.
* Animometer/resources/debug-runner/animometer.js: Renamed from PerformanceTests/Animometer/runner/resources/animometer.js.
* Animometer/resources/debug-runner/benchmark-runner.js: Renamed from PerformanceTests/Animometer/runner/resources/benchmark-runner.js.
* Animometer/resources/debug-runner/d3.min.js: Renamed from PerformanceTests/Animometer/runner/resources/d3.min.js.
* Animometer/resources/debug-runner/graph.js: Renamed from PerformanceTests/Animometer/runner/resources/graph.js.
* Animometer/resources/debug-runner/tests.js: Renamed from PerformanceTests/Animometer/runner/resources/tests.js.
Canonical link: https://commits.webkit.org/170645@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@194407 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-12-24 01:31:47 +00:00
|
|
|
|
<!DOCTYPE html>
|
|
|
|
|
<html>
|
|
|
|
|
<head>
|
|
|
|
|
<meta charset="utf-8">
|
|
|
|
|
<meta name="viewport" content="width=device-width, user-scalable=no">
|
2016-05-07 16:51:58 +00:00
|
|
|
|
|
[MotionMark] Add support for version numbers
https://bugs.webkit.org/show_bug.cgi?id=186479
Reviewed by Said Abou-Hallawa.
Add support for displaying the version number as well as including it in the JSON results.
When loading the front page, script replaces any element with classname version with the
version number of the benchmark, which is stored in Strings.version.
The JSON structure for the results includes a new version property:
{
"version": "1.0",
"options": { ... },
"data": [ ... ]
}
When dragging a results file, the version listed will come from the JSON file. Older
results will not have had the version property, in which case it will default to "1.0".
* MotionMark/index.html: Update title to some other default. Script will update it.
Include the version number in the logo title.
* MotionMark/developer.html: Ditto.
* MotionMark/about.html: Ditto.
* MotionMark/resources/runner/motionmark.js:
(ResultsDashboard): Update constructor to include version. This is used when serializing
results out to JSON, and displaying the results panel in developer mode.
(ResultsDashboard._processData): When running the benchmark, include benchmark version string
in the results object.
(ResultsDashboard.version):
(window.benchmarkRunnerClient.willStartFirstIteration): When running the benchmark, pass the
benchmark version string to the dashboard, which holds the results.
(window.sectionsManager.setSectionVersion): Helper function to update the element in the
section with the class name version.
(window.benchmarkController.initialize): Populate all DOM elements with class name "version"
with the version string. Update the page title.
(window.benchmarkController.showResults): When showing results, update the version string
based on what is included in the JSON results, which would be the same as the benchmark version.
* MotionMark/resources/runner/motionmark.css: Include missing copyright. Wrap the SVG logo
in a div and include the version string.
* MotionMark/resources/strings.js: Add strings for the page title template, and the version.
* MotionMark/resources/debug-runner/motionmark.css:
* MotionMark/resources/debug-runner/motionmark.js:
(window.benchmarkRunnerClient.willStartFirstIteration): When running the benchmark, pass the
benchmark version string to the dashboard, which holds the results.
(window.benchmarkController.initialize): Populate all DOM elements with class name "version"
with the version string. Update the page title. When dragging in JSON results, look for
version to pass to the dashboard. If it doesn't exist, default to "1.0".
(window.benchmarkController.showResults): When showing results, update the version string
based on what is included in the JSON results, instead of the current benchmark version.
* MotionMark/resources/debug-runner/tests.js: Update page title template.
Canonical link: https://commits.webkit.org/202238@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@233147 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-06-25 15:38:03 +00:00
|
|
|
|
<title>MotionMark</title>
|
2016-05-07 16:51:58 +00:00
|
|
|
|
|
2017-01-06 23:38:32 +00:00
|
|
|
|
<link rel="stylesheet" href="resources/runner/motionmark.css">
|
Split benchmark into two different pages
https://bugs.webkit.org/show_bug.cgi?id=152458
Reviewed by Simon Fraser.
Address comments.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunner.prototype._runTestAndRecordResults): When the testing is complete the frame owning the
sampler goes away, and a later call to get the JSON data is no longer available. Process the data
right here, instead, and just reference it when displaying the results in ResultsDashboard.prototype._processData.
* Animometer/resources/extensions.js:
(Array.prototype.fill.Array.prototype.fill): Add a null check. Remove braces around single-line clause.
(Array.prototype.find.Array.prototype.find): Update the null check.
(ResultsDashboard.prototype._processData): Use the already-processed data.
* Animometer/resources/runner/animometer.css:
(.frame-container > iframe): Remove calc().
Move Array functions to extensions.js since that is included by the harness.
Add ES6 Array polyfills.
* Animometer/resources/algorithm.js:
(Array.prototype.swap): Moved to extensions.js.
* Animometer/resources/extensions.js:
(Array.prototype.swap):
(Array.prototype.fill): Added.
(Array.prototype.find): Added.
Adjust styles for iPad.
* Animometer/resources/runner/animometer.css:
(@media screen and (min-device-width: 768px)): Apply to iPad as well.
(@media screen and (max-device-width: 1024px)): Update width for iPads.
Adjustment styles for iOS.
* Animometer/developer.html: Different divs contain the iframe, so use a class instead and
update the style rules.
* Animometer/index.html:
* Animometer/resources/debug-runner/animometer.css: Remove extraneous rules.
(@media screen and (min-device-width: 1800px)): Move this up.
* Animometer/resources/runner/animometer.css: Add rules to accomodate iOS.
Get rid of prefixed flex properties for now.
* Animometer/resources/debug-runner/animometer.css:
* Animometer/resources/runner/animometer.css:
Update the structure of the harness. Remove the JSON-per-test but keep
the JSON of the whole test run. Use the full page in order to display
the graph.
* Animometer/developer.html: Update several of the JS file includes to UTF-8. Remove header and footer. Test results screen includes score,
average, and worst 5% statistics.
* Animometer/index.html: Make structure similar to developer.html.
* Animometer/resources/debug-runner/animometer.css: Remove most of the
button rules since they are superfluous. Move the progress bar to the
top, fixed. Update the results page rules.
* Animometer/resources/debug-runner/animometer.js: Remove most of the
additions to sectionsManager since they are no longer needed.
(setSectionHeader): Updates header of the section.
(window.suitesManager._updateStartButtonState): Update selector.
(showResults): Add keypress event for selecting different data for
copy/paste. Update how the results are populated. Include full test
JSON in a textarea, rather than requiring a button press.
(showTestGraph):
* Animometer/resources/debug-runner/tests.js: Update structure of Headers. Define different kinds of headers. Headers can control their
title, and the text used as the cell contents, including class name.
* Animometer/resources/extensions.js:
(ResultsTable): Update to include a flattened version of the headers,
used while populating table contents. Remove unneeded helper functions
for creating the table. Rename "show" to "add".
* Animometer/resources/runner/animometer.css: Update rules to
accommodate the new structure.
* Animometer/resources/runner/animometer.js:
(window.sectionsManager.setSectionScore): Helper function to set the
score and mean for a section.
(window.sectionsManager.populateTable): Helper function to set the table.
(window.benchmarkController.showResults): Refactor.
(window.benchmarkController.selectResults): Update selectors.
* Animometer/resources/runner/tests.js: Set Headers. Debug harness
extends it.
Update debug runner to have similar names to the basic runner. Include
that page's CSS and remove extraneous CSS rules.
Get rid of the statistics table #record.
* Animometer/developer.html: Rename #home to #intro. Rename .spacer to hr.
* Animometer/resources/debug-runner/animometer.css: Set to flexbox when selected.
* Animometer/resources/debug-runner/animometer.js: Remove recordTable.
(window.suitesManager._updateStartButtonState): Update selector to #intro.
(setupRunningSectionStyle): Deleted.
* Animometer/resources/runner/animometer.css:
(#test-container.selected): Change to flex-box only when visible.
Remove recordTable.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunner.prototype._runTestAndRecordResults):
* Animometer/resources/runner/tests.js:
* Animometer/tests/bouncing-particles/resources/bouncing-canvas-images.js:
* Animometer/tests/bouncing-particles/resources/bouncing-canvas-particles.js:
* Animometer/tests/bouncing-particles/resources/bouncing-canvas-shapes.js:
* Animometer/tests/bouncing-particles/resources/bouncing-css-images.js:
* Animometer/tests/bouncing-particles/resources/bouncing-css-shapes.js:
* Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
* Animometer/tests/bouncing-particles/resources/bouncing-svg-images.js:
* Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js:
* Animometer/tests/examples/resources/canvas-electrons.js:
* Animometer/tests/examples/resources/canvas-stars.js:
* Animometer/tests/misc/resources/compositing-transforms.js:
* Animometer/tests/resources/main.js:
* Animometer/tests/resources/stage.js:
(StageBenchmark): Remove _recordTable.
* Animometer/tests/simple/resources/simple-canvas-paths.js:
* Animometer/tests/simple/resources/simple-canvas.js:
* Animometer/tests/template/resources/template-canvas.js:
* Animometer/tests/template/resources/template-css.js:
* Animometer/tests/template/resources/template-svg.js:
* Animometer/tests/text/resources/layering-text.js:
* Animometer/resources/debug-runner/animometer.js:
(willStartFirstIteration): Fix selector, since results-table is used
in multiple places, so it cannot be an id.
Make it possible to select the scores, or the whole table data,
by cycling through different selections through key press of 's'.
* Animometer/resources/runner/animometer.js:
(window.benchmarkController.showResults): Attach a keypress handler
if it hasn't been added already.
(window.benchmarkController.selectResults):
* Animometer/resources/runner/tests.js: Cycle through different
ranges.
Fix a few fly-by errors.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunnerState.prototype.prepareCurrentTest): Update the frame relative path
since the files are now in the top directory instead of inside runner/.
(BenchmarkRunner.prototype._runTestAndRecordResults): Incorrect reference to function.
(BenchmarkRunner.prototype.step): Member variable is never used.
A little stylistic cleanup.
* Animometer/resources/debug-runner/benchmark-runner.js:
* Animometer/resources/extensions.js:
(window.DocumentExtension.createElement):
* Animometer/tests/resources/main.js:
(Benchmark.prototype.record):
* Animometer/tests/resources/stage.js:
(StageBenchmark.prototype.showResults): Reverse progress and message.
The message appears less frequently than the progress.
* Animometer/tests/simple/resources/simple-canvas.js:
(SimpleCanvasBenchmark): Remove unused options.
Add newer version of harness in a new page. Consolidate differences between the two
pages.
* Animometer/developer.html: Include runner/animometer.js. Rename the JS function
to run the benchmark to startBenchmark() instead of startTest(). Rename #running to
#test-container.
* Animometer/index.html: Added. Similarly calls startBenchmark() and has #test-container.
* Animometer/resources/debug-runner/animometer.css: Make the canvas 2:1 (1200px x 800px)
instead of 4:3.
Split out benchmarkRunnerClient and benchmarkController.
* Animometer/resources/debug-runner/animometer.js: Move needed functions out of
benchmarkRunnerClient, and leave the rest here to extend that object. Get rid of _resultsTable
and move populating the results table into benchmarkController. Rename _resultsDashboard
to results and make it accessible for other objects to use.
(willAddTestFrame): This is unnecessary. Remove.
(window.sectionsManager.showScore): Grab it from the results object instead of
benchmarkRunnerClient.
(window.sectionsManager.showSection): Deleted. Moved to runner/animometer.js.
(window.benchmarkController._runBenchmark): Deleted. Mostly moved into _startBenchmark.
(window.benchmarkController.startBenchmark): Refactor to call _startBenchmark.
(window.benchmarkController.showResults): Include most of benchmarkRunnerClient.didFinishLastIteration()
here.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunner.prototype._appendFrame): Remove unneeded call to willAddTestFrame.
* Animometer/resources/extensions.js:
(ResultsDashboard): Change the class to process the sampler data on-demand and hold onto that data
for later referencing.
(ResultsDashboard.prototype.toJSON): Deleted.
(ResultsDashboard.prototype._processData): Rename toJSON to _processData since it's not really
outputting JSON. Store the processed data into a member variable that can be referenced later.
(ResultsDashboard.prototype.get data): Process the data if it hasn't already.
(ResultsDashboard.prototype.get score): Process the data if it hasn't already, then return the
aggregate score.
(ResultsTable.prototype._showHeader): When outputting the results to a table, don't force the
need for an empty children array. This was to allow for a header row in the table that spanned
multiple columns. In the simpler harness, this is not needed.
(ResultsTable.prototype._showEmptyCells):
(ResultsTable.prototype._showTest): This hardcoded the columns. At least for the name and score,
which is the bare minimum needed for the simpler harness, key off of the header name provided.
* Animometer/resources/runner/animometer.css: Added. Use a similar 2:1 ratio. The score tables are
split into the data and the headers, and are also displayed RTL so that a later patch allows a
user to copy-paste the data easily.
* Animometer/resources/runner/animometer.js: Added. Use a simpler version of benchmarkRunnerClient.
The debug harness will extend these classes.
(window.benchmarkController._startBenchmark): Used by both harnesses.
(window.benchmarkController.startBenchmark): Set hard-coded options.
(window.benchmarkController.showResults): Includes most of benchmarkRunnerClient.didFinishLastIteration()
here.
Get rid of utilities.js. Move it all into extensions.js.
* Animometer/resources/extensions.js:
* Animometer/tests/resources/utilities.js: Removed.
* Animometer/tests/bouncing-particles/bouncing-canvas-images.html: Remove script link.
* Animometer/tests/bouncing-particles/bouncing-canvas-shapes.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-css-images.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-css-shapes.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-svg-images.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-svg-shapes.html: Ditto.
* Animometer/tests/examples/canvas-electrons.html: Ditto.
* Animometer/tests/examples/canvas-stars.html: Ditto.
* Animometer/tests/misc/compositing-transforms.html: Ditto.
* Animometer/tests/simple/simple-canvas-paths.html: Ditto.
* Animometer/tests/template/template-canvas.html: Ditto.
* Animometer/tests/template/template-css.html: Ditto.
* Animometer/tests/template/template-svg.html: Ditto.
* Animometer/tests/text/layering-text.html: Ditto.
Split tests.js into two. Add a new suite to runner/tests.js.
* Animometer/developer.html: Update the script order. Scripts from
debug-runner/ will always build on those from runner/, and have the
same name.
* Animometer/resources/debug-runner/tests.js: Move "complex examples"
suite into "miscellaneous tests".
(Suite): Deleted.
(Suite.prototype.prepare): Deleted.
(Suite.prototype.run): Deleted.
(suiteFromName): Deleted.
* Animometer/resources/runner/tests.js: Added. Take definitions and
functions needed by the test harness. Leave the test suites behind.
(Suite): Moved from debug script.
(Suite.prototype.prepare): Ditto.
(Suite.prototype.run): Ditto.
(suiteFromName): Ditto.
(testFromName): Ditto.
Move benchmark resources out into resources/debug-runner, and update URLs.
* Animometer/developer.html: Renamed from PerformanceTests/Animometer/runner/animometer.html.
* Animometer/resources/debug-runner/animometer.css: Renamed from PerformanceTests/Animometer/runner/resources/animometer.css.
* Animometer/resources/debug-runner/animometer.js: Renamed from PerformanceTests/Animometer/runner/resources/animometer.js.
* Animometer/resources/debug-runner/benchmark-runner.js: Renamed from PerformanceTests/Animometer/runner/resources/benchmark-runner.js.
* Animometer/resources/debug-runner/d3.min.js: Renamed from PerformanceTests/Animometer/runner/resources/d3.min.js.
* Animometer/resources/debug-runner/graph.js: Renamed from PerformanceTests/Animometer/runner/resources/graph.js.
* Animometer/resources/debug-runner/tests.js: Renamed from PerformanceTests/Animometer/runner/resources/tests.js.
Canonical link: https://commits.webkit.org/170645@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@194407 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-12-24 01:31:47 +00:00
|
|
|
|
|
2016-05-07 16:51:58 +00:00
|
|
|
|
<script src="resources/strings.js" defer></script>
|
|
|
|
|
<script src="resources/extensions.js" defer></script>
|
|
|
|
|
<script src="resources/statistics.js" defer></script>
|
|
|
|
|
|
Improvements to Animometer benchmark
https://bugs.webkit.org/show_bug.cgi?id=157738
Reviewed by Dean Jackson.
Provisionally reviewed by Said Abou-Hallawa.
Include confidence interval for the final score, and store the canvas
size in the serialization so that it is accurately shown in results.
* Animometer/developer.html: Add a "confidence" div.
* Animometer/index.html: Ditto. Convert "mean" to "confidence".
* Animometer/resources/debug-runner/animometer.js: Look at options, and
if the configuration is included, update the body class based on it
(similar to what we do when we first load the page). That way, if you
drag-and-drop previous results in, that configuration is reflected in
the dashboard. Show the full confidence interval.
* Animometer/resources/debug-runner/animometer.css:
* Animometer/resources/debug-runner/animometer.js: Style update.
* Animometer/resources/runner/animometer.css:
* Animometer/resources/runner/animometer.js:
(_processData): Propagate the confidence interval values out and calculate
the lower and upper bounds. For now, shortcut the aggregate calculation,
since we only go through one iteration.
(this._processData.calculateScore): Propagate the confidence interval out
to be next to the score. Depending on the controller these values are
calculated differently.
(this._processData._getResultsProperty): Convenience function.
(this._processData.get score): Refactor.
(this._processData.get scoreLowerBound): Get the aggregate lower bound.
(this._processData.get scoreUpperBound): Get the aggregate upper bound.
(window.sectionsManager.setSectionScore):
(window.benchmarkController._startBenchmark): When the benchmark starts, note
the canvas size and add it to options. That way it will be automatically be
serialized.
(window.benchmarkController.showResults): Include the maximum deviation
percentage.
* Animometer/resources/runner/lines.svg: Make the background line up with the
skew.
* Animometer/resources/runner/tests.js:
(Headers.details.text): Refactor.
* Animometer/resources/statistics.js:
(Statistics.largestDeviationPercentage): Convenience function to calculate
the deviation percentage on either end and return the largest deviation.
* Animometer/resources/strings.js:
Allow specifying a regression profile to use instead of taking the one
with the lowest error.
Address an issue in the focus test when the regression calculated ends
up overestimating the change point, causing a cascade of tougher
ramps. The reason behind this is that at max complexity of an initial
ramp, the frame length is very high, and it influences the second
segment of the piecewise regression strongly, causing it to be very
steep. As a result, the first segment, expected to be flat, ends up
covering a higher range of complexity. That makes the change point
much higher than it should be. To avoid this, we will add a sanity
check on the maximum value of the ramp. If the regression's projected
value at the maximum complexity of the current ramp is very slow (less
than 20 fps), 1) reduce the maximum complexity by 20%, and 2) do not
include the regression's change point in the change point estimator.
That estimator is used as the midpoint of the next ramp, and including
the change point from a poor regression can bake in the error. The
controller already knows how to adjust for ramps that are too easy for
the system.
* Animometer/resources/runner/animometer.js:
(this._processData.findRegression): Takes a preferred profile and gives that to
Regression.
(this._processData.calculateScore): With the ramp controller, take the profile
of the ramp that was used the most when calculating the ramp's regression. That
profile is what is used for the test's score.
* Animometer/resources/statistics.js:
(Regression.Utilities.createClass): Update to take an options object which can
specify a profile to calculate with. Otherwise it will continue to use both and
select the one with the lower error.
(_calculateRegression): Fix an issue where we claim 0 error if the regression
calculation fails due to divide-by-zero. Instead reject that regression calculation
by giving it Number.MAX_VALUE.
* Animometer/resources/strings.js: New strings for marking a regression as flat
or slope.
* Animometer/tests/resources/main.js:
(RampController): Rename the thresholds for clarity. Add a threshold that, if
exceeded, will lower the maximum complexity of the next ramp.
(tune): Relax the cdf check to consider whether the interval definitely falls in
the desired frame length threshold.
(processSamples): Include the profile in the ramp.
Update ramp controller test. Increase the length of the test to 30 seconds, and extend
the interval to 120 ms during sampling. Improve the estimation of the ramp parameters.
* Animometer/developer.html: Change default to 30 seconds, and don't show the progress bar
by default.
* Animometer/resources/runner/animometer.js: Change default to 30 seconds.
* Animometer/tests/resources/main.js: A number of improvements to the ramp controller, in
the order in which they appear in the patch:
- With a longer test length use longer ramps with longer intervals to get more data at each
complexity. Keep the 100 ms interval length during the ramp up phase since we don't need to
spend more time there to find the right order of magnitude, but increase it during the
ramps to 120 ms.
- The ramp linearly interpolates the complexity to render based on its timestamp, but it would
never sample the minimum complexity. Instead of lerping max to min complexity from time
0 to t where t is the ramp length, instead lerp from 0 to (t - intervalSampleLength) so that
we can have at least one interval sample at the min complexity for that ramp.
- Some regression calculations only come out with one line segment rather than the two
we expect. This could be due to a noisy ramp or the ramp's range is too narrow. If that's the
case, influence the minimum complexity of the next ramp towards the lowest bound of 1, so that
we ensure that at least part of the ramp is covering a complexity range that the system can
handle at full 60.
- Remove an assignment to interpolatedFrameLength since that is never subsequently used.
Update the format used to serialize the results for analysis.
Each data point used to have named properties for fields like complexity and frame rate.
In addition the serialized numbers had rounding errors that took up many characters.
Update the format by introducing a new data container called SampleData, which contains a
field map. The map maps a string to an array index. Each data point is an array, so, to
get a stat, use the field map to get the array index into the data point. This allows future
versions to track other data, and reduces the size of the output string by two-thirds.
* Animometer/resources/extensions.js:
(Utilities.toFixedNumber): Add convenience function that truncates the number to a fixed
precision, and converts it back to a number.
(SampleData): New class that contains sample data and a field map that maps properties to
an array index.
(get length): Number of data points.
(addField): Add a field to the field map.
(push): Add a data point.
(sort): Sort the data.
(slice): Return new SampleData object with sliced data.
(forEach): Iterate over the data with provided function.
(createDatum):
(getFieldInDatum): Returns the data point associated with the field name by looking it up
in the field map in the datum provided, which can be the datum object itself (an array) or
an index into the data member variable.
(setFieldInDatum): Sets the data point associated with the field name.
(at): Returns the data point at the provided index.
(toArray): Serializes the data where the field map serves as property names for each point.
* Animometer/resources/debug-runner/graph.js:
(updateGraphData): Remove unused _testData. Convert the data to the old array format for the
graph to use, since the old format was much easier to work with when displaying the graphs.
(onGraphTypeChanged): For some controllers, no alternative score or mean is provided.
* Animometer/resources/runner/animometer.css:
* Animometer/resources/runner/animometer.js: Refactor to use SampleData. Update JSON output
to only go to 3 digits of precision for purposes of reducing the data size.
* Animometer/resources/strings.js: Add new strings to put into the field maps.
* Animometer/tests/resources/main.js: Refactor to use SampleData.
* Animometer/developer.html:
* Animometer/index.html: Restructure results table for both pages. Add charset attribute to
tests.js include.
* Animometer/resources/debug-runner/animometer.css: Clear out styles from release runner.
* Animometer/resources/debug-runner/graph.js:
(onGraphTypeChanged): Update score and mean if bootstrap results are available from the
controller, since not all controllers do bootstrapping.
* Animometer/resources/debug-runner/tests.js: Update header text.
* Animometer/resources/runner/animometer.css: Include confidence interval in results.
* Animometer/resources/runner/animometer.js:
(ResultsTable._addHeader): Header contents can be HTML, so use innerHTML instead.
(ResultsTable._addBody): Add tbody element.
(ResultsTable._addTest): Allow a data cell to invoke a JS function to get its contents.
(window.benchmarkController.showResults): Add table that includes tests' confidence intervals.
* Animometer/resources/runner/tests.js:
(Headers.details.text): Add new details table that includes bootstrap confidence interval.
The interval can be asymmetric, but for simplicity, report the maximum deviation percentage
on either side of the bootstrap median.
* Animometer/resources/statistics.js:
(bootstrap): Include the confidence percentage in the return object.
Report canvas size in results.
* Animometer/developer.html: Add markup to indicate whether a small, medium, or large
canvas was used.
* Animometer/index.html: Ditto.
* Animometer/resources/debug-runner/animometer.js: Call determineCanvasSize().
* Animometer/resources/runner/animometer.css: Update styles to set the canvas based on the
body class size.
* Animometer/resources/runner/animometer.js:
(window.benchmarkController.initialize): Update styles to set the canvas based on the
body class size.
(window.benchmarkController.determineCanvasSize): Run various media queries and set the body
class based on the size of the device.
* Animometer/developer.html: Refactor to include the main CSS file, and redo
the layout so that it doesn't rely on flexbox.
* Animometer/resources/debug-runner/animometer.css:
* Animometer/resources/debug-runner/animometer.js:
(updateDisplay): Since various parts of the script alter the body class, we can't
replace the className directly. Instead, remove all display-based values and then add
the one that was selected.
* Animometer/resources/debug-runner/graph.js:
(updateGraphData): To set the size of the graph, use window.innerHeight.
* Animometer/resources/runner/animometer.js:
(window.sectionsManager.showSection): Since various parts of the script alter the body
class, we can't replace the className directly. Remove all of the section classes
individually and then add the one desired.
* Animometer/tests/resources/stage.css: Remove -apple-system as a font to use in the
stage.
Canonical link: https://commits.webkit.org/177081@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@202314 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-06-22 03:11:15 +00:00
|
|
|
|
<script src="resources/runner/tests.js" charset="utf-8" defer></script>
|
2017-01-06 23:38:32 +00:00
|
|
|
|
<script src="resources/runner/motionmark.js" defer></script>
|
Split benchmark into two different pages
https://bugs.webkit.org/show_bug.cgi?id=152458
Reviewed by Simon Fraser.
Address comments.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunner.prototype._runTestAndRecordResults): When the testing is complete the frame owning the
sampler goes away, and a later call to get the JSON data is no longer available. Process the data
right here, instead, and just reference it when displaying the results in ResultsDashboard.prototype._processData.
* Animometer/resources/extensions.js:
(Array.prototype.fill.Array.prototype.fill): Add a null check. Remove braces around single-line clause.
(Array.prototype.find.Array.prototype.find): Update the null check.
(ResultsDashboard.prototype._processData): Use the already-processed data.
* Animometer/resources/runner/animometer.css:
(.frame-container > iframe): Remove calc().
Move Array functions to extensions.js since that is included by the harness.
Add ES6 Array polyfills.
* Animometer/resources/algorithm.js:
(Array.prototype.swap): Moved to extensions.js.
* Animometer/resources/extensions.js:
(Array.prototype.swap):
(Array.prototype.fill): Added.
(Array.prototype.find): Added.
Adjust styles for iPad.
* Animometer/resources/runner/animometer.css:
(@media screen and (min-device-width: 768px)): Apply to iPad as well.
(@media screen and (max-device-width: 1024px)): Update width for iPads.
Adjustment styles for iOS.
* Animometer/developer.html: Different divs contain the iframe, so use a class instead and
update the style rules.
* Animometer/index.html:
* Animometer/resources/debug-runner/animometer.css: Remove extraneous rules.
(@media screen and (min-device-width: 1800px)): Move this up.
* Animometer/resources/runner/animometer.css: Add rules to accomodate iOS.
Get rid of prefixed flex properties for now.
* Animometer/resources/debug-runner/animometer.css:
* Animometer/resources/runner/animometer.css:
Update the structure of the harness. Remove the JSON-per-test but keep
the JSON of the whole test run. Use the full page in order to display
the graph.
* Animometer/developer.html: Update several of the JS file includes to UTF-8. Remove header and footer. Test results screen includes score,
average, and worst 5% statistics.
* Animometer/index.html: Make structure similar to developer.html.
* Animometer/resources/debug-runner/animometer.css: Remove most of the
button rules since they are superfluous. Move the progress bar to the
top, fixed. Update the results page rules.
* Animometer/resources/debug-runner/animometer.js: Remove most of the
additions to sectionsManager since they are no longer needed.
(setSectionHeader): Updates header of the section.
(window.suitesManager._updateStartButtonState): Update selector.
(showResults): Add keypress event for selecting different data for
copy/paste. Update how the results are populated. Include full test
JSON in a textarea, rather than requiring a button press.
(showTestGraph):
* Animometer/resources/debug-runner/tests.js: Update structure of Headers. Define different kinds of headers. Headers can control their
title, and the text used as the cell contents, including class name.
* Animometer/resources/extensions.js:
(ResultsTable): Update to include a flattened version of the headers,
used while populating table contents. Remove unneeded helper functions
for creating the table. Rename "show" to "add".
* Animometer/resources/runner/animometer.css: Update rules to
accommodate the new structure.
* Animometer/resources/runner/animometer.js:
(window.sectionsManager.setSectionScore): Helper function to set the
score and mean for a section.
(window.sectionsManager.populateTable): Helper function to set the table.
(window.benchmarkController.showResults): Refactor.
(window.benchmarkController.selectResults): Update selectors.
* Animometer/resources/runner/tests.js: Set Headers. Debug harness
extends it.
Update debug runner to have similar names to the basic runner. Include
that page's CSS and remove extraneous CSS rules.
Get rid of the statistics table #record.
* Animometer/developer.html: Rename #home to #intro. Rename .spacer to hr.
* Animometer/resources/debug-runner/animometer.css: Set to flexbox when selected.
* Animometer/resources/debug-runner/animometer.js: Remove recordTable.
(window.suitesManager._updateStartButtonState): Update selector to #intro.
(setupRunningSectionStyle): Deleted.
* Animometer/resources/runner/animometer.css:
(#test-container.selected): Change to flex-box only when visible.
Remove recordTable.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunner.prototype._runTestAndRecordResults):
* Animometer/resources/runner/tests.js:
* Animometer/tests/bouncing-particles/resources/bouncing-canvas-images.js:
* Animometer/tests/bouncing-particles/resources/bouncing-canvas-particles.js:
* Animometer/tests/bouncing-particles/resources/bouncing-canvas-shapes.js:
* Animometer/tests/bouncing-particles/resources/bouncing-css-images.js:
* Animometer/tests/bouncing-particles/resources/bouncing-css-shapes.js:
* Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
* Animometer/tests/bouncing-particles/resources/bouncing-svg-images.js:
* Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js:
* Animometer/tests/examples/resources/canvas-electrons.js:
* Animometer/tests/examples/resources/canvas-stars.js:
* Animometer/tests/misc/resources/compositing-transforms.js:
* Animometer/tests/resources/main.js:
* Animometer/tests/resources/stage.js:
(StageBenchmark): Remove _recordTable.
* Animometer/tests/simple/resources/simple-canvas-paths.js:
* Animometer/tests/simple/resources/simple-canvas.js:
* Animometer/tests/template/resources/template-canvas.js:
* Animometer/tests/template/resources/template-css.js:
* Animometer/tests/template/resources/template-svg.js:
* Animometer/tests/text/resources/layering-text.js:
* Animometer/resources/debug-runner/animometer.js:
(willStartFirstIteration): Fix selector, since results-table is used
in multiple places, so it cannot be an id.
Make it possible to select the scores, or the whole table data,
by cycling through different selections through key press of 's'.
* Animometer/resources/runner/animometer.js:
(window.benchmarkController.showResults): Attach a keypress handler
if it hasn't been added already.
(window.benchmarkController.selectResults):
* Animometer/resources/runner/tests.js: Cycle through different
ranges.
Fix a few fly-by errors.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunnerState.prototype.prepareCurrentTest): Update the frame relative path
since the files are now in the top directory instead of inside runner/.
(BenchmarkRunner.prototype._runTestAndRecordResults): Incorrect reference to function.
(BenchmarkRunner.prototype.step): Member variable is never used.
A little stylistic cleanup.
* Animometer/resources/debug-runner/benchmark-runner.js:
* Animometer/resources/extensions.js:
(window.DocumentExtension.createElement):
* Animometer/tests/resources/main.js:
(Benchmark.prototype.record):
* Animometer/tests/resources/stage.js:
(StageBenchmark.prototype.showResults): Reverse progress and message.
The message appears less frequently than the progress.
* Animometer/tests/simple/resources/simple-canvas.js:
(SimpleCanvasBenchmark): Remove unused options.
Add newer version of harness in a new page. Consolidate differences between the two
pages.
* Animometer/developer.html: Include runner/animometer.js. Rename the JS function
to run the benchmark to startBenchmark() instead of startTest(). Rename #running to
#test-container.
* Animometer/index.html: Added. Similarly calls startBenchmark() and has #test-container.
* Animometer/resources/debug-runner/animometer.css: Make the canvas 2:1 (1200px x 800px)
instead of 4:3.
Split out benchmarkRunnerClient and benchmarkController.
* Animometer/resources/debug-runner/animometer.js: Move needed functions out of
benchmarkRunnerClient, and leave the rest here to extend that object. Get rid of _resultsTable
and move populating the results table into benchmarkController. Rename _resultsDashboard
to results and make it accessible for other objects to use.
(willAddTestFrame): This is unnecessary. Remove.
(window.sectionsManager.showScore): Grab it from the results object instead of
benchmarkRunnerClient.
(window.sectionsManager.showSection): Deleted. Moved to runner/animometer.js.
(window.benchmarkController._runBenchmark): Deleted. Mostly moved into _startBenchmark.
(window.benchmarkController.startBenchmark): Refactor to call _startBenchmark.
(window.benchmarkController.showResults): Include most of benchmarkRunnerClient.didFinishLastIteration()
here.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunner.prototype._appendFrame): Remove unneeded call to willAddTestFrame.
* Animometer/resources/extensions.js:
(ResultsDashboard): Change the class to process the sampler data on-demand and hold onto that data
for later referencing.
(ResultsDashboard.prototype.toJSON): Deleted.
(ResultsDashboard.prototype._processData): Rename toJSON to _processData since it's not really
outputting JSON. Store the processed data into a member variable that can be referenced later.
(ResultsDashboard.prototype.get data): Process the data if it hasn't already.
(ResultsDashboard.prototype.get score): Process the data if it hasn't already, then return the
aggregate score.
(ResultsTable.prototype._showHeader): When outputting the results to a table, don't force the
need for an empty children array. This was to allow for a header row in the table that spanned
multiple columns. In the simpler harness, this is not needed.
(ResultsTable.prototype._showEmptyCells):
(ResultsTable.prototype._showTest): This hardcoded the columns. At least for the name and score,
which is the bare minimum needed for the simpler harness, key off of the header name provided.
* Animometer/resources/runner/animometer.css: Added. Use a similar 2:1 ratio. The score tables are
split into the data and the headers, and are also displayed RTL so that a later patch allows a
user to copy-paste the data easily.
* Animometer/resources/runner/animometer.js: Added. Use a simpler version of benchmarkRunnerClient.
The debug harness will extend these classes.
(window.benchmarkController._startBenchmark): Used by both harnesses.
(window.benchmarkController.startBenchmark): Set hard-coded options.
(window.benchmarkController.showResults): Includes most of benchmarkRunnerClient.didFinishLastIteration()
here.
Get rid of utilities.js. Move it all into extensions.js.
* Animometer/resources/extensions.js:
* Animometer/tests/resources/utilities.js: Removed.
* Animometer/tests/bouncing-particles/bouncing-canvas-images.html: Remove script link.
* Animometer/tests/bouncing-particles/bouncing-canvas-shapes.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-css-images.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-css-shapes.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-svg-images.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-svg-shapes.html: Ditto.
* Animometer/tests/examples/canvas-electrons.html: Ditto.
* Animometer/tests/examples/canvas-stars.html: Ditto.
* Animometer/tests/misc/compositing-transforms.html: Ditto.
* Animometer/tests/simple/simple-canvas-paths.html: Ditto.
* Animometer/tests/template/template-canvas.html: Ditto.
* Animometer/tests/template/template-css.html: Ditto.
* Animometer/tests/template/template-svg.html: Ditto.
* Animometer/tests/text/layering-text.html: Ditto.
Split tests.js into two. Add a new suite to runner/tests.js.
* Animometer/developer.html: Update the script order. Scripts from
debug-runner/ will always build on those from runner/, and have the
same name.
* Animometer/resources/debug-runner/tests.js: Move "complex examples"
suite into "miscellaneous tests".
(Suite): Deleted.
(Suite.prototype.prepare): Deleted.
(Suite.prototype.run): Deleted.
(suiteFromName): Deleted.
* Animometer/resources/runner/tests.js: Added. Take definitions and
functions needed by the test harness. Leave the test suites behind.
(Suite): Moved from debug script.
(Suite.prototype.prepare): Ditto.
(Suite.prototype.run): Ditto.
(suiteFromName): Ditto.
(testFromName): Ditto.
Move benchmark resources out into resources/debug-runner, and update URLs.
* Animometer/developer.html: Renamed from PerformanceTests/Animometer/runner/animometer.html.
* Animometer/resources/debug-runner/animometer.css: Renamed from PerformanceTests/Animometer/runner/resources/animometer.css.
* Animometer/resources/debug-runner/animometer.js: Renamed from PerformanceTests/Animometer/runner/resources/animometer.js.
* Animometer/resources/debug-runner/benchmark-runner.js: Renamed from PerformanceTests/Animometer/runner/resources/benchmark-runner.js.
* Animometer/resources/debug-runner/d3.min.js: Renamed from PerformanceTests/Animometer/runner/resources/d3.min.js.
* Animometer/resources/debug-runner/graph.js: Renamed from PerformanceTests/Animometer/runner/resources/graph.js.
* Animometer/resources/debug-runner/tests.js: Renamed from PerformanceTests/Animometer/runner/resources/tests.js.
Canonical link: https://commits.webkit.org/170645@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@194407 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-12-24 01:31:47 +00:00
|
|
|
|
|
2016-05-07 16:51:58 +00:00
|
|
|
|
<script src="resources/runner/benchmark-runner.js" defer></script>
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
window.addEventListener("load", function() {
|
|
|
|
|
// Start the fade in animation.
|
|
|
|
|
document.body.classList.add("images-loaded");
|
|
|
|
|
});
|
|
|
|
|
</script>
|
Split benchmark into two different pages
https://bugs.webkit.org/show_bug.cgi?id=152458
Reviewed by Simon Fraser.
Address comments.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunner.prototype._runTestAndRecordResults): When the testing is complete the frame owning the
sampler goes away, and a later call to get the JSON data is no longer available. Process the data
right here, instead, and just reference it when displaying the results in ResultsDashboard.prototype._processData.
* Animometer/resources/extensions.js:
(Array.prototype.fill.Array.prototype.fill): Add a null check. Remove braces around single-line clause.
(Array.prototype.find.Array.prototype.find): Update the null check.
(ResultsDashboard.prototype._processData): Use the already-processed data.
* Animometer/resources/runner/animometer.css:
(.frame-container > iframe): Remove calc().
Move Array functions to extensions.js since that is included by the harness.
Add ES6 Array polyfills.
* Animometer/resources/algorithm.js:
(Array.prototype.swap): Moved to extensions.js.
* Animometer/resources/extensions.js:
(Array.prototype.swap):
(Array.prototype.fill): Added.
(Array.prototype.find): Added.
Adjust styles for iPad.
* Animometer/resources/runner/animometer.css:
(@media screen and (min-device-width: 768px)): Apply to iPad as well.
(@media screen and (max-device-width: 1024px)): Update width for iPads.
Adjustment styles for iOS.
* Animometer/developer.html: Different divs contain the iframe, so use a class instead and
update the style rules.
* Animometer/index.html:
* Animometer/resources/debug-runner/animometer.css: Remove extraneous rules.
(@media screen and (min-device-width: 1800px)): Move this up.
* Animometer/resources/runner/animometer.css: Add rules to accomodate iOS.
Get rid of prefixed flex properties for now.
* Animometer/resources/debug-runner/animometer.css:
* Animometer/resources/runner/animometer.css:
Update the structure of the harness. Remove the JSON-per-test but keep
the JSON of the whole test run. Use the full page in order to display
the graph.
* Animometer/developer.html: Update several of the JS file includes to UTF-8. Remove header and footer. Test results screen includes score,
average, and worst 5% statistics.
* Animometer/index.html: Make structure similar to developer.html.
* Animometer/resources/debug-runner/animometer.css: Remove most of the
button rules since they are superfluous. Move the progress bar to the
top, fixed. Update the results page rules.
* Animometer/resources/debug-runner/animometer.js: Remove most of the
additions to sectionsManager since they are no longer needed.
(setSectionHeader): Updates header of the section.
(window.suitesManager._updateStartButtonState): Update selector.
(showResults): Add keypress event for selecting different data for
copy/paste. Update how the results are populated. Include full test
JSON in a textarea, rather than requiring a button press.
(showTestGraph):
* Animometer/resources/debug-runner/tests.js: Update structure of Headers. Define different kinds of headers. Headers can control their
title, and the text used as the cell contents, including class name.
* Animometer/resources/extensions.js:
(ResultsTable): Update to include a flattened version of the headers,
used while populating table contents. Remove unneeded helper functions
for creating the table. Rename "show" to "add".
* Animometer/resources/runner/animometer.css: Update rules to
accommodate the new structure.
* Animometer/resources/runner/animometer.js:
(window.sectionsManager.setSectionScore): Helper function to set the
score and mean for a section.
(window.sectionsManager.populateTable): Helper function to set the table.
(window.benchmarkController.showResults): Refactor.
(window.benchmarkController.selectResults): Update selectors.
* Animometer/resources/runner/tests.js: Set Headers. Debug harness
extends it.
Update debug runner to have similar names to the basic runner. Include
that page's CSS and remove extraneous CSS rules.
Get rid of the statistics table #record.
* Animometer/developer.html: Rename #home to #intro. Rename .spacer to hr.
* Animometer/resources/debug-runner/animometer.css: Set to flexbox when selected.
* Animometer/resources/debug-runner/animometer.js: Remove recordTable.
(window.suitesManager._updateStartButtonState): Update selector to #intro.
(setupRunningSectionStyle): Deleted.
* Animometer/resources/runner/animometer.css:
(#test-container.selected): Change to flex-box only when visible.
Remove recordTable.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunner.prototype._runTestAndRecordResults):
* Animometer/resources/runner/tests.js:
* Animometer/tests/bouncing-particles/resources/bouncing-canvas-images.js:
* Animometer/tests/bouncing-particles/resources/bouncing-canvas-particles.js:
* Animometer/tests/bouncing-particles/resources/bouncing-canvas-shapes.js:
* Animometer/tests/bouncing-particles/resources/bouncing-css-images.js:
* Animometer/tests/bouncing-particles/resources/bouncing-css-shapes.js:
* Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
* Animometer/tests/bouncing-particles/resources/bouncing-svg-images.js:
* Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js:
* Animometer/tests/examples/resources/canvas-electrons.js:
* Animometer/tests/examples/resources/canvas-stars.js:
* Animometer/tests/misc/resources/compositing-transforms.js:
* Animometer/tests/resources/main.js:
* Animometer/tests/resources/stage.js:
(StageBenchmark): Remove _recordTable.
* Animometer/tests/simple/resources/simple-canvas-paths.js:
* Animometer/tests/simple/resources/simple-canvas.js:
* Animometer/tests/template/resources/template-canvas.js:
* Animometer/tests/template/resources/template-css.js:
* Animometer/tests/template/resources/template-svg.js:
* Animometer/tests/text/resources/layering-text.js:
* Animometer/resources/debug-runner/animometer.js:
(willStartFirstIteration): Fix selector, since results-table is used
in multiple places, so it cannot be an id.
Make it possible to select the scores, or the whole table data,
by cycling through different selections through key press of 's'.
* Animometer/resources/runner/animometer.js:
(window.benchmarkController.showResults): Attach a keypress handler
if it hasn't been added already.
(window.benchmarkController.selectResults):
* Animometer/resources/runner/tests.js: Cycle through different
ranges.
Fix a few fly-by errors.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunnerState.prototype.prepareCurrentTest): Update the frame relative path
since the files are now in the top directory instead of inside runner/.
(BenchmarkRunner.prototype._runTestAndRecordResults): Incorrect reference to function.
(BenchmarkRunner.prototype.step): Member variable is never used.
A little stylistic cleanup.
* Animometer/resources/debug-runner/benchmark-runner.js:
* Animometer/resources/extensions.js:
(window.DocumentExtension.createElement):
* Animometer/tests/resources/main.js:
(Benchmark.prototype.record):
* Animometer/tests/resources/stage.js:
(StageBenchmark.prototype.showResults): Reverse progress and message.
The message appears less frequently than the progress.
* Animometer/tests/simple/resources/simple-canvas.js:
(SimpleCanvasBenchmark): Remove unused options.
Add newer version of harness in a new page. Consolidate differences between the two
pages.
* Animometer/developer.html: Include runner/animometer.js. Rename the JS function
to run the benchmark to startBenchmark() instead of startTest(). Rename #running to
#test-container.
* Animometer/index.html: Added. Similarly calls startBenchmark() and has #test-container.
* Animometer/resources/debug-runner/animometer.css: Make the canvas 2:1 (1200px x 800px)
instead of 4:3.
Split out benchmarkRunnerClient and benchmarkController.
* Animometer/resources/debug-runner/animometer.js: Move needed functions out of
benchmarkRunnerClient, and leave the rest here to extend that object. Get rid of _resultsTable
and move populating the results table into benchmarkController. Rename _resultsDashboard
to results and make it accessible for other objects to use.
(willAddTestFrame): This is unnecessary. Remove.
(window.sectionsManager.showScore): Grab it from the results object instead of
benchmarkRunnerClient.
(window.sectionsManager.showSection): Deleted. Moved to runner/animometer.js.
(window.benchmarkController._runBenchmark): Deleted. Mostly moved into _startBenchmark.
(window.benchmarkController.startBenchmark): Refactor to call _startBenchmark.
(window.benchmarkController.showResults): Include most of benchmarkRunnerClient.didFinishLastIteration()
here.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunner.prototype._appendFrame): Remove unneeded call to willAddTestFrame.
* Animometer/resources/extensions.js:
(ResultsDashboard): Change the class to process the sampler data on-demand and hold onto that data
for later referencing.
(ResultsDashboard.prototype.toJSON): Deleted.
(ResultsDashboard.prototype._processData): Rename toJSON to _processData since it's not really
outputting JSON. Store the processed data into a member variable that can be referenced later.
(ResultsDashboard.prototype.get data): Process the data if it hasn't already.
(ResultsDashboard.prototype.get score): Process the data if it hasn't already, then return the
aggregate score.
(ResultsTable.prototype._showHeader): When outputting the results to a table, don't force the
need for an empty children array. This was to allow for a header row in the table that spanned
multiple columns. In the simpler harness, this is not needed.
(ResultsTable.prototype._showEmptyCells):
(ResultsTable.prototype._showTest): This hardcoded the columns. At least for the name and score,
which is the bare minimum needed for the simpler harness, key off of the header name provided.
* Animometer/resources/runner/animometer.css: Added. Use a similar 2:1 ratio. The score tables are
split into the data and the headers, and are also displayed RTL so that a later patch allows a
user to copy-paste the data easily.
* Animometer/resources/runner/animometer.js: Added. Use a simpler version of benchmarkRunnerClient.
The debug harness will extend these classes.
(window.benchmarkController._startBenchmark): Used by both harnesses.
(window.benchmarkController.startBenchmark): Set hard-coded options.
(window.benchmarkController.showResults): Includes most of benchmarkRunnerClient.didFinishLastIteration()
here.
Get rid of utilities.js. Move it all into extensions.js.
* Animometer/resources/extensions.js:
* Animometer/tests/resources/utilities.js: Removed.
* Animometer/tests/bouncing-particles/bouncing-canvas-images.html: Remove script link.
* Animometer/tests/bouncing-particles/bouncing-canvas-shapes.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-css-images.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-css-shapes.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-svg-images.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-svg-shapes.html: Ditto.
* Animometer/tests/examples/canvas-electrons.html: Ditto.
* Animometer/tests/examples/canvas-stars.html: Ditto.
* Animometer/tests/misc/compositing-transforms.html: Ditto.
* Animometer/tests/simple/simple-canvas-paths.html: Ditto.
* Animometer/tests/template/template-canvas.html: Ditto.
* Animometer/tests/template/template-css.html: Ditto.
* Animometer/tests/template/template-svg.html: Ditto.
* Animometer/tests/text/layering-text.html: Ditto.
Split tests.js into two. Add a new suite to runner/tests.js.
* Animometer/developer.html: Update the script order. Scripts from
debug-runner/ will always build on those from runner/, and have the
same name.
* Animometer/resources/debug-runner/tests.js: Move "complex examples"
suite into "miscellaneous tests".
(Suite): Deleted.
(Suite.prototype.prepare): Deleted.
(Suite.prototype.run): Deleted.
(suiteFromName): Deleted.
* Animometer/resources/runner/tests.js: Added. Take definitions and
functions needed by the test harness. Leave the test suites behind.
(Suite): Moved from debug script.
(Suite.prototype.prepare): Ditto.
(Suite.prototype.run): Ditto.
(suiteFromName): Ditto.
(testFromName): Ditto.
Move benchmark resources out into resources/debug-runner, and update URLs.
* Animometer/developer.html: Renamed from PerformanceTests/Animometer/runner/animometer.html.
* Animometer/resources/debug-runner/animometer.css: Renamed from PerformanceTests/Animometer/runner/resources/animometer.css.
* Animometer/resources/debug-runner/animometer.js: Renamed from PerformanceTests/Animometer/runner/resources/animometer.js.
* Animometer/resources/debug-runner/benchmark-runner.js: Renamed from PerformanceTests/Animometer/runner/resources/benchmark-runner.js.
* Animometer/resources/debug-runner/d3.min.js: Renamed from PerformanceTests/Animometer/runner/resources/d3.min.js.
* Animometer/resources/debug-runner/graph.js: Renamed from PerformanceTests/Animometer/runner/resources/graph.js.
* Animometer/resources/debug-runner/tests.js: Renamed from PerformanceTests/Animometer/runner/resources/tests.js.
Canonical link: https://commits.webkit.org/170645@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@194407 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-12-24 01:31:47 +00:00
|
|
|
|
</head>
|
2016-05-07 16:51:58 +00:00
|
|
|
|
<body class="showing-intro">
|
Split benchmark into two different pages
https://bugs.webkit.org/show_bug.cgi?id=152458
Reviewed by Simon Fraser.
Address comments.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunner.prototype._runTestAndRecordResults): When the testing is complete the frame owning the
sampler goes away, and a later call to get the JSON data is no longer available. Process the data
right here, instead, and just reference it when displaying the results in ResultsDashboard.prototype._processData.
* Animometer/resources/extensions.js:
(Array.prototype.fill.Array.prototype.fill): Add a null check. Remove braces around single-line clause.
(Array.prototype.find.Array.prototype.find): Update the null check.
(ResultsDashboard.prototype._processData): Use the already-processed data.
* Animometer/resources/runner/animometer.css:
(.frame-container > iframe): Remove calc().
Move Array functions to extensions.js since that is included by the harness.
Add ES6 Array polyfills.
* Animometer/resources/algorithm.js:
(Array.prototype.swap): Moved to extensions.js.
* Animometer/resources/extensions.js:
(Array.prototype.swap):
(Array.prototype.fill): Added.
(Array.prototype.find): Added.
Adjust styles for iPad.
* Animometer/resources/runner/animometer.css:
(@media screen and (min-device-width: 768px)): Apply to iPad as well.
(@media screen and (max-device-width: 1024px)): Update width for iPads.
Adjustment styles for iOS.
* Animometer/developer.html: Different divs contain the iframe, so use a class instead and
update the style rules.
* Animometer/index.html:
* Animometer/resources/debug-runner/animometer.css: Remove extraneous rules.
(@media screen and (min-device-width: 1800px)): Move this up.
* Animometer/resources/runner/animometer.css: Add rules to accomodate iOS.
Get rid of prefixed flex properties for now.
* Animometer/resources/debug-runner/animometer.css:
* Animometer/resources/runner/animometer.css:
Update the structure of the harness. Remove the JSON-per-test but keep
the JSON of the whole test run. Use the full page in order to display
the graph.
* Animometer/developer.html: Update several of the JS file includes to UTF-8. Remove header and footer. Test results screen includes score,
average, and worst 5% statistics.
* Animometer/index.html: Make structure similar to developer.html.
* Animometer/resources/debug-runner/animometer.css: Remove most of the
button rules since they are superfluous. Move the progress bar to the
top, fixed. Update the results page rules.
* Animometer/resources/debug-runner/animometer.js: Remove most of the
additions to sectionsManager since they are no longer needed.
(setSectionHeader): Updates header of the section.
(window.suitesManager._updateStartButtonState): Update selector.
(showResults): Add keypress event for selecting different data for
copy/paste. Update how the results are populated. Include full test
JSON in a textarea, rather than requiring a button press.
(showTestGraph):
* Animometer/resources/debug-runner/tests.js: Update structure of Headers. Define different kinds of headers. Headers can control their
title, and the text used as the cell contents, including class name.
* Animometer/resources/extensions.js:
(ResultsTable): Update to include a flattened version of the headers,
used while populating table contents. Remove unneeded helper functions
for creating the table. Rename "show" to "add".
* Animometer/resources/runner/animometer.css: Update rules to
accommodate the new structure.
* Animometer/resources/runner/animometer.js:
(window.sectionsManager.setSectionScore): Helper function to set the
score and mean for a section.
(window.sectionsManager.populateTable): Helper function to set the table.
(window.benchmarkController.showResults): Refactor.
(window.benchmarkController.selectResults): Update selectors.
* Animometer/resources/runner/tests.js: Set Headers. Debug harness
extends it.
Update debug runner to have similar names to the basic runner. Include
that page's CSS and remove extraneous CSS rules.
Get rid of the statistics table #record.
* Animometer/developer.html: Rename #home to #intro. Rename .spacer to hr.
* Animometer/resources/debug-runner/animometer.css: Set to flexbox when selected.
* Animometer/resources/debug-runner/animometer.js: Remove recordTable.
(window.suitesManager._updateStartButtonState): Update selector to #intro.
(setupRunningSectionStyle): Deleted.
* Animometer/resources/runner/animometer.css:
(#test-container.selected): Change to flex-box only when visible.
Remove recordTable.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunner.prototype._runTestAndRecordResults):
* Animometer/resources/runner/tests.js:
* Animometer/tests/bouncing-particles/resources/bouncing-canvas-images.js:
* Animometer/tests/bouncing-particles/resources/bouncing-canvas-particles.js:
* Animometer/tests/bouncing-particles/resources/bouncing-canvas-shapes.js:
* Animometer/tests/bouncing-particles/resources/bouncing-css-images.js:
* Animometer/tests/bouncing-particles/resources/bouncing-css-shapes.js:
* Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
* Animometer/tests/bouncing-particles/resources/bouncing-svg-images.js:
* Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js:
* Animometer/tests/examples/resources/canvas-electrons.js:
* Animometer/tests/examples/resources/canvas-stars.js:
* Animometer/tests/misc/resources/compositing-transforms.js:
* Animometer/tests/resources/main.js:
* Animometer/tests/resources/stage.js:
(StageBenchmark): Remove _recordTable.
* Animometer/tests/simple/resources/simple-canvas-paths.js:
* Animometer/tests/simple/resources/simple-canvas.js:
* Animometer/tests/template/resources/template-canvas.js:
* Animometer/tests/template/resources/template-css.js:
* Animometer/tests/template/resources/template-svg.js:
* Animometer/tests/text/resources/layering-text.js:
* Animometer/resources/debug-runner/animometer.js:
(willStartFirstIteration): Fix selector, since results-table is used
in multiple places, so it cannot be an id.
Make it possible to select the scores, or the whole table data,
by cycling through different selections through key press of 's'.
* Animometer/resources/runner/animometer.js:
(window.benchmarkController.showResults): Attach a keypress handler
if it hasn't been added already.
(window.benchmarkController.selectResults):
* Animometer/resources/runner/tests.js: Cycle through different
ranges.
Fix a few fly-by errors.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunnerState.prototype.prepareCurrentTest): Update the frame relative path
since the files are now in the top directory instead of inside runner/.
(BenchmarkRunner.prototype._runTestAndRecordResults): Incorrect reference to function.
(BenchmarkRunner.prototype.step): Member variable is never used.
A little stylistic cleanup.
* Animometer/resources/debug-runner/benchmark-runner.js:
* Animometer/resources/extensions.js:
(window.DocumentExtension.createElement):
* Animometer/tests/resources/main.js:
(Benchmark.prototype.record):
* Animometer/tests/resources/stage.js:
(StageBenchmark.prototype.showResults): Reverse progress and message.
The message appears less frequently than the progress.
* Animometer/tests/simple/resources/simple-canvas.js:
(SimpleCanvasBenchmark): Remove unused options.
Add newer version of harness in a new page. Consolidate differences between the two
pages.
* Animometer/developer.html: Include runner/animometer.js. Rename the JS function
to run the benchmark to startBenchmark() instead of startTest(). Rename #running to
#test-container.
* Animometer/index.html: Added. Similarly calls startBenchmark() and has #test-container.
* Animometer/resources/debug-runner/animometer.css: Make the canvas 2:1 (1200px x 800px)
instead of 4:3.
Split out benchmarkRunnerClient and benchmarkController.
* Animometer/resources/debug-runner/animometer.js: Move needed functions out of
benchmarkRunnerClient, and leave the rest here to extend that object. Get rid of _resultsTable
and move populating the results table into benchmarkController. Rename _resultsDashboard
to results and make it accessible for other objects to use.
(willAddTestFrame): This is unnecessary. Remove.
(window.sectionsManager.showScore): Grab it from the results object instead of
benchmarkRunnerClient.
(window.sectionsManager.showSection): Deleted. Moved to runner/animometer.js.
(window.benchmarkController._runBenchmark): Deleted. Mostly moved into _startBenchmark.
(window.benchmarkController.startBenchmark): Refactor to call _startBenchmark.
(window.benchmarkController.showResults): Include most of benchmarkRunnerClient.didFinishLastIteration()
here.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunner.prototype._appendFrame): Remove unneeded call to willAddTestFrame.
* Animometer/resources/extensions.js:
(ResultsDashboard): Change the class to process the sampler data on-demand and hold onto that data
for later referencing.
(ResultsDashboard.prototype.toJSON): Deleted.
(ResultsDashboard.prototype._processData): Rename toJSON to _processData since it's not really
outputting JSON. Store the processed data into a member variable that can be referenced later.
(ResultsDashboard.prototype.get data): Process the data if it hasn't already.
(ResultsDashboard.prototype.get score): Process the data if it hasn't already, then return the
aggregate score.
(ResultsTable.prototype._showHeader): When outputting the results to a table, don't force the
need for an empty children array. This was to allow for a header row in the table that spanned
multiple columns. In the simpler harness, this is not needed.
(ResultsTable.prototype._showEmptyCells):
(ResultsTable.prototype._showTest): This hardcoded the columns. At least for the name and score,
which is the bare minimum needed for the simpler harness, key off of the header name provided.
* Animometer/resources/runner/animometer.css: Added. Use a similar 2:1 ratio. The score tables are
split into the data and the headers, and are also displayed RTL so that a later patch allows a
user to copy-paste the data easily.
* Animometer/resources/runner/animometer.js: Added. Use a simpler version of benchmarkRunnerClient.
The debug harness will extend these classes.
(window.benchmarkController._startBenchmark): Used by both harnesses.
(window.benchmarkController.startBenchmark): Set hard-coded options.
(window.benchmarkController.showResults): Includes most of benchmarkRunnerClient.didFinishLastIteration()
here.
Get rid of utilities.js. Move it all into extensions.js.
* Animometer/resources/extensions.js:
* Animometer/tests/resources/utilities.js: Removed.
* Animometer/tests/bouncing-particles/bouncing-canvas-images.html: Remove script link.
* Animometer/tests/bouncing-particles/bouncing-canvas-shapes.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-css-images.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-css-shapes.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-svg-images.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-svg-shapes.html: Ditto.
* Animometer/tests/examples/canvas-electrons.html: Ditto.
* Animometer/tests/examples/canvas-stars.html: Ditto.
* Animometer/tests/misc/compositing-transforms.html: Ditto.
* Animometer/tests/simple/simple-canvas-paths.html: Ditto.
* Animometer/tests/template/template-canvas.html: Ditto.
* Animometer/tests/template/template-css.html: Ditto.
* Animometer/tests/template/template-svg.html: Ditto.
* Animometer/tests/text/layering-text.html: Ditto.
Split tests.js into two. Add a new suite to runner/tests.js.
* Animometer/developer.html: Update the script order. Scripts from
debug-runner/ will always build on those from runner/, and have the
same name.
* Animometer/resources/debug-runner/tests.js: Move "complex examples"
suite into "miscellaneous tests".
(Suite): Deleted.
(Suite.prototype.prepare): Deleted.
(Suite.prototype.run): Deleted.
(suiteFromName): Deleted.
* Animometer/resources/runner/tests.js: Added. Take definitions and
functions needed by the test harness. Leave the test suites behind.
(Suite): Moved from debug script.
(Suite.prototype.prepare): Ditto.
(Suite.prototype.run): Ditto.
(suiteFromName): Ditto.
(testFromName): Ditto.
Move benchmark resources out into resources/debug-runner, and update URLs.
* Animometer/developer.html: Renamed from PerformanceTests/Animometer/runner/animometer.html.
* Animometer/resources/debug-runner/animometer.css: Renamed from PerformanceTests/Animometer/runner/resources/animometer.css.
* Animometer/resources/debug-runner/animometer.js: Renamed from PerformanceTests/Animometer/runner/resources/animometer.js.
* Animometer/resources/debug-runner/benchmark-runner.js: Renamed from PerformanceTests/Animometer/runner/resources/benchmark-runner.js.
* Animometer/resources/debug-runner/d3.min.js: Renamed from PerformanceTests/Animometer/runner/resources/d3.min.js.
* Animometer/resources/debug-runner/graph.js: Renamed from PerformanceTests/Animometer/runner/resources/graph.js.
* Animometer/resources/debug-runner/tests.js: Renamed from PerformanceTests/Animometer/runner/resources/tests.js.
Canonical link: https://commits.webkit.org/170645@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@194407 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-12-24 01:31:47 +00:00
|
|
|
|
<main>
|
|
|
|
|
<section id="intro" class="selected">
|
[MotionMark] Add support for version numbers
https://bugs.webkit.org/show_bug.cgi?id=186479
Reviewed by Said Abou-Hallawa.
Add support for displaying the version number as well as including it in the JSON results.
When loading the front page, script replaces any element with classname version with the
version number of the benchmark, which is stored in Strings.version.
The JSON structure for the results includes a new version property:
{
"version": "1.0",
"options": { ... },
"data": [ ... ]
}
When dragging a results file, the version listed will come from the JSON file. Older
results will not have had the version property, in which case it will default to "1.0".
* MotionMark/index.html: Update title to some other default. Script will update it.
Include the version number in the logo title.
* MotionMark/developer.html: Ditto.
* MotionMark/about.html: Ditto.
* MotionMark/resources/runner/motionmark.js:
(ResultsDashboard): Update constructor to include version. This is used when serializing
results out to JSON, and displaying the results panel in developer mode.
(ResultsDashboard._processData): When running the benchmark, include benchmark version string
in the results object.
(ResultsDashboard.version):
(window.benchmarkRunnerClient.willStartFirstIteration): When running the benchmark, pass the
benchmark version string to the dashboard, which holds the results.
(window.sectionsManager.setSectionVersion): Helper function to update the element in the
section with the class name version.
(window.benchmarkController.initialize): Populate all DOM elements with class name "version"
with the version string. Update the page title.
(window.benchmarkController.showResults): When showing results, update the version string
based on what is included in the JSON results, which would be the same as the benchmark version.
* MotionMark/resources/runner/motionmark.css: Include missing copyright. Wrap the SVG logo
in a div and include the version string.
* MotionMark/resources/strings.js: Add strings for the page title template, and the version.
* MotionMark/resources/debug-runner/motionmark.css:
* MotionMark/resources/debug-runner/motionmark.js:
(window.benchmarkRunnerClient.willStartFirstIteration): When running the benchmark, pass the
benchmark version string to the dashboard, which holds the results.
(window.benchmarkController.initialize): Populate all DOM elements with class name "version"
with the version string. Update the page title. When dragging in JSON results, look for
version to pass to the dashboard. If it doesn't exist, default to "1.0".
(window.benchmarkController.showResults): When showing results, update the version string
based on what is included in the JSON results, instead of the current benchmark version.
* MotionMark/resources/debug-runner/tests.js: Update page title template.
Canonical link: https://commits.webkit.org/202238@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@233147 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-06-25 15:38:03 +00:00
|
|
|
|
<div class="logo">
|
|
|
|
|
<svg><use xlink:href="resources/runner/logo.svg#root" /></svg>
|
|
|
|
|
<div>version <span class="version"></span></div>
|
|
|
|
|
</div>
|
2016-05-07 16:51:58 +00:00
|
|
|
|
<div class="body">
|
Improvements to Animometer benchmark
https://bugs.webkit.org/show_bug.cgi?id=157738
Reviewed by Dean Jackson.
Provisionally reviewed by Said Abou-Hallawa.
Include confidence interval for the final score, and store the canvas
size in the serialization so that it is accurately shown in results.
* Animometer/developer.html: Add a "confidence" div.
* Animometer/index.html: Ditto. Convert "mean" to "confidence".
* Animometer/resources/debug-runner/animometer.js: Look at options, and
if the configuration is included, update the body class based on it
(similar to what we do when we first load the page). That way, if you
drag-and-drop previous results in, that configuration is reflected in
the dashboard. Show the full confidence interval.
* Animometer/resources/debug-runner/animometer.css:
* Animometer/resources/debug-runner/animometer.js: Style update.
* Animometer/resources/runner/animometer.css:
* Animometer/resources/runner/animometer.js:
(_processData): Propagate the confidence interval values out and calculate
the lower and upper bounds. For now, shortcut the aggregate calculation,
since we only go through one iteration.
(this._processData.calculateScore): Propagate the confidence interval out
to be next to the score. Depending on the controller these values are
calculated differently.
(this._processData._getResultsProperty): Convenience function.
(this._processData.get score): Refactor.
(this._processData.get scoreLowerBound): Get the aggregate lower bound.
(this._processData.get scoreUpperBound): Get the aggregate upper bound.
(window.sectionsManager.setSectionScore):
(window.benchmarkController._startBenchmark): When the benchmark starts, note
the canvas size and add it to options. That way it will be automatically be
serialized.
(window.benchmarkController.showResults): Include the maximum deviation
percentage.
* Animometer/resources/runner/lines.svg: Make the background line up with the
skew.
* Animometer/resources/runner/tests.js:
(Headers.details.text): Refactor.
* Animometer/resources/statistics.js:
(Statistics.largestDeviationPercentage): Convenience function to calculate
the deviation percentage on either end and return the largest deviation.
* Animometer/resources/strings.js:
Allow specifying a regression profile to use instead of taking the one
with the lowest error.
Address an issue in the focus test when the regression calculated ends
up overestimating the change point, causing a cascade of tougher
ramps. The reason behind this is that at max complexity of an initial
ramp, the frame length is very high, and it influences the second
segment of the piecewise regression strongly, causing it to be very
steep. As a result, the first segment, expected to be flat, ends up
covering a higher range of complexity. That makes the change point
much higher than it should be. To avoid this, we will add a sanity
check on the maximum value of the ramp. If the regression's projected
value at the maximum complexity of the current ramp is very slow (less
than 20 fps), 1) reduce the maximum complexity by 20%, and 2) do not
include the regression's change point in the change point estimator.
That estimator is used as the midpoint of the next ramp, and including
the change point from a poor regression can bake in the error. The
controller already knows how to adjust for ramps that are too easy for
the system.
* Animometer/resources/runner/animometer.js:
(this._processData.findRegression): Takes a preferred profile and gives that to
Regression.
(this._processData.calculateScore): With the ramp controller, take the profile
of the ramp that was used the most when calculating the ramp's regression. That
profile is what is used for the test's score.
* Animometer/resources/statistics.js:
(Regression.Utilities.createClass): Update to take an options object which can
specify a profile to calculate with. Otherwise it will continue to use both and
select the one with the lower error.
(_calculateRegression): Fix an issue where we claim 0 error if the regression
calculation fails due to divide-by-zero. Instead reject that regression calculation
by giving it Number.MAX_VALUE.
* Animometer/resources/strings.js: New strings for marking a regression as flat
or slope.
* Animometer/tests/resources/main.js:
(RampController): Rename the thresholds for clarity. Add a threshold that, if
exceeded, will lower the maximum complexity of the next ramp.
(tune): Relax the cdf check to consider whether the interval definitely falls in
the desired frame length threshold.
(processSamples): Include the profile in the ramp.
Update ramp controller test. Increase the length of the test to 30 seconds, and extend
the interval to 120 ms during sampling. Improve the estimation of the ramp parameters.
* Animometer/developer.html: Change default to 30 seconds, and don't show the progress bar
by default.
* Animometer/resources/runner/animometer.js: Change default to 30 seconds.
* Animometer/tests/resources/main.js: A number of improvements to the ramp controller, in
the order in which they appear in the patch:
- With a longer test length use longer ramps with longer intervals to get more data at each
complexity. Keep the 100 ms interval length during the ramp up phase since we don't need to
spend more time there to find the right order of magnitude, but increase it during the
ramps to 120 ms.
- The ramp linearly interpolates the complexity to render based on its timestamp, but it would
never sample the minimum complexity. Instead of lerping max to min complexity from time
0 to t where t is the ramp length, instead lerp from 0 to (t - intervalSampleLength) so that
we can have at least one interval sample at the min complexity for that ramp.
- Some regression calculations only come out with one line segment rather than the two
we expect. This could be due to a noisy ramp or the ramp's range is too narrow. If that's the
case, influence the minimum complexity of the next ramp towards the lowest bound of 1, so that
we ensure that at least part of the ramp is covering a complexity range that the system can
handle at full 60.
- Remove an assignment to interpolatedFrameLength since that is never subsequently used.
Update the format used to serialize the results for analysis.
Each data point used to have named properties for fields like complexity and frame rate.
In addition the serialized numbers had rounding errors that took up many characters.
Update the format by introducing a new data container called SampleData, which contains a
field map. The map maps a string to an array index. Each data point is an array, so, to
get a stat, use the field map to get the array index into the data point. This allows future
versions to track other data, and reduces the size of the output string by two-thirds.
* Animometer/resources/extensions.js:
(Utilities.toFixedNumber): Add convenience function that truncates the number to a fixed
precision, and converts it back to a number.
(SampleData): New class that contains sample data and a field map that maps properties to
an array index.
(get length): Number of data points.
(addField): Add a field to the field map.
(push): Add a data point.
(sort): Sort the data.
(slice): Return new SampleData object with sliced data.
(forEach): Iterate over the data with provided function.
(createDatum):
(getFieldInDatum): Returns the data point associated with the field name by looking it up
in the field map in the datum provided, which can be the datum object itself (an array) or
an index into the data member variable.
(setFieldInDatum): Sets the data point associated with the field name.
(at): Returns the data point at the provided index.
(toArray): Serializes the data where the field map serves as property names for each point.
* Animometer/resources/debug-runner/graph.js:
(updateGraphData): Remove unused _testData. Convert the data to the old array format for the
graph to use, since the old format was much easier to work with when displaying the graphs.
(onGraphTypeChanged): For some controllers, no alternative score or mean is provided.
* Animometer/resources/runner/animometer.css:
* Animometer/resources/runner/animometer.js: Refactor to use SampleData. Update JSON output
to only go to 3 digits of precision for purposes of reducing the data size.
* Animometer/resources/strings.js: Add new strings to put into the field maps.
* Animometer/tests/resources/main.js: Refactor to use SampleData.
* Animometer/developer.html:
* Animometer/index.html: Restructure results table for both pages. Add charset attribute to
tests.js include.
* Animometer/resources/debug-runner/animometer.css: Clear out styles from release runner.
* Animometer/resources/debug-runner/graph.js:
(onGraphTypeChanged): Update score and mean if bootstrap results are available from the
controller, since not all controllers do bootstrapping.
* Animometer/resources/debug-runner/tests.js: Update header text.
* Animometer/resources/runner/animometer.css: Include confidence interval in results.
* Animometer/resources/runner/animometer.js:
(ResultsTable._addHeader): Header contents can be HTML, so use innerHTML instead.
(ResultsTable._addBody): Add tbody element.
(ResultsTable._addTest): Allow a data cell to invoke a JS function to get its contents.
(window.benchmarkController.showResults): Add table that includes tests' confidence intervals.
* Animometer/resources/runner/tests.js:
(Headers.details.text): Add new details table that includes bootstrap confidence interval.
The interval can be asymmetric, but for simplicity, report the maximum deviation percentage
on either side of the bootstrap median.
* Animometer/resources/statistics.js:
(bootstrap): Include the confidence percentage in the return object.
Report canvas size in results.
* Animometer/developer.html: Add markup to indicate whether a small, medium, or large
canvas was used.
* Animometer/index.html: Ditto.
* Animometer/resources/debug-runner/animometer.js: Call determineCanvasSize().
* Animometer/resources/runner/animometer.css: Update styles to set the canvas based on the
body class size.
* Animometer/resources/runner/animometer.js:
(window.benchmarkController.initialize): Update styles to set the canvas based on the
body class size.
(window.benchmarkController.determineCanvasSize): Run various media queries and set the body
class based on the size of the device.
* Animometer/developer.html: Refactor to include the main CSS file, and redo
the layout so that it doesn't rely on flexbox.
* Animometer/resources/debug-runner/animometer.css:
* Animometer/resources/debug-runner/animometer.js:
(updateDisplay): Since various parts of the script alter the body class, we can't
replace the className directly. Instead, remove all display-based values and then add
the one that was selected.
* Animometer/resources/debug-runner/graph.js:
(updateGraphData): To set the size of the graph, use window.innerHeight.
* Animometer/resources/runner/animometer.js:
(window.sectionsManager.showSection): Since various parts of the script alter the body
class, we can't replace the className directly. Remove all of the section classes
individually and then add the one desired.
* Animometer/tests/resources/stage.css: Remove -apple-system as a font to use in the
stage.
Canonical link: https://commits.webkit.org/177081@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@202314 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-06-22 03:11:15 +00:00
|
|
|
|
<p>MotionMark is a graphics benchmark that measures a browser’s capability to animate complex scenes at a target frame rate.</p>
|
2017-11-02 04:17:36 +00:00
|
|
|
|
|
|
|
|
|
<p><a href="about.html">More details</a> about the benchmark are available. Bigger scores are better.</p>
|
2016-05-07 16:51:58 +00:00
|
|
|
|
<p>For accurate results, please take your browser window full screen, or rotate your device to landscape orientation.</p>
|
|
|
|
|
<p class="portrait-orientation-check"><b>Please rotate your device.</b></p>
|
|
|
|
|
<button class="landscape-orientation-check" onclick="benchmarkController.startBenchmark()">Run Benchmark</button>
|
2016-03-24 02:08:13 +00:00
|
|
|
|
</div>
|
Split benchmark into two different pages
https://bugs.webkit.org/show_bug.cgi?id=152458
Reviewed by Simon Fraser.
Address comments.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunner.prototype._runTestAndRecordResults): When the testing is complete the frame owning the
sampler goes away, and a later call to get the JSON data is no longer available. Process the data
right here, instead, and just reference it when displaying the results in ResultsDashboard.prototype._processData.
* Animometer/resources/extensions.js:
(Array.prototype.fill.Array.prototype.fill): Add a null check. Remove braces around single-line clause.
(Array.prototype.find.Array.prototype.find): Update the null check.
(ResultsDashboard.prototype._processData): Use the already-processed data.
* Animometer/resources/runner/animometer.css:
(.frame-container > iframe): Remove calc().
Move Array functions to extensions.js since that is included by the harness.
Add ES6 Array polyfills.
* Animometer/resources/algorithm.js:
(Array.prototype.swap): Moved to extensions.js.
* Animometer/resources/extensions.js:
(Array.prototype.swap):
(Array.prototype.fill): Added.
(Array.prototype.find): Added.
Adjust styles for iPad.
* Animometer/resources/runner/animometer.css:
(@media screen and (min-device-width: 768px)): Apply to iPad as well.
(@media screen and (max-device-width: 1024px)): Update width for iPads.
Adjustment styles for iOS.
* Animometer/developer.html: Different divs contain the iframe, so use a class instead and
update the style rules.
* Animometer/index.html:
* Animometer/resources/debug-runner/animometer.css: Remove extraneous rules.
(@media screen and (min-device-width: 1800px)): Move this up.
* Animometer/resources/runner/animometer.css: Add rules to accomodate iOS.
Get rid of prefixed flex properties for now.
* Animometer/resources/debug-runner/animometer.css:
* Animometer/resources/runner/animometer.css:
Update the structure of the harness. Remove the JSON-per-test but keep
the JSON of the whole test run. Use the full page in order to display
the graph.
* Animometer/developer.html: Update several of the JS file includes to UTF-8. Remove header and footer. Test results screen includes score,
average, and worst 5% statistics.
* Animometer/index.html: Make structure similar to developer.html.
* Animometer/resources/debug-runner/animometer.css: Remove most of the
button rules since they are superfluous. Move the progress bar to the
top, fixed. Update the results page rules.
* Animometer/resources/debug-runner/animometer.js: Remove most of the
additions to sectionsManager since they are no longer needed.
(setSectionHeader): Updates header of the section.
(window.suitesManager._updateStartButtonState): Update selector.
(showResults): Add keypress event for selecting different data for
copy/paste. Update how the results are populated. Include full test
JSON in a textarea, rather than requiring a button press.
(showTestGraph):
* Animometer/resources/debug-runner/tests.js: Update structure of Headers. Define different kinds of headers. Headers can control their
title, and the text used as the cell contents, including class name.
* Animometer/resources/extensions.js:
(ResultsTable): Update to include a flattened version of the headers,
used while populating table contents. Remove unneeded helper functions
for creating the table. Rename "show" to "add".
* Animometer/resources/runner/animometer.css: Update rules to
accommodate the new structure.
* Animometer/resources/runner/animometer.js:
(window.sectionsManager.setSectionScore): Helper function to set the
score and mean for a section.
(window.sectionsManager.populateTable): Helper function to set the table.
(window.benchmarkController.showResults): Refactor.
(window.benchmarkController.selectResults): Update selectors.
* Animometer/resources/runner/tests.js: Set Headers. Debug harness
extends it.
Update debug runner to have similar names to the basic runner. Include
that page's CSS and remove extraneous CSS rules.
Get rid of the statistics table #record.
* Animometer/developer.html: Rename #home to #intro. Rename .spacer to hr.
* Animometer/resources/debug-runner/animometer.css: Set to flexbox when selected.
* Animometer/resources/debug-runner/animometer.js: Remove recordTable.
(window.suitesManager._updateStartButtonState): Update selector to #intro.
(setupRunningSectionStyle): Deleted.
* Animometer/resources/runner/animometer.css:
(#test-container.selected): Change to flex-box only when visible.
Remove recordTable.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunner.prototype._runTestAndRecordResults):
* Animometer/resources/runner/tests.js:
* Animometer/tests/bouncing-particles/resources/bouncing-canvas-images.js:
* Animometer/tests/bouncing-particles/resources/bouncing-canvas-particles.js:
* Animometer/tests/bouncing-particles/resources/bouncing-canvas-shapes.js:
* Animometer/tests/bouncing-particles/resources/bouncing-css-images.js:
* Animometer/tests/bouncing-particles/resources/bouncing-css-shapes.js:
* Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
* Animometer/tests/bouncing-particles/resources/bouncing-svg-images.js:
* Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js:
* Animometer/tests/examples/resources/canvas-electrons.js:
* Animometer/tests/examples/resources/canvas-stars.js:
* Animometer/tests/misc/resources/compositing-transforms.js:
* Animometer/tests/resources/main.js:
* Animometer/tests/resources/stage.js:
(StageBenchmark): Remove _recordTable.
* Animometer/tests/simple/resources/simple-canvas-paths.js:
* Animometer/tests/simple/resources/simple-canvas.js:
* Animometer/tests/template/resources/template-canvas.js:
* Animometer/tests/template/resources/template-css.js:
* Animometer/tests/template/resources/template-svg.js:
* Animometer/tests/text/resources/layering-text.js:
* Animometer/resources/debug-runner/animometer.js:
(willStartFirstIteration): Fix selector, since results-table is used
in multiple places, so it cannot be an id.
Make it possible to select the scores, or the whole table data,
by cycling through different selections through key press of 's'.
* Animometer/resources/runner/animometer.js:
(window.benchmarkController.showResults): Attach a keypress handler
if it hasn't been added already.
(window.benchmarkController.selectResults):
* Animometer/resources/runner/tests.js: Cycle through different
ranges.
Fix a few fly-by errors.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunnerState.prototype.prepareCurrentTest): Update the frame relative path
since the files are now in the top directory instead of inside runner/.
(BenchmarkRunner.prototype._runTestAndRecordResults): Incorrect reference to function.
(BenchmarkRunner.prototype.step): Member variable is never used.
A little stylistic cleanup.
* Animometer/resources/debug-runner/benchmark-runner.js:
* Animometer/resources/extensions.js:
(window.DocumentExtension.createElement):
* Animometer/tests/resources/main.js:
(Benchmark.prototype.record):
* Animometer/tests/resources/stage.js:
(StageBenchmark.prototype.showResults): Reverse progress and message.
The message appears less frequently than the progress.
* Animometer/tests/simple/resources/simple-canvas.js:
(SimpleCanvasBenchmark): Remove unused options.
Add newer version of harness in a new page. Consolidate differences between the two
pages.
* Animometer/developer.html: Include runner/animometer.js. Rename the JS function
to run the benchmark to startBenchmark() instead of startTest(). Rename #running to
#test-container.
* Animometer/index.html: Added. Similarly calls startBenchmark() and has #test-container.
* Animometer/resources/debug-runner/animometer.css: Make the canvas 2:1 (1200px x 800px)
instead of 4:3.
Split out benchmarkRunnerClient and benchmarkController.
* Animometer/resources/debug-runner/animometer.js: Move needed functions out of
benchmarkRunnerClient, and leave the rest here to extend that object. Get rid of _resultsTable
and move populating the results table into benchmarkController. Rename _resultsDashboard
to results and make it accessible for other objects to use.
(willAddTestFrame): This is unnecessary. Remove.
(window.sectionsManager.showScore): Grab it from the results object instead of
benchmarkRunnerClient.
(window.sectionsManager.showSection): Deleted. Moved to runner/animometer.js.
(window.benchmarkController._runBenchmark): Deleted. Mostly moved into _startBenchmark.
(window.benchmarkController.startBenchmark): Refactor to call _startBenchmark.
(window.benchmarkController.showResults): Include most of benchmarkRunnerClient.didFinishLastIteration()
here.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunner.prototype._appendFrame): Remove unneeded call to willAddTestFrame.
* Animometer/resources/extensions.js:
(ResultsDashboard): Change the class to process the sampler data on-demand and hold onto that data
for later referencing.
(ResultsDashboard.prototype.toJSON): Deleted.
(ResultsDashboard.prototype._processData): Rename toJSON to _processData since it's not really
outputting JSON. Store the processed data into a member variable that can be referenced later.
(ResultsDashboard.prototype.get data): Process the data if it hasn't already.
(ResultsDashboard.prototype.get score): Process the data if it hasn't already, then return the
aggregate score.
(ResultsTable.prototype._showHeader): When outputting the results to a table, don't force the
need for an empty children array. This was to allow for a header row in the table that spanned
multiple columns. In the simpler harness, this is not needed.
(ResultsTable.prototype._showEmptyCells):
(ResultsTable.prototype._showTest): This hardcoded the columns. At least for the name and score,
which is the bare minimum needed for the simpler harness, key off of the header name provided.
* Animometer/resources/runner/animometer.css: Added. Use a similar 2:1 ratio. The score tables are
split into the data and the headers, and are also displayed RTL so that a later patch allows a
user to copy-paste the data easily.
* Animometer/resources/runner/animometer.js: Added. Use a simpler version of benchmarkRunnerClient.
The debug harness will extend these classes.
(window.benchmarkController._startBenchmark): Used by both harnesses.
(window.benchmarkController.startBenchmark): Set hard-coded options.
(window.benchmarkController.showResults): Includes most of benchmarkRunnerClient.didFinishLastIteration()
here.
Get rid of utilities.js. Move it all into extensions.js.
* Animometer/resources/extensions.js:
* Animometer/tests/resources/utilities.js: Removed.
* Animometer/tests/bouncing-particles/bouncing-canvas-images.html: Remove script link.
* Animometer/tests/bouncing-particles/bouncing-canvas-shapes.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-css-images.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-css-shapes.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-svg-images.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-svg-shapes.html: Ditto.
* Animometer/tests/examples/canvas-electrons.html: Ditto.
* Animometer/tests/examples/canvas-stars.html: Ditto.
* Animometer/tests/misc/compositing-transforms.html: Ditto.
* Animometer/tests/simple/simple-canvas-paths.html: Ditto.
* Animometer/tests/template/template-canvas.html: Ditto.
* Animometer/tests/template/template-css.html: Ditto.
* Animometer/tests/template/template-svg.html: Ditto.
* Animometer/tests/text/layering-text.html: Ditto.
Split tests.js into two. Add a new suite to runner/tests.js.
* Animometer/developer.html: Update the script order. Scripts from
debug-runner/ will always build on those from runner/, and have the
same name.
* Animometer/resources/debug-runner/tests.js: Move "complex examples"
suite into "miscellaneous tests".
(Suite): Deleted.
(Suite.prototype.prepare): Deleted.
(Suite.prototype.run): Deleted.
(suiteFromName): Deleted.
* Animometer/resources/runner/tests.js: Added. Take definitions and
functions needed by the test harness. Leave the test suites behind.
(Suite): Moved from debug script.
(Suite.prototype.prepare): Ditto.
(Suite.prototype.run): Ditto.
(suiteFromName): Ditto.
(testFromName): Ditto.
Move benchmark resources out into resources/debug-runner, and update URLs.
* Animometer/developer.html: Renamed from PerformanceTests/Animometer/runner/animometer.html.
* Animometer/resources/debug-runner/animometer.css: Renamed from PerformanceTests/Animometer/runner/resources/animometer.css.
* Animometer/resources/debug-runner/animometer.js: Renamed from PerformanceTests/Animometer/runner/resources/animometer.js.
* Animometer/resources/debug-runner/benchmark-runner.js: Renamed from PerformanceTests/Animometer/runner/resources/benchmark-runner.js.
* Animometer/resources/debug-runner/d3.min.js: Renamed from PerformanceTests/Animometer/runner/resources/d3.min.js.
* Animometer/resources/debug-runner/graph.js: Renamed from PerformanceTests/Animometer/runner/resources/graph.js.
* Animometer/resources/debug-runner/tests.js: Renamed from PerformanceTests/Animometer/runner/resources/tests.js.
Canonical link: https://commits.webkit.org/170645@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@194407 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-12-24 01:31:47 +00:00
|
|
|
|
</section>
|
2016-05-07 16:51:58 +00:00
|
|
|
|
|
|
|
|
|
<section id="test-container" class="frame-container"></section>
|
|
|
|
|
|
Split benchmark into two different pages
https://bugs.webkit.org/show_bug.cgi?id=152458
Reviewed by Simon Fraser.
Address comments.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunner.prototype._runTestAndRecordResults): When the testing is complete the frame owning the
sampler goes away, and a later call to get the JSON data is no longer available. Process the data
right here, instead, and just reference it when displaying the results in ResultsDashboard.prototype._processData.
* Animometer/resources/extensions.js:
(Array.prototype.fill.Array.prototype.fill): Add a null check. Remove braces around single-line clause.
(Array.prototype.find.Array.prototype.find): Update the null check.
(ResultsDashboard.prototype._processData): Use the already-processed data.
* Animometer/resources/runner/animometer.css:
(.frame-container > iframe): Remove calc().
Move Array functions to extensions.js since that is included by the harness.
Add ES6 Array polyfills.
* Animometer/resources/algorithm.js:
(Array.prototype.swap): Moved to extensions.js.
* Animometer/resources/extensions.js:
(Array.prototype.swap):
(Array.prototype.fill): Added.
(Array.prototype.find): Added.
Adjust styles for iPad.
* Animometer/resources/runner/animometer.css:
(@media screen and (min-device-width: 768px)): Apply to iPad as well.
(@media screen and (max-device-width: 1024px)): Update width for iPads.
Adjustment styles for iOS.
* Animometer/developer.html: Different divs contain the iframe, so use a class instead and
update the style rules.
* Animometer/index.html:
* Animometer/resources/debug-runner/animometer.css: Remove extraneous rules.
(@media screen and (min-device-width: 1800px)): Move this up.
* Animometer/resources/runner/animometer.css: Add rules to accomodate iOS.
Get rid of prefixed flex properties for now.
* Animometer/resources/debug-runner/animometer.css:
* Animometer/resources/runner/animometer.css:
Update the structure of the harness. Remove the JSON-per-test but keep
the JSON of the whole test run. Use the full page in order to display
the graph.
* Animometer/developer.html: Update several of the JS file includes to UTF-8. Remove header and footer. Test results screen includes score,
average, and worst 5% statistics.
* Animometer/index.html: Make structure similar to developer.html.
* Animometer/resources/debug-runner/animometer.css: Remove most of the
button rules since they are superfluous. Move the progress bar to the
top, fixed. Update the results page rules.
* Animometer/resources/debug-runner/animometer.js: Remove most of the
additions to sectionsManager since they are no longer needed.
(setSectionHeader): Updates header of the section.
(window.suitesManager._updateStartButtonState): Update selector.
(showResults): Add keypress event for selecting different data for
copy/paste. Update how the results are populated. Include full test
JSON in a textarea, rather than requiring a button press.
(showTestGraph):
* Animometer/resources/debug-runner/tests.js: Update structure of Headers. Define different kinds of headers. Headers can control their
title, and the text used as the cell contents, including class name.
* Animometer/resources/extensions.js:
(ResultsTable): Update to include a flattened version of the headers,
used while populating table contents. Remove unneeded helper functions
for creating the table. Rename "show" to "add".
* Animometer/resources/runner/animometer.css: Update rules to
accommodate the new structure.
* Animometer/resources/runner/animometer.js:
(window.sectionsManager.setSectionScore): Helper function to set the
score and mean for a section.
(window.sectionsManager.populateTable): Helper function to set the table.
(window.benchmarkController.showResults): Refactor.
(window.benchmarkController.selectResults): Update selectors.
* Animometer/resources/runner/tests.js: Set Headers. Debug harness
extends it.
Update debug runner to have similar names to the basic runner. Include
that page's CSS and remove extraneous CSS rules.
Get rid of the statistics table #record.
* Animometer/developer.html: Rename #home to #intro. Rename .spacer to hr.
* Animometer/resources/debug-runner/animometer.css: Set to flexbox when selected.
* Animometer/resources/debug-runner/animometer.js: Remove recordTable.
(window.suitesManager._updateStartButtonState): Update selector to #intro.
(setupRunningSectionStyle): Deleted.
* Animometer/resources/runner/animometer.css:
(#test-container.selected): Change to flex-box only when visible.
Remove recordTable.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunner.prototype._runTestAndRecordResults):
* Animometer/resources/runner/tests.js:
* Animometer/tests/bouncing-particles/resources/bouncing-canvas-images.js:
* Animometer/tests/bouncing-particles/resources/bouncing-canvas-particles.js:
* Animometer/tests/bouncing-particles/resources/bouncing-canvas-shapes.js:
* Animometer/tests/bouncing-particles/resources/bouncing-css-images.js:
* Animometer/tests/bouncing-particles/resources/bouncing-css-shapes.js:
* Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
* Animometer/tests/bouncing-particles/resources/bouncing-svg-images.js:
* Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js:
* Animometer/tests/examples/resources/canvas-electrons.js:
* Animometer/tests/examples/resources/canvas-stars.js:
* Animometer/tests/misc/resources/compositing-transforms.js:
* Animometer/tests/resources/main.js:
* Animometer/tests/resources/stage.js:
(StageBenchmark): Remove _recordTable.
* Animometer/tests/simple/resources/simple-canvas-paths.js:
* Animometer/tests/simple/resources/simple-canvas.js:
* Animometer/tests/template/resources/template-canvas.js:
* Animometer/tests/template/resources/template-css.js:
* Animometer/tests/template/resources/template-svg.js:
* Animometer/tests/text/resources/layering-text.js:
* Animometer/resources/debug-runner/animometer.js:
(willStartFirstIteration): Fix selector, since results-table is used
in multiple places, so it cannot be an id.
Make it possible to select the scores, or the whole table data,
by cycling through different selections through key press of 's'.
* Animometer/resources/runner/animometer.js:
(window.benchmarkController.showResults): Attach a keypress handler
if it hasn't been added already.
(window.benchmarkController.selectResults):
* Animometer/resources/runner/tests.js: Cycle through different
ranges.
Fix a few fly-by errors.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunnerState.prototype.prepareCurrentTest): Update the frame relative path
since the files are now in the top directory instead of inside runner/.
(BenchmarkRunner.prototype._runTestAndRecordResults): Incorrect reference to function.
(BenchmarkRunner.prototype.step): Member variable is never used.
A little stylistic cleanup.
* Animometer/resources/debug-runner/benchmark-runner.js:
* Animometer/resources/extensions.js:
(window.DocumentExtension.createElement):
* Animometer/tests/resources/main.js:
(Benchmark.prototype.record):
* Animometer/tests/resources/stage.js:
(StageBenchmark.prototype.showResults): Reverse progress and message.
The message appears less frequently than the progress.
* Animometer/tests/simple/resources/simple-canvas.js:
(SimpleCanvasBenchmark): Remove unused options.
Add newer version of harness in a new page. Consolidate differences between the two
pages.
* Animometer/developer.html: Include runner/animometer.js. Rename the JS function
to run the benchmark to startBenchmark() instead of startTest(). Rename #running to
#test-container.
* Animometer/index.html: Added. Similarly calls startBenchmark() and has #test-container.
* Animometer/resources/debug-runner/animometer.css: Make the canvas 2:1 (1200px x 800px)
instead of 4:3.
Split out benchmarkRunnerClient and benchmarkController.
* Animometer/resources/debug-runner/animometer.js: Move needed functions out of
benchmarkRunnerClient, and leave the rest here to extend that object. Get rid of _resultsTable
and move populating the results table into benchmarkController. Rename _resultsDashboard
to results and make it accessible for other objects to use.
(willAddTestFrame): This is unnecessary. Remove.
(window.sectionsManager.showScore): Grab it from the results object instead of
benchmarkRunnerClient.
(window.sectionsManager.showSection): Deleted. Moved to runner/animometer.js.
(window.benchmarkController._runBenchmark): Deleted. Mostly moved into _startBenchmark.
(window.benchmarkController.startBenchmark): Refactor to call _startBenchmark.
(window.benchmarkController.showResults): Include most of benchmarkRunnerClient.didFinishLastIteration()
here.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunner.prototype._appendFrame): Remove unneeded call to willAddTestFrame.
* Animometer/resources/extensions.js:
(ResultsDashboard): Change the class to process the sampler data on-demand and hold onto that data
for later referencing.
(ResultsDashboard.prototype.toJSON): Deleted.
(ResultsDashboard.prototype._processData): Rename toJSON to _processData since it's not really
outputting JSON. Store the processed data into a member variable that can be referenced later.
(ResultsDashboard.prototype.get data): Process the data if it hasn't already.
(ResultsDashboard.prototype.get score): Process the data if it hasn't already, then return the
aggregate score.
(ResultsTable.prototype._showHeader): When outputting the results to a table, don't force the
need for an empty children array. This was to allow for a header row in the table that spanned
multiple columns. In the simpler harness, this is not needed.
(ResultsTable.prototype._showEmptyCells):
(ResultsTable.prototype._showTest): This hardcoded the columns. At least for the name and score,
which is the bare minimum needed for the simpler harness, key off of the header name provided.
* Animometer/resources/runner/animometer.css: Added. Use a similar 2:1 ratio. The score tables are
split into the data and the headers, and are also displayed RTL so that a later patch allows a
user to copy-paste the data easily.
* Animometer/resources/runner/animometer.js: Added. Use a simpler version of benchmarkRunnerClient.
The debug harness will extend these classes.
(window.benchmarkController._startBenchmark): Used by both harnesses.
(window.benchmarkController.startBenchmark): Set hard-coded options.
(window.benchmarkController.showResults): Includes most of benchmarkRunnerClient.didFinishLastIteration()
here.
Get rid of utilities.js. Move it all into extensions.js.
* Animometer/resources/extensions.js:
* Animometer/tests/resources/utilities.js: Removed.
* Animometer/tests/bouncing-particles/bouncing-canvas-images.html: Remove script link.
* Animometer/tests/bouncing-particles/bouncing-canvas-shapes.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-css-images.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-css-shapes.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-svg-images.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-svg-shapes.html: Ditto.
* Animometer/tests/examples/canvas-electrons.html: Ditto.
* Animometer/tests/examples/canvas-stars.html: Ditto.
* Animometer/tests/misc/compositing-transforms.html: Ditto.
* Animometer/tests/simple/simple-canvas-paths.html: Ditto.
* Animometer/tests/template/template-canvas.html: Ditto.
* Animometer/tests/template/template-css.html: Ditto.
* Animometer/tests/template/template-svg.html: Ditto.
* Animometer/tests/text/layering-text.html: Ditto.
Split tests.js into two. Add a new suite to runner/tests.js.
* Animometer/developer.html: Update the script order. Scripts from
debug-runner/ will always build on those from runner/, and have the
same name.
* Animometer/resources/debug-runner/tests.js: Move "complex examples"
suite into "miscellaneous tests".
(Suite): Deleted.
(Suite.prototype.prepare): Deleted.
(Suite.prototype.run): Deleted.
(suiteFromName): Deleted.
* Animometer/resources/runner/tests.js: Added. Take definitions and
functions needed by the test harness. Leave the test suites behind.
(Suite): Moved from debug script.
(Suite.prototype.prepare): Ditto.
(Suite.prototype.run): Ditto.
(suiteFromName): Ditto.
(testFromName): Ditto.
Move benchmark resources out into resources/debug-runner, and update URLs.
* Animometer/developer.html: Renamed from PerformanceTests/Animometer/runner/animometer.html.
* Animometer/resources/debug-runner/animometer.css: Renamed from PerformanceTests/Animometer/runner/resources/animometer.css.
* Animometer/resources/debug-runner/animometer.js: Renamed from PerformanceTests/Animometer/runner/resources/animometer.js.
* Animometer/resources/debug-runner/benchmark-runner.js: Renamed from PerformanceTests/Animometer/runner/resources/benchmark-runner.js.
* Animometer/resources/debug-runner/d3.min.js: Renamed from PerformanceTests/Animometer/runner/resources/d3.min.js.
* Animometer/resources/debug-runner/graph.js: Renamed from PerformanceTests/Animometer/runner/resources/graph.js.
* Animometer/resources/debug-runner/tests.js: Renamed from PerformanceTests/Animometer/runner/resources/tests.js.
Canonical link: https://commits.webkit.org/170645@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@194407 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-12-24 01:31:47 +00:00
|
|
|
|
<section id="results">
|
[MotionMark] Add support for version numbers
https://bugs.webkit.org/show_bug.cgi?id=186479
Reviewed by Said Abou-Hallawa.
Add support for displaying the version number as well as including it in the JSON results.
When loading the front page, script replaces any element with classname version with the
version number of the benchmark, which is stored in Strings.version.
The JSON structure for the results includes a new version property:
{
"version": "1.0",
"options": { ... },
"data": [ ... ]
}
When dragging a results file, the version listed will come from the JSON file. Older
results will not have had the version property, in which case it will default to "1.0".
* MotionMark/index.html: Update title to some other default. Script will update it.
Include the version number in the logo title.
* MotionMark/developer.html: Ditto.
* MotionMark/about.html: Ditto.
* MotionMark/resources/runner/motionmark.js:
(ResultsDashboard): Update constructor to include version. This is used when serializing
results out to JSON, and displaying the results panel in developer mode.
(ResultsDashboard._processData): When running the benchmark, include benchmark version string
in the results object.
(ResultsDashboard.version):
(window.benchmarkRunnerClient.willStartFirstIteration): When running the benchmark, pass the
benchmark version string to the dashboard, which holds the results.
(window.sectionsManager.setSectionVersion): Helper function to update the element in the
section with the class name version.
(window.benchmarkController.initialize): Populate all DOM elements with class name "version"
with the version string. Update the page title.
(window.benchmarkController.showResults): When showing results, update the version string
based on what is included in the JSON results, which would be the same as the benchmark version.
* MotionMark/resources/runner/motionmark.css: Include missing copyright. Wrap the SVG logo
in a div and include the version string.
* MotionMark/resources/strings.js: Add strings for the page title template, and the version.
* MotionMark/resources/debug-runner/motionmark.css:
* MotionMark/resources/debug-runner/motionmark.js:
(window.benchmarkRunnerClient.willStartFirstIteration): When running the benchmark, pass the
benchmark version string to the dashboard, which holds the results.
(window.benchmarkController.initialize): Populate all DOM elements with class name "version"
with the version string. Update the page title. When dragging in JSON results, look for
version to pass to the dashboard. If it doesn't exist, default to "1.0".
(window.benchmarkController.showResults): When showing results, update the version string
based on what is included in the JSON results, instead of the current benchmark version.
* MotionMark/resources/debug-runner/tests.js: Update page title template.
Canonical link: https://commits.webkit.org/202238@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@233147 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-06-25 15:38:03 +00:00
|
|
|
|
<div class="logo">
|
|
|
|
|
<svg><use xlink:href="resources/runner/logo.svg#root" /></svg>
|
|
|
|
|
<div>version <span class="version"></span></div>
|
|
|
|
|
</div>
|
2016-05-07 16:51:58 +00:00
|
|
|
|
<div class="body">
|
Improvements to Animometer benchmark
https://bugs.webkit.org/show_bug.cgi?id=157738
Reviewed by Dean Jackson.
Provisionally reviewed by Said Abou-Hallawa.
Include confidence interval for the final score, and store the canvas
size in the serialization so that it is accurately shown in results.
* Animometer/developer.html: Add a "confidence" div.
* Animometer/index.html: Ditto. Convert "mean" to "confidence".
* Animometer/resources/debug-runner/animometer.js: Look at options, and
if the configuration is included, update the body class based on it
(similar to what we do when we first load the page). That way, if you
drag-and-drop previous results in, that configuration is reflected in
the dashboard. Show the full confidence interval.
* Animometer/resources/debug-runner/animometer.css:
* Animometer/resources/debug-runner/animometer.js: Style update.
* Animometer/resources/runner/animometer.css:
* Animometer/resources/runner/animometer.js:
(_processData): Propagate the confidence interval values out and calculate
the lower and upper bounds. For now, shortcut the aggregate calculation,
since we only go through one iteration.
(this._processData.calculateScore): Propagate the confidence interval out
to be next to the score. Depending on the controller these values are
calculated differently.
(this._processData._getResultsProperty): Convenience function.
(this._processData.get score): Refactor.
(this._processData.get scoreLowerBound): Get the aggregate lower bound.
(this._processData.get scoreUpperBound): Get the aggregate upper bound.
(window.sectionsManager.setSectionScore):
(window.benchmarkController._startBenchmark): When the benchmark starts, note
the canvas size and add it to options. That way it will be automatically be
serialized.
(window.benchmarkController.showResults): Include the maximum deviation
percentage.
* Animometer/resources/runner/lines.svg: Make the background line up with the
skew.
* Animometer/resources/runner/tests.js:
(Headers.details.text): Refactor.
* Animometer/resources/statistics.js:
(Statistics.largestDeviationPercentage): Convenience function to calculate
the deviation percentage on either end and return the largest deviation.
* Animometer/resources/strings.js:
Allow specifying a regression profile to use instead of taking the one
with the lowest error.
Address an issue in the focus test when the regression calculated ends
up overestimating the change point, causing a cascade of tougher
ramps. The reason behind this is that at max complexity of an initial
ramp, the frame length is very high, and it influences the second
segment of the piecewise regression strongly, causing it to be very
steep. As a result, the first segment, expected to be flat, ends up
covering a higher range of complexity. That makes the change point
much higher than it should be. To avoid this, we will add a sanity
check on the maximum value of the ramp. If the regression's projected
value at the maximum complexity of the current ramp is very slow (less
than 20 fps), 1) reduce the maximum complexity by 20%, and 2) do not
include the regression's change point in the change point estimator.
That estimator is used as the midpoint of the next ramp, and including
the change point from a poor regression can bake in the error. The
controller already knows how to adjust for ramps that are too easy for
the system.
* Animometer/resources/runner/animometer.js:
(this._processData.findRegression): Takes a preferred profile and gives that to
Regression.
(this._processData.calculateScore): With the ramp controller, take the profile
of the ramp that was used the most when calculating the ramp's regression. That
profile is what is used for the test's score.
* Animometer/resources/statistics.js:
(Regression.Utilities.createClass): Update to take an options object which can
specify a profile to calculate with. Otherwise it will continue to use both and
select the one with the lower error.
(_calculateRegression): Fix an issue where we claim 0 error if the regression
calculation fails due to divide-by-zero. Instead reject that regression calculation
by giving it Number.MAX_VALUE.
* Animometer/resources/strings.js: New strings for marking a regression as flat
or slope.
* Animometer/tests/resources/main.js:
(RampController): Rename the thresholds for clarity. Add a threshold that, if
exceeded, will lower the maximum complexity of the next ramp.
(tune): Relax the cdf check to consider whether the interval definitely falls in
the desired frame length threshold.
(processSamples): Include the profile in the ramp.
Update ramp controller test. Increase the length of the test to 30 seconds, and extend
the interval to 120 ms during sampling. Improve the estimation of the ramp parameters.
* Animometer/developer.html: Change default to 30 seconds, and don't show the progress bar
by default.
* Animometer/resources/runner/animometer.js: Change default to 30 seconds.
* Animometer/tests/resources/main.js: A number of improvements to the ramp controller, in
the order in which they appear in the patch:
- With a longer test length use longer ramps with longer intervals to get more data at each
complexity. Keep the 100 ms interval length during the ramp up phase since we don't need to
spend more time there to find the right order of magnitude, but increase it during the
ramps to 120 ms.
- The ramp linearly interpolates the complexity to render based on its timestamp, but it would
never sample the minimum complexity. Instead of lerping max to min complexity from time
0 to t where t is the ramp length, instead lerp from 0 to (t - intervalSampleLength) so that
we can have at least one interval sample at the min complexity for that ramp.
- Some regression calculations only come out with one line segment rather than the two
we expect. This could be due to a noisy ramp or the ramp's range is too narrow. If that's the
case, influence the minimum complexity of the next ramp towards the lowest bound of 1, so that
we ensure that at least part of the ramp is covering a complexity range that the system can
handle at full 60.
- Remove an assignment to interpolatedFrameLength since that is never subsequently used.
Update the format used to serialize the results for analysis.
Each data point used to have named properties for fields like complexity and frame rate.
In addition the serialized numbers had rounding errors that took up many characters.
Update the format by introducing a new data container called SampleData, which contains a
field map. The map maps a string to an array index. Each data point is an array, so, to
get a stat, use the field map to get the array index into the data point. This allows future
versions to track other data, and reduces the size of the output string by two-thirds.
* Animometer/resources/extensions.js:
(Utilities.toFixedNumber): Add convenience function that truncates the number to a fixed
precision, and converts it back to a number.
(SampleData): New class that contains sample data and a field map that maps properties to
an array index.
(get length): Number of data points.
(addField): Add a field to the field map.
(push): Add a data point.
(sort): Sort the data.
(slice): Return new SampleData object with sliced data.
(forEach): Iterate over the data with provided function.
(createDatum):
(getFieldInDatum): Returns the data point associated with the field name by looking it up
in the field map in the datum provided, which can be the datum object itself (an array) or
an index into the data member variable.
(setFieldInDatum): Sets the data point associated with the field name.
(at): Returns the data point at the provided index.
(toArray): Serializes the data where the field map serves as property names for each point.
* Animometer/resources/debug-runner/graph.js:
(updateGraphData): Remove unused _testData. Convert the data to the old array format for the
graph to use, since the old format was much easier to work with when displaying the graphs.
(onGraphTypeChanged): For some controllers, no alternative score or mean is provided.
* Animometer/resources/runner/animometer.css:
* Animometer/resources/runner/animometer.js: Refactor to use SampleData. Update JSON output
to only go to 3 digits of precision for purposes of reducing the data size.
* Animometer/resources/strings.js: Add new strings to put into the field maps.
* Animometer/tests/resources/main.js: Refactor to use SampleData.
* Animometer/developer.html:
* Animometer/index.html: Restructure results table for both pages. Add charset attribute to
tests.js include.
* Animometer/resources/debug-runner/animometer.css: Clear out styles from release runner.
* Animometer/resources/debug-runner/graph.js:
(onGraphTypeChanged): Update score and mean if bootstrap results are available from the
controller, since not all controllers do bootstrapping.
* Animometer/resources/debug-runner/tests.js: Update header text.
* Animometer/resources/runner/animometer.css: Include confidence interval in results.
* Animometer/resources/runner/animometer.js:
(ResultsTable._addHeader): Header contents can be HTML, so use innerHTML instead.
(ResultsTable._addBody): Add tbody element.
(ResultsTable._addTest): Allow a data cell to invoke a JS function to get its contents.
(window.benchmarkController.showResults): Add table that includes tests' confidence intervals.
* Animometer/resources/runner/tests.js:
(Headers.details.text): Add new details table that includes bootstrap confidence interval.
The interval can be asymmetric, but for simplicity, report the maximum deviation percentage
on either side of the bootstrap median.
* Animometer/resources/statistics.js:
(bootstrap): Include the confidence percentage in the return object.
Report canvas size in results.
* Animometer/developer.html: Add markup to indicate whether a small, medium, or large
canvas was used.
* Animometer/index.html: Ditto.
* Animometer/resources/debug-runner/animometer.js: Call determineCanvasSize().
* Animometer/resources/runner/animometer.css: Update styles to set the canvas based on the
body class size.
* Animometer/resources/runner/animometer.js:
(window.benchmarkController.initialize): Update styles to set the canvas based on the
body class size.
(window.benchmarkController.determineCanvasSize): Run various media queries and set the body
class based on the size of the device.
* Animometer/developer.html: Refactor to include the main CSS file, and redo
the layout so that it doesn't rely on flexbox.
* Animometer/resources/debug-runner/animometer.css:
* Animometer/resources/debug-runner/animometer.js:
(updateDisplay): Since various parts of the script alter the body class, we can't
replace the className directly. Instead, remove all display-based values and then add
the one that was selected.
* Animometer/resources/debug-runner/graph.js:
(updateGraphData): To set the size of the graph, use window.innerHeight.
* Animometer/resources/runner/animometer.js:
(window.sectionsManager.showSection): Since various parts of the script alter the body
class, we can't replace the className directly. Remove all of the section classes
individually and then add the one desired.
* Animometer/tests/resources/stage.css: Remove -apple-system as a font to use in the
stage.
Canonical link: https://commits.webkit.org/177081@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@202314 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-06-22 03:11:15 +00:00
|
|
|
|
<div class="score-container">
|
|
|
|
|
<div class="score"></div>
|
|
|
|
|
<div class="confidence"></div>
|
|
|
|
|
<div class="detail">
|
|
|
|
|
<span class="small">on a small screen (phone)</span>
|
|
|
|
|
<span class="medium">on a medium screen (laptop, tablet)</span>
|
|
|
|
|
<span class="large">on a large screen (desktop)</span>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="table-container">
|
|
|
|
|
<div>
|
|
|
|
|
<table id="results-score"></table>
|
|
|
|
|
<table id="results-data"></table>
|
|
|
|
|
</div>
|
|
|
|
|
<table id="results-header"></table>
|
|
|
|
|
</div>
|
2016-04-12 02:12:23 +00:00
|
|
|
|
<button onclick="benchmarkController.startBenchmark()">Test Again</button>
|
2016-05-07 16:51:58 +00:00
|
|
|
|
</div>
|
Split benchmark into two different pages
https://bugs.webkit.org/show_bug.cgi?id=152458
Reviewed by Simon Fraser.
Address comments.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunner.prototype._runTestAndRecordResults): When the testing is complete the frame owning the
sampler goes away, and a later call to get the JSON data is no longer available. Process the data
right here, instead, and just reference it when displaying the results in ResultsDashboard.prototype._processData.
* Animometer/resources/extensions.js:
(Array.prototype.fill.Array.prototype.fill): Add a null check. Remove braces around single-line clause.
(Array.prototype.find.Array.prototype.find): Update the null check.
(ResultsDashboard.prototype._processData): Use the already-processed data.
* Animometer/resources/runner/animometer.css:
(.frame-container > iframe): Remove calc().
Move Array functions to extensions.js since that is included by the harness.
Add ES6 Array polyfills.
* Animometer/resources/algorithm.js:
(Array.prototype.swap): Moved to extensions.js.
* Animometer/resources/extensions.js:
(Array.prototype.swap):
(Array.prototype.fill): Added.
(Array.prototype.find): Added.
Adjust styles for iPad.
* Animometer/resources/runner/animometer.css:
(@media screen and (min-device-width: 768px)): Apply to iPad as well.
(@media screen and (max-device-width: 1024px)): Update width for iPads.
Adjustment styles for iOS.
* Animometer/developer.html: Different divs contain the iframe, so use a class instead and
update the style rules.
* Animometer/index.html:
* Animometer/resources/debug-runner/animometer.css: Remove extraneous rules.
(@media screen and (min-device-width: 1800px)): Move this up.
* Animometer/resources/runner/animometer.css: Add rules to accomodate iOS.
Get rid of prefixed flex properties for now.
* Animometer/resources/debug-runner/animometer.css:
* Animometer/resources/runner/animometer.css:
Update the structure of the harness. Remove the JSON-per-test but keep
the JSON of the whole test run. Use the full page in order to display
the graph.
* Animometer/developer.html: Update several of the JS file includes to UTF-8. Remove header and footer. Test results screen includes score,
average, and worst 5% statistics.
* Animometer/index.html: Make structure similar to developer.html.
* Animometer/resources/debug-runner/animometer.css: Remove most of the
button rules since they are superfluous. Move the progress bar to the
top, fixed. Update the results page rules.
* Animometer/resources/debug-runner/animometer.js: Remove most of the
additions to sectionsManager since they are no longer needed.
(setSectionHeader): Updates header of the section.
(window.suitesManager._updateStartButtonState): Update selector.
(showResults): Add keypress event for selecting different data for
copy/paste. Update how the results are populated. Include full test
JSON in a textarea, rather than requiring a button press.
(showTestGraph):
* Animometer/resources/debug-runner/tests.js: Update structure of Headers. Define different kinds of headers. Headers can control their
title, and the text used as the cell contents, including class name.
* Animometer/resources/extensions.js:
(ResultsTable): Update to include a flattened version of the headers,
used while populating table contents. Remove unneeded helper functions
for creating the table. Rename "show" to "add".
* Animometer/resources/runner/animometer.css: Update rules to
accommodate the new structure.
* Animometer/resources/runner/animometer.js:
(window.sectionsManager.setSectionScore): Helper function to set the
score and mean for a section.
(window.sectionsManager.populateTable): Helper function to set the table.
(window.benchmarkController.showResults): Refactor.
(window.benchmarkController.selectResults): Update selectors.
* Animometer/resources/runner/tests.js: Set Headers. Debug harness
extends it.
Update debug runner to have similar names to the basic runner. Include
that page's CSS and remove extraneous CSS rules.
Get rid of the statistics table #record.
* Animometer/developer.html: Rename #home to #intro. Rename .spacer to hr.
* Animometer/resources/debug-runner/animometer.css: Set to flexbox when selected.
* Animometer/resources/debug-runner/animometer.js: Remove recordTable.
(window.suitesManager._updateStartButtonState): Update selector to #intro.
(setupRunningSectionStyle): Deleted.
* Animometer/resources/runner/animometer.css:
(#test-container.selected): Change to flex-box only when visible.
Remove recordTable.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunner.prototype._runTestAndRecordResults):
* Animometer/resources/runner/tests.js:
* Animometer/tests/bouncing-particles/resources/bouncing-canvas-images.js:
* Animometer/tests/bouncing-particles/resources/bouncing-canvas-particles.js:
* Animometer/tests/bouncing-particles/resources/bouncing-canvas-shapes.js:
* Animometer/tests/bouncing-particles/resources/bouncing-css-images.js:
* Animometer/tests/bouncing-particles/resources/bouncing-css-shapes.js:
* Animometer/tests/bouncing-particles/resources/bouncing-particles.js:
* Animometer/tests/bouncing-particles/resources/bouncing-svg-images.js:
* Animometer/tests/bouncing-particles/resources/bouncing-svg-shapes.js:
* Animometer/tests/examples/resources/canvas-electrons.js:
* Animometer/tests/examples/resources/canvas-stars.js:
* Animometer/tests/misc/resources/compositing-transforms.js:
* Animometer/tests/resources/main.js:
* Animometer/tests/resources/stage.js:
(StageBenchmark): Remove _recordTable.
* Animometer/tests/simple/resources/simple-canvas-paths.js:
* Animometer/tests/simple/resources/simple-canvas.js:
* Animometer/tests/template/resources/template-canvas.js:
* Animometer/tests/template/resources/template-css.js:
* Animometer/tests/template/resources/template-svg.js:
* Animometer/tests/text/resources/layering-text.js:
* Animometer/resources/debug-runner/animometer.js:
(willStartFirstIteration): Fix selector, since results-table is used
in multiple places, so it cannot be an id.
Make it possible to select the scores, or the whole table data,
by cycling through different selections through key press of 's'.
* Animometer/resources/runner/animometer.js:
(window.benchmarkController.showResults): Attach a keypress handler
if it hasn't been added already.
(window.benchmarkController.selectResults):
* Animometer/resources/runner/tests.js: Cycle through different
ranges.
Fix a few fly-by errors.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunnerState.prototype.prepareCurrentTest): Update the frame relative path
since the files are now in the top directory instead of inside runner/.
(BenchmarkRunner.prototype._runTestAndRecordResults): Incorrect reference to function.
(BenchmarkRunner.prototype.step): Member variable is never used.
A little stylistic cleanup.
* Animometer/resources/debug-runner/benchmark-runner.js:
* Animometer/resources/extensions.js:
(window.DocumentExtension.createElement):
* Animometer/tests/resources/main.js:
(Benchmark.prototype.record):
* Animometer/tests/resources/stage.js:
(StageBenchmark.prototype.showResults): Reverse progress and message.
The message appears less frequently than the progress.
* Animometer/tests/simple/resources/simple-canvas.js:
(SimpleCanvasBenchmark): Remove unused options.
Add newer version of harness in a new page. Consolidate differences between the two
pages.
* Animometer/developer.html: Include runner/animometer.js. Rename the JS function
to run the benchmark to startBenchmark() instead of startTest(). Rename #running to
#test-container.
* Animometer/index.html: Added. Similarly calls startBenchmark() and has #test-container.
* Animometer/resources/debug-runner/animometer.css: Make the canvas 2:1 (1200px x 800px)
instead of 4:3.
Split out benchmarkRunnerClient and benchmarkController.
* Animometer/resources/debug-runner/animometer.js: Move needed functions out of
benchmarkRunnerClient, and leave the rest here to extend that object. Get rid of _resultsTable
and move populating the results table into benchmarkController. Rename _resultsDashboard
to results and make it accessible for other objects to use.
(willAddTestFrame): This is unnecessary. Remove.
(window.sectionsManager.showScore): Grab it from the results object instead of
benchmarkRunnerClient.
(window.sectionsManager.showSection): Deleted. Moved to runner/animometer.js.
(window.benchmarkController._runBenchmark): Deleted. Mostly moved into _startBenchmark.
(window.benchmarkController.startBenchmark): Refactor to call _startBenchmark.
(window.benchmarkController.showResults): Include most of benchmarkRunnerClient.didFinishLastIteration()
here.
* Animometer/resources/debug-runner/benchmark-runner.js:
(BenchmarkRunner.prototype._appendFrame): Remove unneeded call to willAddTestFrame.
* Animometer/resources/extensions.js:
(ResultsDashboard): Change the class to process the sampler data on-demand and hold onto that data
for later referencing.
(ResultsDashboard.prototype.toJSON): Deleted.
(ResultsDashboard.prototype._processData): Rename toJSON to _processData since it's not really
outputting JSON. Store the processed data into a member variable that can be referenced later.
(ResultsDashboard.prototype.get data): Process the data if it hasn't already.
(ResultsDashboard.prototype.get score): Process the data if it hasn't already, then return the
aggregate score.
(ResultsTable.prototype._showHeader): When outputting the results to a table, don't force the
need for an empty children array. This was to allow for a header row in the table that spanned
multiple columns. In the simpler harness, this is not needed.
(ResultsTable.prototype._showEmptyCells):
(ResultsTable.prototype._showTest): This hardcoded the columns. At least for the name and score,
which is the bare minimum needed for the simpler harness, key off of the header name provided.
* Animometer/resources/runner/animometer.css: Added. Use a similar 2:1 ratio. The score tables are
split into the data and the headers, and are also displayed RTL so that a later patch allows a
user to copy-paste the data easily.
* Animometer/resources/runner/animometer.js: Added. Use a simpler version of benchmarkRunnerClient.
The debug harness will extend these classes.
(window.benchmarkController._startBenchmark): Used by both harnesses.
(window.benchmarkController.startBenchmark): Set hard-coded options.
(window.benchmarkController.showResults): Includes most of benchmarkRunnerClient.didFinishLastIteration()
here.
Get rid of utilities.js. Move it all into extensions.js.
* Animometer/resources/extensions.js:
* Animometer/tests/resources/utilities.js: Removed.
* Animometer/tests/bouncing-particles/bouncing-canvas-images.html: Remove script link.
* Animometer/tests/bouncing-particles/bouncing-canvas-shapes.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-css-images.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-css-shapes.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-svg-images.html: Ditto.
* Animometer/tests/bouncing-particles/bouncing-svg-shapes.html: Ditto.
* Animometer/tests/examples/canvas-electrons.html: Ditto.
* Animometer/tests/examples/canvas-stars.html: Ditto.
* Animometer/tests/misc/compositing-transforms.html: Ditto.
* Animometer/tests/simple/simple-canvas-paths.html: Ditto.
* Animometer/tests/template/template-canvas.html: Ditto.
* Animometer/tests/template/template-css.html: Ditto.
* Animometer/tests/template/template-svg.html: Ditto.
* Animometer/tests/text/layering-text.html: Ditto.
Split tests.js into two. Add a new suite to runner/tests.js.
* Animometer/developer.html: Update the script order. Scripts from
debug-runner/ will always build on those from runner/, and have the
same name.
* Animometer/resources/debug-runner/tests.js: Move "complex examples"
suite into "miscellaneous tests".
(Suite): Deleted.
(Suite.prototype.prepare): Deleted.
(Suite.prototype.run): Deleted.
(suiteFromName): Deleted.
* Animometer/resources/runner/tests.js: Added. Take definitions and
functions needed by the test harness. Leave the test suites behind.
(Suite): Moved from debug script.
(Suite.prototype.prepare): Ditto.
(Suite.prototype.run): Ditto.
(suiteFromName): Ditto.
(testFromName): Ditto.
Move benchmark resources out into resources/debug-runner, and update URLs.
* Animometer/developer.html: Renamed from PerformanceTests/Animometer/runner/animometer.html.
* Animometer/resources/debug-runner/animometer.css: Renamed from PerformanceTests/Animometer/runner/resources/animometer.css.
* Animometer/resources/debug-runner/animometer.js: Renamed from PerformanceTests/Animometer/runner/resources/animometer.js.
* Animometer/resources/debug-runner/benchmark-runner.js: Renamed from PerformanceTests/Animometer/runner/resources/benchmark-runner.js.
* Animometer/resources/debug-runner/d3.min.js: Renamed from PerformanceTests/Animometer/runner/resources/d3.min.js.
* Animometer/resources/debug-runner/graph.js: Renamed from PerformanceTests/Animometer/runner/resources/graph.js.
* Animometer/resources/debug-runner/tests.js: Renamed from PerformanceTests/Animometer/runner/resources/tests.js.
Canonical link: https://commits.webkit.org/170645@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@194407 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2015-12-24 01:31:47 +00:00
|
|
|
|
</section>
|
|
|
|
|
</main>
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|