Log frame timings

Nathan Sobo created

Change summary

crates/gpui2/src/platform/mac/metal_renderer.rs | 6 ++++++
crates/gpui2/src/view.rs                        | 6 ++++++
crates/gpui2/src/window.rs                      | 2 +-
3 files changed, 13 insertions(+), 1 deletion(-)

Detailed changes

crates/gpui2/src/platform/mac/metal_renderer.rs 🔗

@@ -187,6 +187,8 @@ impl MetalRenderer {
     }
 
     pub fn draw(&mut self, scene: &Scene) {
+        let start = std::time::Instant::now();
+
         let layer = self.layer.clone();
         let viewport_size = layer.drawable_size();
         let viewport_size: Size<DevicePixels> = size(
@@ -303,6 +305,10 @@ impl MetalRenderer {
 
         command_buffer.commit();
         self.sprite_atlas.clear_textures(AtlasTextureKind::Path);
+
+        let duration_since_start = start.elapsed();
+        println!("renderer draw: {:?}", duration_since_start);
+
         command_buffer.wait_until_completed();
         drawable.present();
     }

crates/gpui2/src/view.rs 🔗

@@ -209,8 +209,14 @@ impl AnyView {
     ) {
         cx.with_absolute_element_offset(origin, |cx| {
             let (layout_id, rendered_element) = (self.layout)(self, cx);
+            let start_time = std::time::Instant::now();
             cx.compute_layout(layout_id, available_space);
+            let duration = start_time.elapsed();
+            println!("compute layout: {:?}", duration);
+            let start_time = std::time::Instant::now();
             (self.paint)(self, rendered_element, cx);
+            let duration = start_time.elapsed();
+            println!("paint: {:?}", duration);
         })
     }
 }

crates/gpui2/src/window.rs 🔗

@@ -1334,7 +1334,7 @@ impl<'a> WindowContext<'a> {
         }
 
         self.window.drawing = false;
-        eprintln!("frame: {:?}", t0.elapsed());
+        eprintln!("window draw: {:?}", t0.elapsed());
 
         scene
     }