From 5ed3c71b12ddfcc9a11753d213c8def11c32f3bf Mon Sep 17 00:00:00 2001 From: Marek Kotewicz Date: Fri, 23 Feb 2018 19:49:08 +0100 Subject: [PATCH] moved PerfTimer to a separate crate - "trace-time" (#7985) --- Cargo.toml | 8 ++++++++ src/lib.rs | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 Cargo.toml create mode 100644 src/lib.rs diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..e184f66 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "trace-time" +version = "0.1.0" +authors = ["Parity Technologies "] + +[dependencies] +time = "0.1.34" +log = "0.3" diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..3848135 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,53 @@ +// Copyright 2015-2017 Parity Technologies (UK) Ltd. +// This file is part of Parity. + +// Parity is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Parity is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Parity. If not, see . + +//! Performance timer with logging + +extern crate time; +#[macro_use] +extern crate log; + +use time::precise_time_ns; + +#[macro_export] +macro_rules! trace_time { + ($name: expr) => { + let _timer = $crate::PerfTimer::new($name); + } +} + +/// Performance timer with logging. Starts measuring time in the constructor, prints +/// elapsed time in the destructor or when `stop` is called. +pub struct PerfTimer { + name: &'static str, + start: u64, +} + +impl PerfTimer { + /// Create an instance with given name. + pub fn new(name: &'static str) -> PerfTimer { + PerfTimer { + name, + start: precise_time_ns(), + } + } +} + +impl Drop for PerfTimer { + fn drop(&mut self) { + trace!(target: "perf", "{}: {:.2}ms", self.name, (precise_time_ns() - self.start) as f32 / 1000_000.0); + } +}