Benoit Girard: Profiler @ Snappy Work Week
Last week I attended the snappy work week with goal of syncing up with Julian Seward and Mike Hommey regarding the new Breakpad unwinding feature, planning and prioritizing new feature work. I also got lots of valuable feedback. Here’s what you need to know if you’re a frequent user of the Gecko Profiler.
Breakpad Unwinding (Mobile)For the last few months Julian has been spearheading integrating the breakpad unwinding feature to the Gecko Profiler. This turned out to be a very complicated task because we’re trying to use Breakpad for something it wasn’t meant to do. This work is now landed but it only works in a very specific build configuration (unwind tables, unpacking the libraries, no elfhack). We are currently working on addressing these problems to make it work in the default Nightly configuration.
Our current target is to use Breakpad unwinding in the Linux May 1st nightly. A week later have the Fennec nightly support breakpad unwinding. I’m hoping afterwards to support Breakpad unwinding on B2G central (not b2g18) but I expect this may be difficult on a memory constraint phone so I currently have no estimate for this at this time.
If you looked at the code for the profiler you may notice TableTicker1+TableTicker2. During the work week we refactored the code significantly to address this code duplication while resolving inconsistencies between the frame-pointer unwinder and the Breakpad unwinder.
Multi-Thread/Multi-Process SupportThe profiler will soon support showing samples and timelines for multiple threads. This is already somewhat supported on B2G if you use a script written by Vlad. This will become easier as we begin to add multi-thread support to all the platform backends (already in progress for Mac and Linux) thanks to the help of James Willcox. This ties in heavily with the next two section (IPDL/Plugins).
Plugin SupportPlugin issues have long been identified as the single biggest contributor to responsiveness issues by Vladan‘s Chrome Hang work. This was the topic of the break out discussion headed by Benjamin Smedberg. We discussed a plan of attack by adding profiling to the plugin process which should land this week but require a manual step. This feature will let us know what’s going on in the plugin process when the browser’ main thread is waiting for an IPC response (and vice versa). It will improve as we add profiling support for profiling IPDL messages.
Flash initializing audio on plugin-container startup.
IPDL Message SupportDuring the week we decided to add profiler labels to each IPDL call automatically. That will help where the unwinder isn’t supported but doesn’t give us the data we need. In particular we’re looking to get better data about how IPDL messages are queued, how long they take to get dequeued and to processed. Combined with the Plugin support this should help us diagnose complex issues with our plugin-container or get better data on how particular plugins are hurting the responsiveness of the browser. Georg Fritzsche has an excellent plan in bug 853864 on how to implement this.
Taras Glek: snappy #53: Faster: Startup, Image Decoding, Touchpad Input. Smoother Animations
Joe Drew taught Firefox to decode images on multiple threads. It took a mere 29 patches in bug 716140. This should speed up page-load and improve tab-switch times. This task was considered too hard a year ago when Snappy people were discussing potential improvements.
Masayuki Nakano improved Firefox scrolling responsiveness on modern touchpads in bug 829952. Dealing with scroll-events on Windows is a mess. It’s nice when we make forward progress in this area.
Marco Bonardo fixed a mysterious cause of main thread IO I ran into in bug 830423. I ran into this issue because I compulsively navigate to about:telemetry in Firefox and look in ‘Slow SQL Statements’ and ‘Browser Hang’ sections. I encourage readers of this blog to check out that data whenever Firefox is under-performing.
Startupbug 810151 + bug 810454 - Aaron Klotz implemented omnijar + cookie readahead.
bug 648407 - Mike Hommey folded libraries for faster startup. If I’m reading bug 852068 correctly, Firefox now loads 7 fewer libraries on startup. My rough rule of thumb is that each (small) file adds ~30ms to spinning-disk startup so this should net >200ms in startup savings.
Cumulative startup improvements are notoriously difficult to predict + measure, but I suspect that above changes should make for a >=10% speedup in Firefox 22 start over previous releases. We’ll be watching telemetry data in the coming weeks.
Smoothnessbug 590422 - Avi Halachmi is continuing on his quest to make Firefox animate smoothly. This is another tricky step towards smoother animations in Firefox. Since landing this, Avi already embarked on the next gecko-level animation smoothness improvement.
Marco Bonardo spotted some potential for contention in recent DOM Local Storage optimizations. Vladan Djeric landed corrections in bug 842852.
Throughput improvementsEhsan Akhgari reduced allocator contention in bug 733277.
Tim Taubert taught Firefox to warm up newtab connections on hover bug 790882
Brandon Savage: Abstraction In The Real World
Rumbling Edge - Thunderbird: 2013-03-24 Calendar builds
Common (excluding Website bugs)-specific: (16)
- Fixed: 349529 – Investigate in-view task UI of tasks with missing date or due date
- Fixed: 489162 – No accept/ decline button for invitations with GCal
- Fixed: 687412 – “Save Event” dialog pops up when closing an unmodified event
- Fixed: 707966 – METHOD=CANCEL shows as processed event, but cannot be opened
- Fixed: 732393 – Cannot edit or delete task in cached CalDAV calendar [Error: this.mItemInfoCache[aNewItem.id] is undefined]
- Fixed: 733822 – Update internal timezone database from version 2011n to version 2013a
- Fixed: 757762 – [Linux] alarms too late / internal time wrong after resuming from sleep / suspend / hibernation mode
- Fixed: 815815 – Minimonth bold days get reloaded (again) if clicked on day, using ‘Next’ and ‘Prev’ in day view does not
- Fixed: 827279 – Show Accept/Decline buttons even for processed messages in imip bar
- Fixed: 833720 – ICS calendars cause process threads leak and high memory
- Fixed: 840913 – Remove use of nsISupportsArray in Calendar’s treeview implementation [Error: TypeError: aProps is undefined]
- Fixed: 848138 – Tooltips for tasks show Priority item as “Medium” instead of “Normal”
- Fixed: 848424 – Show EXDATE and modified occurrences in email invitation template
- Fixed: 849026 – Task view: task-details-container appears with no task selected
- Fixed: 849797 – resPathComponents[endBasePos] is undefined
- Fixed: 852673 – Provide source code package for Lightning 1.9.1
Sunbird will no longer be actively developed by the Calendar team.
Rumbling Edge - Thunderbird: 2013-03-24 Thunderbird comm-central builds
Thunderbird-specific: (24)
- Fixed: 263736 – Group by sort feature with sort by “Date” uses “Old Mail” in RSS folders and newsgroup
- Fixed: 459474 – Cannot open some PDF attachments
- Fixed: 533682 – Difficulty finding/getting to All Folders from Unified Folders
- Fixed: 547995 – FORWARD should not allow you to forward message to sender.
- Fixed: 708550 – Cannot copy version string from “About Thunderbird” dialogue window (regression)
- Fixed: 765074 – Compose window shows reference count leaks on shutdown
- Fixed: 781333 – Use 2x images for HiDPI Thunderbird UI
- Fixed: 794575 – Tag button in header toolbar not monochrome
- Fixed: 825452 – system integration dialog says ‘Skip integration’ even when launched from preferences
- Fixed: 832666 – Remove on Win8 the fog on tabbar
- Fixed: 833028 – Subjects with mixed ASCII and MIME words are incorrectly displayed
- Fixed: 840954 – Add mozbase to the list of packaged directories for Thunderbird’s tests
- Fixed: 842920 – Thunderbird Windows builds are broken due to regression in disable-webRTC
- Fixed: 844175 – Twitter stays on Connecting: Requesting user timelines…
- Fixed: 844373 – clean up _flagNameList iterating in mail/base/content/folderPane.js
- Fixed: 844432 – Give Edit buttons a hover state
- Fixed: 844463 – packaging after build fails, if configure with –disable-updater
- Fixed: 845819 – Overlay grain.png on the Folder Pane
- Fixed: 846706 – Username is confusing in the context of creating an IRC account.
- Fixed: 847187 – Permaorange: TEST-UNEXPECTED-FAIL | /home/cltbld/talos-slave/test/build/xpcshell/tests/dom/mobilemessage/tests/test_smsservice_createsmsmessage.js | test failed (with xpcshell return code: 3)
- Fixed: 848292 – Icons for special IMAP folder (Inbox, trash, …) are not shown when folder is shared
- Fixed: 849215 – Overlay grain.png on the Chat Pane.
- Fixed: 851117 – Repack comm-aurora using in-tree mozconfigs, objdirs, and pre-built mar tools
- Fixed: 852252 – Daily: latest update : no mail folders visible
MailNews Core-specific: (23)
- Fixed: 454932 – assertion in nsVoidArray::FastElementAt() trying to find a connection in the cache
- Fixed: 514136 – Increase the size of the char array for imap command tag
- Fixed: 524662 – Customize Headers window is prompted twice (Creating/adding customized filter header or removing it requires to click ‘OK’ twice)
- Fixed: 542995 – clean up VC4.x support defines
- Fixed: 616229 – crash [@ nsMsgXFGroupThread::SetMsgHdrAt(unsigned int, nsIMsgDBHdr*)]
- Fixed: 648980 – Add build system hooks for allowing applications to provide their own configure options and autoconf variables
- Fixed: 655428 – “Reply with Template” Filter replies to From field, not Reply-To field
- Fixed: 681219 – make method name of nsISmtpService decent
- Fixed: 809990 – Don’t set the offline folder flag for SPAM and TRASH folders
- Fixed: 818607 – Memory leak when Message Compose Window is opened
- Fixed: 825449 – Filter editor: Accesskey for ‘Perform these actions’ should set/move focus to first action item (at the moment invisible/not shown)
- Fixed: 829208 – External API build busted after bug 807678
- Fixed: 831485 – _virtualenv and mozilla/_virtualenv in each c-c objdir
- Fixed: 834612 – building Mozilla fails because of NS_ENSURE_SUCCESS in mailnews/import/oexpress/nsOEScanBoxes.cpp
- Fixed: 834757 – Remove [noscript] methods from nsIMimeConverter
- Fixed: 840230 – replace nsISupportsArray variable mailnews/base/src/nsMessenger*Integration.*::mFoldersWithNewMail
- Fixed: 845089 – Thunderbird build config changes in a moz.build world
- Fixed: 846694 – “Trust junk mail headers set by” dropdown shows only a number 5
- Fixed: 846983 – Linux bustage on package-manifest:114: Missing file(s): bin/components/dom_sms.xpt
- Fixed: 849612 – Fix build problems caused by Bug 847195 [error: nsIDOMNamedNodeMap.h: No such file or directory]
- Fixed: 850088 – TEST-UNEXPECTED-FAIL | check-sync-dirs.py | build file copies are not in sync
- Fixed: 850389 – Move XPIDL variables to moz.build files
- Fixed: 850466 – do some trivial optimisations in mailnews/base/utils/folderUtils.jsm
Official Windows, Official Windows installer
Robert Kaiser: MaKey MaKey Experiments
When I ran across it again on ThinkGeek, I put it on my wish list - and finally ordered one this month. Now, after I had wrapped up this week of work, I finally found some time to play with it, and an interesting and very geeky Friday night ensued. Here's a bit more about that - and about Saturday, and further plans/ideas.
So, for one thing, I wanted to use this device with actual Open Web stuff, and not with Flash or other proprietary software. After all, this is Open Hardware (yay!) and I'm entirely entrenched in Open Source / Free Software, from using Linux on desktop, laptop and server, via working for Mozilla/Firefox, to doing some web apps under the MPL2 license in my free time. So, given the latter, I decided it would be nice if I could navigate the OSM world with my Lantea Maps app/site (source) using the MaKey Makey. For that, I had to put some keyboard accessibility into Lantea Maps itself, which is a good idea for accessibility, among other things, anyhow. So I did that, looking at Chris' testy-testy and MDN to find out how to achieve that best. I ended up implementing methods to move the map with the arrow keys, hooked up zoom in/out to +/- keys as well as w/s (the latter are supported by MaKey MaKey out of the box), and then also created direct shortcuts to certain zoom levels with the 0-9 numeric keys (not supported by MaKey Makey, but convenient for keyboard users).
OK, then it was time to actually bring in the MaKey MaKey. I really want to do some fruit stuff at some point, but I only had a few apples around, and I thought it actually would be nice to create some kind of navigation pad that can be used with Lantea Maps at full screen when having an OpenStreetMap booth at Linuxwochen in Vienna. I figured that with some cardboard from the back of an old note pad, and some tinfoil, that should be doable. I added some plastic wrap for insulation, glue of course, and some paper clips so the crocodile clips to connect to the MaKey MaKey wouldn't scratch the tinfoil too much (as well as some temporary applied ones to hold things together while allowing the glue to dry). Here's some photos from production:
Note that the back side as well as the right rim of the pad is covered with a single sheet of tinfoil that makes the earth connection quite naturally when you hold the pad in your hands.
As of the last photo, while the glue was still drying, it was ready to use for some map navigation (and after the night, I removed the temporary paper clips and took another "promotional" picture):
Even while getting to bed that evening, the ideas for my next project were flying around in my mind already. On one hand, I saw that MaKey MaKey had connectors for mouse up/down/left/right, on the other hand, ever since trying the original BananaBread demo as someone who's usually not doing any first person shooter games, I wondered if there was a nicer or more obvious way to operate this, rather than using w/a/s/d keys for movement, space/click for jump/fire, and mouse for turning. Well, now that I had done this first custom pad for MaKey MaKey, would there be a handy solution for that as well? In any case, it would be fun. So I took a smaller piece of cardboard that would make this thing fit nicely into my hands (just like those professional game pads), and decided this time I would try something slightly different by using coins as the actual "buttons" on the pad. One-cent coins looked like the right size, and I had a 10-pin cable around from a different project, which would fit for the 10 "keys" pretty well (just that I needed one more for earthing, which I again did with a sheet of tinfoil at the back of the pad, so I added yet another single cable in the end). Also, this time I used some double-sided tape instead of glue for many cases, as that works better with the cable and coins:
And then I was ready to play some BananaBread, now with both the awesomeness of running a 3D first person shooter seamlessly in the browser AND using a special game pad for playing!
If you're interested, not only are those pictures all linked to the gallery where you can go up to "big" versions of those, there's a few more steps of building visible in this photo gallery.
Given all that and the fact that Linuxwochen Wien in the first days of May has an additional focus on Open Hardware this year, I decided to hand in a proposal for a talk on MaKey MaKey there. I intend to show off those pads as well as Chris' photo booth and any other MaKey MaKey experiments that I can fit, preferably ones that run as web pages/apps (let me know if there are any nice ones).
I'm thinking that it could be nice to have an app that shows you on screen in a web site which kind of fruit/item you touched (configurable with key <-> item entries), and I'd love a web (not Flash) piano and/or drumset (using ogg or even opus files with HTML5 audio!) app to present, maybe I can hack something up if there's nothing around.
If this has caught your interest, it's easy to get your own MaKey MaKey, and if you're in or around Vienna in the first days of May, I'd be happy to meet you at my talk (there will be a Firefox OS App workshop as well, probably!) - oh, and if you have any nice, open web apps/pages that show off this device, let me know!
Imprisioned Contributor, 1 Year Later
Yesterday makes it a full year since Creative Commons and Mozilla contributor Bassel Khartibil was imprisoned by the Syrian regime. Last July a public campaign was launched, and Mozilla participated .
This public campaign to #freebassel may have played a significant role in getting Bassel moved from a military intelligence to a civilian prison with visitation rights.
We continue to urge support for the #freebassel campaign by visiting the website, tweeting about Bassel’s case (#freebassel), or attending an event in his honor.
