Hi everyone,

Last week many of you attended the Mozilla All Hands at San Francisco.  I
didn't attend the All Hands myself but from the activity on Bugzilla it
looks like it was a productive week.  :-)  The intention behind the work
week this time was to do focused work leveraging the face to face time that
people have together with the goal of improving the 57 release.  In the
areas that I watch daily these days (mostly Speedometer V2 and [qf:p1]
bugs) the focus was really great, and you will see the details in the
acknowledgement section at the bottom.  I hope that reflects how the week
was for everyone who attended!

There were 26 [qf:p1] bugs fixed during the week
<http://www.chesnok.com/daily/2017/07/03/runtime-all-hands-june-2017-summary/>,
and progress were made on many more others.  A lot of these are tricky bugs
often times requiring changes to old or complex code, so this is an
impressive number!  There was also some fantastic progress on Speedometer,
a lot of improvements landed on the JS engine side, we found a few new
issues to work on during measurements, and the work is making progress at a
good pace.  Profiling Speedometer has been really interesting, there is so
much code that runs under the benchmark that we keep finding new issues as
we keep looking at various narrow portions of profiles.  The graphs below
show the progress in the last couple of weeks (note the new test runs on
PGO builds on the reference hardware!).
[image: Win 8 64-bit (i7-4700HQ) (score went up from about 97 to 102)]
<https://arewefastyet.com/#machine=35&view=single&suite=speedometer-misc&subtest=score&start=1498121501&end=1499362823>
Win 8 64-bit (i7-4700HQ)






[image: Score went up from about 68 to 71]
<https://arewefastyet.com/#machine=36&view=single&suite=speedometer-misc&subtest=score&start=1498264100&end=1499389808>
Quantum Reference (Windows x64)

One important performance related project that also landed was budget based
background timeout throttling
<https://bugzilla.mozilla.org/show_bug.cgi?id=1362322>.  This is the
initial implementation of the heuristic
<https://developers.google.com/web/updates/2017/03/background_tabs> that
Chrome shipped for throttling the timeouts running in background tabs based
on a budget scheme (which means if a background tab runs too much timers,
it will get throttled.)  There is still work
<https://bugzilla.mozilla.org/show_bug.cgi?id=1377766> remaining to be done
before we can enable this feature but but it's great to see it get to this
stage.  This will be another step we are taking to deal with the issue of
background tabs that run too many timeouts.

One final note, next week I will be away on vacation, so once again you can
expect the next one of these in two weeks!  With that said, now it's time
to acknowledge the help of those of you who contributed to making Firefox
faster these past two weeks!  I hope I am not forgetting any names by
mistake.

   - Olli Pettay made it so that we don’t GC on shutdown
   <https://bugzilla.mozilla.org/show_bug.cgi?id=833143>, which should help
   with shutdown speed.  He also made us avoid dispatching a
   selectionchange event for pages that do not have such a listener registered
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1374416>.  He also made
   nsContentList stop receiving DOM mutation events when its refcount drops to
   0 while it’s waiting for deferred deletion to clean it up
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1376936>.  He also made
   the forgetSkippable phase of the cycle collector more incremental by
   honoring the slice budget
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1376614>.
Additionally he made
   the IME code in the content process only cache properties at animation tick
   time <https://bugzilla.mozilla.org/show_bug.cgi?id=1375491> in order to
   avoid flushing layout too eagerly.  This was showing up as slowness on
   Twitter <https://bugzilla.mozilla.org/show_bug.cgi?id=1373023>.
   - Mats Palmgren improved PresArea free list retention strategy for small
   arrays to avoid malloc/free churns
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1375331>.  He also made
   media elements use a simpler mutation observer than a heavy-weight Range
   object <https://bugzilla.mozilla.org/show_bug.cgi?id=1374875>.  He
also removed
   a synchronous layout flush from the media elements code
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1375075> which was no
   longer necessary.
   - William Chen reordered element and attribute name hashes
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1366241> used in the HTML
   parser so that the binary search algorithm can be switched to use level
   order
   <http://bannalia.blogspot.ca/2015/06/cache-friendly-binary-search.html>
   to utilize better CPU cache efficiency.  This improves the speed of looking
   up string names for elements and attributes when parsing HTML.
   - Jan de Mooij sped up the handling of the unicode ‘.’ character class
   ranges when parsing regular expressions
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1373195>.  He also optimized
   Object.assign by porting it from the self-hosted JavaScript implementation
   to a faster C++ implementation
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1364854>.  He also avoided
   a TLS lookup for each compartment check
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1376961> and optimized
   Object.protototype.toString
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1376799>.  He also sped up
   FinishOffThreadBuilder on multi-core systems
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1377238>, and eliminated
   some unnecessary copying when converting functions to strings
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1377489>.  He improved the
   inlining of Array.isArray() in IonMonkey
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1376691>.  Last but not
   least he enabled finalizing external strings in the background
   <https://bugzilla.mozilla.org/show_bug.cgi?id=627220>.
   - André Bargull made us avoid repeated string atomizations when
   retrieving the unresolved name of a bound function
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1371593>.  He also added
   an opportunistic optimization for avoiding memory allocations during
   case conversions of inline strings
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1367779>.
   - Ryan Hunt landed the initial implementation of asynchronous scrolling
   using keyboard events
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1351783>.  This is
   currently disabled by default, pending being turned on
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1376525> when the
   remaining dependencies get resolved.
   - Milan Sreckovic relanded Gerald Squelart’s fix for removing the
   PContent::Msg_GetGfxVars sync IPC
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1337062> after fixing the
   race conditions in the original patch.  He also relanded Gerald’s
