<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Vladan's blog</title>
    <description>Blog of my work in Mozilla's Firefox Performance team
</description>
    <link>http://blog.vladan.org/</link>
    <atom:link href="http://blog.vladan.org/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Tue, 28 Mar 2017 22:01:05 -0400</pubDate>
    <lastBuildDate>Tue, 28 Mar 2017 22:01:05 -0400</lastBuildDate>
    <generator>Jekyll v3.4.3</generator>
    
      <item>
        <title>Update from the Content Performance program #2</title>
        
          <dc:creator>Vladan</dc:creator>
        
        <description>&lt;p&gt;During Q3, Avi Halachmi, Aaron Klotz and I compared Firefox's scrolling &amp;amp; page-loading performance against other Windows browsers on several popular sites using a low-end &lt;a href=&quot;http://www.amazon.com/HP-13-3-Inch-TouchScreen-Convertible-Processor/dp/B00WVFJO5Y&quot;&gt;HP Pavilion 14t i3-5010u&lt;/a&gt; laptop. This post describes our findings.&lt;/p&gt;

&lt;h3 id=&quot;first-a-refresher&quot;&gt;First, a refresher…&lt;/h3&gt;

&lt;p&gt;In my previous post from &lt;a href=&quot;/2015/06/26/announcing-the-content-performance-program.html&quot;&gt;June&lt;/a&gt;, I published our initial Q2 findings:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1213413&quot;&gt;bug 1213413&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=715376&quot;&gt;bug 715376&lt;/a&gt; related: Process-per-tab e10s is necessary to prevent heavy activity in a background tab (e.g. loading GMail) from affecting scrolling smoothness in a foreground tab&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1213425&quot;&gt;bug 1213425&lt;/a&gt;: Firefox scrolling smoothness badly deteriorates when the laptop is in power-saver mode&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1174899&quot;&gt;bug 1174899&lt;/a&gt;: Aaron Klotz found a 100% CPU usage bug while scrolling a Facebook profile containing many HTML5 videos&lt;/li&gt;
  &lt;li&gt;Scrolling a Twitter feed with YouTube HTML5 videos is jankier in Firefox, but Twitter newsfeed changed to no longer autoplay videos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The June post also outlined other scenarios needing testing which we studied in Q3.&lt;/p&gt;

&lt;h3 id=&quot;our-more-recent-discoveries&quot;&gt;Our more recent discoveries&lt;/h3&gt;

