mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 10:31:04 +00:00
Runtime interface to add support for tracing from wasm (#6381)
* Add span recording to tracing implementation * Add tracing proxy * switch to rustc_hash::FxHashMap * Replace lazy_static and hashmap with thread_local and vec. * fix marking valid span as invalid while removing invalid spans * refactor, add wasm_tracing module in `support` * update registered spans * tidy up * typos * refactor * update flag name to signal lost trace - `is_valid_trace` * update flag name to signal lost trace - `is_valid_trace` * update docs * update docs * Use tracing Field recording to store the actual `name` and `target` from wasm traces. * fix debug log in subscriber + small refactor * add tests * handle misuse in case trying to exit span not held * Implement filter for wasm traces, simplify field recording for primitive types * remove superfluous warning * update docs * Update primitives/tracing/src/proxy.rs Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com> * update docs, apply suggestions * move Proxy from thread_local to `Extension`, rename macro * fix test * unify native & wasm span macro calls * implement wasm tracing control facility in primitives and frame * add cli flag `--wasm-tracing` * fix * switch to `Option<u4>` (possible performance degradation), switch to static mut bool * performance improvement using u64 vs Option<u64> * performance improvement moving concat to client * update docs * Update client/cli/src/params/import_params.rs Co-authored-by: Cecile Tonglet <cecile@parity.io> * performance improvement * Revert "performance improvement" This reverts commit 55ff8817a86302cd93bb6197eb4ca5bc7f4fb524. * small refactor * formatting * bump impl_version * Update client/cli/src/config.rs Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com> * update docs * small fixes, remove pub static * nit * add integration tests and refactor Subscriber * tests * revert formatting * try fix test that works locally but not in CI * try fix test that works locally but not in CI * debug test that works locally but not in CI * fix test that works locally but not in CI * remove pub visibility from bool in runtime * make TracingSpanGuard #[cfg(not(feature = "std"))], update docs, comments * make TracingProxy drop implementation conditional on !empty state * add docs for TraceHandler * remove blank line * update expect message * update tests * rename cli option to tracing_enable_wasm * rename cli option to tracing_enable_wasm * fix * ensure wasm-tracing features are wasm only * bump impl_version * bump impl_version * add `"pallet-scheduler/std"` to `[features]` `std` in node/runtime * refactor service to remove sp_tracing dependency * refactor: line width, trait bounds * improve LogTraceHandler output * fix test * improve tracing log output * Apply suggestions from code review * Apply suggestions from code review Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com> * swap wasm indication from trace name to a separate value * Update client/tracing/src/lib.rs * add docs * remove runtime features remove wasm_tracing option from CLI remove wasm_tracing flag from ProfilingSubscriber Co-authored-by: Matt Rutherford <mattrutherford@users.noreply.github.com> Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com> Co-authored-by: Cecile Tonglet <cecile@parity.io>
This commit is contained in:
@@ -216,7 +216,7 @@ pub trait DefaultChildStorage {
|
||||
/// Clear a child storage key.
|
||||
///
|
||||
/// For the default child storage at `storage_key`, clear value at `key`.
|
||||
fn clear (
|
||||
fn clear(
|
||||
&mut self,
|
||||
storage_key: &[u8],
|
||||
key: &[u8],
|
||||
@@ -965,6 +965,55 @@ pub trait Logging {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "std")]
|
||||
sp_externalities::decl_extension! {
|
||||
/// Extension to allow running traces in wasm via Proxy
|
||||
pub struct TracingProxyExt(sp_tracing::proxy::TracingProxy);
|
||||
}
|
||||
|
||||
/// Interface that provides functions for profiling the runtime.
|
||||
#[runtime_interface]
|
||||
pub trait WasmTracing {
|
||||
/// To create and enter a `tracing` span, using `sp_tracing::proxy`
|
||||
/// Returns 0 value to indicate that no further traces should be attempted
|
||||
fn enter_span(&mut self, target: &str, name: &str) -> u64 {
|
||||
if sp_tracing::wasm_tracing_enabled() {
|
||||
match self.extension::<TracingProxyExt>() {
|
||||
Some(proxy) => return proxy.enter_span(target, name),
|
||||
None => {
|
||||
if self.register_extension(TracingProxyExt(sp_tracing::proxy::TracingProxy::new())).is_ok() {
|
||||
if let Some(proxy) = self.extension::<TracingProxyExt>() {
|
||||
return proxy.enter_span(target, name);
|
||||
}
|
||||
} else {
|
||||
log::warn!(
|
||||
target: "tracing",
|
||||
"Unable to register extension: TracingProxyExt"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
log::debug!(
|
||||
target: "tracing",
|
||||
"Notify to runtime that tracing is disabled."
|
||||
);
|
||||
0
|
||||
}
|
||||
|
||||
/// Exit a `tracing` span, using `sp_tracing::proxy`
|
||||
fn exit_span(&mut self, id: u64) {
|
||||
if let Some(proxy) = self.extension::<TracingProxyExt>() {
|
||||
proxy.exit_span(id)
|
||||
} else {
|
||||
log::warn!(
|
||||
target: "tracing",
|
||||
"Unable to load extension: TracingProxyExt"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Wasm-only interface that provides functions for interacting with the sandbox.
|
||||
#[runtime_interface(wasm_only)]
|
||||
pub trait Sandbox {
|
||||
@@ -1111,6 +1160,7 @@ pub type SubstrateHostFunctions = (
|
||||
storage::HostFunctions,
|
||||
default_child_storage::HostFunctions,
|
||||
misc::HostFunctions,
|
||||
wasm_tracing::HostFunctions,
|
||||
offchain::HostFunctions,
|
||||
crypto::HostFunctions,
|
||||
hashing::HostFunctions,
|
||||
|
||||
Reference in New Issue
Block a user