Saturday, May 18, 2013

The sputtering last stand of methodjit

I finished the port of 22 early so that I could enjoy my vacation in June in peace, at least theoretically, and this post is being made in the debug build. (Shout out to vasi: your download progress indicator patch only needed minimal changes for 10.4. I just had to add a stub for NSRectFromCGRect and it seems to work fine.)

OdinMonkey (a la asm.js) landed in 22, Mozilla's hyperoptimizeable subset of JavaScript which appears to have a critical reliance on IonMonkey; the JavaScript test suite can't even complete now without the Python test harness going crazy on those particular tests along with all the other accumulated intentional failures. The loss of regression testing, even though the browser appears to still basically work, should be considered an extremely crippling limitation; in the worst case scenario where we don't make it to 24, I think it might be better to make the more robust 21 the point of dropping to feature parity since I still have a test suite that at least completes in that version. More testing is needed, but in any case, I don't see any reasonable way that gluing together methodjit is sustainable now and 22 will be its last stand. For 24, the only way out is through.

Jan de Mooij at Mozilla did get back to me with what needs to happen for the Baseline compiler, which as previously mentioned is the low-profile version of Ion, and that will be critical for 24 (issue 224). Baseline is a lot simpler to implement, but it does a lot less, of course. The good news is that about 2/3rds of what it requires I'd already done for Ion, leaving only some assorted leftover pieces that I need to write (I also have to get it to at least link completely, what I'm calling "Ion stage 2"; even though not everything needs to be implemented, the stubs need to be present). However, looking at how the compiler works, I'm gloomily predicting benchmark losses of around 25-30% slower. It's still faster than TraceMonkey was, but it's going to be slower than 17. I can't do much in the 22 timeframe other than get it to build completely because Baseline wasn't enabled until 23, so no testing will be possible this cycle.

In that sense, it's probably a good thing that people are only just now noticing that I dropped plugins completely in 19 (yes, it's true, for those new to this blog), so some may stick with 17 for a little longer for the plugins and as a fringe benefit will still have methodjit at near its operational peak. While I'd like to eventually get Ion up on 24 stable, it's going to be entirely dependent on how much backporting I have to do. Such is the nature of life in twilight.

No comments:

Post a Comment

Due to an increased frequency of spam, comments are now subject to moderation.