(Pre)release IRHydra 2.0

deployed IRHydra 2.0

It’s been almost a year since I released IRHydra, a tool that can visualize V8 and Dart VM compilation artifacts, help you navigate them and grok what JIT compiler does to your code.

I think it is only fair that as a birthday gift 1 year old IRHydra will get some exciting new features.

New UI

Overall I tried to simplify UI for the common case thanks to some good suggestions from Matt Pardee and Paul Fryzel.

Colors of deoptimization markers and links now tries to communicate importance of a particular type of the deoptimization (eager, lazy, soft). Methods in the method list are highlighted with the color of their worst deoptimization.

Detailed information about the deoptimization is just a hover away.

What’s more important: the same information is attached to the source so that you don’t have to read all IR trying to figure out which place in the program CheckMaps came from. This display is inlining sensitive: it will place deoptimization marker inside the right inlined function so that you can be completely sure which code path it originated from.

Graph view now applies semantic coloring:

Inner fill for the blocks is still selected from a Brewer palette based on their loop nesting. Dart VM mode used to have ll_prof support to color blocks depending on amount of ticks falling into them, but I temporarily disabled this feature for now.

Method filtering now supports searching for a specific text inside method sources (if available) just prefix the filter with src:.

Old features

Just like previous version new IRHydra supports:

One currently disabled feature as I already mentioned above is ll_prof support.

Technology stack

IRHydra 2.0 UI was rewritten to use Polymer.dart. Uses bits of Bootstrap for styling and components like tooltips and popovers. Some colors taken from Flat UI palette.

Known issues and limitations

Requires applying a patch on top of V8 to work.

Future plans

I have a lot of ideas how to enhance source view to surface interesting information (e.g. what was LICMed, what was DCEd, which checks are still inside the loops etc.) even more prominently. However my priority right now is making sure that all old features work and the code is in the nice state (right now it is not) for merging into the main brunch.

Contributions are always welcome. Reach out to me if you are interested even if it is just UI/CSS tweaks. Me and CSS are not the best friends anyways :-)

Have fun digging into IRs!