Project Dory: Difference between revisions
Jump to navigation
Jump to search
m (Add section "Test result summary" to summarize Hasal test results) |
m (Add test result of javascript.options.ion.threshold) |
||
| Line 77: | Line 77: | ||
* Test result summary | * Test result summary | ||
** javascript.options.baselinejit.threshold: for most test cases that completes quickly (< 100 ms), the default value performs similarly to the other values. Setting it to 50 is likely to have a smaller variation. For test cases that take longer time (> 200 ms) Setting the pref to 50 almost outperforms the default value. The only exception is test 'test_firefox_gslide_ail_pagedown_0', but the difference is marginal (within 1 frame). | ** javascript.options.baselinejit.threshold: for most test cases that completes quickly (< 100 ms), the default value performs similarly to the other values. Setting it to 50 is likely to have a smaller variation. For test cases that take longer time (> 200 ms) Setting the pref to 50 almost outperforms the default value. The only exception is test 'test_firefox_gslide_ail_pagedown_0', but the difference is marginal (within 1 frame). | ||
** javascript.options.ion.threshold: for test cases that completes under 100 ms, the default value (1000) or a larger value almost always perform better than 1. For some test cases (< 100 ms), the default value performs worse than 1, but the difference is marginal: test 'test_firefox_gsearch_ail_select_search_suggestion' completes in 15 ms in average using threshold 1, which is about 1 frame faster than the default. For larger test cases that completes > 300 ms, the default is almost always better than 1, showing that the performance gain is offset by the cost of compilation, and 10000 performs slightly better than the default for gmail and Facebook. One test that is of interest is 'test_firefox_outlook_ail_composemail_0', in which using 1 for eager compilation performs significantly better then default (about 100ms in difference). This is worthy of further look. | |||
== External Links == | == External Links == | ||
Revision as of 04:09, 29 November 2017
Project Goals
- Investigate the usage of current preferences:
- Understand and document existing preferences (lifetime, type, whether they are still in use, etc.)
- Clean up preferences (unused, incorrectly used, non-obvious).
- Use preferences as performance tuning knobs and investigate the performance implications of these knobs.
- Prioritize the preferences with their relevance to performance.
- Tweak the preferences and run automated tests against the values to see their performance implications.
Participants
- Kan-Ru Chen
- Cervantes Yu
- Will Wang
- WeiCheng Pan
- Shako Ho
- Walter Chen
- Askeing Yen
Roadmap
- Find a systematic way to manage and prioritize default preference values.
- Co-work with libpref redesign project on new persistence format of preferences.
- Find performance related preferences during the process.
- Get feedback from relevant teams.
- Initially we may target JS related preferences.
- Record the performance implications of preferences using the new persistence format.
Things to Consider
- What's the new persistence format for preferences?
- What data should a pref contain?
- Internal name, a more descriptive name, description, default value, etc.
- #include from smaller subsets in the final pref file.
- Group prefs that are relevant (sharing the same prefix) in smaller files.
- Standalone top branch indicates that the pref should be under some other branch.
- There is only 1 pref beginning with "slider": slider.snapMultiplier
- Move to browser.slider.snapMultiplier?
- camelCase, underscore_names, or dashed-names?
- Envisioning a front-end user interface that is more user-friendly than about:config?
- Makes it easier for users to tweak or experiment with the browser.
- Inline readonly prefs in code as constants?
Results
- A Hasal trial run to test the performance effect of changing JS baseline JIT threshold values:
- https://gist.github.com/ShakoHo/2e2321294d567d913eea5eaa58af60e0
- Twiddling the preference has influence of performance as can be seen in the test results, but there is no consistent change among the tests.
- Test result summary
- javascript.options.baselinejit.threshold: for most test cases that completes quickly (< 100 ms), the default value performs similarly to the other values. Setting it to 50 is likely to have a smaller variation. For test cases that take longer time (> 200 ms) Setting the pref to 50 almost outperforms the default value. The only exception is test 'test_firefox_gslide_ail_pagedown_0', but the difference is marginal (within 1 frame).
- javascript.options.ion.threshold: for test cases that completes under 100 ms, the default value (1000) or a larger value almost always perform better than 1. For some test cases (< 100 ms), the default value performs worse than 1, but the difference is marginal: test 'test_firefox_gsearch_ail_select_search_suggestion' completes in 15 ms in average using threshold 1, which is about 1 frame faster than the default. For larger test cases that completes > 300 ms, the default is almost always better than 1, showing that the performance gain is offset by the cost of compilation, and 10000 performs slightly better than the default for gmail and Facebook. One test that is of interest is 'test_firefox_outlook_ail_composemail_0', in which using 1 for eager compilation performs significantly better then default (about 100ms in difference). This is worthy of further look.