directly write to file
This commit is contained in:
parent
a045570596
commit
dc8afb0cac
1 changed files with 16 additions and 17 deletions
33
src/lib.rs
33
src/lib.rs
|
|
@ -1,5 +1,6 @@
|
|||
use std::{
|
||||
collections::HashMap,
|
||||
fs::File,
|
||||
io::Write,
|
||||
sync::{Mutex, atomic::AtomicU64},
|
||||
thread::ThreadId,
|
||||
|
|
@ -33,15 +34,25 @@ struct SpanInfo {
|
|||
}
|
||||
|
||||
struct InnerPerfettoSubscriber {
|
||||
buffer: Vec<perfetto::TracePacket>,
|
||||
file: File,
|
||||
spans: HashMap<u64, SpanInfo>,
|
||||
threads: HashMap<ThreadId, u64>,
|
||||
}
|
||||
|
||||
impl InnerPerfettoSubscriber {
|
||||
fn new(buffer: Vec<perfetto::TracePacket>) -> Self {
|
||||
let mut file = File::options()
|
||||
.write(true)
|
||||
.create(true)
|
||||
.truncate(true)
|
||||
.open("out.trace")
|
||||
.unwrap();
|
||||
|
||||
let trace = perfetto::Trace { packet: buffer };
|
||||
|
||||
file.write(&trace.encode_to_vec()).unwrap();
|
||||
Self {
|
||||
buffer,
|
||||
file,
|
||||
spans: HashMap::new(),
|
||||
threads: HashMap::new(),
|
||||
}
|
||||
|
|
@ -55,7 +66,7 @@ impl InnerPerfettoSubscriber {
|
|||
std::collections::hash_map::Entry::Vacant(vacant_entry) => {
|
||||
vacant_entry.insert(nextfree);
|
||||
|
||||
self.buffer.push(perfetto::TracePacket {
|
||||
self.push(perfetto::TracePacket {
|
||||
timestamp: None,
|
||||
data: Some(perfetto::trace_packet::Data::TrackDescriptor(
|
||||
perfetto::TrackDescriptor {
|
||||
|
|
@ -83,23 +94,11 @@ impl InnerPerfettoSubscriber {
|
|||
}
|
||||
|
||||
fn push(&mut self, packet: perfetto::TracePacket) {
|
||||
self.buffer.push(packet);
|
||||
|
||||
self.flush();
|
||||
}
|
||||
|
||||
fn flush(&mut self) {
|
||||
let trace = perfetto::Trace {
|
||||
packet: std::mem::take(&mut self.buffer),
|
||||
packet: vec![packet],
|
||||
};
|
||||
let buf = trace.encode_to_vec();
|
||||
|
||||
let mut file = std::fs::File::options()
|
||||
.append(true)
|
||||
.open("out.trace")
|
||||
.unwrap();
|
||||
|
||||
let _ = file.write(&buf);
|
||||
self.file.write(&trace.encode_to_vec()).unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue