bug 507012 : Function entry/exit hook for JS
Unblocked. dmandelin has r+'ed. Trying to get it through try server. (The patch itself is probably ok. My users of it aren't.)
bug 558200 : Extension profiling mechanism for profiling bad things caused by JS
- Using any of the various uncommitted patches for bug 507012, this works, though I haven't bothered attaching the patch for it (since it's relative to the 507012 patch.)
- I don't have any good test cases to throw it against, so mostly I've been looking further at more general performance/profiling tools and directions
Making Performance:Home Page useful again. Cleanup + eventual new stuff.
- Removed most of the ancient task lists. Replaced with list of tracking bugs and bugzilla queries, all of which I laboriously went through (bugzilla and wiki are kind of slow here).
- There's still a somewhat odd list of performance-related tasks, all missing bug ids, some missing bugs. I suppose I should go through them too, but I'd rather find someone else who knows their state already. And it's not that high-value of a job; it's easy enough to ignore the whole section.
- TODO: There still isn't much reason for anyone to read this page. Admittedly, it's an overview, but it doesn't do a good job of pointing you off into the appropriate places for the performance of various aspects of the system, nor does it give good status information, nor does it usefully suggest areas for improvement. (Ok, it does some of that last one, but that's the part I'm most tempted to rip out because it's always going to be oddly limited in scope.)
- Already added several tools and links to others
- Need to point to more directly useful things for Mozilla tool users. Tutorials would be great. They'd give a solid reason to read the page.
I've decided that the main thing I probably ought to be working on is coming up with a way to reliably benchmark some sample web applications (eg gmail).
That task has several main components:
- "box up" and replay web applications
- gather performance data during the replay
- display and compare the performance results
- monitor the results automatically
All of these are large, incrementally doable, and have preexisting partial implementations.
As usual, I will stupidly proceed on my standard path of doing everything myself. Fortunately, that's patently absurd in this case, so I won't be able to and will soon need to figure out who to rely on for help.
- boxing: I've pestered Vlad about preexisting stuff for boxing and replaying. But it looks like the main part (capturing all HTTP/S requests & replies) is done by the NetExport Firebug extension, though it needs to be updated to add HAR 1.2 support so that it can include binary files. The weird bits (like random number seeds) I'll wait to see what is needed.
- gathering performance data: probably initially systemtap(dtrace) or perhaps bug 507012+bug 568863+bug 558200
- display/visualization/comparing: Big unknown.
- First will be my gprof-style output of bug 507012, I suppose, since it's done.
- Next is probably serializing the data for import into SpeedTracer running inside Chrome. (I'm not really liking GWT as an infrastructure. I get the whole thing about abstracting out client vs server and high level optimizations (eg partitioning off delayed-load pieces), but (1) I don't like being that far from what's actually running, and (2) the whole "now you can write your web apps in Java!" is not appealing.)
- Flot looks like a good building block, at least for more traditional graphing types of displays.
- I would love to incorporate TraceVis, preferably annotating it with more information.
- A heat map seems useful
- I'm somewhat tempted to linearize all the source code, convert to 2d with a Hilbert curve, and colorize the time spent in that display, perhaps with blurring and demarcating module boundaries. But it would change quite a bit as the code changed, which doesn't seem helpful.
- Need a full dynamic callgraph tree view a la xperf too.
- Will want to annotate JS source code, I suspect.
- Should look closer at what Firebug provides
- monitoring: Future work
- I want to at least have a decent snapshot summary view that I can scan through (and perhaps even animate!) across versions
- automated binary search for specific regressions would obviously be nice (how many nightlies are retained?)
I need to be able to report on the overall performance picture: what the current issues are, what work is being done, comparisons with other browsers, etc. I really need to get moving more rapidly on this one.
Stuff I should probably keep an eye on or at least be aware of and be able to find again as needed.