fix for removing
   the PContent::Msg_GetGraphicsDeviceInitData sync IPC message
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1337063>.
   - Kan-Ru Chen made us attempt to reset the timer only once per
   osfile.reset_worker_delay
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1353731>.
   - Gijs Kruitbosch avoided instantiating the panelview and panelmultiview
   XBL bindings while opening a browser window
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1374691>.
   - Perry Jiang removed the main-thread IO from CrashSubmit.jsm and
   KeyValueParser.jsm <https://bugzilla.mozilla.org/show_bug.cgi?id=862178>.
   - Ray Lin removed synchronous layout flushes from the built-in <video>
   controls when they’re being constructed
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1373537>.
   - Ting-Yu Chou added a cache for properties not present on DOM Xray
   wrappers in order to speed up looking up non-existent properties on such
   wrappers <https://bugzilla.mozilla.org/show_bug.cgi?id=1348099>.  This
   is part of the ongoing work to improve the speed of accessing web page
   content from privileged JS code, as commonly done by WebExtensions that
   need to interact with pages and also similar browser features implemented
   in JS.
   - Michael Layzell got rid of the PContent::Msg_CreateWindow sync IPC
   message <https://bugzilla.mozilla.org/show_bug.cgi?id=1343728>!  He
also removed
   the PBrowser::Msg_GetWidgetNativeData sync IPC message
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1350633>.  He also enabled
   collecting native backtraces for Background Hang Reports on Linux on Nightly
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1365309>.  He also fixed a
   recent performance regression caused by sending down permissions to a newly
   created content process
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1374665>.
   - Evelyn Hung made it so that we start speculative connection
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1348275> when
   autocompleting in the AwesomeBar.
   - JW Wang made it so that we can’t block the main thread when acquiring
   a lock inside VideoFrameContainer::InvalidateWithFlags
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1377025> by getting rid of
   the mutex entirely.
   - Andreas Farre added budget-based background timeout throttling
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1362322> to help smooth
   our random jank that might occur from background timers running in the
   browser.
   - Alessio Placitelli moved the telemetry session pings to the idle queue
   after the sleep-wake or idle-active cycles
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1369734>.
   - Cervantes Yu made telemetry collect information about the amount of
   allocated heap asynchronously
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1375281>.
   - Bao Quan ported the code responsible for creating XPath expressions
   for session restore to C++
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1362330>.  This helps
   improve the performance of this code, and reduce the amount of GC pressure
   caused as a result of the code running.
   - Florian Quèze added a test for keeping track of the JS components and
   modules that get loaded during content process startup
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1378171> to prevent
   gradual slowdown of startup in the content process by adding unintended
   dependencies to the critical path.  He also converted the remaining
   Promise.defer() uses in the front-end code to either  use
   PromiseUtils.defer() or new Promise()
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1034599>.
   - Boris Zbarsky made the JS wrapper object for DOM NodeList objects to
   be allocated in the incremental collector’s nursuery
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1376954>.  This allows
   these wrapper objects to be collected incrementally in case the web page
   script doesn’t store a long-living reference to them.
   - Milind L. replaced the findNodeByDetails method with a faster map of
   nodes by details <https://bugzilla.mozilla.org/show_bug.cgi?id=1107364>
   to speed up the lookups.
   - Thomas Nguyen moved the Windows UI sound player backend to run on a
   background thread <https://bugzilla.mozilla.org/show_bug.cgi?id=1363163>
   to avoid janking the main thread.  This is the code that plays system
   sounds in response to user interactions with the browser UI.
   - Ben Kelly avoided hashtable lookups to read an almost static
   preference when Window.setTimeout()/setInterval() is called
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1375287>.
   - Samael Wang enabled IPDL timeout for communicating with the GPU process
   <https://bugzilla.mozilla.org/show_bug.cgi?id=1362166>, to enable
   recovering from cases where the GPU process is too slow to respond to
   messages.
   - Marco Bonardo converted PlacesTransaction to the new asynchronous
   Bookmarks.jsm API <https://bugzilla.mozilla.org/show_bug.cgi?id=1095425>.


Cheers,
-- 
Ehsan
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to