It’s been a bumper two weeks for MemShrink.
Gregor Wagner tweaked the JS garbage collection heuristics on B2G so that collections occur more frequently. This prevents too much garbage from accruing, which is important on low-memory B2G devices.
Justin Lebar disabled sync on B2G, because it isn’t used.
Justin also implemented the ability to dump GC/CC logs when a particular signal is received, which is particularly useful for B2G.
B2G’s Operation Slim Fast is in full swing. Please see the tracking bug for details about what is happening. While there are a number of important fixes in the pipeline, memory consumption is still a critical issue for B2G simply because the devices don’t have much memory in the first place. Any additional help from Mozilla developers will be greatly appreciated. For example, if anyone can help identify unnecessary compartments, that would be helpful.
Boris Zbarsky improved the reporting coverage of style sheets. We’ve seen this improved coverage account for over 1% of explicit on desktop and over 2% of explicit on B2G.
Nathan Froyd added memory reporting for telemetry.
Testing With Valgrind
Gary Kwong has done some heroic work recently getting Valgrind tests passing on Tinderbox. (Strictly speaking, the tests run Memcheck, which is the default Valgrind tool and is synonymous with Valgrind) His blog post about it is well worth reading.
This is important for MemShrink because Memcheck can detect an important class of memory leaks — ones where all references to a block of memory are lost and so the block leaks forever. But it’s also important for Firefox as a whole because Memcheck can detect a slew of other memory-related errors, such as writing unaddressable memory (e.g. buffer overruns) and using undefined values in dangerous ways. These are the kinds of defects that cause crashes, security vulnerabilities, and other major problems.
The tests are currently hidden on TBPL because they only run on mozilla-central once a day, which is generally not enough for a test suite to be reliable enough to be worth unhiding. Having said that, the ability to write suppressions for errors found with Memcheck complicates considerations; see bug 800435 for further discussion.
Gregg Lind fixed things so that our Aurora/Beta users are certain to get an up-to-date, non-leaky version of the Test Pilot add-on. (Version 1.1.2 was the leaky version; version 1.2.0 or later has the fix.) This was a longstanding MemShrink:P1 bug.
Erik Vold fixed a zombie compartment in Scriptish. Version 0.1.8 has the fix.
Josep del Rio fixed a zombie compartment in Speed Dial. Version 0.9.6.10 has the fix.
Boris Zbarsky fixed a bad zombie compartment leak relating to expandos. This was a recent regression, and the fix is present on Aurora and Beta. The problem was first reported in the comments of my MemShrink report from four weeks ago — many thanks to Alex for reporting it and preventing it from reaching an official Firefox release!
Here are the current bug counts.
- P1: 19 (-2/+5)
- P2: 101 (-2/+6)
- P3: 91 (-6/+0)
- Unprioritized: 13 (-1/+11)
The unprioritized count is high because we spent the first part of today’s MemShrink meeting talking with Gavin Sharp, Jared Wein and Felipe Gomes about the upcoming social API, and then spent some additional time discussing B2G with David Clarke. As a result we didn’t have time to triage the 23 new MemShrink bugs. We’ve scheduled an out-of-band MemShrink meeting for next week to get on top of the bug list.
Visiting Mountain View
I’ll be in Mountain View all next week for the JS team work week. I’ll be happy to meet up with anyone who wants to talk about memory consumption!