Skip to content

Aggregate frames by line-in-function (java) #799

@Jongy

Description

@Jongy

gProfiler collects profiles function-based, i.e, each frame represents a function.
An alternative is to aggregate line-in-function, so each frame is function:line. This creates a graph that is more fragmented, but carries more information (for example: function A calling function B twice will now have 2 separate callstacks for B under A, allowing you to differentiate).

Various profilers already support it (for example, py-spy does, as far as I'm aware). I want to start with support in Java (so async-profiler).
The feature requirements are:

  1. A flag in gProfiler enabling the behavior: --line-numbers suffices.
  2. This flag is passed into ProfilerState and used by Profiler classes supporting it.
  3. In the case of JavaProfiler, async-profiler alreadys supports line numbering, see code that extracts the BCI -> line numbers table here. It exists for JFR. As we're using the collapsed format, we can add this support to collapsed, like we added method modifers.
  4. Syntax of the frame can be: add :line_number between the _[...] suffix to the frame name itself.

Note that line-of-function was added here: #821. This ticket is for line-in-function.

Metadata

Metadata

Assignees

No one assigned

    Labels

    defined-and-prioritizedTickets that have fully defined the desired outcome & are prioritized to be developed.enhancementNew feature or requestruntime/java

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions