RFR: 7894: Provide an alternative Java based flamegraph visualization [v20]

Marcus Hirt hirt at openjdk.org
Sun Jun 11 00:46:55 UTC 2023


On Fri, 9 Jun 2023 16:46:09 GMT, Brice Dutheil <bdutheil 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.
>> 
>> ![image](https://user-images.githubusercontent.com/803621/177537938-423a4d53-c2ac-4c56-8583-abe4cc910e37.png)
>> 
>> **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
>
> Brice Dutheil has updated the pull request incrementally with one additional commit since the last revision:
> 
>   fix: Make spotless happy

> > Perhaps the root node text should reflect the attribute used to determine width?
> 
> Do you mean mentioning the attribute, in addition to the events ? <img alt="image" width="985" src="https://user-images.githubusercontent.com/803621/244880450-5aa2bb08-febc-46e5-9cc6-a07359b85ba1.png">

Yes. Currently there is nothing in the graph visualization that tells us what we're looking at - i.e. which attribute that is being used to determine the cell widths. If you save to an image, for example, you have no way of knowing what you are looking at.

This can be done in a separate issue as it would be an improvement to the current behaviour.

> > Also, if switching to a new selection where the attribute selected isn't available, I think it should default to Samples. Right now it will keep the attribute selection and just show an empty flame graph.
> 
> I ported the existing behavior but it certainly possible.

This can also be done in a separate issue, as it would be an improvement to current behaviour.

For some reason the tooltips do not work though, which would be a regression.

-------------

PR Comment: https://git.openjdk.org/jmc/pull/408#issuecomment-1585883748


More information about the jmc-dev mailing list