{"id":3002,"date":"2019-03-08T21:27:48","date_gmt":"2019-03-09T02:27:48","guid":{"rendered":"https:\/\/mikeconley.ca\/blog\/?p=3002"},"modified":"2023-12-20T16:25:09","modified_gmt":"2023-12-20T21:25:09","slug":"firefox-front-end-performance-update-14","status":"publish","type":"post","link":"https:\/\/mikeconley.ca\/blog\/2019\/03\/08\/firefox-front-end-performance-update-14\/","title":{"rendered":"Firefox Front-End Performance Update #14"},"content":{"rendered":"\n<p>We&#8217;re only a few weeks away from Firefox 67 merging from the Nightly channel to Beta, and since <a href=\"https:\/\/mikeconley.ca\/blog\/2019\/02\/25\/firefox-front-end-performance-update-13\/\">my last update<\/a>, a number of things have landed.<\/p>\n\n\n\n<p>It&#8217;s the end of a long week for me, so I apologize for the brevity here. Let&#8217;s check it out!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Document Splitting Foundations for WebRender (In-Progress by Doug Thayer)<\/h2>\n\n\n\n<p>dthayer is still trucking along here &#8211; he&#8217;s ironed out a number of glitches, and kats is giving feedback on some APZ-related changes. dthayer is also working on a WebRender API endpoint for generating frames for multiple documents in a single transaction, which should help reduce the window of opportunity for nasty synchronization bugs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Warm-up Service (In-Progress by Doug Thayer)<\/h2>\n\n\n\n<p>dthayer is pressing ahead with this experiment to warm up a number of critical files for Firefox shortly after the OS boots. He is working on a prototype that can be controlled via a pref that we&#8217;ll be able to test on users in a lab-setting (and perhaps in the wild as a SHIELD experiment).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Startup Cache Telemetry (In-Progress by Doug Thayer)<\/h2>\n\n\n\n<p>dthayer <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1364235\">landed this Telemetry early in the week<\/a>, and data has started to trickle in. After a few more days, it should be easier for us to make inferences on how the startup caches are operating out in the wild for our Nightly users.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Smoother Tab Animations (In-Progress by Felipe Gomes)<\/h2>\n\n\n\n<p>UX, Product and Engineering are currently hashing out the remainder of the work here. <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1526112\">Felipe is also aiming to have the non-responsive tab strip bug fixed soon<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"mce_14\">Lazier Hidden Window (Completed by Felipe Gomes)<\/h2>\n\n\n\n<p>After a few rounds of landings and backouts, <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=827976\">this appears to have stuck<\/a>! The hidden window is now created after the main window has finished painting, and this has resulted in a nice ts_paint (startup paint) win on our Talos benchmark!<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"2092\" height=\"916\" data-attachment-id=\"3003\" data-permalink=\"https:\/\/mikeconley.ca\/blog\/2019\/03\/08\/firefox-front-end-performance-update-14\/image\/\" data-orig-file=\"https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2019\/03\/image.png\" data-orig-size=\"2092,916\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2019\/03\/image.png\" src=\"https:\/\/mikeconley.ca\/blog\/wp-content\/uploads\/2019\/03\/image.png\" alt=\"\" class=\"wp-image-3003\"\/><figcaption>This is a graph of the ts_paint startup paint Talos benchmark. The highlighted node is the first mozilla-central build with the hidden window work. Lower is better, so this looks like a nice win!<\/figcaption><\/figure>\n\n\n\n<p>There&#8217;s still potential for more improvements on the hidden window, but <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1531854\">that&#8217;s been split out to a separate project \/ bug.<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Browser Adjustment Project (In-Progress by Gijs Kruitbosch)<\/h2>\n\n\n\n<p>This project appears to be reaching its conclusion, but with rather unsatisfying results. Denis Palmeiro from Vicky Chin&#8217;s team has done a bunch of testing of both the original set of patches that Gijs landed to lower the global frame rate (painting and compositing) from 60fps to 30fps for low-end machines, as well as the new patches that decrease the frequency of main-thread painting (but not compositing) to 30fps. Unfortunately, this has not yielded the page load wins that we wanted<sup id=\"rf1-3002\"><a href=\"#fn1-3002\" title=\"This was unexpected &#8211; we ran an experiment late in 2018 where we noticed that lowering the frame rate manually via the layout.frame_rate pref had a positive impact on page load time&#8230; unfortunately, this effect is no longer being observed. This might be due to &lt;a href=&quot;https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1506949&quot;&gt;other refresh driver work&lt;\/a&gt; that has occurred in the meantime.\" rel=\"footnote\">1<\/a><\/sup>. We&#8217;re still waiting to see if there&#8217;s a least a power-usage win here worth pursuing, but we&#8217;re almost ready the pull the plug on this one.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Better about:newtab Preloading (In-Progress by Gijs Kruitbosch)<\/h2>\n\n\n\n<p><a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1353013\">Gijs has a set of patches that should make this possible<\/a>, which will mean (in theory) that we&#8217;ll present a ready-to-roll about:newtab when users request one more often than not.<\/p>\n\n\n\n<p>Unfortunately, there&#8217;s a small snag with a test failure in automation, <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1353013#c40\">but Gijs is on the case<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Experiments with the Process Priority Manager (In-Progress by Mike Conley)<\/h2>\n\n\n\n<p>The Process Priority Manager has been enabled in Nightly for a number of weeks now, and no new bugs have been filed against it. <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1532767\">I filed a bug earlier this week<\/a> to run a pref-flip experiment on Beta after the Process Priority Manager patches are uplifted later this month. Our hope is that this has a neutral or positive impact on both page load time and user retention!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Make the PageStyleChild load lazily (Completed by Mike Conley)<\/h2>\n\n\n\n<p><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/CSS\/Alternative_style_sheets\">There&#8217;s an infrequently used feature in Firefox<\/a> that allows users to switch between different CSS stylesheets that a page might offer. I&#8217;ve made the component that scans the document for alternative stylesheets much lazier, and also made it skip non web-pages, which means (at the very least) less code running when loading about:home and about:newtab<\/p>\n\n\n\n<p><br \/><\/p>\n<hr class=\"footnotes\"><ol class=\"footnotes\" style=\"list-style-type:decimal\"><li id=\"fn1-3002\"><p >This was unexpected &#8211; we ran an experiment late in 2018 where we noticed that lowering the frame rate manually via the layout.frame_rate pref had a positive impact on page load time&#8230; unfortunately, this effect is no longer being observed. This might be due to <a href=\"https:\/\/bugzilla.mozilla.org\/show_bug.cgi?id=1506949\">other refresh driver work<\/a> that has occurred in the meantime.&nbsp;<a href=\"#rf1-3002\" class=\"backlink\" title=\"Return to footnote 1.\">&#8617;<\/a><\/p><\/li><\/ol>","protected":false},"excerpt":{"rendered":"<p>We&#8217;re only a few weeks away from Firefox 67 merging from the Nightly channel to Beta, and since my last update, a number of things have landed. It&#8217;s the end of a long week for me, so I apologize for the brevity here. Let&#8217;s check it out! Document Splitting Foundations for WebRender (In-Progress by Doug [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[874,861],"tags":[],"class_list":["post-3002","post","type-post","status-publish","format-standard","hentry","category-firefox-mozilla-2","category-mozilla-2"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/prmTy-Mq","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/posts\/3002","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/comments?post=3002"}],"version-history":[{"count":1,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/posts\/3002\/revisions"}],"predecessor-version":[{"id":3004,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/posts\/3002\/revisions\/3004"}],"wp:attachment":[{"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/media?parent=3002"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/categories?post=3002"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/tags?post=3002"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}