Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Issue servo#7029 Early sketch of Telemetry in Servo
Telemetry histograms can be declared in any module. I am planning to add a macro to make the work a bit nicer, and possibly to generate Histograms.json automatically.
- Loading branch information
Showing
with
150 additions
and 2 deletions.
- +29 −1 components/compositing/compositor.rs
- +1 −0 components/compositing/lib.rs
- +22 −0 components/servo/Cargo.lock
- +1 −0 components/servo/Cargo.toml
- +2 −0 components/servo/lib.rs
- +41 −0 components/servo/main.rs
- +2 −0 components/util/Cargo.toml
- +2 −0 components/util/lib.rs
- +8 −1 components/util/opts.rs
- +42 −0 components/util/telemetry.rs
@@ -0,0 +1,42 @@ | ||
//! | ||
//! Telemetry histograms. | ||
//! | ||
//! In future versions, this file may be generated by a | ||
//! Histograms.json, as in Gecko. Or maybe it will be the opposite and | ||
//! Histograms.json will be generated from this file. | ||
//! | ||
|
||
use std::sync::Arc; | ||
use std::sync::mpsc::channel; | ||
|
||
extern crate telemetry; | ||
pub use self::telemetry::Service; | ||
pub use self::telemetry::plain::*; | ||
|
||
extern crate atomic_cell; | ||
pub use self::atomic_cell::StaticCell; | ||
pub use self::atomic_cell::CleanGuard; | ||
|
||
/// | ||
/// The shared instance of the telemetry service. | ||
/// | ||
pub static TELEMETRY: StaticCell<Arc<Service>> = StaticCell::new(); | ||
|
||
pub fn init(is_active: bool) -> CleanGuard<'static>{ | ||
TELEMETRY.init(Arc::new(Service::new(is_active))) | ||
} | ||
pub fn dump() { | ||
let service = TELEMETRY.get().unwrap(); | ||
let (sender, receiver) = channel(); | ||
|
||
// Collect plain histograms | ||
service.to_json(telemetry::Subset::AllPlain, telemetry::SerializationFormat::SimpleJson, sender.clone()); | ||
let plain = receiver.recv().unwrap(); | ||
|
||
// Collect keyed histograms | ||
service.to_json(telemetry::Subset::AllKeyed, telemetry::SerializationFormat::SimpleJson, sender.clone()); | ||
let keyed = receiver.recv().unwrap(); | ||
|
||
print!("{}\n", plain.pretty()); | ||
print!("{}\n", keyed.pretty()); | ||
} |