summaryrefslogtreecommitdiffstats
path: root/glutin/src/application.rs
diff options
context:
space:
mode:
Diffstat (limited to 'glutin/src/application.rs')
-rw-r--r--glutin/src/application.rs44
1 files changed, 32 insertions, 12 deletions
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)]