From 84343d30fb39318bc8dbc66c28dd9b4a8b6c7192 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 1 Nov 2023 14:45:57 -0400 Subject: [PATCH] Some minor fpsoverlay improvements Avoid some allocations. --- gtk/inspector/fpsoverlay.c | 51 +++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 28 deletions(-) diff --git a/gtk/inspector/fpsoverlay.c b/gtk/inspector/fpsoverlay.c index a5aa45275c..a016066e9f 100644 --- a/gtk/inspector/fpsoverlay.c +++ b/gtk/inspector/fpsoverlay.c @@ -100,8 +100,6 @@ gtk_fps_overlay_snapshot (GtkInspectorOverlay *overlay, graphene_rect_t bounds; gboolean has_bounds; double overlay_opacity; - PangoGlyphString *glyphs; - GskRenderNode *fps_node; now = gdk_frame_clock_get_frame_time (gtk_widget_get_frame_clock (widget)); info = g_hash_table_lookup (self->infos, widget); @@ -149,42 +147,39 @@ gtk_fps_overlay_snapshot (GtkInspectorOverlay *overlay, has_bounds = gtk_widget_compute_bounds (widget, widget, &bounds); } - glyphs = pango_glyph_string_copy (self->glyphs); + gtk_snapshot_save (snapshot); + if (has_bounds) + gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (bounds.origin.x + bounds.size.width - self->width, bounds.origin.y)); + + if (overlay_opacity < 1.0) + gtk_snapshot_push_opacity (snapshot, overlay_opacity); + gtk_snapshot_append_color (snapshot, + &(GdkRGBA) { 0, 0, 0, 0.5 }, + &GRAPHENE_RECT_INIT (-1, -1, self->width + 2, self->height + 2)); fps = gtk_fps_overlay_get_fps (widget); - if (fps == 0.0) + if (fps != 0.0) { - for (int i = 0; i < 7; i++) - glyphs->glyphs[i].glyph = PANGO_GLYPH_EMPTY; - } - else - { - char *fps_string = g_strdup_printf ("%7.2f fps", fps); + GskRenderNode *fps_node; + char fps_string[40]; + + g_snprintf (fps_string, sizeof (fps_string), "%7.2f fps", fps); for (int i = 0; i < 7; i++) { if (g_ascii_isdigit (fps_string[i])) - glyphs->glyphs[i].glyph = self->digits->glyphs[fps_string[i] - '0'].glyph; + self->glyphs->glyphs[i].glyph = self->digits->glyphs[fps_string[i] - '0'].glyph; else if (fps_string[i] == ' ') - glyphs->glyphs[i].glyph = PANGO_GLYPH_EMPTY; + self->glyphs->glyphs[i].glyph = PANGO_GLYPH_EMPTY; } - g_free (fps_string); - } - gtk_snapshot_save (snapshot); - if (has_bounds) - gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (bounds.origin.x + bounds.size.width - self->width, bounds.origin.y)); + fps_node = gsk_text_node_new (self->font, + self->glyphs, + &(GdkRGBA) { 1, 1, 1, 1 }, + &GRAPHENE_POINT_INIT (0, self->baseline)); + gtk_snapshot_append_node (snapshot, fps_node); + gsk_render_node_unref (fps_node); + } - if (overlay_opacity < 1.0) - gtk_snapshot_push_opacity (snapshot, overlay_opacity); - gtk_snapshot_append_color (snapshot, - &(GdkRGBA) { 0, 0, 0, 0.5 }, - &GRAPHENE_RECT_INIT (-1, -1, self->width + 2, self->height + 2)); - fps_node = gsk_text_node_new (self->font, - glyphs, - &(GdkRGBA) { 1, 1, 1, 1 }, - &GRAPHENE_POINT_INIT (0, self->baseline)); - gtk_snapshot_append_node (snapshot, fps_node); - gsk_render_node_unref (fps_node); if (overlay_opacity < 1.0) gtk_snapshot_pop (snapshot); gtk_snapshot_restore (snapshot); -- 2.30.2