Merge branch 'frame-pixel-counter' into 'master'

profiling: Add a counter for pixels drawn per frame

See merge request GNOME/gtk!855
This commit is contained in:
Matthias Clasen 2019-05-19 15:20:52 +00:00
commit d4f6bfbdad

View File

@ -24,6 +24,7 @@
#include "gdkinternals.h"
#include "gdkintl.h"
#include "gdkprofilerprivate.h"
/**
* SECTION:gdkdrawcontext
@ -174,9 +175,15 @@ gdk_draw_context_class_init (GdkDrawContextClass *klass)
g_object_class_install_properties (gobject_class, LAST_PROP, pspecs);
}
static guint pixels_counter;
static void
gdk_draw_context_init (GdkDrawContext *self)
{
#ifdef G_ENABLE_DEBUG
if (pixels_counter == 0)
pixels_counter = gdk_profiler_define_int_counter ("frame pixels", "Pixels drawn per frame");
#endif
}
/**
@ -315,6 +322,25 @@ gdk_draw_context_begin_frame (GdkDrawContext *context,
GDK_DRAW_CONTEXT_GET_CLASS (context)->begin_frame (context, priv->frame_region);
}
#ifdef G_ENABLE_DEBUG
static gint64
region_get_pixels (cairo_region_t *region)
{
int i, n;
cairo_rectangle_int_t rect;
gint64 pixels = 0;
n = cairo_region_num_rectangles (region);
for (i = 0; i < n; i++)
{
cairo_region_get_rectangle (region, i, &rect);
pixels += rect.width * rect.height;
}
return pixels;
}
#endif
/**
* gdk_draw_context_end_frame:
* @context: a #GdkDrawContext
@ -354,6 +380,13 @@ gdk_draw_context_end_frame (GdkDrawContext *context)
GDK_DRAW_CONTEXT_GET_CLASS (context)->end_frame (context, priv->frame_region);
#ifdef G_ENABLE_DEBUG
if (gdk_profiler_is_running ())
gdk_profiler_set_int_counter (pixels_counter,
g_get_monotonic_time () * 1000,
region_get_pixels (priv->frame_region));
#endif
g_clear_pointer (&priv->frame_region, cairo_region_destroy);
g_clear_object (&priv->surface->paint_context);
}