1#[cfg(feature = "tracing")]
7use tracing::{debug, info};
8
9#[cfg(feature = "tracing")]
11pub fn init_tracing() {
12 use tracing_subscriber::{EnvFilter, fmt};
13
14 let filter = EnvFilter::try_from_default_env()
15 .unwrap_or_else(|_| {
16 "dear_imgui=info,dear_imgui_wgpu=info,dear_imgui_winit=info,dear_imgui_glow=info,dear_imgui_bevy=info,warn".into()
18 });
19
20 fmt()
21 .with_env_filter(filter)
22 .with_target(true)
23 .with_thread_ids(false)
24 .with_file(false)
25 .with_line_number(false)
26 .init();
27}
28
29#[cfg(feature = "tracing")]
31pub fn init_tracing_with_filter(filter: &str) {
32 use tracing_subscriber::{EnvFilter, fmt};
33
34 let filter = EnvFilter::new(filter);
35
36 fmt()
37 .with_env_filter(filter)
38 .with_target(true)
39 .with_thread_ids(false)
40 .with_file(false)
41 .with_line_number(false)
42 .init();
43}
44
45#[cfg(feature = "tracing")]
47pub fn init_tracing_dev() {
48 use tracing_subscriber::{EnvFilter, fmt};
49
50 let filter = EnvFilter::try_from_default_env()
51 .unwrap_or_else(|_| {
52 "dear_imgui=debug,dear_imgui_wgpu=debug,dear_imgui_winit=debug,dear_imgui_glow=debug,dear_imgui_bevy=debug,info".into()
54 });
55
56 fmt()
57 .with_env_filter(filter)
58 .with_target(true)
59 .with_thread_ids(true)
60 .with_file(true)
61 .with_line_number(true)
62 .init();
63}
64
65#[cfg(feature = "tracing")]
67pub fn log_context_created() {
68 info!("Dear ImGui context created successfully");
69}
70
71#[cfg(feature = "tracing")]
73pub fn log_context_destroyed() {
74 info!("Dear ImGui context destroyed");
75}
76
77#[cfg(feature = "tracing")]
79pub fn log_renderer_init(backend: &str) {
80 info!("Dear ImGui {} renderer initialized", backend);
81}
82
83#[cfg(feature = "tracing")]
85pub fn log_platform_init(platform: &str) {
86 info!("Dear ImGui {} platform initialized", platform);
87}
88
89#[cfg(feature = "tracing")]
91pub fn log_frame_stats(frame_time: f32, fps: f32) {
92 debug!("Frame time: {:.2}ms, FPS: {:.1}", frame_time * 1000.0, fps);
93}
94
95#[cfg(feature = "tracing")]
97pub fn log_memory_usage(vertices: usize, indices: usize, draw_calls: usize) {
98 debug!(
99 "Render stats - Vertices: {}, Indices: {}, Draw calls: {}",
100 vertices, indices, draw_calls
101 );
102}
103
104#[cfg(not(feature = "tracing"))]
106pub fn init_tracing() {
107 eprintln!("Warning: tracing feature not enabled, logging disabled");
108}
109
110#[cfg(not(feature = "tracing"))]
111pub fn init_tracing_with_filter(_filter: &str) {
112 eprintln!("Warning: tracing feature not enabled, logging disabled");
113}
114
115#[cfg(not(feature = "tracing"))]
116pub fn init_tracing_dev() {
117 eprintln!("Warning: tracing feature not enabled, logging disabled");
118}
119
120#[cfg(not(feature = "tracing"))]
121pub fn log_context_created() {}
122
123#[cfg(not(feature = "tracing"))]
124pub fn log_context_destroyed() {}
125
126#[cfg(not(feature = "tracing"))]
127pub fn log_renderer_init(_backend: &str) {}
128
129#[cfg(not(feature = "tracing"))]
130pub fn log_platform_init(_platform: &str) {}
131
132#[cfg(not(feature = "tracing"))]
133pub fn log_frame_stats(_frame_time: f32, _fps: f32) {}
134
135#[cfg(not(feature = "tracing"))]
136pub fn log_memory_usage(_vertices: usize, _indices: usize, _draw_calls: usize) {}
137
138#[macro_export]
140macro_rules! imgui_trace {
141 ($($arg:tt)*) => {
142 #[cfg(feature = "tracing")]
143 tracing::trace!($($arg)*);
144 };
145}
146
147#[macro_export]
149macro_rules! imgui_debug {
150 ($($arg:tt)*) => {
151 #[cfg(feature = "tracing")]
152 tracing::debug!($($arg)*);
153 };
154}
155
156#[macro_export]
158macro_rules! imgui_info {
159 ($($arg:tt)*) => {
160 #[cfg(feature = "tracing")]
161 tracing::info!($($arg)*);
162 };
163}
164
165#[macro_export]
167macro_rules! imgui_warn {
168 ($($arg:tt)*) => {
169 #[cfg(feature = "tracing")]
170 tracing::warn!($($arg)*);
171 };
172}
173
174#[macro_export]
176macro_rules! imgui_error {
177 ($($arg:tt)*) => {
178 #[cfg(feature = "tracing")]
179 tracing::error!($($arg)*);
180 };
181}
182
183#[cfg(test)]
184mod tests {
185 #[test]
186 fn test_logging_macros() {
187 imgui_trace!("test trace");
189 imgui_debug!("test debug");
190 imgui_info!("test info");
191 imgui_warn!("test warn");
192 imgui_error!("test error");
193 }
194}