Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Incorrect stacking of events that are close in time #487

Open
occivink opened this issue Nov 20, 2024 · 4 comments
Open

Incorrect stacking of events that are close in time #487

occivink opened this issue Nov 20, 2024 · 4 comments

Comments

@occivink
Copy link

Hi,

I have the following trace that gets rendered incorrectly in speedscope

[
{ "name": "A", "ph": "X", "ts":      1732107141551429.079, "dur": 34670882.955, "pid": 1033891, "tid": 140390667650624, "args": {}},
{ "name": "B", "ph": "X", "ts":      1732107142997066.682, "dur":   476375.838, "pid": 1033891, "tid": 140390667650624, "args": {}},
{ "name": "C", "ph": "X", "ts":      1732107143473442.569, "dur":   300492.826, "pid": 1033891, "tid": 140390667650624, "args": {}}
]

The event B ends at 1732107143473442.520, and event C starts at 1732107143473442.569 (49ns later), so C should be on the same stack, but just after B.

However, this is how it gets visualized in speedscope:
image

And in perfetto.dev:
image

My hunch is that this could be due to a double precision issue.

@jespersh
Copy link

image
is this why mine looks like this?

@jlfwong
Copy link
Owner

jlfwong commented Dec 16, 2024

@occivink Yeah, I think your suspicions are correct:

image

I'm not super stoked at the idea of used arbitrary precision floating point for all of the parsing for trace file import, since I'm assuming that would be a non-trivial perf hit for massive files. I wonder how Perfetto deals with this

@jespersh I think what you're looking at is probably unrelated -- the display in that profile doesn't look like a bug to me. Can you say more about what's unexpected there?

@jespersh
Copy link

@jlfwong I'd think that the brown AdMain.Program.Main() shouldn't be chopped into pieces as the program never leaves the Main() method

@occivink
Copy link
Author

I'm not super stoked at the idea of used arbitrary precision floating point for all of the parsing for trace file import

I don't know much about the internals of speedscope, but what about changing the stacking logic when event A ends at the same time as event B starts? Right now speedscope considers that B is a child of start, would it be an issue to consider it a sibling instead?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants