Using this translated JIT data, we can then reference the profiler's samples to guide a user to focus on optimization for especially hot areas of code, also leveraging any "badness" weight to levels of optimizations. If we are successful in translating JIT data to actionable instructions for the advanced performance engineers, then the next step is to distill this information to be even more accessible to the average web developer, hiding most of the JIT-jargon.
There will be at least this "advanced view", behind a pref, as a subview in the Performance tool's Call Tree (or maybe its own detailed view?), and if we make actionable information accessible enough, subtle guides for all users in the profiler.
Currently, in Fx40, the JIT Optimizations view is available in the performance tool behind `devtools.performance.ui.show-jit-optimizations` for displaying the JIT optimization attempts per site as an initial prototype.
- Help in debugging the JIT itself for Ion Monkey engineers
- Optimizing new ES.* features in Spider Monkey
- Finding how to optimize hot areas of code (advanced usage)
- Frameworks (React, Ember, PlayCanvas, jQuery, Three.js)
- Environments (Shumway, J2ME.js)
- Ensuring functions stay at the highest level of optimization (more important than using better optimization strategies per optimization site)
- Guide web developers to optimize their web app with low-hanging-fruit, without needing engine knowledge
gather common deoptimization patterns, see if there are any possible (djvj, shu)
docs With the raw JIT opt data view in Fx40, translate the optimization attempts, outcomes, Ion types, with better descriptions. Not necessarily actionable, but some insight.
Expose Advanced Information
- Bailout Reasons per frame
- display frames that have been invalidated
- Optimization Tier information: is a frame staying in ion? show a timeline?
- Show which frames have opt data
- Possibly advanced suggestions from the discovery process
- Expose column information to link to code, bonus points for property names
- Bonus points if we can highlight problem areas by measuring optimization strategy "badness" and time spent in frame from profiler
- Actionable suggestions for the average web developer with no JIT knowledge
- Requirements: Mid Q2
- Ship: Mid Q3
- JIT Prof (Agnostic)
- JIT Inspector (Ion Monkey, Firefox Addon)
- IRHydra (V8, Dart)
- JIT Watch (JVM)
- Chrome DevTools (V8)
No documentation regarding the deopt icons, and the tooltips they use are still pretty cryptic; some deopts I've seen:
Reference to a variable that requires dynamic lookup ForInStatement is not fast case Context-allocated arguments TryCatchStatement Optimized too many times Assignment to parameter in arguments object Bad value context for arguments value