&lt;p&gt;NOTE: All  phase 1 content-perf findings are in &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1213469&quot;&gt;meta bug 1213469&lt;/a&gt;, and all content perf bugs we have on file are tagged with &lt;a href=&quot;https://bugzilla.mozilla.org/buglist.cgi?resolution=---&amp;amp;status_whiteboard=[content%20perf]&amp;amp;status_whiteboard_type=allwordssubstr&amp;amp;list_id=12602314&quot;&gt;[content perf]&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1213434&quot;&gt;bug 1213434&lt;/a&gt;: Chrome navigates a lot faster to Facebook.com from a Google search result page. The difference is particularly noticeable with a cold network cache. Video showing the differences: &lt;a href=&quot;https://www.dropbox.com/s/l7injr1i6e8u0sx/content_perf3_fb_on_3_browsers.flv?dl=0&quot;&gt;dropbox.com&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1199468&quot;&gt;bug 1199468&lt;/a&gt;: Our smooth-scrolling parameters might not be optimal, but this is still being studied (and debated!)&lt;/li&gt;
  &lt;li&gt;We learned that some graphics acceleration configurations actually harm Firefox scrolling performance:
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1213429&quot;&gt;bug 1213429&lt;/a&gt;: Scrolling a Facebook profile page with D3D9 acceleration (and D2D disabled) is actually worse than scrolling without any gfx acceleration at all (no D3D + no D2D)&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1213432&quot;&gt;bug 1213432&lt;/a&gt;: Similarly, D3D11 Warp acceleration (without D2D) provides worse scrolling performance than no gfx acceleration at all (no D3D + no D2D)&lt;/li&gt;
      &lt;li&gt;Direct3D 11 and Direct2D acceleration (either D2D 1.0 or 1.1) did not produce better scrolling performance on our reference pages
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1213440&quot;&gt;bug 1213440&lt;/a&gt;: In particular, on a Yahoo search page with a few image results embedded, scrolling performance and consistency will be worse with D2D 1.1. than D2D 1.0&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;During our investigations, we also discovered other user-visible issues that did not directly relate to page scrolling &amp;amp; page loading:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1213435&quot;&gt;bug 1213435&lt;/a&gt;: Firefox content-process memory usage is significantly worse than Chrome's and is lagging IE as well&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1172206&quot;&gt;bug 1172205&lt;/a&gt;: Firefox's page-loading tab throbber spins erratically while loading Amazon.com&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1213438&quot;&gt;bug 1213438&lt;/a&gt;: Scrolling through a Facebook profile triggers additional network requests, but only Firefox repeatedly changes the tab's title from between its real title and “Connecting…”. This is distracting and draws unnecessary attention to any network delays&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We tested many more use cases since the previous progress update, but we mostly found Firefox's performance on par or better:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Firefox's scrolling performance did not regress on Windows 10 as compared to Windows 8 (for the 3 reference sites: Yahoo, Facebook and Twitter)&lt;/li&gt;
  &lt;li&gt;Most gfx configurations did not hurt Firefox scrolling performance: external monitor connected, DPI scaling enabled, e10s enabled (comparing non-APZ e10s vs non-e10s), accessibility technology enabled, etc
    &lt;ul&gt;
      &lt;li&gt;In tests with external monitors, we noticed that Firefox consistently chooses the correct refresh rate, unlike other tested browsers&lt;/li&gt;
      &lt;li&gt;Unfortunately, this finding did not generalize to better gfx performance overall on all multi-monitor setups (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1189955&quot;&gt;bug 1189955&lt;/a&gt;)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;We also found page-loading times on Facebook, Twitter, and Yahoo comparable across browsers&lt;/li&gt;
  &lt;li&gt;As an aside, APZC has a noticeably positive impact on scrolling smoothness, but there are issues with checkerboarding and correctness (&lt;a href=&quot;(https://bugzilla.mozilla.org/show_bug.cgi?id=1178298)&quot;&gt;bug 1178298&lt;/a&gt;, so it might be a while before we see APZC riding the trains.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We didn't have time to get as far as we wanted to with content-perf tooling in Q3, but Wander Costa did contribute a prototype of a tool for measuring browser responsiveness during page-loads: &lt;a href=&quot;https://github.com/walac/page-load-test&quot;&gt;https://github.com/walac/page-load-test&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;content-performance-in-q4&quot;&gt;Content Performance in Q4&lt;/h3&gt;

&lt;p&gt;The Perf team's top priority in Q4 is to &lt;a href=&quot;https://docs.google.com/document/d/1TyE0BehzYhii3qfmcrfjXlRJL64CcJk0B4Voup4Q0Pg/&quot;&gt;verify e10s performance&lt;/a&gt; using our many measurement systems and generally help get e10s performance ready for release.&lt;/p&gt;

&lt;p&gt;As a result, Avi will be the only developer working on content-perf this quarter. However, Avi will be working on content-perf full-time in Q4 and he has already covered additional ground (including Fennec). He will soon be blogging about additional content-perf findings &lt;a href=&quot;http://avih.github.io/&quot;&gt;over at his blog&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 09 Oct 2015 00:00:00 -0400</pubDate>
        <link>http://blog.vladan.org/2015/10/09/update-from-content-performance-program-2.html</link>
        <guid isPermaLink="true">http://blog.vladan.org/2015/10/09/update-from-content-performance-program-2.html</guid>
        
        
      </item>
    
      <item>
        <title>New Jekyll blog</title>
        
          <dc:creator>Vladan</dc:creator>
        
        <description>&lt;p&gt;I moved my blog from &lt;a href=&quot;https://blog.mozilla.com/vdjeric&quot;&gt;Mozilla.com-hosted WordPress&lt;/a&gt; and turned it into a statically-generated &lt;a href=&quot;http://jekyllrb.com/&quot;&gt;Jekyll&lt;/a&gt; blog hosted on &lt;a href=&quot;https://pages.github.com/&quot;&gt;GitHub Pages&lt;/a&gt;. I did it partly out of interest in Jekyll and partly because of limitations imposed by Mozilla’s WordPress deployment (e.g. &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1197542&quot;&gt;bug 1197542&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;I managed to migrate all my posts and even readers’ comments(!) from my old blog. The migration turned out to be a bit of a challenge – I assumed that once I had my data out of WordPress and converted into Markdown blog posts and &lt;a href=&quot;https://help.disqus.com/customer/portal/articles/466179-what-is-disqus-&quot;&gt;Disqus&lt;/a&gt; comments, that the rest would be simple.&lt;/p&gt;

&lt;p&gt;Of course, I could have just started an empty new blog, but I was curious about Ruby and Jekyll and I figured this would be a good learning exercise.&lt;/p&gt;

&lt;p&gt;If anyone is interested in migrating their blog from WordPress to Jekyll or Octopress, this is what I did:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;First, I exported my WordPress blog (posts and comments) to an XML file using the built-in export feature&lt;/li&gt;
  &lt;li&gt;I used &lt;a href=&quot;https://github.com/thomasf/exitwp&quot;&gt;exitwp&lt;/a&gt; to convert the posts in the WordPress XML file to Markdown files. Exitwp is far from perfect, so I had to fix up posts by hand&lt;/li&gt;
  &lt;li&gt;I then imported the comments from the XML file into Disqus, but first I had to manually edit the XML file to create associations between the old comments and the posts on the new site&lt;/li&gt;
  &lt;li&gt;I also had to migrate parts of the old WordPress blog’s theme CSS to the new blog to fix display issues with old posts. I chose not to customize the blog’s default Jekyll theme&lt;/li&gt;
  &lt;li&gt;Further fixed up the posts to correct links etc&lt;/li&gt;
  &lt;li&gt;Lots of debugging and learning of Jekyll, Ruby package management (Gem and Bundler), SCSS, GitHub Pages, Disqus quirks, my DNS provider, etc :)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I think the process would have been simpler if I had admin privileges on the WordPress deployment – I came across several promising-looking WordPress plugins &amp;amp; scripts for exporting that required admin rights. This would have made the migration more automatic.&lt;/p&gt;

&lt;p&gt;I also looked into &lt;a href=&quot;http://octopress.org/docs/&quot;&gt;Octopress&lt;/a&gt;. I didn’t like Octopress 2 (&lt;a href=&quot;http://octopress.org/2015/01/15/octopress-3.0-is-coming/&quot;&gt;for these kinds of reasons&lt;/a&gt;) and I found Octopress 3 unfinished &amp;amp; not well documented, which is understandable, since it’s not officially released yet.&lt;/p&gt;

&lt;p&gt;Jekyll and GitHub Pages aren’t perfect either (Jekyll can take a while to re-generate a simple site, GH Pages produces unhelpful “Page build failed” errors, etc), but this migration has been a different kind of challenge and I enjoyed figuring out all the little bugs that popped up.&lt;/p&gt;
</description>
        <pubDate>Mon, 28 Sep 2015 00:00:00 -0400</pubDate>
        <link>http://blog.vladan.org/2015/09/28/new-jekyll-blog.html</link>
        <guid isPermaLink="true">http://blog.vladan.org/2015/09/28/new-jekyll-blog.html</guid>
        
        
      </item>
    
      <item>
        <title>Update your custom Telemetry dashes: telemetry.js is obsolete</title>
        
          <dc:creator>Vladan</dc:creator>
        
        <description>&lt;p&gt;If you built a custom dashboard and used &lt;a href=&quot;https://telemetry.mozilla.org/docs.html#Telemetry&quot;&gt;telemetry.js&lt;/a&gt; to query &lt;a href=&quot;https://telemetry.mozilla.org&quot;&gt;telemetry.mozilla.org&lt;/a&gt; for histogram data, you’ll need to switch your dash to a newer library – either the &lt;a href=&quot;https://github.com/mozilla/telemetry-dashboard/tree/master/v2&quot;&gt;new telemetry.js library&lt;/a&gt; (preferred option) or &lt;a href=&quot;https://github.com/Uberi/telemetry-dashboard/blob/v1-shim/v2/v1-shim.js&quot;&gt;our shim library&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This change is necessary because Telemetry is retiring its old backend in favour of the new “unified” Telemetry backend which combines the capabilities of both FHR &amp;amp; Telemetry. The old backend sprouted data quality issues and supporting two backends is too time-consuming for a small team.&lt;/p&gt;

&lt;p&gt;The old telemetry.js dashboarding library will be retired starting
&lt;span class=&quot;emphasize&quot;&gt;Monday, September 14th&lt;/span&gt;
next week. If you don’t replace telemetry.js in your dashboard, your dash will stop seeing any new data.&lt;/p&gt;

&lt;p&gt;There is additional background on this decision here: &lt;a href=&quot;http://anthony-zhang.me/blog/telemetry-demystified/&quot;&gt;http://anthony-zhang.me/blog/telemetry-demystified/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can ask for help with porting your dash in the comments below, or ping vladan / mreid / rvitillo on #telemetry&lt;/p&gt;
</description>
        <pubDate>Tue, 08 Sep 2015 00:00:00 -0400</pubDate>
        <link>http://blog.vladan.org/2015/09/08/update-your-custom-telemetry-dashes-telemetry-js-is-obsolete.html</link>
        <guid isPermaLink="true">http://blog.vladan.org/2015/09/08/update-your-custom-telemetry-dashes-telemetry-js-is-obsolete.html</guid>
        
        
      </item>
    
      <item>
        <title>New policy: 24-hour backouts for major Talos regressions</title>
        
          <dc:creator>Vladan</dc:creator>
        
        <description>&lt;p&gt;Now that I’ve caught your attention with a sufficiently provocative title, please check out this new Talos regression policy that we
&lt;span class=&quot;emphasize&quot;&gt;&lt;sup&gt;*&lt;/sup&gt;&lt;/span&gt;
will be trying out starting next week :)&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://groups.google.com/forum/#!topic/mozilla.dev.platform/QHdn-ogf8kQ&quot;&gt;https://groups.google.com/forum/#!topic/mozilla.dev.platform/QHdn-ogf8kQ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;tl;dr:&lt;/strong&gt; &lt;em&gt;Perf sheriffs will back out any Talos regression of 10% or more if it affects a reliable test on Windows. We’ll give the patch author 24 hours to explain why the regression is acceptable and shouldn’t be backed out. Perf sheriffs will aim to have such regressions backed out within 48 hours of landing.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I promise this policy is much more nuanced and thought-through than the title or summary might suggest, but I really want to hear developers’ opinions.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;emphasize&quot;&gt;&lt;sup&gt;*&lt;/sup&gt;&lt;/span&gt;
I’m taking point on publicizing this new policy and answering any questions, but &lt;a href=&quot;https://elvis314.wordpress.com/&quot;&gt;Joel Maher&lt;/a&gt;, &lt;a href=&quot;http://wrla.ch/blog/&quot;&gt;William Lachance&lt;/a&gt; and &lt;a href=&quot;https://vaibhavag.wordpress.com/&quot;&gt;Vaibhav Agarwal&lt;/a&gt; of the A-Team did all the heavy lifting. They built the tools for detecting &amp;amp; investigating Talos regressions and they’re the perf sheriffs.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://avih.github.io/&quot;&gt;Avi Halachmi&lt;/a&gt; from my team is helping to check the tools for correctness. I just participate in Talos policy decisions and occasionally act as an (unintentional) spokesperson :)&lt;/p&gt;
</description>
        <pubDate>Sat, 15 Aug 2015 00:00:00 -0400</pubDate>
        <link>http://blog.vladan.org/2015/08/15/new-policy-24-hour-backouts-for-major-talos-regressions.html</link>
        <guid isPermaLink="true">http://blog.vladan.org/2015/08/15/new-policy-24-hour-backouts-for-major-talos-regressions.html</guid>
        
        
      </item>
    
      <item>
        <title>Announcing the Content Performance program</title>
        
          <dc:creator>Vladan</dc:creator>
        
        <description>&lt;h3 id=&quot;introduction&quot;&gt;Introduction&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;http://dblohm7.ca/&quot;&gt;Aaron Klotz&lt;/a&gt;, &lt;a href=&quot;http://avih.github.io/&quot;&gt;Avi Halachmi&lt;/a&gt; and I have been studying Firefox’s performance on Android &amp;amp; Windows over the last few weeks as part of an effort to evaluate Firefox “content performance” and find actionable issues. We’re analyzing and measuring how well Firefox scrolls pages, loads sites, and navigates between pages. At first, we’re focusing on 3 reference sites: Twitter, Facebook, and Yahoo Search.&lt;/p&gt;

