diff options
| -rw-r--r-- | Cargo.lock | 9 | ||||
| -rw-r--r-- | crates/ra_prof/Cargo.toml | 1 | ||||
| -rw-r--r-- | crates/ra_prof/src/lib.rs | 30 |
3 files changed, 36 insertions, 4 deletions
diff --git a/Cargo.lock b/Cargo.lock index e38fa0ff0..4dbe5679d 100644 --- a/Cargo.lock +++ b/Cargo.lock | |||
| @@ -41,7 +41,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" | |||
| 41 | 41 | ||
| 42 | [[package]] | 42 | [[package]] |
| 43 | name = "backtrace" | 43 | name = "backtrace" |
| 44 | version = "0.3.26" | 44 | version = "0.3.28" |
| 45 | source = "registry+https://github.com/rust-lang/crates.io-index" | 45 | source = "registry+https://github.com/rust-lang/crates.io-index" |
| 46 | dependencies = [ | 46 | dependencies = [ |
| 47 | "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", | 47 | "autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", |
| @@ -381,7 +381,7 @@ name = "error-chain" | |||
| 381 | version = "0.12.1" | 381 | version = "0.12.1" |
| 382 | source = "registry+https://github.com/rust-lang/crates.io-index" | 382 | source = "registry+https://github.com/rust-lang/crates.io-index" |
| 383 | dependencies = [ | 383 | dependencies = [ |
| 384 | "backtrace 0.3.26 (registry+https://github.com/rust-lang/crates.io-index)", | 384 | "backtrace 0.3.28 (registry+https://github.com/rust-lang/crates.io-index)", |
| 385 | "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", | 385 | "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", |
| 386 | ] | 386 | ] |
| 387 | 387 | ||
| @@ -390,7 +390,7 @@ name = "failure" | |||
| 390 | version = "0.1.5" | 390 | version = "0.1.5" |
| 391 | source = "registry+https://github.com/rust-lang/crates.io-index" | 391 | source = "registry+https://github.com/rust-lang/crates.io-index" |
| 392 | dependencies = [ | 392 | dependencies = [ |
| 393 | "backtrace 0.3.26 (registry+https://github.com/rust-lang/crates.io-index)", | 393 | "backtrace 0.3.28 (registry+https://github.com/rust-lang/crates.io-index)", |
| 394 | "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", | 394 | "failure_derive 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", |
| 395 | ] | 395 | ] |
| 396 | 396 | ||
| @@ -1179,6 +1179,7 @@ dependencies = [ | |||
| 1179 | name = "ra_prof" | 1179 | name = "ra_prof" |
| 1180 | version = "0.1.0" | 1180 | version = "0.1.0" |
| 1181 | dependencies = [ | 1181 | dependencies = [ |
| 1182 | "backtrace 0.3.28 (registry+https://github.com/rust-lang/crates.io-index)", | ||
| 1182 | "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", | 1183 | "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", |
| 1183 | "once_cell 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", | 1184 | "once_cell 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", |
| 1184 | ] | 1185 | ] |
| @@ -1986,7 +1987,7 @@ dependencies = [ | |||
| 1986 | "checksum arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "92c7fb76bc8826a8b33b4ee5bb07a247a81e76764ab4d55e8f73e3a4d8808c71" | 1987 | "checksum arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "92c7fb76bc8826a8b33b4ee5bb07a247a81e76764ab4d55e8f73e3a4d8808c71" |
| 1987 | "checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652" | 1988 | "checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652" |
| 1988 | "checksum autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0e49efa51329a5fd37e7c79db4621af617cd4e3e5bc224939808d076077077bf" | 1989 | "checksum autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0e49efa51329a5fd37e7c79db4621af617cd4e3e5bc224939808d076077077bf" |
| 1989 | "checksum backtrace 0.3.26 (registry+https://github.com/rust-lang/crates.io-index)" = "1a13fc43f04daf08ab4f71e3d27e1fc27fc437d3e95ac0063a796d92fb40f39b" | 1990 | "checksum backtrace 0.3.28 (registry+https://github.com/rust-lang/crates.io-index)" = "d0c18049b371fef38d66b2d69643618023d9d6b4e62891019f3359e88f73922a" |
| 1990 | "checksum backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "797c830ac25ccc92a7f8a7b9862bde440715531514594a6154e3d4a54dd769b6" | 1991 | "checksum backtrace-sys 0.1.28 (registry+https://github.com/rust-lang/crates.io-index)" = "797c830ac25ccc92a7f8a7b9862bde440715531514594a6154e3d4a54dd769b6" |
| 1991 | "checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" | 1992 | "checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" |
| 1992 | "checksum bit-set 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e84c238982c4b1e1ee668d136c510c67a13465279c0cb367ea6baf6310620a80" | 1993 | "checksum bit-set 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e84c238982c4b1e1ee668d136c510c67a13465279c0cb367ea6baf6310620a80" |
diff --git a/crates/ra_prof/Cargo.toml b/crates/ra_prof/Cargo.toml index efcce3d65..d55af18f5 100644 --- a/crates/ra_prof/Cargo.toml +++ b/crates/ra_prof/Cargo.toml | |||
| @@ -8,3 +8,4 @@ publish = false | |||
| 8 | [dependencies] | 8 | [dependencies] |
| 9 | once_cell = "0.2.0" | 9 | once_cell = "0.2.0" |
| 10 | itertools = "0.8.0" | 10 | itertools = "0.8.0" |
| 11 | backtrace = "0.3.28" | ||
diff --git a/crates/ra_prof/src/lib.rs b/crates/ra_prof/src/lib.rs index e681b8e0b..6ec24d86d 100644 --- a/crates/ra_prof/src/lib.rs +++ b/crates/ra_prof/src/lib.rs | |||
| @@ -225,6 +225,36 @@ fn print(lvl: usize, msgs: &[Message], out: &mut impl Write, longer_than: Durati | |||
| 225 | } | 225 | } |
| 226 | } | 226 | } |
| 227 | 227 | ||
| 228 | /// Prints backtrace to stderr, useful for debugging. | ||
| 229 | pub fn print_backtrace() { | ||
| 230 | let bt = backtrace::Backtrace::new(); | ||
| 231 | eprintln!("{:?}", bt); | ||
| 232 | } | ||
| 233 | |||
| 234 | thread_local!(static IN_SCOPE: RefCell<bool> = RefCell::new(false)); | ||
| 235 | |||
| 236 | /// Allows to check if the current code is withing some dynamic scope, can be | ||
| 237 | /// useful during debugging to figure out why a function is called. | ||
| 238 | pub struct Scope { | ||
| 239 | _hidden: (), | ||
| 240 | } | ||
| 241 | |||
| 242 | impl Scope { | ||
| 243 | pub fn enter() -> Scope { | ||
| 244 | IN_SCOPE.with(|slot| *slot.borrow_mut() = true); | ||
| 245 | Scope { _hidden: () } | ||
| 246 | } | ||
| 247 | pub fn is_active() -> bool { | ||
| 248 | IN_SCOPE.with(|slot| *slot.borrow()) | ||
| 249 | } | ||
| 250 | } | ||
| 251 | |||
| 252 | impl Drop for Scope { | ||
| 253 | fn drop(&mut self) { | ||
| 254 | IN_SCOPE.with(|slot| *slot.borrow_mut() = false); | ||
| 255 | } | ||
| 256 | } | ||
| 257 | |||
| 228 | #[cfg(test)] | 258 | #[cfg(test)] |
| 229 | mod tests { | 259 | mod tests { |
| 230 | use super::*; | 260 | use super::*; |
