RFR: 7894: Provide an alternative Java based flamegraph visualization
Brice Dutheil
duke at openjdk.org
Thu Sep 8 13:32:19 UTC 2022
On Wed, 6 Jul 2022 11:36:47 GMT, Brice Dutheil <duke at openjdk.org> wrote:
> This change introduces a possible replacement for the current flamegraph view.
>
> **Motivation**
> The current is based on a web view. In the current state,
> - the web view can be slow to render especially when the tree is large.
> - the web view don't feel well integrated, in particular when popups are shown.
> - web view are difficult to work with from a JMC developer perspective.
>
> 
>
> **Description**
> Concretely this PR relies on the swing component to render flamegraphs : https://github.com/bric3/fireplace. And plays with the bridge between SWT and AWT via the `SWT_AWT` class.
>
> As the intent of this view is to eventually replace the current one, the icons are the same.
>
> Since fireplace has no actual release, only snapshots, in order to try this PR, it is necessary to install the snapshot manually before starting the p2 server.
>
>
> cd releng/third-party
>
> mvn dependency:get -DrepoUrl=https://s01.oss.sonatype.org/content/repositories/snapshots -Dartifact=io.github.bric3.fireplace:fireplace-swing:0.0.1-SNAPSHOT:jar
>
> # if sources are wanted
> mvn dependency:get -DrepoUrl=https://s01.oss.sonatype.org/content/repositories/snapshots -Dartifact=io.github.bric3.fireplace:fireplace-swing:0.0.1-SNAPSHOT:jar:sources
>
> # make the p2 site, don't forget the -U
> mvn p2:site -U; mvn jetty:run
>
>
> **Outstanding issues / limitation**
> - [x] Fireplace has not yet a stable release as some part of its API are a bit rough.
> - [x] Currently the view does not initializes correctly:
> the swing `JScrollPane` don't show scroll bars, until the view is resized by the user. I lack the SWT / Swing expertise to understand why at this time.
> https://github.com/bric3/fireplace/issues/79
> - [x] Fireplace only supports _icicle_ view at this time.
> https://github.com/bric3/fireplace/issues/22
> - [x] Icons for minimap toggle and zoom reset
> <img width="237" alt="image" src="https://user-images.githubusercontent.com/803621/183126781-07af0e94-a5d5-458c-97e3-a5e012177248.png">
> - [x] Export to image
> https://github.com/bric3/fireplace/issues/99
> - [x] Export to print ?
> Can be done at a later time
> - [x] release of fireplace
Hi thanks
> * Support for rendering the thing upside down (flame rather than icicle).
Need some time around this. Can this come at a later time?
> * Support for hooking in alternative tooltip mechanisms, e.g. perhaps we can do the tooltips in SWT and thereby bypass the limitation of rendering them on the AWT surface?
Actually tooltips are based on Eclipse's JFace ; in a previous implementation I played with SWT's `ToolTip` but the component doesn't allow multiline or even give some style.
> * Use an SWT scrolled composite?
Let's not rule that out, but that represents a significant work. Currently we should see the fireplace flamegraph as a coherent unit that is composed of a JScrollPane among other swing component.
So https://github.com/openjdk/jmc/pull/408/commits/736b3c1f26ee7e8a5e167ca016bd550513d78d96 adds iciclegraph 🍨 (already there) and flamegraph 🔥
<img width="1440" alt="image" src="https://user-images.githubusercontent.com/803621/181643593-b0056683-452a-47f2-852d-780e208fda53.png">
Also the library now highlight sibling frames (the screenshot above shows several `AccessControler.doPrivileged`), the comparison is based on `AggregatableFrame`.
-------------
PR: https://git.openjdk.org/jmc/pull/408
More information about the jmc-dev
mailing list