Mozilla Release Management Team: Firefox 37 beta4 to beta5 |
Extension | Occurrences |
js | 32 |
cpp | 17 |
h | 6 |
xul | 4 |
ini | 4 |
xml | 3 |
jsx | 3 |
jsm | 3 |
html | 3 |
java | 2 |
xhtml | 1 |
mm | 1 |
Module | Occurrences |
browser | 38 |
gfx | 13 |
dom | 10 |
toolkit | 8 |
services | 2 |
netwerk | 2 |
mobile | 2 |
xpcom | 1 |
widget | 1 |
media | 1 |
layout | 1 |
List of changesets:
Randell Jesup | Bug 1130150: mSources update r=roc a=abillings - 21f52f25675a |
Tooru Fujisawa | Bug 949971 - Set longer timeout for test_input_typing_sanitization.html. r=RyanVM, a=test-only - 066ad2436c70 |
Boris Zbarsky | Bug 453969 - Fix the race in test_bug382113.html so we don't set our child-onload-fired boolean to false _after_ the child onload has already fired. r=froydnj, a=test-only - 8fbda87f6b4d |
Chris | Bug 1106926 - Ensure that removing a hidden one click search provider also removes it from the browser.search.hiddenOneOffs pref. r=florian, a=lmandel - dc95247d23d7 |
Chris | Bug 1121417 - Change hiddenOneOffs pref to use unichar type. r=gavin, a=lmandel - 90a33a9f129e |
J. Ryan Stinnett | Bug 1128027 - Clean up protocol.js pools after connection close. r=bgrins a=lsblakk - abce8eb1a75e |
J. Ryan Stinnett | Bug 1128027 - Repair sourceeditor test after protocol.js cleanup change. r=bgrins a=lsblakk - f21e8fa80469 |
J. Ryan Stinnett | Bug 1128027 - Inspector destroy error was holding document alive. r=bgrins a=lsblakk - fa9b1bfa9f0e |
J. Ryan Stinnett | Bug 1128027 - Record protocol.js request headers for debugging. r=bgrins a=lsblakk - fbef1b8d36e0 |
J. Ryan Stinnett | Bug 1128027 - Rework Console tests that click links. r=bgrins a=lsblakk - 9fb666f03801 |
J. Ryan Stinnett | Bug 1128027 - Wait for inspector link in Web Console test. r=bgrins a=lsblakk - 7e2e728297e6 |
Nicholas Nethercote | Bug 1134030 - Add WindowsAddressSpaceReporter. code=njn,dmajor. r=dmajor,njn. a=lsblakk. - 20306323469e |
Jean-Yves Avenard | Bug 1132342: Handle race should operation be aborted while reading metadata. r=karlt a=lsblakk - 803ed9fc9507 |
Boris Zbarsky | Bug 1102042 - Fix the test to not have a race between the binding and the test bits. r=terrence, a=test-only - aa133901be39 |
Ehsan Akhgari | Bug 922977 - Request a longer timeout when running test_reftests_with_caret.html. a=test-only - e41d9d701e13 |
Jesse Ruderman | Bug 1133142 - Downgrade 'mTempFile not equal to mTargetFile' from assertion to warning. r=yoric, a=NPOTB - a8ffdc019a78 |
David Anderson | Bug 1135883 - Implement GetMaxTextureSize in the basic compositor. r=mattwoodrow, a=lsblakk - 096b8eb2590d |
Neil Deakin | Bug 1015617 - Wait for panel to show before adding hidden listener. r=gijs, a=lsblakk - 916424218be4 |
Karl Tomlinson | Bug 1138229 - GetOutputStreamInfo() after each SetOutputType(). r=cpearce, a=lsblakk - 14cc1f92c84c |
Jan-Ivar Bruaroey | Bug 1140363 - Fire recording-window-ended on gUM failures, like we do on deny. r=jesup, a=lsblakk - 0cd4e38e00b1 |
James Willcox | Bug 1140830 - Don't try to use a null JSONObject in SiteIdentity.update(). r=rnewman, a=lsblakk - 7e93dd7c7feb |
Jeff Muizelaar | Bug 1136242 - Make sure we acquire the mutexes when copying the surfaces. r=jgilbert, a=lsblakk - 71e45360880e |
Robert Longson | Bug 1134561 - Use of the namespace when checking the tag name if HTMLPictureElement and HTMLSourceElement. r=jst, a=lsblakk - 97c57043b3fc |
Patrick McManus | Bug 1136140 - wss inside https proxy null deref. r=hurley, a=lsblakk - b8c7154fab60 |
Benjamin Smedberg | Bug 1132192 - Enable org.mozilla.searches.engines by default in FHR. r=gps, a=lsblakk - 7949e470a547 |
Ryan VanderMeulen | Backed out changeset 096b8eb2590d (Bug 1135883) for bustage. - b526678ba6d2 |
Mark Banner | Bug 1106941 - Part 1: Firefox Hello doesn't work properly when no video camera is installed - fix rooms and outgoing conversations. r=mikedeboer, a=lsblakk - 245598f10dcd |
Mark Banner | Bug 1106941 - Part 2: Firefox Hello doesn't work properly when no video camera is installed - fix incoming conversations. r=mikedeboer, a=lsblakk - 9e52698fd237 |
Cesar Guirao | Bug 1139132: Fix Chroma offset on WebRTC remote video when width is not even r=jesup a=lmandel - 19ac18d33c28 |
Chris Pearce | Bug 1141241 - Add nullcheck for mDecoder in WMFMediaDataDecoder::ProcessDrain(). r=mattwoodrow a=lmandel - 18ecbc81b0e4 |
Tim Taubert | Bug 1128928 - Fix intermittent browser_social_chatwindow_resize.js failures with ASAN builds by increasing the number of tries used by waitForCondition(). r=markh, a=test-only - f758eb029b69 |
Neil Deakin | Bug 1002232 - Move tooltip test into a window to prevent the browser tooltip from interfering with it. r=neil, a=test-only - 09ac7b7f011a |
Matt Woodrow | Bug 1131808 - Avoid trying to allocate a buffer for 0 sized YCbCr images. r=nical, a=lmandel - 05df69e4ada6 |
Nicolas Silva | Bug 1123080 - Use cairo's image backend as canvas fallback on windows. r=Bas a=lmandel - 45cc75aa62d9 |
Nicolas Silva | Bug 1125848 - Reduce the likelyhood of a CompositorParent being destroyed without the proper shutdown sequence. r=sotaro a=lmandel - e15e6597d699 |
Nicolas Silva | Bug 1125848 - Consolidate PCompositor's creation-destruction logic. r=sotaro a=lmandel - 81009105d11d |
Steven Michaud | Bug 1137229 - Fix breakage in IMEInputHandler::OnDestroyWidget(). r=masayuki a=lmandel - f8c988045bb5 |
David Anderson | Bug 1135883 - Implement GetMaxTextureSize in the basic compositor. r=mattwoodrow, a=lsblakk - 2d58dd0bfaf7 |
Ryan VanderMeulen | Backed out changesets 81009105d11d and e15e6597d699 (Bug 1125848) for Windows mochitest timeouts. - 17af3ddb4a24 |
http://release.mozilla.org/statistics/37/2015/03/13/fx-37-b4-to-b5.html
|
David Tenser: User Success in 2015 – Part 2: What are we doing this year? |
This is part 2 of User Success in 2015. If you haven’t already, read part 1 first!
Mozilla planned things differently this year. All of Mozilla including the Mozilla Corporation and the Mozilla Foundation started back in late October and had the 2015 goals 90% finished in early December. As the humorous but insightful clich'e goes, “the last 10% is the hardest 90%” which is why the goals weren’t really 100% done until after the Christmas break.
We started with a three year vision and then moved onto the goals.
Behold – here is the User Success three year vision:
We will push the boundaries of what it means to give global community-powered support for a billion users with excellence and personality. We will enable users to help themselves and each other in ways never before seen.
We will surface the issues that product teams need to fix first to stop attrition, because we understand that the best service is no service. As a result, user satisfaction is skyrocketing.
Internally, we will become known as the team that truly understands our growing user base. Externally, we will become seen as thought-leaders in proactive customer care.
Let’s get a little more specific and talk about our specific plans for 2015. First, some assumptions we’re working under:
With that out of the way, these are the specific things we’re doing in 2015:
1. Help make our products better to increase user happiness
2. Help more users by moving our efforts up in the product/user lifecycle
3. Provide excellent support to all of our products and services
On “moving our efforts up” in the product/user lifecycle, one analogy I’ve been kicking around in the past is the idea of our team on a football field (note that this comes from someone who isn’t very interested in football!).
Remember the amazing collection of circles-in-circles in part 1 of this blog post series? Now, consider those circles overlaid on a football field.
Maybe this helps illustrate how we think of the impact we have on both our products and our users. The higher up in the field we’re able to deflect issues, the lower the cost and the higher the user satisfaction.
One way of looking at this is to consider the point when a user hits a support website as a point of failure. If the midfield messes up, defense has to deal with it. And if the defense messes up, it’s up to the goalie to recover the situation. The closer you get to the goal, the more costly mistakes become and the less proactive you can be on the field.
To football fans out there, on a scale of 1 to 10, how painfully obvious is it that I know more about user happiness than the green field of chess?
Next up: User Success in 2015 – Part 3: How will we know we nailed it in 2015? (Will update this post with a link once that post is published.)
http://djst.org/2015/03/13/user-success-in-2015-part-2-what-are-we-doing-this-year-2/
|
Roberto A. Vitillo: Dashboards made simple with Spark and Plotly |
In my previous about our new Spark infrastructure, I went into the details on how to launch a Spark cluster on AWS to perform custom analyses on Telemetry data. Sometimes though one has the need to rerun an analysis recurrently over a certain timeframe, usually to feed data into dashboards of various kinds. We are going to roll out a new feature that allows users to upload an IPython notebook to the self-serve data analysis dashboard and run it on a scheduled basis. The notebook will be executed periodically with the chosen frequency and the result will be made available as an updated IPython notebook.
To schedule a Spark job:
Once a new scheduled job is created it will appear in the top listing of the scheduling dashboard. When the job is run its result will be made available as an IPython notebook visible by clicking on the “View Data” entry of your job.
As I briefly mentioned at the beginning, periodic jobs are typically used to feed data to dashboards. Writing dashboards for a custom job isn’t very pleasant and I wrote in the past some simple tool to help with that. It turns out though that thanks to IPython one doesn’t need necessarily to write a dashboard from scratch but can simple re-use the notebook as the dashboard itself! I mean, why not? That might not be good enough for management facing dashboards but acceptable for ones aimed at engineers.
In fact with IPython we are not limited at all to matplotlib’s static charts. Thanks to Plotly, it’s easy enough to generate interactive plots which allow to:
Plotly comes with its own API but if you have already a matplotlib based chart then it’s trivial to convert it to an interactive plot. As a concrete example, I updated my Spark Hello World example with a plotly chart.
fig = plt.figure(figsize=(18, 7)) frame["WINNT"].plot(kind="hist", bins=50) plt.title("startup distribution for Windows") plt.ylabel("count") plt.xlabel("log(firstPaint)") py.iplot_mpl(fig, strip_style=True)
As you can see, just a single extra line of code is needed for the conversion.
As WordPress doesn’t support iframes, you are going to have to click on the image and follow the link to see the interactive plot in action.
http://robertovitillo.com/2015/03/13/simple-dashboards-with-scheduled-spark-jobs-and-plotly/
|
Michelle Thorne: Clubs: First round of testing complete! |
It’s been a fantastic two months of producing and testing clubs.
Here’s a recap of what we accomplished:
In follow-up posts, I’d like to share more about the accomplishments above, what we learned and where we struggled, as well as share ideas for where the club project can go next. If you’re interested in getting involved, drop a line in our discussion forum.
But for now, I’d like to give a huge thanks and gif high-five to the first club testers. We couldn’t have had a more knowledgeable and joyful group!
http://michellethorne.cc/2015/03/clubs-first-round-of-testing-complete/
|
Mozilla Privacy Blog: A Look Back at Privacy Day 2015 |
https://blog.mozilla.org/privacy/2015/03/12/a-look-back-at-privacy-day-2015/
|
Cameron Kaiser: The Final Kiss-Off, starring Google Code |
Google Code was a free service and we never paid, so I can't be too angry about it, but it's yet another lesson to never depend on Google for anything you want to last. I would like to take issue with them on one thing, though: in their blog post they claim that "[a]fter profiling non-abusive activity on Google Code, it has become clear to us that the service simply isn’t needed anymore." Well, you morons, what did you think would happen after you stopped allowing new downloads? Did you expect that to cause more people to host with you? Sheesh.
The prior plan will now continue with a target of TenFourFox 38, with a couple changes. We will still be reviewing issues on Google Code to determine their likelihood of completion, and transferring them to SourceForge tickets as appropriate; the rest will be closed. Similarly, only current wikidocs will move -- I won't be moving the entire release notes corpus; that's just ludicrous. However, I'll probably maintain parallel release notes on SourceForge for the remainder of 31 to facilitate the process, and I'll also select a couple historical releases for archiving on SourceForge as well (definitely the first Minefield beta, probably 4.0.3 because it was the last non-XUL build, and probably 17.0.11 because it was the last gcc 4.0.1 build). Everything else will be available while they last, and on July 31st I'll log in and write a juvenile and petty message for the Google admins to see. If you want a specific version or a specific changeset pack, now's the time to archive them.
Classilla will also be making a similar transition, but we have a specific problem in that systems that aren't already running Classilla can't bootstrap or update (i.e., some older browsers can't handle SourceForge, and can't download a copy of the browser). The current solution (short of using another computer) is to get a copy from Google Code, which offers a direct download instead of reflecting through a mirror, but that won't be an option in not too much longer. Instead, I will host an archival copy of Classilla on the Floodgap gopher server -- gopher, of course, because any classic Mac can access it with pretty much any classic Mac browser -- and you can use that to download the newest Classilla from there if you don't have any other option. 9.3.4 will hopefully come out as soon as I'm done with TenFourFox 38. (If you're using Firefox or TenFourFox to read this and you want to explore Gopherspace, install OverbiteFF, also written and maintained by yours truly.)
So, so long, Google Code. You were cool while you lasted, and then Google killed you, because Google is a bunch of poopiepants.
On the IonPower side, we're about 2/3rds passing the test suite, though I'm dealing with a really nasty snarled crash in debug toggled calls that I can't unwind yet (PPCBC passes this test, of course, so it's something about IonPower I haven't figured out). But we're making progress!
http://tenfourfox.blogspot.com/2015/03/the-final-kiss-off-starring-google-code.html
|
Tanner Filip: My adventures in Los Angeles (or: Mozilla at SCALE13x) |
A couple weeks ago, Mozilla was represented at the Southern California Linux Expo, also known as SCaLE.
To put it briefly, the event was amazing. I'm not very good at writing up stuff like this, so I'll break it down by the day. If you want to skip directly to the event itself, skip to the bottom. A lot of this is just a summary of our days. Most of it focuses on Michaela and I, because we became partners in crime quickly after meeting. ctrl+F "actual expo stuff" will get you to the important stuff.
This day was "fun" for me. SCALE was the first time I traveled alone, as an (technical) adult. I was planning on meeting Michaela R. Brown in Detroit, where we would get on the same flight to Los Angeles. That plan didn't quite work out.
Not long after I arrived at the airport, I got a notification on my phone, saying my flight was delayed by a few minutes. No big deal because I had exactly an hour layover. Or so I thought. The notifications kept coming. In the end, my flight was delayed 58 minutes. I didn't make the connection, so I got stuck in Detroit overnight!
What was the reason for the delay? A broken bathroom door on the plane. The flight was to be under an hour, and had fewer than 30 passengers.
Michaela likes to make fun of me for this.
Finally, I'd make it to LA! Not without some problems though. This particular morning I learned that when you set your Pebble watch to "Do Not Disturb" mode, that includes alarms. Thankfully, I never sleep well so I woke up about half an hour after my alarm was supposed to go off. That gave me enough time to brush my teeth and rush to the lobby to catch the shuttle to the airport. The rest of the morning was fairly uneventful. Got on the plane, sat there for a while, and eventually ended up across the country.
So I deplane, and find my way to the exit. It took me a while to find the shuttle to the correct hotel, but I did it eventually. Got to the hotel, and got my room on the 11th floor. I was placed in the hallway near a garbage chute, so the whole hall smelled funky. The first thing I did was look out the window. I had a beautiful view of a runway at LAX, and smog. I was pretty amused watching planes chase each other, and coming up with scenarios where one plane was trying to escape from another.
Now it's time to meet the wonderful Michaela R. Brown, our booth's official reptile. Upon meeting her, she tells me that the hotel is moving her room from the third to tenth floor. She moves all her stuff to her new room, and we meet again to go to lunch. We head to Subway to get some deli-cious sandwiches (see what I did there?). This is when we discover that Google Maps isn't flawless. It sent us around the back of the hotel, around the block, onto the street we walked out onto in the first place. Oh well, a little exercise won't hurt a couple nerds too much.
When we get to Subway, it's full of nerds. There's not much within walking distance of the hotel, so Subway was apparently the place to be. I order my sandwich, feeling a bit Italian so I get the meatball sub. The Sandwich Artist put everything on it, including pickles. She probably misheard me. I fear to this day that she thinks "Who the hell puts pickles on a meatball sub?" about me. I have the same question. I did not eat lunch on Thursday.
After our lunch, we headed back to the hotel. I don't really remember what happened the rest of the day. I think I tried to take a nap but ended up just hanging out in the lobby instead. We met with Joanna Mazgaj, and she dropped off her cache of swag. The box was heavy so I had to see what was in it. Turns out it was a ton of these plastic nametag thingies.
"What are we going to do with these?!", I thought. I didn't think anybody would take them, and we had more of those to give out than anything. Boy, I was wrong. I'll talk about that here in a bit.
The day was almost over. Michaela and I went to dinner at Denny's, where she discovered peach Sprite. You can ask her about it, she'll tell you what a life-changing experience that was.
The first day of the expo! The expo itself didn't start until later in the day on Friday, I think around 2 PM, so we had to have some more fun before that.
The privacy ninja, Liz Sands, also known as PacoHasPants (this is important) arrived in the wee hours of the morning, around 10 AM. After an exhausting two hour flight, and and Michaela and I being typical teenagers, we were all starved. We found a taco place not too far from us called Paco's Tacos. Perfect! We have Paco, she has pants, and she's hungry. What could go wrong? In theory, nothing. In reality, the taco place wasn't open yet. Yep, we forgot to check the hours. Paco got no tacos.
After our failed taco run, we gave in and went to some bagel place instead. It was pretty good, but the fruit juice there was expensive. I didn't get any, but the others did.
Now that we're fueled for the day, we started off on official business. We went to Staples, and got some supplies we'd need for the convention. I managed to convince Liz that RoseArt was an evil company for reasons other than making inferior crayons. Liz got caught up looking at crayons or something, I don't even remember what it was.
We made lots of friends on Saturday! I don't quite know how, but we managed to get together with the OpenSUSE booth team, and hung out with them a lot after the expo.
Somehow, someone gave Michaela a foam dart gun. She couldn't figure out how to use it, and accidentally shot the nice people of ActiveState in our neighboring booth. After she learned how to fire her new weapon, she shot people from the OpenSUSE booth. They returned the favor with aluminum water bottles baring Geeko, the OpenSUSE gecko!
We also went out to dinner with the OpenSUSE folks. I'm not a fan of Thai food, but it was pretty good. The ice cream though. That was extraordinary.
Sunday was our slowest day, and that's what we expected. I actually quite liked that, it let us have more in-depth conversations with people that we wouldn't be able to otherwise. I helped Joanna's husband install Firefox OS on his Nexus 4, which was a fun experience over conference WiFi.
There was this older couple there, and we spent probably 15 minutes, at least, talking to them. Liz talked to the man, they're both interested in biology, so they chatted about that for a while. I understood approximately zezo percent of what they were talking about.
The Privacy Ninja and Reptiles had to part ways though, for the Ninja can only leave her home for so long before people notice.
(Liz had class on Monday)
I don't really have much to say about Monday, other than it was bittersweet. Michaela and I both left for home Monday morning. I'm typically not one to talk about my emotions too much, but for some reason we just kind of connected as soon as we met. As I said earlier: Partners in crime.
Friday was a great day for the booth. We hadn't expected it to be nearly as busy as it was, but even before the exhibit hall opened, people were coming by and asking about our products and swag.
We even gave away Firefox OS Flame phones over the three day period. The way we did that was an old-fashioned drawing. A lot of other booths had people scanning the QR code of nametags to enter into a raffle, but we didn't do that. Our Privacy Ninja wouldn't let us; we don't want all that personal info anyway. We had a box that people entered their name into if they wanted to enter the raffle, and at the end of the day, this happened:
That's all the user data we collected from Friday through Sunday. We shredded each and every piece of paper that had presonal information on it.
We also didn't let anybody scan our nametags.
Behind the small yellow paper was a QR code containing full name, email, ZIP code, phone number, and organization. Lots of personal information.
"But", you might ask, "wouldn't people just enter the raffle even though they don't know anything about Mozilla?!" Nope! We put these attendees to work. In order to enter the raffle, we made them somehow support Mozilla and/or the Open Web. A vast majority of people chose to sign a petition supporting Net Neutrality. On Friday alone, about 120 people signed the petition. Over the three days, roughly 250 people signed the petition. That's about 10% of the total attendees, which is a great number, in my opinion. Sure, we could have gotten more, but the fact that 10% of people who went to the convention signed the petition makes me think that we interacted with a fairly large chunk of the total audience.
Here's one of my personal favorite Tweets, if for no other reason, because of the expression on Michaela's face. It just says "Now, listen here. Take this pen, and help us save the Internet. K?"
Mozilla working the crowd to protect net neutrality. Sign the petition: https://t.co/XpLLGSD3Hh #mozlove #scale13x pic.twitter.com/20qSPWhjOa
— Scott Milton (@scottmilton1) February 21, 2015
We also had a lot of interest in Firefox OS. A surprising amount of people thought that it was just an Android skin or app. SCALE is a fairly techie-orientated event, there were lots of developers and other people who work in the industry. The fact that so many people knew that Firefox OS exists but didn't know that it's an OS in itself makes me think that we should be educating developers about it. If they don't know how it works, chances are they won't write apps supporting FxOS, keeping the ecosystem fairly limited.
Overall, I was impressed with how much people were interested in Firefox OS. A fair number of people I talked to were genuinely interested in it, not just "this is pretty cool", but talking about the low-level details with me. Several people told me that they wanted to write apps for Firefox OS after playing with the Flame, and one of the people who won a Flame has told me that he wants to get involved with Mozilla later this summer.
Remember those big plastic nametag things up above? Those were a hit. Several SCALE staff members stopped by and asked what they were, because they saw lots of people wearing them. One young man even asked if they were NFC-enabled, which is actually a pretty cool idea, but the answer was no. People wore behind their SCALE badges, it was nice walking out on the street to get lunch and seeing people wearing a Firefox nametag.
Another question we got a lot about was regarding plugins, and why they needed to be updated so often. It's a perfectly valid question, and I understand why people would think to ask Mozilla, but the number of times it was asked makes me wonder if we aren't doing as well as we could be with helping users figure out who they should be reaching out to instead.
Finally, one question that we didn't get a lot, only once, but seems like a big deal to me. A gentleman came to the booth and asked if we were employees, we explained no, we're only Reps. He told us that he was a Rep too, and wondered why we went from across the country, rather than him, locally. As it turns out, there was some confusion with the term "Reps". He was talking about the Firefox Student Ambassadors program, not the Mozilla Reps program. Even as a fairly long-term Mozillian, I struggle to understand the differences between Reps and FSA. Perhaps it's just becaused, admittedly, I don't know a lot about the FSA program, but I think we should somewhere have a list of clear distinctions between a FSA and a Mozilla Rep.
Well, I don't have a whole lot to say in conclusion. I said it in the beginning, and I'll say it again, I had a wonderful time at SCALE this year. We met lots of new people, made some new friends with others in the FOSS community, and generally had a ton of fun. I hope to be able to help out with SCALE14x next year!
|
Mike Hommey: Announcing git-cinnabar 0.1.1 |
0.1.1 is a one-bugfix release fixing an issue where git-cinnabar could be confused if commands were started from a subdirectory of the repository. It might be the cause for corruptions leading to issues such as the impossibility to push.
If you do encounter failures please report them. Please also paste the output of git cinnabar fsck
.
|
Michael Kaply: Major Update to Keyword Search |
I've released a major update to Keyword Search that resolves ALL coexistence problems with Tab Mix Plus. It should also fix all the strange behaviors people were seeing with regards to searches happening in incorrect tabs.
I've also added support for setting a separate search engine for the context menu, as well as fixed some visual problems on about:home.
You can get it here, or you will be automatically updated.
https://mike.kaply.com/2015/03/12/major-update-to-keyword-search/
|
Fabien Cazenave: Joining Phoxygen |
I’m glad to announce that I’m joining Phoxygen today as a senior Firefox OS engineer. A new angle on the same project, and a great team to work with!
As a welcome bonus, I get to work with Ahmed to finish the work on RTL we started two years ago. More on that soon.
|
Aaron Klotz: WaitMessage Considered Harmful |
I could apologize for the clickbaity title, but I won’t. I have no shame.
Today I want to talk about some code that we imported from Chromium some time ago. I replaced it in Mozilla’s codebase a few months back in bug 1072752:
261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 |
|
This code is wrong. Very wrong.
Let us start with the calls to GetQueueStatus
and PeekMessage
. Those APIs
mark any messages already in the thread’s message queue as having been seen,
such that they are no longer considered “new.” Even though those function calls
do not remove messages from the queue, any messages that were in the queue at
this point are considered to be “old.”
The logic in this code snippet is essentially saying, “if the queue contains
mouse messages that do not belong to this thread, then they must belong to an
attached thread.” The code then calls WaitMessage
in an effort to give the
other thread(s) a chance to process their mouse messages. This is where the code
goes off the rails.
The documentation
for WaitMessage
states the following:
Note that
WaitMessage
does not return if there is unread input in the message queue after the thread has called a function to check the queue. This is because functions such asPeekMessage
,GetMessage
,GetQueueStatus
,WaitMessage
,MsgWaitForMultipleObjects
, andMsgWaitForMultipleObjectsEx
check the queue and then change the state information for the queue so that the input is no longer considered new. A subsequent call toWaitMessage
will not return until new input of the specified type arrives. The existing unread input (received prior to the last time the thread checked the queue) is ignored.
WaitMessage
will only return if there is a new (as opposed to any) message
in the queue for the calling thread. Any messages for the calling thread that
were already in there at the time of the GetQueueStatus
and PeekMessage
calls
are no longer new, so they are ignored.
There might very well be a message at the head of that queue that should be processed by the current thread. Instead it is ignored while we wait for other threads. Here is the crux of the problem: we’re waiting on other threads whose input queues are attached to our own! That other thread can’t process its messages because our thread has messages in front of its messages; on the other hand, our thread has blocked itself!
The only way to break this deadlock is for new messages to be added to the queue.
That is a big reason why we’re seeing things like bug 1105386: Moving the
mouse adds new messages to the queue, making WaitMessage
unblock.
I’ve already eliminated this code in Mozilla’s codebase, but the challenge is going to be getting rid of this code in third-party binaries that attach their own windows to Firefox’s windows.
http://dblohm7.ca/blog/2015/03/12/waitmessage-considered-harmful/
|
Air Mozilla: German speaking community bi-weekly meeting |
Zweiw"ochentliches Meeting der deutschsprachigen Community. ==== German speaking community bi-weekly meeting.
https://air.mozilla.org/german-speaking-community-bi-weekly-meeting/
|
Stormy Peters: Colorado Mozillians Meetup! |
Meet the Colorado Mozillians …
We spent the day co-working at the Boulder Hub.
Tom Tromey (Developer Tools), Justin Crawford (MDN), Teri Charles (Web QA)
Stormy Peters (MDN), Chuck Harmston (Marketplace)
Related posts:
http://feedproxy.google.com/~r/StormysCornerMozilla/~3/kr2_Y4YPWVM/colorado-mozillians-meetup.html
|
Air Mozilla: Web QA - Who, What, Why, How |
Join Stephen Donner and other Web QA team members, as we (mostly informally) cover the Who, What, Why, and How of what our team tests,...
|
Tess John: Thank you |
Opw has come to an end and looking back I feeel so proud and happy.I become more confident .I figured out what I want to do next.I also had fun, met a lot of amazing people .All good things come to an end. This is a small thank you note to thank all those wonder full people who have helped me in making this internship the best opportunity I ever had. My parents friends for their constant support and motivation.There are some persons I specifically want to thank
Rebecca Billings: My mentor,I am so privileged to have her as my mentor.I am really inspired by her the way she organizes her time.I have learned to organize my time.My commmunication skill has improved over the time,it is because of her.
Bob Silverberg: I have improved a lot pair programming with him.I learned not just scripting in python but modularizing code so that its make the code more readable.He gives exceptionally good PR reviewer that hardly any bug goes unnoticed. He has been patient when i took time more than required.
Stephend mbrand and mozwebqa team.I owe you a lot.Thanking for the constant support and words of motivation.I like to explore more
|
Air Mozilla: Community Education Call - March 12th |
The Community Education Working Group exists to merge ideas, opportunities, efforts and impact across the entire project through Education & Training.
https://air.mozilla.org/community-education-call-march-12th/
|
Soledad Penades: jQuery UK 2015 |
I attended jQuery UK past week, sorry about the delay in writing about it
The organisation was as smooth as it could be. They made sure we knew where, how and when to go to places and treated us really well, so it was a pleasure to be a speaker in this conference.
I must admit I was stupidly silly with regards to the conference at the very beginning. My programming bias elitism was yelling on my brain “oh I MIGHT NOT NEED jQUERY! Who needs it these days anyway!?”
But turns out that
So when they asked me to talk about Web Components I opted to frame it in the most pragmatic way too: how to use them without shooting yourself in the foot, so you can start working in a more modular way and taking in all those advantages.
I asked before starting and from an audience of… 300? 400 people? approximately 20 had heard about Web Components and about 10? had implemented them in a project. So I ran a quick introduction on what they were, why they were developed and how they looked like, before tackling them interoperating with the four main “frameworks”: jQuery, React, Ember and Angular.
A write up on the results of my research is upcoming, but in the meantime you can look at the slides if you’re so inclined. Be aware that something in Nightly was crashing with the slides at the time I presented, so if your browser crashes (including Nightly for Android)… you know why
The talks I watched:
Addy Osmani gave an excellent talk on the state of Chrome’s developer tools and then explained how their team identified performance issues on Wikipedia, and how to fix them (this was related to Paul Irish advising people to not to use jQuery’s hide() method). Also, Paul is sorry for tweeting that without the proper context.
Natasha Rooney explained what Service Workers were and what problems they were meant to solve, but I am afraid if you had not a bit of background it would be a little bit confusing as the topic is *complex*.
Andy Hume explained various techniques on how to deliver fast experiences specially on mobile.
Alex Sexton infused us with a bit of South-West American culture and told us about don’t mess with Texas, then tried to find an equivalent for the web (don’t mess for the web?) with regards to hacking/building websites that cannot be hacked.
Jenn Schiffer explained all about vart.institute* and how it came to be. Also provided multiple screenshots of Dave Methvin keynoting at various jQuery events, which was quite amusing. And invited us to feel more empathy for people in the industry, which is a good thing if you ask me. *you can read it as fart and feel silly and it would also be totally OK
Estelle Weyl gave a very interesting talk on how to use forms and take advantage of all the cool features that browsers are already providing us but some people opt to rewrite in clumsy ways that go against all accessibility and usability best practices.
Ben Foxall did one of his shows (at this point we should call those a performance rather than giving a talk) where he involved everyone on the audience and elevated our phones from mere “phones” to interactive objects or “things” that transcend the simplest notion of “phone”.
I’m sorry I couldn’t watch the rest of talks, but it was great to meet Alice Bartlett, Rosie Campbell, Anne-Gaelle Colom, Rich Harris, Philip Roberts, David Rousset, and of course, Bodil Stokke!
After the last talk finished, we moved to the larger ‘hall’ style space where there were some snacks and drinks and people could mingle and ask questions if they hadn’t had the chance yet, so that was way better for me than going to a crammed pub, as I could walk between groups and speak to different people and not YELL ALL THE TIME. There were also some stands and also RETRO GAMES but I started talking to people and forgot to check out the games. AAAAH! Funny moment: Mike MacCana getting super excited about how he could help them setup multiplayer in DOOM using IPX.
All in all a very interesting conference for people who build websites and are willing to improve their practices or tooling… or both! I definitely learnt a bunch of things, so highly recommend checking it out next year!
|
Hannes Verschore: Year in review: Spidermonkey in 2014 part 3 |
In the first two parts I listed the major changes in the Javascript engine of Mozilla Firefox in 2014 and enumerated the major changes that happened starting from Firefox 29 till Firefox 34. In part 3 I will iterate the major changes in the JavaScript engine in the last two releases that were developed in 2014.
If you haven’t read the first parts yet, I would encourage you to do that first.
<- Year in review: Spidermonkey in 2014 part 1
<- Year in review: Spidermonkey in 2014 part 2
JIT RegExp.prototype.exec and RegExp.prototype.test
When Firefox 32 was released the regular expression engine was replaced with Irregexp. The new engine had just like its predecessor a small jit where regular expressions get compiled to native code. And just like its predecessor the easiest way to embed the regular expression engine is to use C code. Consequently a normal execution of a regular expression looked as following. The js code goes into C code preparing the regular expression engine jit, whereafter the regular expression engine gets called. In this release we eliminated the middle step (the c code) and now jump directly from JS jit to regular expression jit, removing the overhead the c code provided when calling RegExp.prototype.exec or RegExp.prototype.test.
Read more about this in the bug report
GVN + UCE combined
Just like most compilers Ionmonkey has an optimization called Global Value Numbering (GVN). It tries to remove or replace redundant instructions. In our implementation it is also the place where most replaces based on inputs happen, like constant folding, identity removal … After this pass we run Unreachable Code Elimination (UCE), which eliminates branches which are never taken. Optimizations taking place during GVN can improve the efficiency of UCE. More folded instructions can increase how many code that can be found to be dead. On the other hand removed code can again make it possible for GVN to optimize some extra instructions. Before Firefox 35 we only ran both passes once. As a result we sometimes didn’t find the most optimal code. With this release GVN and UCE are now combined, making it possible to have the same optimizations as running GVN and UCE multiple times after each other, but doing so in only one pass.
Learn more about this in an explanatory video
Lazy linking when recompiling code
The compilation of Ion code happens in three phases. First we have the graph creation phase (happens in IonBuilder), afterwards we do all sort of optimizations on that graph, ending with a linking phase, which finishes the compilation. In this sequence only the optimizing part can be done off the main thread. The other two phases block execution of JavaScript code. Lazy linking is about improving the last phase. Currently linking happens eagerly. As soon as a graph is ready we will try to link it. Even if we won’t ever execute that code (again) or if it gets invalidated due to better types. With lazy linking we wait until we want to execute that code before linking.
Read more about this in the bug report.
Compile non-CNG functions
Compile and Go (CNG) functions give extra performance since the caller cannot modify objects on the scope chain between compilation and execution [1]. With this warranty compilers can optimize access to these objects better. Now IonMonkey can only compile such functions. Non-CNG were stuck in the baseline compiler. In Firefox 34 and 35 these limitations were mostly removed. Given our most important class of non-CNG functions are in addons and chrome content. This will give again a nice boost to performance of these.
Read more about this in the bug reports: bug 1064777, bug 1045529 and bug 911570
Baseline compile generators
Like mentioned in part 1, Firefox 30 saw the introduction of ES6 generators. In that release only supported for the interpreter (our first tier) was added. This was because the initial implementation tried to support this feature touching as little code as possible. But this method also disabled support for higher tiers. Six releases later we are now proud to also have support for generators in our second tier, the baseline compiler and that even before ES6 is released.
Wingo did the beginning of this huge task and has written a blogpost about it.
Read the blogpost about support of compiling generators in Baseline
ES6 Symbols
For the first time in a very long time a new primitive type was added to the engine. This all has to do with the upcoming spec. of ES6 Symbols. Nexto null, undefined, boolean, number and string, symbol is now present on that list. A Symbol is a unique and immutable primitive value. Without going too deep it can enable hiding of properties or fix name clashes between properties. It also can helps with not breaking existing codebases when new property names to the language are introduced. Not immediately something people need to use, but it can open new and maybe better ways to do some things.
Read more about this in the developer reference
Stackoverflow: why bring symbols to JS
Selfhosting String.prototype.substr, String.prototype.substring and String.prototype.slice
In Firefox 20 the selfhosting infrastructure landed. Since that release we can implement JavaScript features in JavaScript itself, instead of writing it in C. During runtime this selfhosted function will just get executed like somebody would have scripted in JavaScript. The major improvement here is that we remove the overhead from calling from JavaScript out to C and back. This gave improvements for e.g. “array.map(function() { /* … */})” since the C step was fully eliminated between calling the function and the function given in the argument. In this release substr, substring and slice are now also selfhosted. For these functions the speedup is mostly because the edge case checks (start is positive and length is smaller than string length) are now done in JavaScript and IonMonkey can reason about them and potentially remove those checks!
|