summaryrefslogtreecommitdiffstats
path: root/glutin
diff options
context:
space:
mode:
authorLibravatar Bingus <shankern@protonmail.com>2022-11-29 19:50:58 -0800
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-01-09 18:52:38 +0100
commitc5cd236b7380c3689792934aeaecd2942713fa67 (patch)
treec27a0e6ecfdec7936791ee70e07ce19c713095cd /glutin
parentba20ac8e49aedfa9d822d71784587d0635cec4f8 (diff)
downloadiced-c5cd236b7380c3689792934aeaecd2942713fa67.tar.gz
iced-c5cd236b7380c3689792934aeaecd2942713fa67.tar.bz2
iced-c5cd236b7380c3689792934aeaecd2942713fa67.zip
Initial profiling support for Iced.
Diffstat (limited to 'glutin')
-rw-r--r--glutin/Cargo.toml6
-rw-r--r--glutin/src/application.rs44
2 files changed, 38 insertions, 12 deletions
diff --git a/glutin/Cargo.toml b/glutin/Cargo.toml
index 022457b1..6749cb96 100644
--- a/glutin/Cargo.toml
+++ b/glutin/Cargo.toml
@@ -11,6 +11,7 @@ keywords = ["gui", "ui", "graphics", "interface", "widgets"]
categories = ["gui"]
[features]
+trace = ["iced_profiling/tracing-chrome"]
debug = ["iced_winit/debug"]
system = ["iced_winit/system"]
@@ -35,3 +36,8 @@ features = ["application"]
version = "0.5"
path = "../graphics"
features = ["opengl"]
+
+[dependencies.iced_profiling]
+version = "0.1.0"
+path = "../profiling"
+optional = true
diff --git a/glutin/src/application.rs b/glutin/src/application.rs
index 3e9d11f9..21051f16 100644
--- a/glutin/src/application.rs
+++ b/glutin/src/application.rs
@@ -17,6 +17,9 @@ use iced_winit::{Clipboard, Command, Debug, Proxy, Settings};
use glutin::window::Window;
use std::mem::ManuallyDrop;
+#[cfg(feature = "trace")]
+use iced_profiling::{info_span, instrument::Instrument};
+
/// Runs an [`Application`] with an executor, compositor, and the provided
/// settings.
pub fn run<A, E, C>(
@@ -35,9 +38,15 @@ where
use glutin::platform::run_return::EventLoopExtRunReturn;
use glutin::ContextBuilder;
+ #[cfg(feature = "trace")]
+ let _guard = iced_profiling::init();
+
let mut debug = Debug::new();
debug.startup_started();
+ #[cfg(feature = "trace")]
+ let _ = info_span!("Application::Glutin", "RUN").entered();
+
let mut event_loop = EventLoopBuilder::with_user_event().build();
let proxy = event_loop.create_proxy();
@@ -124,18 +133,26 @@ where
let (mut sender, receiver) = mpsc::unbounded();
- let mut instance = Box::pin(run_instance::<A, E, C>(
- application,
- compositor,
- renderer,
- runtime,
- proxy,
- debug,
- receiver,
- context,
- init_command,
- settings.exit_on_close_request,
- ));
+ let mut instance = Box::pin({
+ let run_instance = run_instance::<A, E, C>(
+ application,
+ compositor,
+ renderer,
+ runtime,
+ proxy,
+ debug,
+ receiver,
+ context,
+ init_command,
+ settings.exit_on_close_request,
+ );
+
+ #[cfg(feature = "trace")]
+ let run_instance =
+ run_instance.instrument(info_span!("Application", "LOOP"));
+
+ run_instance
+ });
let mut context = task::Context::from_waker(task::noop_waker_ref());
@@ -333,6 +350,9 @@ async fn run_instance<A, E, C>(
messages.push(message);
}
event::Event::RedrawRequested(_) => {
+ #[cfg(feature = "trace")]
+ let _ = info_span!("Application", "FRAME").entered();
+
debug.render_started();
#[allow(unsafe_code)]