Skip to content

v0.0.1-rc.10 Customize frame click behavior and customizable frame renderer

Pre-release
Pre-release

Choose a tag to compare

@bric3 bric3 released this 10 Jan 10:58
· 34 commits to master since this release
36f90a5

Release Notes - v0.0.1-rc.10 (since v0.0.1-rc.9)

✨ New Features

  • Horizontal-only frame expansion - New EXPAND_FRAME click action that expands frames horizontally while keeping vertical position (165c3ad)

    • FOCUS_FRAME: Single click highlights, double click zooms
      var flamegraphView = new FlamegraphView<MyNode>();
      // This is the default, no need to set explicitly
      flamegraphView.setFrameClickAction(FlamegraphView.FrameClickAction.FOCUS_FRAME);
    • EXPAND_FRAME (new): Single click expands frame horizontally (keeps vertical position)
      var flamegraphView = new FlamegraphView<MyNode>();
      flamegraphView.setFrameClickAction(FlamegraphView.FrameClickAction.EXPAND_FRAME);
  • Exposed FrameRenderer interface - Allows custom frame rendering implementations (214151d)
    Set the renderer via flamegraphView.setFrameRender(renderer).

    • Support for rounded rectangle frame shapes - DefaultFrameRenderer (cbe574f)
      var renderer = new DefaultFrameRenderer<>(
              frameTextsProvider,
              frameColorProvider,
              frameFontProvider
      );
      renderer.setRoundedFrame(true);
    • For fully custom shapes, implement FrameRenderer and override reusableFrameShape():
      public class CustomShapeRenderer<T> implements FrameRenderer<T> {
          @Override
          public RectangularShape reusableFrameShape() {
              return new RoundRectangle2D.Double(0, 0, 0, 0, 10, 10); // custom arc
          }
          // ... other methods
      }

🐛 Bug Fixes

  • Fixed void space when focusing on edge frames - Added proper clamping to prevent scrolling beyond canvas bounds (a21d51c)
  • Fixed EDT violation when zooming (538759b)
  • Fixed choppy scrolling - Debounced sibling frame computation for smoother performance (2cd292c)
  • Fixed frame alignment in mode switch & expand/shrink (9e878f9)
  • Fixed horizontal scrollbar visibility on zoom (ed91e3a)
  • Fixed expand reset behavior for frames having viewport width (e298544)
  • Fixed zoom animation anchor in expand mode (241c3fa)
  • Fixed resize loop - Rare case in Flamegraph mode when resizing (81751af)
  • Fixed reset zoom when clicking on same zoomed frame (eee6360)

📝 Deprecations

  • setRenderConfiguration is deprecated - Use setFrameRender(new DefaultFrameRenderer<>(...)) instead (8922190)

    • Before (deprecated):

      var flamegraphView = new FlamegraphView<MyNode>();
      flamegraphView.setRenderConfiguration(
              FrameTextsProvider.of(frame -> frame.actualNode.toString()),
              FrameColorProvider.defaultColorProvider(f -> Color.BLUE),
              FrameFontProvider.defaultFontProvider()
      );
    • After (new):

      var flamegraphView = new FlamegraphView<MyNode>();
      flamegraphView.setFrameRender(
              new DefaultFrameRenderer<>(
                      FrameTextsProvider.of(frame -> frame.actualNode.toString()),
                      FrameColorProvider.defaultColorProvider(f -> Color.BLUE),
                      FrameFontProvider.defaultFontProvider()
              )
      );
    • The new API exposes the FrameRenderer interface, allowing custom frame rendering implementations beyond DefaultFrameRenderer.

    • Related deprecated methods on FlamegraphView: setFrameColorProvider, setFrameFontProvider, setFrameTextsProvider, setFrameGapEnabled and their getters. These now live on DefaultFrameRenderer directly.

🎨 UI Improvements

  • Minimap now positioned at top in flamegraph mode (4b9dd76)
  • Disabled dimming of non-focused flames by default (825b652)

🏗️ Infrastructure

Full Changelog: v0.0.1-rc.9...v0.0.1-rc.10