Crate fxprof_processed_profile

Source
Expand description

This crate allows you to create a profile that can be loaded into the Firefox Profiler.

Specifically, this uses the “Processed profile format”.

Use Profile::new to create a new Profile object. Then add all the information into it. To convert it to JSON, use serde_json, for example serde_json::to_writer or serde_json::to_string.

§Example

use fxprof_processed_profile::{Profile, CategoryHandle, CpuDelta, Frame, FrameInfo, FrameFlags, SamplingInterval, Timestamp};
use std::time::SystemTime;

let mut profile = Profile::new("My app", SystemTime::now().into(), SamplingInterval::from_millis(1));
let process = profile.add_process("App process", 54132, Timestamp::from_millis_since_reference(0.0));
let thread = profile.add_thread(process, 54132000, Timestamp::from_millis_since_reference(0.0), true);
profile.set_thread_name(thread, "Main thread");
let stack = vec![
    FrameInfo { frame: Frame::Label(profile.intern_string("Root node")), category_pair: CategoryHandle::OTHER.into(), flags: FrameFlags::empty() },
    FrameInfo { frame: Frame::Label(profile.intern_string("First callee")), category_pair: CategoryHandle::OTHER.into(), flags: FrameFlags::empty() }
];
profile.add_sample(thread, Timestamp::from_millis_since_reference(0.0), stack.into_iter(), CpuDelta::ZERO, 1);

let writer = std::io::BufWriter::new(output_file);
serde_json::to_writer(writer, &profile)?;

Re-exports§

pub use debugid;

Structs§

CategoryHandle
A profiling category, can be set on stack frames and markers as part of a CategoryPairHandle.
CategoryPairHandle
A profiling category pair, consisting of a category and an optional subcategory. Can be set on stack frames and markers.
CounterHandle
A counter. Can be created with Profile::add_counter.
CpuDelta
The amount of CPU time between thread samples.
FrameFlags
Flags for a stack frame.
FrameInfo
All the information about a single stack frame.
LibMappings
Keeps track of mapped libraries in an address space. Stores a value for each mapping, and allows efficient lookup of that value based on an address.
LibraryHandle
The handle for a library, obtained from Profile::add_lib.
LibraryInfo
A library (“binary” / “module” / “DSO”) which is loaded into a process. This can be the main executable file or a dynamic library, or any other mapping of executable memory.
MarkerDynamicField
The field description of a marker field which can have a different value for each marker.
MarkerSchema
Describes a marker type.
MarkerStaticField
The field description of a marker field which has the same key and value on all markers with this schema.
ProcessHandle
A process. Can be created with Profile::add_process.
Profile
Stores the profile data and can be serialized as JSON, via serde::Serialize.
ReferenceTimestamp
A timestamp which anchors the profile in absolute time.
SamplingInterval
The sampling interval used during profile recording.
StringHandle
A handle for an interned string, returned from Profile::intern_string.
Symbol
A single symbol from a SymbolTable.
SymbolTable
A symbol table which contains a list of Symbols, used in LibraryInfo.
ThreadHandle
A thread. Can be created with Profile::add_thread.
Timestamp
The type used for sample and marker timestamps.

Enums§

CategoryColor
One of the available colors for a category.
Frame
A part of the information about a single stack frame.
MarkerFieldFormat
The field format of a marker field.
MarkerLocation
The location of markers with this type.
MarkerSchemaField
The description of a marker field in the marker type’s schema.
MarkerTiming
Specifies timestamps for a marker.

Traits§

ProfilerMarker
The trait that all markers implement.