inspector: Pass the drawing context into the recorder

That way we can capture both the actual changes (clip region) and the
area that was redrawn (render region), which in OpenGL might not be
identical.

Nothing shows the render region yet though...
This commit is contained in:
Benjamin Otte
2016-11-30 18:55:45 +01:00
parent 358aca9e20
commit e950a5190d
7 changed files with 31 additions and 7 deletions

View File

@@ -15651,7 +15651,12 @@ gtk_widget_render (GtkWidget *widget,
root = gtk_snapshot_finish (&snapshot);
if (root != NULL)
{
gtk_inspector_record_render (widget, renderer, window, region, root);
gtk_inspector_record_render (widget,
renderer,
window,
region,
context,
root);
gsk_renderer_render (renderer, root, context);
gsk_render_node_unref (root);

View File

@@ -490,6 +490,7 @@ gtk_inspector_recorder_record_render (GtkInspectorRecorder *recorder,
GskRenderer *renderer,
GdkWindow *window,
const cairo_region_t *region,
GdkDrawingContext *context,
GskRenderNode *node)
{
GtkInspectorRecording *recording;
@@ -506,6 +507,7 @@ gtk_inspector_recorder_record_render (GtkInspectorRecorder *recorder,
gdk_window_get_width (window),
gdk_window_get_height (window) },
region,
gdk_drawing_context_get_clip (context),
node);
gtk_inspector_recorder_add_recording (recorder, recording);
g_object_unref (recording);

View File

@@ -53,6 +53,7 @@ void gtk_inspector_recorder_record_render (GtkInspectorRec
GskRenderer *renderer,
GdkWindow *window,
const cairo_region_t *region,
GdkDrawingContext *context,
GskRenderNode *node);
G_END_DECLS

View File

@@ -27,7 +27,8 @@ gtk_inspector_render_recording_finalize (GObject *object)
{
GtkInspectorRenderRecording *recording = GTK_INSPECTOR_RENDER_RECORDING (object);
g_clear_pointer (&recording->clip, cairo_region_destroy);
g_clear_pointer (&recording->clip_region, cairo_region_destroy);
g_clear_pointer (&recording->render_region, cairo_region_destroy);
g_clear_pointer (&recording->node, gsk_render_node_unref);
g_clear_pointer (&recording->profiler_info, g_free);
@@ -63,7 +64,8 @@ GtkInspectorRecording *
gtk_inspector_render_recording_new (gint64 timestamp,
GskProfiler *profiler,
const GdkRectangle *area,
const cairo_region_t *clip,
const cairo_region_t *clip_region,
const cairo_region_t *render_region,
GskRenderNode *node)
{
GtkInspectorRenderRecording *recording;
@@ -74,7 +76,8 @@ gtk_inspector_render_recording_new (gint64 timestamp,
collect_profiler_info (recording, profiler);
recording->area = *area;
recording->clip = cairo_region_copy (clip);
recording->clip_region = cairo_region_copy (clip_region);
recording->render_region = cairo_region_copy (render_region);
recording->node = gsk_render_node_ref (node);
return GTK_INSPECTOR_RECORDING (recording);
@@ -89,7 +92,13 @@ gtk_inspector_render_recording_get_node (GtkInspectorRenderRecording *recording)
const cairo_region_t *
gtk_inspector_render_recording_get_clip_region (GtkInspectorRenderRecording *recording)
{
return recording->clip;
return recording->clip_region;
}
const cairo_region_t *
gtk_inspector_render_recording_get_render_region (GtkInspectorRenderRecording *recording)
{
return recording->render_region;
}
const cairo_rectangle_int_t *

View File

@@ -41,7 +41,8 @@ typedef struct _GtkInspectorRenderRecording
GtkInspectorRecording parent;
GdkRectangle area;
cairo_region_t *clip;
cairo_region_t *clip_region;
cairo_region_t *render_region;
GskRenderNode *node;
char *profiler_info;
} GtkInspectorRenderRecording;
@@ -57,12 +58,15 @@ GtkInspectorRecording *
gtk_inspector_render_recording_new (gint64 timestamp,
GskProfiler *profiler,
const GdkRectangle *area,
const cairo_region_t *clip,
const cairo_region_t *clip_region,
const cairo_region_t *render_region,
GskRenderNode *node);
GskRenderNode * gtk_inspector_render_recording_get_node (GtkInspectorRenderRecording *recording);
const cairo_region_t *
gtk_inspector_render_recording_get_clip_region (GtkInspectorRenderRecording *recording);
const cairo_region_t *
gtk_inspector_render_recording_get_render_region (GtkInspectorRenderRecording *recording);
const cairo_rectangle_int_t *
gtk_inspector_render_recording_get_area (GtkInspectorRenderRecording *recording);
const char * gtk_inspector_render_recording_get_profiler_info

View File

@@ -346,6 +346,7 @@ gtk_inspector_record_render (GtkWidget *widget,
GskRenderer *renderer,
GdkWindow *window,
const cairo_region_t *region,
GdkDrawingContext *context,
GskRenderNode *node)
{
GtkInspectorWindow *iw;
@@ -363,6 +364,7 @@ gtk_inspector_record_render (GtkWidget *widget,
renderer,
window,
region,
context,
node);
}

View File

@@ -110,6 +110,7 @@ void gtk_inspector_record_render (GtkWidget *widget,
GskRenderer *renderer,
GdkWindow *window,
const cairo_region_t *region,
GdkDrawingContext *context,
GskRenderNode *node);
G_END_DECLS