As per the recent Status Meeting, 2.35 will be the next release. So 2.33.x and 2.34 won’t be spun/released.
The process of getting 2.35 done is what we’re working on but there are a few bits and pieces still missing. I’ll update this blog as soon as I get a chance to get those pieces jiving with what I have.
Up until recently, anytime you pushed a patch series to MozReview, a single attachment would be created on the bug associated with the push.
That single attachment would link to the “parent” or “root” review request, which contains the folded diff of all commits.
We noticed a lot of MozReview users were (rightfully) confused about this mapping from Bugzilla to MozReview. It was not at all obvious that Ship It on the parent review request would cause the attachment on Bugzilla to be r+’d. Consequently, reviewers used a number of workarounds, including, but not limited to:
- Manually setting the r+ or r- flags in Bugzilla for the MozReview attachments
- Marking Ship It on the child review requests, and letting the reviewee take care of setting the reviewer flags in the commit message
- Just writing “r+” in a MozReview comment
Anyhow, this model wasn’t great, and caused a lot of confusion.
So it’s changed! Now, when you push to MozReview, there’s one attachment created for every commit in the push. That means that when different reviewers are set for different commits, that’s reflected in the Bugzilla attachments, and when those reviewers mark “Ship It” on a child commit, that’s also reflected in an r+ on the associated Bugzilla attachment!
I think this makes quite a bit more sense. Hopefully you do too!
I’m on vacation this week, but the show must go on! So I pre-recorded a shorter episode of The Joy of Coding last Friday.
I demo the tool, and then I explain how it works. After I finished the episode, I pushed to repository to GitHub, and you can check that out right here.
So I’ll see you next week with a full length episode! Take care!
Which, several times, I mistakenly refer to as the 15th episode, and not the 16th. Whoops. ↩
Common (excluding Website bugs)-specific: (23)
- Fixed: 768207 – Make the cache checkbox default-on in the new calendar dialog
- Fixed: 1049591 – Fix lots of strict warnings
- Fixed: 1086573 – Lightning and Thunderbird disagree about timezone support in ics files
- Fixed: 1099592 – Make JS callers of ios.newChannel call ios.newChannel2 in calendar/
- Fixed: 1149423 – Add Windows timezone names to list of aliases
- Fixed: 1151011 – Calendar events show up on wrong day when printing
- Fixed: 1151440 – Choose a color not responsive when creating a New calendar in Lightning 4.0b1
- Fixed: 1153327 – Run compare-locales with merging for Lightning
- Fixed: 1156015 – Email scheduling fails for recipients with URN id
- Fixed: 1158036 – Support sendMailTo for URN type attendees
- Fixed: 1159447 – TEST-UNEXPECTED-FAIL | xpcshell-icaljs.ini:calendar/test/unit/test_extract.js
- Fixed: 1159638 – Getter fails in calender-migration-dialog on first run after installation
- Fixed: 1159682 – Provide a more appropriate “learn more” page on integrated Lightning firstrun
- Fixed: 1159698 – Opt-out dialog has a button for “disable”, but actually the addon is removed
- Fixed: 1160728 – Unbreak Lightning 4.0b4 beta builds
- Fixed: 1162300 – TEST-UNEXPECTED-FAIL | xpcshell-libical.ini:calendar/test/unit/test_alarm.js | xpcshell return code: 0
- Fixed: 1163306 – Re-enable libical tests and disable ical.js in nightly builds when binary compatibility is back
- Fixed: 1165002 – Lightning broken, tries to load libical backend although “calendar.icaljs” defaults to “true”
- Fixed: 1165315 – TEST-UNEXPECTED-FAIL | xpcshell-icaljs.ini:calendar/test/unit/test_bug759324.js | xpcshell return code: 1 | ###!!! ASSERTION: Deprecated, use NewChannelFromURI2 providing loadInfo arguments!
- Fixed: 1165497 – TEST-UNEXPECTED-FAIL | xpcshell-icaljs.ini:calendar/test/unit/test_alarmservice.js | xpcshell return code: -11
- Fixed: 1165726 – TEST-UNEXPECTED-FAIL | /builds/slave/test/build/tests/mozmill/testBasicFunctionality.js | testBasicFunctionality.js::testSmokeTest
- Fixed: 1165728 – TEST-UNEXPECTED-FAIL | xpcshell-icaljs.ini:calendar/test/unit/test_bug494140.js | xpcshell return code: -11
Sunbird will no longer be actively developed by the Calendar team.
- Fixed: 401779 – Integrate Lightning Into Thunderbird by Default and Ship Thunderbird with Lightning Enabled
- Fixed: 717292 – Spell check language setting for subject and body not synchronized, but temporarily appears so when changing language and depending on focus (confusing ux)
- Fixed: 914225 – Support hotfix add-on in Thunderbird
- Fixed: 1025547 – newmailaccount/jquery.tmpl.js, line 123: reference to undefined property def
- Fixed: 1088975 – Answering mail with sendername containing encoded special chars and comma creates two “To”-entries
- Fixed: 1101237 – Remove distribution directory during install
- Fixed: 1109178 – Thunderbird OAuth implementation does not work with Evernote
- Fixed: 1110166 – Port |Bug 1102219 – Rename String.prototype.contains to String.prototype.includes| to comm-central
- Fixed: 1113097 – Fix misuse of fixIterator
- Fixed: 1130854 – Package Lightning with Thunderbird
- Fixed: 1131997 – Adapt for Debugger Server code for changes in bug 1059308
- Fixed: 1135291 – Update chat log entries added to Gloda since bug 955292 to use relative paths
- Fixed: 1135588 – New conversations get indexed twice by gloda, leading to duplicate search results
- Fixed: 1138154 – Plugins default to “always activate” in Thunderbird
- Fixed: 1142879 – [meta] track Mozilla-central (Core) issues that we want to have fixed in TB38
- Fixed: 1146698 – Chat Messages added to logs just before shutdown may not be indexed by gloda
- Fixed: 1148330 – Font indicator doesn’t update when cursor is placed in text where core returns sans-serif (Windows). Serif and monospace don’t work (Linux).
- Fixed: 1148512 – TEST-UNEXPECTED-FAIL | mailnews/imap/test/unit/test_dod.js | xpcshell return code: 0||1 | streamMessages – [streamMessages : 94] false == true | application crashed [@ mozalloc_abort(char const * const)]
- Fixed: 1149059 – splitter in compose window can be resized down to completely obscure composition area
- Fixed: 1151206 – Using a theme hides minimize, maximize and close button in composer window [Mac]
- Fixed: 1151475 – Remove use of expression closures in mail/
- Fixed: 1152299 – [autoconfig] Cosmetic changes for WEB.DE config
- Fixed: 1152706 – Upgrade to Correspondents column (combined To/From column) too agressive
- Fixed: 1152796 – chrome://messenger/content/folderDisplay.js, line 697: TypeError: this._savedColumnStates.correspondentCol is undefined
- Fixed: 1152926 – New mail sound preview doesn’t work for default system sound on Mac OS X
- Fixed: 1154737 – Permafail: TEST-UNEXPECTED-FAIL | toolkit/components/telemetry/tests/unit/test_TelemetryPing.js | xpcshell return code: 0
- Fixed: 1154747 – TEST-UNEXPECTED-FAIL | /builds/slave/test/build/tests/mozmill/session-store/test-session-store.js | test-session-store.js::test_message_pane_height_persistence
- Fixed: 1156669 – Trash folder duplication while using IMAP with localized TB
- Fixed: 1157236 – In-content dialogs: Port bug 1043612, bug 1148923 and bug 1141031 to TB
- Fixed: 1157649 – TEST-UNEXPECTED-FAIL | dom/push/test/xpcshell/test_clearAll_successful.js (and most other push tests)
- Fixed: 1158824 – Port bug 138009 to fix packaging errors | Missing file(s): bin/defaults/autoconfig/platform.js
- Fixed: 1159448 – Thunderbird ignores proxy settings on POP3S protocol
- Fixed: 1159627 – resource:///modules/dbViewWrapper.js, line 560: SyntaxError: unreachable code after return statement
- Fixed: 1159630 – components/glautocomp.js, line 155: SyntaxError: unreachable code after return statement
- Fixed: 1159676 – mailnews/mime/jsmime/test/test_custom_headers.js | run_next_test 0 – TypeError: _gRunningTest is undefined at /builds/slave/test/build/tests/xpcshell/head.js:1435 (and other jsmime tests)
- Fixed: 1159688 – After switching/changing the window layout, dragging the splitter between threadpane and messagepane can create gray/grey area/space (misplaced notificationbox)
- Fixed: 1159815 – Take bug 1154791 “Inline spell checker loses red underlines after a backspace is used – take two” in Thunderbird 38
- Fixed: 1159817 – Take “Bug 1100966 – Inline spell checker loses red underlines after a backspace is used” in Thunderbird 38
- Fixed: 1159834 – Consider taking “Bug 756984 – Changing location in editor doesn’t preserve the font when returning to end of text/line” in Thunderbird 38
- Fixed: 1159923 – Take bug 1140105 “Can’t query for a specific font face when the selection is collapsed” in TB 38
- Fixed: 1160105 – Fix strict mode warnings in protovis-r2.6-modded.js
- Fixed: 1160106 – “Searching…” spinner at the bottom of gloda search results never goes away
- Fixed: 1160114 – Strict mode warnings on faceted search
- Fixed: 1160805 – Missing Windows and Linux nightly builds, build step set props: previous_buildid fails
- Fixed: 1161162 – “Join Chat” doesn’t focus the newly joined MUC
- Fixed: 1162396 – Take bug 1140617 “Pasting an image loses the composition style” in TB38
- Fixed: 1163086 – Take bug 967494 “changing spellcheck language in one composition window affects all open and new compositions” in TB38
- Fixed: 1163299 – “TypeError: getBrowser(…) is null” in contentAreaClick with Lightning installed and started in calendar view
- Fixed: 1163343 – Incorrectly formatted error message “sending failed”
- Fixed: 1164415 – Error in comment for imapEnterServerPasswordPrompt
- Fixed: 1164658 – TypeError: Cc[‘@mozilla.org/weave/service;1’] is undefined at resource://gre/modules/FxAccountsWebChannel.jsm:227
- Fixed: 1164707 – missing toolkit_perfmonitoring.xpt in aurora builds
- Fixed: 1165152 – Take bug 1154894 in TB 38 branch: Disable test_plugin_default_state.js so Thunderbird can ship with plugins disabled by default
- Fixed: 1165320 – TEST-UNEXPECTED-FAIL | /builds/slave/test/build/tests/mozmill/notification/test-notification.js
MailNews Core-specific: (30)
- Fixed: 610533 – crash [@ nsMsgDatabase::GetSearchResultsTable(char const*, int, nsIMdbTable**)] with virtual folder
- Fixed: 745664 – Rename Address book aaa to aaa_test, delete another address book bbb, and renamed address book aaa_test will lose its name and appear deleted after restart (dataloss! involving localized names)
- Fixed: 777770 – get rid of nsVoidArray from /mailnews
- Fixed: 786141 – Use nsIFile.exists() instead of stat to check the existence of the file
- Fixed: 1069790 – Email addresses with parenthesis are not pretty-printed anymore
- Fixed: 1072611 – Ctrl+P not working from Composition’s Print Preview window
- Fixed: 1099587 – Make JS callers of ios.newChannel call ios.newChannel2 in mail/ and mailnews/
- Fixed: 1130248 – |To: “firstname.lastname@example.org” <email@example.com>| becomes |”firstname.lastname@example.org”@example.com| when I compose mail to it
- Fixed: 1138220 – some headers are not not properly capitalized
- Fixed: 1141446 – Behaviour of malformed rfc2047 encoded From message header inconsistent
- Fixed: 1143569 – User-agent error when posting to NNTP due to RFC5536 violation of Tb (user-agent header is folded just after user-agent:, “user-agent:[CRLF][SP]Mozilla…”)
- Fixed: 1144693 – Disable libnotify usage on Linux by default for new-mail notifications (doesn’t always work after bug 858919)
- Fixed: 1149320 – fix compile warnings in mailnews/extensions/
- Fixed: 1150891 – Port package-manifest.in changes from Bug 1115495 – Part 2: PAC generator for browsing and system wide proxy
- Fixed: 1151782 – Inputting 29th Feb as a birthday in the addressbook contact replaces it with 1st Mar.
- Fixed: 1152364 – crash in Address Book via nsAbBSDirectory::GetChildNodes nsCOMArrayEnumerator::operator new(unsigned int, nsCOMArray_base const&)
- Fixed: 1152989 – Account Manager Extensions broken in Thunderbird 37/38
- Fixed: 1154521 – jsmime fails on long references header and e-mail gets sent and stored in Sent without headers
- Fixed: 1155491 – Support autoconfig and manual config of gmail IMAP OAuth2 authentication
- Fixed: 1155952 – Nesting level does not match indentation
- Fixed: 1156691 – GUI “Edit filters”: Conditions/actions (for specfic accounts) not visible
- Fixed: 1156777 – nsParseMailbox.cpp:505:55: error: ‘do_QueryObject’ was not declared in this scope
- Fixed: 1158501 – Port bug 1039866 (metro code removal) and bug 1085557 (addition of socorro symbol upload API)
- Fixed: 1158751 – Port NO_JS_MANIFEST changes | mozbuild.frontend.reader.SandboxValidationError: calendar/base/backend/icaljs/moz.build
- Fixed: 1159255 – Build error: MSVC_ENABLE_PGO = True is not permitted to be used in mailnews/intl/moz.build
- Fixed: 1159626 – chrome://messenger/content/accountUtils.js, line 455: SyntaxError: unreachable code after return statement
- Fixed: 1160647 – Port |Bug 1159972 – Remove the fallible version of PL_DHashTableInit()| to comm-central
- Fixed: 1163347 – Don’t require scope in ispdb config for OAuth2
- Fixed: 1165737 – Fix usage of NS_LITERAL_CSTRING in mailnews, port Bug 1155963 to comm-central
- Fixed: 1166842 – Re-enable binary extensions for comm-central
You might have noticed that I had no “Things I’ve Learned This Week” post last week. Sorry about that – by the end of the week, I looked at my Evernote of “lessons from the week”, and it was empty. I’m certain I’d learned stuff, but I just failed to write it down. So I guess the lesson I learned last week was, always write down what you learn.How to make your mozilla-central Mercurial clone work faster
I like Mercurial. I also like Git, but recently, I’ve gotten pretty used to Mercurial.
One complaint I hear over and over (and I’m guilty of it myself sometimes), is that “Mercurial is slow”. I’ve even experienced that slowness during some of my Joy of Coding episodes.
This document did not exist when I first started working with Mercurial – back then, I was using mq or sometimes pbranch, and grumbling about how I missed Git.
But there is some gold in this document.
gps has been doing some killer work documenting best practices with Mercurial, and this document is one of the results of his labour.
watchman is a tool that some folks at Facebook wrote to monitor changes in a folder. hgwatchman is an extension for Mercurial that takes advantage of watchman for a repository, smartly precomputing a bunch of stuff when the folder changes so that when you fire a command, likehg status
It takes a fraction of the time it’d take without hgwatchman. A fraction.
Here’s how I set hgwatchman up on my MacBook (though you should probably go by the Mercurial for Mozillians doc as the official reference):
- Install watchman with brew: brew install watchman
- Clone the hgwatchman extension to some folder that you can easily remember and build it: hg clone https://bitbucket.org/facebook/hgwatchman cd hgwatchman make local
- Add the following lines to my user .hgrc: [extensions] hgwatchman = cloned-in-dir/hgwatchman/hgwatchman
- Make sure the extension is properly installed by running: hg help extensions
- hgwatchman should be listed under “enabled extensions”. If it didn’t work, keep in mind that you want to target the hgwatchman directory
- And then in my mozilla-central .hg/.hgrc: [watchman] mode = on
- Boom, you’re done!
Congratulations, hg should feel snappier now!
In Episode 15, we kept working on the same bug as the last two episodes – proxying the printing dialog on OS X to the parent process from the content process. At the end of Episode 14, we’d finished the serialization bits, and put in the infrastructure for deserialization. In this episode, we did the rest of the deserialization work.
And then we attempted to print a test page. And it worked!
We did it!
Then, we cleaned up the patches and posted them up for review. I had a lot of questions about my Objective-C++ stuff, specifically with regards to memory management (it seems as if some things in Objective-C++ are memory managed, and it’s not immediately obvious what that applies to). So I’ve requested review, and I hope to hear back from someone more experienced soon!
I also plugged a new show that’s starting up! If you’re a designer, and want to see how a designer at Mozilla does their work, you’ll love The Design Hour, by Ricardo Vazquez. His design chops are formidable, and he shows you exactly how he operates. It’s great!
Finally, I failed to mention that I’m on holiday next week, so I can’t stream live. I have, however, pre-recorded a shorter Episode 16, which should air at the right time slot next week. The show must go on!
Keeping Firefox zippy involves running performance tests on each push to make sure we’re not making Firefox slower.
How does that even work? This used to be a mystery. NO LONGER. jmaher lets you peek behind the curtain here in the first episode of Lost in Data!
In this episode, I kept working on the same bug as last week – proxying the print dialog from the content process on OS X. We actually finished the serialization bit, and started doing deserialization!
Hopefully, next episode we can polish off the deserialization and we’l be done. Fingers crossed!
Note that this episode was about 2 hours and 10 minutes, but the standard-definition recording up on Air Mozilla only plays for about 13 minutes and 5 seconds. Not too sure what’s going on there – we’ve filed a bug with the people who’ve encoded it. Hopefully, we’ll have the full episode up for standard-definition soon.
On Firefox Hello, we recently added the eslint linter to be run against the Hello code base. We started of with a minimal set of rules, just enough to get us something running. Now we’re working on enabling more rules.
Since we enabled it, I feel like I’m able to iterate faster on patches. For example, if just as I finish typing I see something like:
Now I think about it, I’m realising it has also helped reduced the amount of review nits on my patches – due to trivial formatting mistakes being caught automatically, e.g. trailing white-space or missing semi-colons.
Talking about reviews, as we’re running eslint on the Hello code, we just have to apply the patch, and run our tests, and we automatically get eslint output:
Hopefully our patch authors will be running eslint before uploading the patch anyway, but this is an additional test, and a few less things that we need to look at during review which helps speed up that cycle as well.
I’ve also put together a global config file for eslint (see below), that I use for outside of the Hello code, on the rest of the Firefox code base (and other projects). This is enough, that, when using it in my editor it gives me a reasonable amount of information about bad syntax, without complaining about everything.
I would definitely recommend giving it a try. My patches feel faster overall, and my test runs are for testing, not stupid-mistake catching!
Want more specific details about the setup and advantages? Read on…
You need to have eslint installed globally, or at least in your path, other than that, just follow the installation instructions given on the SublimeLinter page.
One configuration I change I did have to make to the global configuration:
- Select “Preferences” -> “Settings – More” -> “Syntax Specific – User”
- In the file that appears, set the configuration up as follows (or whatever suits you):
I’ve uploaded my global configuration to a gist, if it changes I’ll update it there. It isn’t intended to catch everything – there’s too many inconsistencies across the code base for that to be sensible at the moment. However, it does at least allow general syntax issues to be highlighted for most files – which is obviously useful in itself.
I haven’t yet tried running it across the whole code base via eslint on the command line – there seems to be some sort of configuration issue that is messing it up and I’ve not tracked it down yet.
Firefox Hello’s Configuration
The configuration files for Hello can be found in the mozilla-central source. There’s a few of these because we have both content and chrome code, and some of the content code is shared with a website that can be viewed by most browsers, and hence isn’t currently able to use all the es6 features, whereas the chrome code can. This is another thing that eslint is good for enforcing.
Our eslint configuration is evolving at the moment, as we enable more rules, which we’re tracking in this bug.
Had to deal with some network issues during this video – sorry if people were getting dropped frames during the live show! I have personally checked this recording, and almost all frames are there.
The only frames that are missing are the ones where I scramble around to connect to the wired network, which was boring anyhow.
In this episode, I worked on proxying the print dialog from the content process on OS X. It was a wild ride, and I learned quite a bit about Cocoa stuff. It was also a throwback to my very first episode, where I essentially did the same thing for Linux!
We’ll probably polish this off in the next episode, or in the episode after.
I actually discovered this during my most recent Joy of Coding episode – there is a static utility method to convert between native Cocoa NSStrings and Gecko nsAStrings – nsCocoaUtils::GetStringForNSString. Very handy, and works exactly as advertised.An “Attach to Process by pid” Keyboard Shortcut for XCode
I actually have colleague Garvan Keeley to thank for this one, and technically I learned this on April 24th. It was only this week that I remembered I had learned it!
When I’m debugging Firefox on OS X, I tend to use XCode, and I usually attach to Firefox after it has started running. I have to navigate some menus in order to bring up the dialog to attach to a process by pid, and I was getting tired of doing that over and over again.
So, as usual, I tweeted my frustration:
Dear lazyweb – is there an XCode keyboard shortcut for “Attach to Process” > “By Process Identifier (PID) or Name”? Mousing it blows.
— Mike Conley (@mike_conley) April 24, 2015
AND LO, THE INTERNET SPOKE BACK:
It seems small, but the savings in time for something that I do so frequently quickly adds up. And it always feels good to go faster!
During July I’ll be visiting family in Mongolia but I’ve also a few things that are very geeky that I want to do.
The first thing I want to do is plug the Ripe Atlas probes I have. It’s litle devices that look like that :
They enable anybody with a ripe atlas or ripe account to make measurements for dns queries and others. This helps making a global better internet. I have three of these probes I’d like to install. It’s good because last time I checked Mongolia didn’t have any active probe. These probes will also help Internet become better in Mongolia. I’ll need to buy some network cables before leaving because finding these in mongolia is going to be challenging. More on atlas at https://atlas.ripe.net/.
The second thing I intend to do is map Mongolia a bit better on two projects the first is related to Mozilla and maps gps coordinateswith wifi access point. Only a little part of The capital Ulaanbaatar is covered as per https://location.services.mozilla.com/map#11/47.8740/106.9485 I want this to be way more because having an open data source for this is important in the future. As mapping is my new thing I’ll probably edit Openstreetmap in order to make the urban parts of mongolia that I’ll visit way more usable on all the services that use OSM as a source of truth. There is already a project to map the capital city at http://hotosm.org/projects/mongolia_mapping_ulaanbaatar but I believe osm can server more than just 50% of mongolia’s population.
I got inspired to write this post by mu son this morning, look what he is doing at 17 months :
Thunderbird meeting notes 2015-05-05. NOON PT (Pacific). Check https://wiki.mozilla.org/Thunderbird/StatusMeetings for meeting time conversion, previous meeting notes and call-in detailsAttendees
aceman, aleth, Jorg K, merike, rkent, roland, wsmwk, MakeMyDay, rolandtanglaoAction items from last meetings
- (done) wsmwk to pat glandium
- (done) wsmwk to email hiro’s bug list to tb-planning
- (done) rkent to review tracking list http://mzl.la/1EOx9Tm
Critical bugs. Leave these here until they’re confirmed fixed. If confirmed, then remove.
- AMO compatibility bump! (is not going to happen)
- In general, the tracking-tb38 flag shows what are critical issues. In the next week or so, that list will be culled to only include true blockers for the Thunderbird 38 release. There will still be many.
- maildir UI: nothing more to do for UI, still want to land a patch for letting IMAP set this.
- gloda IM search regressions: mostly fixed, some db cleanup necessary for users of TB33+
- aleth landed a fix to stop duplicated entries from appearing, nhnt11 patch to clean up the databases of Aurora/Beta/Daily has landed and is awaiting uplift
removing from critical list/fixed:
- We need to decide on how to do release branching. I am uncertain whether Lightning integration requires this or not.
- –> We’ve created THUNDERBIRD_38_VERBRANCH on mozilla-release
- Lightning integration (below) really REALLY critical that we get this finished.
- –> Patches landed, testing beta 2015-04-30
- 31.6.0 shipped
- 38.0b3 shipped 2015-04-26 Sunday
- 38.0b4 shipped 2015-05-03 Sunday
- 38.0b5 (build Fri 5/8? when?)
- 38.0 on May 26?
- 31.7.0 2015-05-12+ Tues+
- As underpass has pointed out repeatedly (thanks for your patience!) , we need to rewrite / heavily modify the lightning articles on support.mozilla.org. let me know irc: rolandtanglao on #tb-support-crew or rtanglao AT mozilla.com OR simply start editing the articles
- We need to fill the “Learn More” page with content, possibly point it to something more specific bug 1159682
- Opt-out dialog: change “disable” to “remove” bug 1159698
- tracking bug for lightning 4.0 bug 1153752
- Thunderbird Events calendar created – send me your events to be added/corrections
- xml https://www.google.com/calendar/feeds/mozilla.com_707562313030%40resource.calendar.google.com/public/basic
- ical https://www.google.com/calendar/ical/mozilla.com_707562313030%40resource.calendar.google.com/public/basic.ics (For google calendar, on the google web page pick “Other Calendars”, “Add by URL”, paste in the ical link – enable email or sms reminders if you wish in Settings | Calendar)
- html https://www.google.com/calendar/embed?src=mozilla.com_707562313030%40resource.calendar.google.com
- Mail composition/spelling: bug 967494, bug 717292 (inline spell dictionary inconsistent), waiting for review by M Conley.
- Editor losing style after image paste: bug 1140617
- bug 1141446 – JSMIME regression, still awaiting final review
- Today looked at “double Trash” issue 1156669
- rail in releng seems to believe that we cannot overlap tb 31 and tb 38 and claims that was the previous practice, but Standard8 does not remember this the same way. At the moment I have been told that we cannot start building on the esr38 repo without disabling builds on esr31. This is still a developing story … until resolved I think we need to keep using comm-beta for TB 38 betas.
- we have a backlog of jsmime issues, jcranmer has been quite tied up with real life. Several of us have been trying to fix these, but we need reviews.
- Let’s review the critical tracking-38 bugs (29 at last count) http://mzl.la/1EOx9Tm
- thunderbird hotfix support – bug 914225 ready to land
— PLEASE INCLUDE YOUR NICK with your bullet item —aleth
Some testing/verification that chat logs are now being properly and completely indexed by gloda would be helpful, cf bug 1146698 (landed on c-c, a possible candidate for uplift).Support team
- Roland owes sumo kb article links for release notes. Hope to have stub articles ready today
- PLEASE PUT THE NEXT MEETING IN YOUR (LIGHTNING) CALENDAR
- Note – meeting notes must be copied from etherpad to wiki before 5AM CET next day so that they will go public in the meeting notes blog.
Have you been using Firefox Nightly and seen this big annoying spinner?
I hate that thing. I hate it.
And while we’re working on making the spinner itself less ugly, I’d like to eliminate, or at least reduce its presence to the absolute minimum.
How do I do that? Well, first, know your enemy.What does it even mean?
That big spinner means that the graphics part of Gecko hasn’t given us a frame yet to paint for this browser tab. That means we have nothing yet to show for the tab you’ve selected.
In the single-process Firefox that we ship today, this graphics operation of preparing a frame is something that Firefox will block on, so the tab will just not switch until the frame is ready. In fact, I’m pretty sure the whole browser will become unresponsive until the frame is ready.
With Electrolysis / multi-process Firefox, things are a bit different. The main browser process tells the content process, “Hey, I want to show the content associated with the tab that the user just selected”, and the content process computes what should be shown, and when the frame is ready, the parent process hears about it and the switch is complete. During that waiting time, the rest of the browser is still responsive – we do not block on it.
So there’s this window of time where the tab switch has been requested, and when the frame is ready.
During that window of time, we keep showing the currently selected tab. If, however, 300ms passes, and we still haven’t gotten a frame to paint, that’s when we show the big spinner.
So that’s what the big spinner means – we waited 300ms, and we still have no frame to draw to the screen.How bad is it?
I suspect it varies. I see the spinner a lot less on my Windows machine than on my MacBook, so I suspect that performance is somehow worse on OS X than on Windows. But that’s purely subjective. We’ve recently landed some Telemetry probes to try to get a better sense of how often the spinner is showing up, and how laggy our tab switching really is. Hopefully we’ll get some useful data out of that, and as we work to improve tab switch times, we’ll see improvement in our Telemetry numbers as well.Where is the badness coming from?
I also seem to see the spinner when I have “many” tabs open (~30), and have a build going on in the background (so my machine is under heavy load).
Maybe we’re just doing things inefficiently in the multi-process case. I recently landed profile markers for the Gecko Profiler for async tab switching, to help figure out what’s going on when I experience slow tab switch. Maybe there are optimizations we can make there.
One thing I’ve noticed is that there’s this function in the graphics layer, “ClientTiledLayerBuffer::ValidateTile”, that takes much, much longer in the content process than in the single-process case. I’ve filed a bug on that, and I’ll ask folks from the Graphics Team this week.How you can help
UPDATE (June 1, 2015): Getting profiles from Windows is currently broken because the symbol server appears to be busted. Any profiles from Windows machines will be useless until this bug is fixed. Alternatively, set profiler.symbolicationUrl to http://symbolapi.mocotoolsstaging.net in about:config.
If you’d like to help me find more potential causes, Profiles are very useful! NOTE – I don’t mean “user profiles”, as in, your bookmarks / customizations / history, etc, in the profile folder. I don’t mean this thing. I mean a performance profile.
A performance profile is a read-out of everything that Firefox / Gecko is doing over a particular span of time. When the profiler is running, Firefox / Gecko will record where the process is in the stack every 1ms or so. It’ll also record information about how long since it’s serviced the event loop, which helps us find jank.
To help, grab the Gecko Profiler add-on, make sure it’s enabled, and then dump a profile when you see the big spinner of doom. The interesting part will be between two markers, “AsyncTabSwitch:Start” and “AsyncTabSwitch:Finish”. There are also markers for when the parent process displays the spinner – “AsyncTabSwitch:SpinnerShown” and “AsyncTabSwitch:SpinnerHidden”. The interesting stuff, I believe, will be in the “Content” section of the profile between those markers. Here are more comprehensive instructions on using the Gecko Profiler add-on.
And here’s a video of me demonstrating how to use the profiler, and how to attach a profile to the bug where we’re working on improving tab switch times:
So hopefully we’ll get some useful data, and we can drive instances of this spinner into the ground.
I’d really like that.