Skip to content

Consider adding the ability to pass p arguments to profile.start #662

@canova

Description

@canova

I was using the plenary.profile package and capturing profiles using it. It looks like it's super useful for my case. I was using the flamegraph output to get some nice profiler to visualize in the Firefox Profiler. But the profiles that I gathered weren't so useful.

For example here's one: https://share.firefox.dev/4ejyKHG

It wasn't very useful to me because it wasn't possible to see which file or function comes from which module exactly.

But after looking at the documentation of jit.p, I realized that it's possible to send different options that might make it more useful for me.
For example, here I see that I can also pass p and F that could make the output more useful for me:

-- The following dump features are available:
--
-- f Stack dump: function name, otherwise module:line. Default mode.
-- F Stack dump: ditto, but always prepend module.
-- l Stack dump: module:line.
-- <number> stack dump depth (callee < caller). Default: 1.
-- -<number> Inverse stack dump depth (caller > callee).
-- s Split stack dump after first stack level. Implies abs(depth) >= 2.
-- p Show full path for module names.
-- v Show VM states. Can be combined with stack dumps, e.g. vf or fv.
-- z Show zones. Can be combined with stack dumps, e.g. zf or fz.
-- r Show raw sample counts. Default: show percentages.
-- a Annotate excerpts from source code files.
-- A Annotate complete source code files.
-- G Produce raw output suitable for graphical tools (e.g. flame graphs).
-- m<number> Minimum sample percentage to be shown. Default: 3.
-- i<number> Sampling interval in milliseconds. Default: 10.

But currently there is no way to pass additional popts or override the default ones:

function profile.start(out, opts)
out = out or "profile.log"
opts = opts or {}
local popts = "10,i1,s,m0"
if opts.flame then popts = popts .. ",G" end
p.start(popts, out)
end

It's not the end of the worlds since I can still manually add these arguments or call jit.p directly. But it would be nicer if plenary had an option to do it too.
Here's the output with these:
https://share.firefox.dev/460Xsdw

Now it's a lot more actionable for me, since I can see which file comes from which package exactly.

So my feature request would be to make this profiler.start API accept pargs as an argument so users can override them.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions