Comments (4)
Unfortunately the textual dump of the Protobuf trace doesn't tell the whole story.
flow_ids
type should be repeated fixed64
(https://cs.android.com/android/platform/superproject/main/+/main:external/perfetto/protos/perfetto/trace/track_event/track_event.proto;l=221;drc=ce102357934e8bf42dc2fcc8a0b145a4faed4a9d), but in your trace it's encoded as repeated fixed64 [packed=true]
.
Here's how we could fix this problem:
- How are you encoding your protobufs? Which library are you using? Are you using a library that only supports "proto3" (In proto3 repeated fields are encoded as packed by default)? Can you switch to a library that supports encoding repeated fields as non packed?
- As a workaround, you could reencode with protoc before passing it to ui.perfetto.dev. Here's a hacky way:
protoc --decode=perfetto.protos.Trace -Iperfetto perfetto/protos/perfetto/trace/trace.proto < repro.pb | protoc --encode=perfetto.protos.Trace -Iperfetto perfetto/protos/perfetto/trace/trace.proto > repro2.pb
, whereperfetto
is a directory where you have a checkout of the perfetto repo. - Ideally ui.perfetto.dev should accept your trace. https://protobuf.dev/programming-guides/encoding/#packed says
Protocol buffer parsers must be able to parse repeated fields that were compiled as packed as if they were not packed, and vice versa.
Doing 3 requires a non trivial amount of work and I don't think fits nicely with the current parsing architecture, but I'm going to get @LalitMaganti comment on this.
from perfetto.
Doing 3 requires a non trivial amount of work and I don't think fits nicely with the current parsing architecture, but I'm going to get @LalitMaganti comment on this.
Yup agree with everything you say, you're absolutely right that if we follow the spec strictly, we would accept it. However,
- that would introduce a slight slowdown everywhere we parse repeated scalar fields which is in quite a few places
- it would add non-trivial complexity to the parsers
I would not do anything on our side for this issue.
from perfetto.
Thank you both for your help! I was using betterproto
as the encoder -- I'll modify the generated bindings to ensure flow_ids
are non-packed.
from perfetto.
Thank you both for your help! I was using
betterproto
as the encoder -- I'll modify the generated bindings to ensure flow_ids are non-packed.
Great!
from perfetto.
Related Issues (20)
- The recent updates seem to not support regular expression search. HOT 4
- Cannot write track events with custom datasource HOT 4
- tracing_muxer_impl.cc calls deprecated version of std::atomic_store HOT 8
- still racy prebuilt download HOT 11
- traced_probes crash HOT 4
- Question about the perfetto UI HOT 8
- How to turn off PERFETTO_WATCHDOG when compiling? HOT 1
- Perfetto is crashed HOT 5
- Perfetto UI: Minimizing the size of deployed files? HOT 12
- Feature request: support serving Perfetto UI resources from a different directory HOT 7
- A wrong link in docs/reference /perfetto-cli.md
- Why does The perfetto UI display The Trace Processor instance on X.X.X. x:9002 is too old? HOT 7
- ToTimecode function is not work properly HOT 1
- How to quickly locate a ftrace slice on the timeline based on the start timestamp HOT 1
- Empty auxiliary tracks show up as crashed? HOT 2
- How to cut a large perfetto trace to some small file HOT 1
- Why can't I click the box corresponding to a single ftrace event? HOT 1
- Trace counters aren't present in timeline HOT 2
- traces with low timestamped logcat events fail to open properly HOT 1
- feature request: selectively display specific slice HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from perfetto.