&lt;p&gt;We’re trying to find reproducible, meaningful, and common use cases on popular sites which result in noticeable performance problems or where Firefox performs significantly worse than competitors. These use cases will be broken down into tests or profiles, and shared with platform teams for optimization. This “Content Performance” project is part of a larger organizational effort to improve Firefox quality.&lt;/p&gt;

&lt;p&gt;I’ll be regularly posting blog posts with our progress here, but you can can also track our efforts on our mailing list and IRC channel:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mailing list:&lt;/strong&gt; &lt;a href=&quot;https://mail.mozilla.org/listinfo/contentperf&quot;&gt;https://mail.mozilla.org/listinfo/contentperf&lt;/a&gt;&lt;br /&gt;
&lt;strong&gt;IRC channel:&lt;/strong&gt; #contentperf&lt;br /&gt;
&lt;strong&gt;Project wiki page:&lt;/strong&gt; &lt;a href=&quot;https://wiki.mozilla.org/Firefox/Content_Performance_Program&quot;&gt;Content_Performance_Program&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;summary-of-current-findings-june-18&quot;&gt;Summary of current findings (June 18)&lt;/h3&gt;

&lt;p&gt;Generally speaking, desktop and mobile Firefox scroll as well as other browsers on reference sites when there is only a single tab loaded in a single window.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;We compared Firefox vs Chrome and IE:
    &lt;ul&gt;
      &lt;li&gt;Desktop Firefox scrolling can badly deteriorate when the machine is in power-saver mode
&lt;sup class=&quot;note&quot;&gt;&lt;a href=&quot;#note1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; (Firefox performance relative to other browsers depends on the site)&lt;/li&gt;
      &lt;li&gt;Heavy activity in background tabs badly affects desktop Firefox’s scrolling performance
&lt;sup class=&quot;note&quot;&gt;&lt;a href=&quot;#note1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
(much worse than other browsers – we need E10S)&lt;/li&gt;
      &lt;li&gt;Scrolling on infinitely-scrolling pages only &lt;em&gt;appears&lt;/em&gt; janky when the page is waiting on additional data to be fetched&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Inter-page navigation in Firefox can exhibit flicker, similar to other browsers&lt;/li&gt;
  &lt;li&gt;The Firefox UI locks up during page loading, unlike other browsers (need E10S)&lt;/li&gt;
  &lt;li&gt;Scrolling in desktop E10S (with heavy background tab activity) is only as good as the other browsersn1 when Firefox is in the process-per-tab configuration (dom.ipc.processCount » 1)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;sup class=&quot;note&quot;&gt;&lt;a name=&quot;note1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;
You can see Aaron’s scrolling measurements here: &lt;a href=&quot;http://bit.ly/1K1ktf2&quot;&gt;http://bit.ly/1K1ktf2&lt;/a&gt;&lt;/p&gt;

&lt;h4 id=&quot;potential-scenarios-to-test-next&quot;&gt;Potential scenarios to test next:&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Check impact of different Firefox configurations on scrolling smoothness:
    &lt;ul&gt;
      &lt;li&gt;Hardware acceleration disabled&lt;/li&gt;
      &lt;li&gt;Accessibility enabled &amp;amp; disabled&lt;/li&gt;
      &lt;li&gt;Maybe: Multiple monitors with different refresh rate (test separately on Win 8 and Win 10)&lt;/li&gt;
      &lt;li&gt;Maybe: OMTC, D2D, DWrite, display &amp;amp; font scaling enabled vs disabled
        &lt;ul&gt;
          &lt;li&gt;If we had a Telemetry measurement of scroll performance, it would be easier to determine relevant characteristics&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Compare Firefox scrolling &amp;amp; page performance on Windows 8 vs Windows 10
    &lt;ul&gt;
      &lt;li&gt;Compare Firefox vs Edge on Win 10&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Test other sites in Alexa top 20 and during random browsing&lt;/li&gt;
  &lt;li&gt;Test the various scroll methods on reference sites (Avi has done some of this already): mouse wheel, mouse drag, arrow key, page down, touch screen swipe and drag, touchpad drag, touchpad two finger swipe, trackpoints (special casing for ThinkPads should be re-evaluated).
    &lt;ul&gt;
      &lt;li&gt;Check impact of pointing device drivers&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Check performance inside Google web apps (Search, Maps, Docs, Sheets)
    &lt;ul&gt;
      &lt;li&gt;Examine benefits of Chrome’s network pre-fetcher on Google properties (e.g. Google search)&lt;/li&gt;
      &lt;li&gt;Browse and scroll simple pages when top Google apps are loaded in pinned tabs&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Compare Firefox page-load &amp;amp; page navigation performance on HTTP/2 sites (Facebook &amp;amp; Twitter, others?)&lt;/li&gt;
  &lt;li&gt;Check whether our cache and pre-connector benefit perceived performance, compare vs competition&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;issues-to-report-to-platform-teams&quot;&gt;Issues to report to Platform teams&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Worse Firefox scrolling performance with laptop in power-save mode&lt;/li&gt;
  &lt;li&gt;Scrolling Twitter feed with YouTube HTML5 videos is jankier in Firefox&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1174899&quot;&gt;bug 1174899&lt;/a&gt;: Scrolling on Facebook profile with many HTML5 videos eventually causes 100% CPU usage on a Necko thread + heavy CPU usage on main thread + the page stops loading additional posts (videos)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;tooling-questions&quot;&gt;Tooling questions:&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Find a way to to measure when the page is “settled down” after loading, i.e. time until last page-loading event. This could be measured by the page itself (similar to Octane), which would allow us to compare different browsers&lt;/li&gt;
  &lt;li&gt;How to reproduce dynamic websites offline?&lt;/li&gt;
  &lt;li&gt;Easiest way to record demos of bad Firefox &amp;amp; Fennec performance vs other browsers?&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;decisions-made-so-far&quot;&gt;Decisions made so far:&lt;/h4&gt;

