use prost::Message; mod perfetto { include!(concat!(env!("OUT_DIR"), "/perfetto.trace.rs")); } fn main() { let mut packets = Vec::new(); packets.push(perfetto::TracePacket { timestamp: None, data: Some(perfetto::trace_packet::Data::TrackDescriptor( perfetto::TrackDescriptor { uuid: Some(894893984), parent_uuid: None, static_or_dynamic_name: None, process: Some(perfetto::ProcessDescriptor { pid: Some(1234), process_name: Some(String::from("test")), }), thread: None, }, )), optional_trusted_packet_sequence_id: Some( perfetto::trace_packet::OptionalTrustedPacketSequenceId::TrustedPacketSequenceId( 3903809, ), ), }); packets.push(perfetto::TracePacket { timestamp: None, data: Some(perfetto::trace_packet::Data::TrackDescriptor( perfetto::TrackDescriptor { uuid: Some(49083589894), parent_uuid: None, static_or_dynamic_name: None, process: None, thread: Some(perfetto::ThreadDescriptor { pid: Some(1234), thread_name: Some(String::from("test_thread")), tid: Some(10), }), }, )), optional_trusted_packet_sequence_id: Some( perfetto::trace_packet::OptionalTrustedPacketSequenceId::TrustedPacketSequenceId( 3903809, ), ), }); packets.push(perfetto::TracePacket { timestamp: Some(100), data: Some(perfetto::trace_packet::Data::TrackEvent( perfetto::TrackEvent { track_uuid: Some(49083589894), categories: vec![], category_iids: vec![], name_field: Some(perfetto::track_event::NameField::Name(String::from("Test"))), r#type: Some(perfetto::track_event::Type::Instant as i32), }, )), optional_trusted_packet_sequence_id: Some( perfetto::trace_packet::OptionalTrustedPacketSequenceId::TrustedPacketSequenceId( 3903809, ), ), }); packets.push(perfetto::TracePacket { timestamp: Some(200), data: Some(perfetto::trace_packet::Data::TrackEvent( perfetto::TrackEvent { track_uuid: Some(49083589894), categories: vec![], category_iids: vec![], name_field: Some(perfetto::track_event::NameField::Name(String::from("Test"))), r#type: Some(perfetto::track_event::Type::SliceBegin as i32), }, )), optional_trusted_packet_sequence_id: Some( perfetto::trace_packet::OptionalTrustedPacketSequenceId::TrustedPacketSequenceId( 3903809, ), ), }); packets.push(perfetto::TracePacket { timestamp: Some(400), data: Some(perfetto::trace_packet::Data::TrackEvent( perfetto::TrackEvent { track_uuid: Some(49083589894), categories: vec![], category_iids: vec![], name_field: Some(perfetto::track_event::NameField::Name(String::from("Test"))), r#type: Some(perfetto::track_event::Type::Instant as i32), }, )), optional_trusted_packet_sequence_id: Some( perfetto::trace_packet::OptionalTrustedPacketSequenceId::TrustedPacketSequenceId( 3903809, ), ), }); packets.push(perfetto::TracePacket { timestamp: Some(600), data: Some(perfetto::trace_packet::Data::TrackEvent( perfetto::TrackEvent { track_uuid: Some(49083589894), categories: vec![], category_iids: vec![], name_field: Some(perfetto::track_event::NameField::Name(String::from("Test"))), r#type: Some(perfetto::track_event::Type::SliceEnd as i32), }, )), optional_trusted_packet_sequence_id: Some( perfetto::trace_packet::OptionalTrustedPacketSequenceId::TrustedPacketSequenceId( 3903809, ), ), }); let trace = perfetto::Trace { packet: packets }; let mut buf = Vec::with_capacity(trace.encoded_len()); trace.encode(&mut buf).unwrap(); std::fs::write("out.trace", buf); dbg!(trace); }