&lt;ul&gt;
  &lt;li&gt;Exclusively focus on Android 5.0+ and Windows 7, 8.1 &amp;amp; 10&lt;/li&gt;
  &lt;li&gt;Devote the most attention to single-process Nightly on desktop, but do some checks of E10S performance as well&lt;/li&gt;
  &lt;li&gt;Desktop APZC and network pre-fetcher are a long time away, don’t wait&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Fri, 26 Jun 2015 00:00:00 -0400</pubDate>
        <link>http://blog.vladan.org/2015/06/26/announcing-the-content-performance-program.html</link>
        <guid isPermaLink="true">http://blog.vladan.org/2015/06/26/announcing-the-content-performance-program.html</guid>
        
        
      </item>
    
      <item>
        <title>How to evaluate the performance of your new Firefox feature</title>
        
          <dc:creator>Vladan</dc:creator>
        
        <description>&lt;p&gt;There are a lot of good tools available now for studying Firefox performance, and I think a lot of them are not well known, so I put together a list of steps to follow when evaluating the performance of your next Firefox feature.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Make sure to test your feature on a low-end or mid-range Windows computer&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Our dev machines are uncommonly powerful. Think machines with spinning hard drives, not SSDs. Testing on Windows is a must, as it is used by the vast majority of our users.&lt;/li&gt;
  &lt;li&gt;The perf team, fx-team, and gfx team have Windows &lt;a href=&quot;http://www.amazon.com/Transformer-T100TA-C1-GR-Detachable-Touchscreen-Laptop/dp/B00K0G2XA4&quot;&gt;Asus T100&lt;/a&gt; tablets available in multiple offices just for this purpose. Contact me, Gavin, or Milan Sreckovic if you need one.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Ensure your feature does not touch storage on the main thread, either directly or indirectly&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If there’s any chance it might cause main-thread IO, test it with the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Mozilla/Performance/Reporting_a_Performance_Problem&quot;&gt;Gecko profiler&lt;/a&gt;. The profiler now has an option to show you all the IO done on the main thread, no matter how brief it is.&lt;/li&gt;
  &lt;li&gt;Also be careful about using &lt;a href=&quot;https://wiki.mozilla.org/Performance/Avoid_SQLite_In_Your_Next_Firefox_Feature&quot;&gt;SQLite &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Make sure to add Telemetry probes that measure how well your feature performs on real user machines.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Check the Telemetry numbers again after your feature reaches the release channel. The release channel has a diversity of configurations that simply don’t exist on any of the pre-release channels.
    &lt;ul&gt;
      &lt;li&gt;You can check for regressions in the &lt;a href=&quot;https://telemetry.mozilla.org/&quot;&gt;Telemetry dash&lt;/a&gt;, or you can ask the perf-team to show you how to do a custom analysis (e.g. performance on a particular gfx card type) using &lt;a href=&quot;http://mreid-moz.github.io/blog/2013/11/06/current-state-of-telemetry-analysis/&quot;&gt;MapReduce&lt;/a&gt; or &lt;a href=&quot;http://robertovitillo.com/2015/01/16/next-gen-data-analysis-framework-for-telemetry/&quot;&gt;Spark&lt;/a&gt;.&lt;/li&gt;
      &lt;li&gt;The learning curve can be a bit steep, so the perf team can do one-off analyses for you.&lt;/li&gt;
      &lt;li&gt;We have additional performance dashboards; they are listed in the “More Dashboards” sidebar on &lt;a href=&quot;https://telemetry.mozilla.org/&quot;&gt;telemetry.mozilla.org&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Always set the “alert_mails” field for your histogram in &lt;a href=&quot;http://mxr.mozilla.org/mozilla-central/source/toolkit/components/telemetry/Histograms.json&quot;&gt;Histograms.json&lt;/a&gt; so you get automatic e-mail notifications of performance regressions and improvements.
    &lt;ul&gt;
      &lt;li&gt;Ideally, this email address should point to an alias for your team.&lt;/li&gt;
      &lt;li&gt;Note that the Telemetry &lt;a href=&quot;http://mozilla.github.io/cerberus/dashboard/&quot;&gt;regression detector&lt;/a&gt; has an extremely low false-positive rate so you won’t be getting any emails unless performance has changed significantly.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Keep an eye out on the Talos scores&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The Talos tests are much less noisy now than they used to be, and more sensitive as well. This is thanks to Avi Halachmi’s, Joel Maher’s, and others’ efforts.&lt;br /&gt;
  Partly as a result of this, we now have a stricter Talos sheriffing policy. The patch author has 3 business days to respond to a Talos regression bug (before getting backed out), and two weeks to decide what to do with the regression.&lt;/li&gt;
  &lt;li&gt;Joel Maher will file a regression bug against you if you regress a Talos test.&lt;/li&gt;
  &lt;li&gt;The list of unresolved regressions in each release is tracked in the meta bugs: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1084461&quot;&gt;Firefox 36&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1108235&quot;&gt;Firefox 37&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1122690&quot;&gt;Firefox 38&lt;/a&gt;, etc&lt;/li&gt;
  &lt;li&gt;Joel tracks all the improvements together with all the regressions in a &lt;a href=&quot;http://alertmanager.allizom.org:8080/alerts.html?showAll=1&quot;&gt;dashboard&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;If you cause a regression that you can’t reproduce on your own machine, you can capture a profile directly inside the Talos environment:
&lt;a href=&quot;https://wiki.mozilla.org/Buildbot/Talos/Profiling&quot;&gt;https://wiki.mozilla.org/Buildbot/Talos/Profiling&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;MattN has an excellent tool for comparing the scores of two Talos pushes: &lt;a href=&quot;http://compare-talos.mattn.ca/&quot;&gt;http://compare-talos.mattn.ca/&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Some Talos tests can be run locally as extensions, others may require you to set up a &lt;a href=&quot;https://wiki.mozilla.org/Buildbot/Talos/Running#Running_locally_-_Source_Code&quot;&gt;Talos harness&lt;/a&gt;. Instructions for doing this will be provided in the Talos regression bugs from now on.&lt;/li&gt;
  &lt;li&gt;The &lt;a href=&quot;http://graphs.mozilla.org/graph.html&quot;&gt;graph server&lt;/a&gt; can show you a history of test scores and test noise to help you determine if the reported regression is real.
    &lt;ul&gt;
      &lt;li&gt;William Lachance is working on a new &amp;amp; improved graphing UI for treeherder.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. Consider writing a new Talos test&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://wiki.mozilla.org/Buildbot/Talos/Misc#Adding_a_new_test&quot;&gt;Add a new Talos test&lt;/a&gt; if the performance of your feature is important and it is not covered by existing tests. The Perf team would be happy to help you design a meaningful and reliable test.&lt;/li&gt;
  &lt;li&gt;Make sure your test measures the right things, isn’t noisy and that it is is able to detect real regressions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I initially posted this message for discussion on the &lt;a href=&quot;https://groups.google.com/forum/#!topic/firefox-dev/ZJn00jAkEjM&quot;&gt;firefox-dev&lt;/a&gt; and &lt;a href=&quot;https://groups.google.com/d/msg/mozilla.dev.platform/eXnB52BA2A4/wTTkuQRihg4J&quot;&gt;mozilla.dev.platform&lt;/a&gt; newsgroups. This is now also a &lt;a href=&quot;https://wiki.mozilla.org/Performance/Evaluating_Performance_of_New_Features&quot;&gt;wiki page&lt;/a&gt; in the &lt;a href=&quot;https://wiki.mozilla.org/Performance&quot;&gt;Performance wiki&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 30 Jan 2015 00:00:00 -0500</pubDate>
        <link>http://blog.vladan.org/2015/01/30/how-to-evaluate-the-performance-of-your-new-firefox-feature.html</link>
        <guid isPermaLink="true">http://blog.vladan.org/2015/01/30/how-to-evaluate-the-performance-of-your-new-firefox-feature.html</guid>
        
        
      </item>
    
      <item>
        <title>Diagnosing a Talos ts_paint regression on Windows XP</title>
        
          <dc:creator>Vladan</dc:creator>
        
        <description>&lt;p&gt;Recently, I worked on diagnosing a &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=880611&quot;&gt;3% startup time regression&lt;/a&gt; in the &lt;a href=&quot;https://wiki.mozilla.org/Buildbot/Talos/Tests#ts_paint&quot;&gt;Talos ts_paint&lt;/a&gt; benchmark and I thought I’d share my experience with others who might be dealing with a similar regression.&lt;/p&gt;

&lt;h3 id=&quot;procedure&quot;&gt;Procedure&lt;/h3&gt;

&lt;p&gt;My first step was to reproduce the regression on a Windows XP machine under my control. To prep the machine, I turned off unneeded &lt;a href=&quot;http://www.netsquirrel.com/msconfig/&quot;&gt;background services&lt;/a&gt; to prevent them from interfering with measurements, created new Firefox profiles, configured Firefox to stop checking for updates and to use a blank page as its homepage, disabled extensions (that had been installed system-wide), and launched Firefox several times so that any data needed from disk during startup would be cached (ts_paint measures “hot” startups). I also wrote a batch script to automate the launching and shutting down of Firefox so that I could easily collect data from dozens of startups.&lt;/p&gt;

&lt;p&gt;Finally, I turned on Telemetry data gathering since Telemetry records timestamps for each startup phase. During Firefox exit, Telemetry writes the collected data as a JSON file in &lt;strong&gt;&amp;lt;profile directory&amp;gt;\saved-telemetry-pings\,&lt;/strong&gt; so every time I launched &amp;amp; shut down Firefox, it would spit out a new JSON file containing the startup timings. You can see a list of the startup times collected by Telemetry in the “Simple Measurements” section of your Firefox’s about:telemetry page.&lt;/p&gt;

&lt;p&gt;I then wrote a simple Python script to extract and format the startup data from the Telemetry JSON file. This is &lt;a href=&quot;https://github.com/vdjeric/tools&quot;&gt;the script&lt;/a&gt; and these are &lt;a href=&quot;https://docs.google.com/spreadsheet/ccc?key=0AvVupx3cwu4edEtIeXhCTUZJbEFERXQwS1NfWEVhdnc&amp;amp;usp=sharing&quot;&gt;the results in a Google Docs spreadsheet&lt;/a&gt;. The regression is highlighted in red in the spreadsheet. The times show surprisingly little variation between runs and suggest that the regression is entirely contained in the startup phase directly preceding the first paint of a Firefox window. Luckily, the Gecko profiler has already been initialized at this point of startup so it was possible to capture profiles of the browser’s activity. &lt;a href=&quot;http://matthew.noorenberghe.com/blog&quot;&gt;Matt Noorenberghe&lt;/a&gt; and &lt;a href=&quot;http://mikeconley.ca/blog/&quot;&gt;Mike Conley&lt;/a&gt; were able to show that at least part of this regression is caused by initialization of the new “Customize UI” functionality and painting of tabs inside the titlebar (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=910283&quot;&gt;bug 910283&lt;/a&gt;).&lt;/p&gt;

&lt;h3 id=&quot;problems-profiling-on-windows-xp&quot;&gt;Problems profiling on Windows XP&lt;/h3&gt;

&lt;p&gt;I first tried profiling the startup regression with XPerf and I soon discovered that setting up XPerf on Windows XP s a surprisingly cumbersome task. I had to install XPerf from the &lt;a href=&quot;http://www.microsoft.com/en-us/download/details.aspx?id=24826&quot;&gt;Microsoft Windows SDK for Windows Server 2008&lt;/a&gt; on a different computer running a more modern, 32-bit version of Windows (XP wouldn’t work, I used Vista), and then I manually copied xperf.exe onto the Windows XP machine. Unfortunately, I found that &lt;a href=&quot;http://blogs.msdn.com/b/pigscanfly/archive/2009/08/06/stack-walking-in-xperf.aspx&quot;&gt;it’s not possible to profile with stackwalking enabled on XP&lt;/a&gt; and also that the captured profiles can’t be examined on an XP machine, requiring yet more copying to a newer Windows machine.&lt;/p&gt;

&lt;p&gt;I also found that the pseudo-stack and native stack frames were not being interleaved properly in the Gecko Profiler on Windows XP (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=900524&quot;&gt;bug 900524&lt;/a&gt;). This was particularly irksome since it meant the JS and C++ stacks would not be merged correctly. It turned out that the version of StackWalk64 that shipped with dbghelp.dll in Windows XP was not walking the data stack properly and that replacing it with a newer version from &lt;a href=&quot;http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx&quot;&gt;Debugging Tools for Windows&lt;/a&gt; resolved the problem.&lt;/p&gt;
</description>
        <pubDate>Wed, 18 Sep 2013 00:00:00 -0400</pubDate>
        <link>http://blog.vladan.org/2013/09/18/diagnosing-a-talos-ts_paint-regression-on-windows-xp.html</link>
        <guid isPermaLink="true">http://blog.vladan.org/2013/09/18/diagnosing-a-talos-ts_paint-regression-on-windows-xp.html</guid>
        
        
      </item>
    
      <item>
        <title>A quick Firefox startup update</title>
        
          <dc:creator>Vladan</dc:creator>
        
        <description>&lt;p&gt;Recently I’ve been working on a &lt;a href=&quot;https://wiki.mozilla.org/Performance/#Reducing_time_to_first_paint_-_Phase_1&quot;&gt;project&lt;/a&gt; to improve desktop Firefox’s startup time during “cold starts” where none of the Firefox binaries or data are cached in memory (e.g. the first launch of the browser after a reboot). I’ve been paying special attention to the time required to reach the “first paint” startup milestone: the point in time when the first Firefox window becomes visible.&lt;/p&gt;

&lt;p&gt;The analysis has mostly consisted of profiling the latest Firefox Nightlies using &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Performance/Profiling_with_Xperf&quot;&gt;XPerf&lt;/a&gt; on a reference dual-core Windows 7 laptop with a magnetic HDD. I’ve been working on several bugs arising from the investigation (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=881575&quot;&gt;bug 881575&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=881578&quot;&gt;bug 881578&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=827976&quot;&gt;bug 827976&lt;/a&gt;,  &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=879957&quot;&gt;bug 879957&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=873640&quot;&gt;bug 873640&lt;/a&gt;) and I have many more coming. This is an overview of a few challenges I’ve run into over the last month.&lt;/p&gt;

&lt;h3 id=&quot;making-startup-times-reproducible&quot;&gt;Making startup times reproducible&lt;/h3&gt;

&lt;p&gt;I wanted to evaluate the impact of my experimental code changes by comparing startups, but I quickly discovered that there is a tremendous amount of variation in startup times in my test environment. I then turned off &lt;a href=&quot;http://en.wikipedia.org/wiki/Prefetcher&quot;&gt;Windows Prefetching&lt;/a&gt; &amp;amp; &lt;a href=&quot;http://www.tomshardware.com/reviews/windows-vista-superfetch-and-readyboostanalyzed,1532-2.html&quot;&gt;Windows SuperFetch&lt;/a&gt;, two performance features responsible for pre-fetching files from disk based on the user’s usage patterns, but I still recorded excessive variation in start times.&lt;/p&gt;

&lt;p&gt;I then turned off a plethora of 3rd-party and Windows services that were running in the background and accessing the disk: Windows Update &amp;amp; Indexing Service, OEM “boot optimizer” software, Flash &amp;amp; Chrome automatic updaters, graphics card configuration &amp;amp; monitoring software bundled with drivers, etc. After rebooting the laptop several times and disabling any remaining programs causing disk activity, I was finally able to achieve reproducible startup times. I expected that cold starts would be dominated by disk I/O, but I was suprised by just how heavily I/O operations dominated startup time in a vanilla Firefox install.&lt;/p&gt;

&lt;h3 id=&quot;startup-time-has-improved-almost-30-over-the-last-year&quot;&gt;Startup time has improved almost 30% over the last year&lt;/h3&gt;

&lt;p&gt;In an attempt to reproduce the startup regression reported in &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=818257&quot;&gt;bug 818257&lt;/a&gt;, I compared time to first paint for Firefox 13.0.1 and Firefox 21.0 using my test setup. To my surprise, I found Firefox 21.0 (current release channel) requires roughly 4.6 seconds to reach first paint during cold starts, while Firefox 13.0.1 (release channel from a year ago) required ~6.4 seconds! This is almost a 30% reduction in startup time.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://docs.google.com/spreadsheet/pub?key=0Aq4ElA0owpEbdDhMNjh0V3pDT09Hck82UnZRaWJRTXc&amp;amp;single=true&amp;amp;gid=0&amp;amp;output=html&quot;&gt;See the raw results from 5 runs in a Google Docs spreadsheet here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I was surprised by this result because I expected increases in code size and the overhead from initializing new components added over the course of a year to cause regressions in startup. On the other hand, many people have landed patches to improve startup by postponing component initialization and generally reducing the amount of work done before the first-paint milestone. I haven’t tried to identify the patches responsible yet, but from a quick look at the XPerf profiles for each version, it looks like there were gains from fixing &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=756313&quot;&gt;bug 756313&lt;/a&gt;  (“Don’t load homepage before first paint”) and from changing the list of Mozilla libraries pre-loaded at startup (see &lt;em&gt;dependentlibs.list&lt;/em&gt;).&lt;/p&gt;

&lt;h3 id=&quot;we-are-still-fsync-ing-too-much-at-startup&quot;&gt;We are still fsync()-ing too much at startup&lt;/h3&gt;

&lt;p&gt;Apparently, the &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/windows/desktop/aa364439%28v=vs.85%29.aspx&quot;&gt;FlushFileBuffers&lt;/a&gt; function on Windows causes the OS  to flush everything in the write-back cache as it &lt;a href=&quot;http://blogs.msdn.com/b/ce_base/archive/2006/03/15/increasefsthroughput.aspx&quot;&gt;“does not know what part of the cache belongs to your file”&lt;/a&gt;. As you can imagine, calling FlushFileBuffers is bad news for Firefox startups even it’s done off the main thread – other I/O requests will be delayed while the disk is busy writing data. Unfortunately we are currently calling this method on browser startup to write out the &lt;em&gt;webapps.json&lt;/em&gt; file, the &lt;em&gt;sessionstore.js&lt;/em&gt; file, and several SafeBrowsing files. The flush method isn’t being called directly, rather it’s the &lt;em&gt;SafeFileOutputStream&lt;/em&gt; and &lt;em&gt;OS.File.writeAtomic()&lt;/em&gt; implementations that force flushes for maximum reliability. In general, we should avoid calling methods that fsync/FlushFileBuffers unless such reliability is explicitly required, and I’ve asked &lt;a href=&quot;http://dutherenverseauborddelatable.wordpress.com/&quot;&gt;Yoric&lt;/a&gt; to change &lt;em&gt;OS.File.writeAtomic()&lt;/em&gt; behavior to forego flushing by default.&lt;/p&gt;

&lt;h3 id=&quot;next-steps&quot;&gt;Next steps&lt;/h3&gt;

&lt;p&gt;I’m continuing to work on reducing the number of DLL loads triggered at startup and I’ll soon be filing bugs for fixing some of the smaller sources of startup I/O.&lt;/p&gt;
</description>
        <pubDate>Tue, 25 Jun 2013 00:00:00 -0400</pubDate>
        <link>http://blog.vladan.org/2013/06/25/a-quick-firefox-startup-update.html</link>
        <guid isPermaLink="true">http://blog.vladan.org/2013/06/25/a-quick-firefox-startup-update.html</guid>
        
        
      </item>
    
      <item>
        <title>Performance Update, Issue #3</title>
        
          <dc:creator>Vladan</dc:creator>
        
        <description>&lt;p&gt;&lt;em&gt;This is a post summarizing the activities of the Performance team over the past week. You can see the full weekly Engineering progress report for all teams here: &lt;a href=&quot;https://wiki.mozilla.org/Platform/2013-06-11&quot;&gt;https://wiki.mozilla.org/Platform/2013-06-11&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Mark Reid joined the Perf team. He will be working on the Telemetry backend reboot&lt;/li&gt;
  &lt;li&gt;Dhaval Giani joined the Perf team as a summer intern. Dhaval is a Master’s student at the University of Toronto where he works on detecting bugs in applications of RCU locking. Dhaval’s first internship project is storing Firefox caches in volatile (purgeable) memory on Android &amp;amp; B2G (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=748598&quot;&gt;bug 748598&lt;/a&gt;?)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=867757&quot;&gt;bug 867757&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=867762&quot;&gt;bug 867762&lt;/a&gt;: Aaron Klotz is extending the Gecko Profiler to support arbitrary annotations&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=881578&quot;&gt;bug 881578&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=881575&quot;&gt;bug 881575&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=879957&quot;&gt;bug 879957&lt;/a&gt;: I wrote a few small improvements to reduce startup I/O&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=880296&quot;&gt;bug 880296&lt;/a&gt;: We need to load fewer DLLs on startup&lt;/li&gt;
  &lt;li&gt;Nathan Froyd is looking into improving Firefox startup on Android&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=813742&quot;&gt;bug 813742&lt;/a&gt;: Nathan is also working on parallelizing the reftest and crashtest suites&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=872421&quot;&gt;bug 872421&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=880664&quot;&gt;bug 880664&lt;/a&gt;: Yoric landed a module loader for chrome workers&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=853388&quot;&gt;bug 853388&lt;/a&gt;: Irving &amp;amp; Felipe continue to work on converting Addon Manager storage from SQLite to JSON, and moving its I/O off the main thread&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The team blogged about their work:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Avi&lt;/strong&gt;: &lt;a href=&quot;http://avih.github.io/blog/2013/06/10/tabstrip-4-vsync-and-newtab/&quot;&gt;http://avih.github.io/blog/2013/06/10/tabstrip-4-vsync-and-newtab/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Yoric&lt;/strong&gt;: &lt;a href=&quot;http://dutherenverseauborddelatable.wordpress.com/2013/06/05/project-async-responsive-issue-3/&quot;&gt;http://dutherenverseauborddelatable.wordpress.com/2013/06/05/project-async-responsive-issue-3/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Irving&lt;/strong&gt;: &lt;a href=&quot;http://www.controlledflight.ca/2013/05/31/saving-browser-state-asynchronously/&quot;&gt;http://www.controlledflight.ca/2013/05/31/saving-browser-state-asynchronously/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Julian Seward&lt;/strong&gt;: &lt;a href=&quot;https://blog.mozilla.org/jseward/2013/06/03/profiler-backend-news-3-june-2013/&quot;&gt;https://blog.mozilla.org/jseward/2013/06/03/profiler-backend-news-3-june-2013/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Tue, 11 Jun 2013 00:00:00 -0400</pubDate>
        <link>http://blog.vladan.org/2013/06/11/performance-update-issue-3.html</link>
        <guid isPermaLink="true">http://blog.vladan.org/2013/06/11/performance-update-issue-3.html</guid>
        
        
      </item>
    
      <item>
        <title>Performance Update, Issue #2</title>
        
          <dc:creator>Vladan</dc:creator>
        
        <description>&lt;p&gt;&lt;em&gt;This is my regularly scheduled post summarizing performance work from the past two weeks. Alternate title: Vlad’s Big Bowl of Performance Chilli&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The Performance team had its first monthly status meeting. We decided on projects and set goals &amp;amp; timelines: &lt;a href=&quot;https://wiki.mozilla.org/Performance#Projects&quot;&gt;wiki&lt;/a&gt;. The next meeting is on Thursday, June 6th @ 11am PDT (Vidyo room “Performance”), people from other teams who are working on related projects will be invited.&lt;/p&gt;

&lt;p&gt;Main thread I/O continues to be a major source of Firefox jank. To illustrate this point, I ran Nightly 23 with its profile stored on an SD card and captured a &lt;a href=&quot;http://www.youtube.com/watch?v=XzSQS7sHgI8&quot;&gt;screen recording&lt;/a&gt;. The results were not pretty, as Firefox hung repeatedly during common actions (see &lt;a href=&quot;/2013/05/02/running-nightly-23-from-an-sd-card.html&quot;&gt;blog post&lt;/a&gt;). Patrick McManus posted a band-aid patch (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=868441&quot;&gt;bug 868441&lt;/a&gt;) that will allow Firefox to by-pass the network cache when locking in the network cache is taking too long. The long-term solution is a &lt;a href=&quot;https://wiki.mozilla.org/Necko/Cache/Plans/Draft_Proposal&quot;&gt;network cache re-design&lt;/a&gt;. Aaron Klotz and Joel Maher are working on detecting when new sources of main-thread I/O are added to the code in our test environment (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=644744&quot;&gt;bug 644744&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Drew Willcoxon wrote a patch to capture page thumbnails (for about:home) in the background (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=841495&quot;&gt;bug 841495&lt;/a&gt;). Once it’s hooked up, this will move the thumbnailing operation off the main thread and will allow Firefox to take snapshots of sites loaded without cookies to avoid capturing sensitive data.&lt;/p&gt;

&lt;p&gt;Other fixes:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=852467&quot;&gt;bug 852467&lt;/a&gt;: nsDisableOldMaxSmartSizePrefEvent runs on the gecko main thread, blocks for long periods of time&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=649216&quot;&gt;bug 649216&lt;/a&gt;: Remove unnecessary delay when clicking tab close buttons sequentially&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=699331&quot;&gt;bug 699331&lt;/a&gt;: Reduce impact of font name enumeration at startup&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The team blogged about progress on their longer-term projects:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://blog.mozilla.org/jseward/2013/04/30/profiler-backend-news-30-april-2013/&quot;&gt;Julian Seward: Profiler backend news&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://avih.github.io/blog/2013/05/06/tabstrip-animation-number-3/&quot;&gt;Avi Halchmi: Tabstrip Animation Progress&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.controlledflight.ca/2013/05/03/add-on-manager-progress/&quot;&gt;Irving Reid: Add-On Manager Progress&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://dutherenverseauborddelatable.wordpress.com/2013/04/26/project-async-responsive-issue-1/&quot;&gt;David Teller: Project “Async &amp;amp; Responsive” Progress&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Tue, 07 May 2013 00:00:00 -0400</pubDate>
        <link>http://blog.vladan.org/2013/05/07/progress-on-performance-issue-2.html</link>
        <guid isPermaLink="true">http://blog.vladan.org/2013/05/07/progress-on-performance-issue-2.html</guid>
        
        
      </item>
    
  </channel>
</rss>
