mirror of
https://github.com/brl/mutter.git
synced 2025-03-06 05:08:11 +00:00
debug: Split debugging notes from behavioural modifiers
Some of the ClutterDebugFlags are not meant as a logging facility: they actually change Clutter's behaviour at run-time. It would be useful to have this distinction ratified, and thus split ClutterDebugFlags into two: one DebugFlags for logging facilities and another set of flags for behavioural changes. This split is warranted because: • it should be possible to do "CLUTTER_DEBUG=all" and only have log messages on the output • it should be possible to use behavioural modifiers even on a Clutter that has been compiled without debugging messages support The commit adds two new debugging flags: ClutterPickDebugFlags - controlled by the CLUTTER_PICK environment variable ClutterPaintDebugFlags - controlled by the CLUTTER_PAINT environment variable The PickDebugFlags are: nop-picking dump-pick-buffers While the PaintDebugFlags is: disable-swap-events The mechanism is equivalent to the CLUTTER_DEBUG environment variable, but it does not depend on the debug level selected when configuring and compiling Clutter. The picking and painting debugging flags are initialized at clutter_init() time. http://bugzilla.openedhand.com/show_bug.cgi?id=1991
This commit is contained in:
parent
a9c307ff5d
commit
a9941e9499
@ -23,11 +23,17 @@ typedef enum {
|
|||||||
CLUTTER_DEBUG_MULTISTAGE = 1 << 13,
|
CLUTTER_DEBUG_MULTISTAGE = 1 << 13,
|
||||||
CLUTTER_DEBUG_ANIMATION = 1 << 14,
|
CLUTTER_DEBUG_ANIMATION = 1 << 14,
|
||||||
CLUTTER_DEBUG_LAYOUT = 1 << 15,
|
CLUTTER_DEBUG_LAYOUT = 1 << 15,
|
||||||
CLUTTER_DEBUG_NOP_PICKING = 1 << 16,
|
|
||||||
CLUTTER_DEBUG_DUMP_PICK_BUFFERS = 1 << 17,
|
|
||||||
CLUTTER_DEBUG_DISABLE_SWAP_EVENTS = 1 << 18,
|
|
||||||
} ClutterDebugFlag;
|
} ClutterDebugFlag;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
CLUTTER_DEBUG_NOP_PICKING = 1 << 0,
|
||||||
|
CLUTTER_DEBUG_DUMP_PICK_BUFFERS = 1 << 1
|
||||||
|
} ClutterPickDebugFlag;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
CLUTTER_DEBUG_DISABLE_SWAP_EVENTS = 1 << 0
|
||||||
|
} ClutterDrawDebugFlag;
|
||||||
|
|
||||||
#ifdef CLUTTER_ENABLE_DEBUG
|
#ifdef CLUTTER_ENABLE_DEBUG
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
@ -88,6 +94,8 @@ typedef enum {
|
|||||||
#endif /* CLUTTER_ENABLE_DEBUG */
|
#endif /* CLUTTER_ENABLE_DEBUG */
|
||||||
|
|
||||||
extern guint clutter_debug_flags;
|
extern guint clutter_debug_flags;
|
||||||
|
extern guint clutter_pick_debug_flags;
|
||||||
|
extern guint clutter_paint_debug_flags;
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
@ -137,6 +137,9 @@ static guint clutter_main_loop_level = 0;
|
|||||||
static GSList *main_loops = NULL;
|
static GSList *main_loops = NULL;
|
||||||
|
|
||||||
guint clutter_debug_flags = 0; /* global clutter debug flag */
|
guint clutter_debug_flags = 0; /* global clutter debug flag */
|
||||||
|
guint clutter_paint_debug_flags = 0;
|
||||||
|
guint clutter_pick_debug_flags = 0;
|
||||||
|
|
||||||
guint clutter_profile_flags = 0; /* global clutter profile flag */
|
guint clutter_profile_flags = 0; /* global clutter profile flag */
|
||||||
|
|
||||||
const guint clutter_major_version = CLUTTER_MAJOR_VERSION;
|
const guint clutter_major_version = CLUTTER_MAJOR_VERSION;
|
||||||
@ -160,17 +163,23 @@ static const GDebugKey clutter_debug_keys[] = {
|
|||||||
{ "shader", CLUTTER_DEBUG_SHADER },
|
{ "shader", CLUTTER_DEBUG_SHADER },
|
||||||
{ "multistage", CLUTTER_DEBUG_MULTISTAGE },
|
{ "multistage", CLUTTER_DEBUG_MULTISTAGE },
|
||||||
{ "animation", CLUTTER_DEBUG_ANIMATION },
|
{ "animation", CLUTTER_DEBUG_ANIMATION },
|
||||||
{ "layout", CLUTTER_DEBUG_LAYOUT },
|
{ "layout", CLUTTER_DEBUG_LAYOUT }
|
||||||
{ "nop-picking", CLUTTER_DEBUG_NOP_PICKING },
|
|
||||||
{ "dump-pick-buffers", CLUTTER_DEBUG_DUMP_PICK_BUFFERS },
|
|
||||||
{ "disable-swap-events", CLUTTER_DEBUG_DISABLE_SWAP_EVENTS }
|
|
||||||
};
|
};
|
||||||
#endif /* CLUTTER_ENABLE_DEBUG */
|
#endif /* CLUTTER_ENABLE_DEBUG */
|
||||||
|
|
||||||
|
static const GDebugKey clutter_pick_debug_keys[] = {
|
||||||
|
{ "nop-picking", CLUTTER_DEBUG_NOP_PICKING },
|
||||||
|
{ "dump-pick-buffers", CLUTTER_DEBUG_DUMP_PICK_BUFFERS }
|
||||||
|
};
|
||||||
|
|
||||||
|
static const GDebugKey clutter_paint_debug_keys[] = {
|
||||||
|
{ "disable-swap-events", CLUTTER_DEBUG_DISABLE_SWAP_EVENTS }
|
||||||
|
};
|
||||||
|
|
||||||
#ifdef CLUTTER_ENABLE_PROFILE
|
#ifdef CLUTTER_ENABLE_PROFILE
|
||||||
static const GDebugKey clutter_profile_keys[] = {
|
static const GDebugKey clutter_profile_keys[] = {
|
||||||
{"picking-only", CLUTTER_PROFILE_PICKING_ONLY },
|
{"picking-only", CLUTTER_PROFILE_PICKING_ONLY },
|
||||||
{"disable-report", CLUTTER_PROFILE_DISABLE_REPORT }
|
{"disable-report", CLUTTER_PROFILE_DISABLE_REPORT }
|
||||||
};
|
};
|
||||||
#endif /* CLUTTER_ENABLE_DEBUG */
|
#endif /* CLUTTER_ENABLE_DEBUG */
|
||||||
|
|
||||||
@ -411,7 +420,7 @@ _clutter_id_to_color (guint id, ClutterColor *col)
|
|||||||
* otherwise pick buffers dumped to an image will pretty much just look
|
* otherwise pick buffers dumped to an image will pretty much just look
|
||||||
* black.
|
* black.
|
||||||
*/
|
*/
|
||||||
if (G_UNLIKELY (clutter_debug_flags & CLUTTER_DEBUG_DUMP_PICK_BUFFERS))
|
if (G_UNLIKELY (clutter_pick_debug_flags & CLUTTER_DEBUG_DUMP_PICK_BUFFERS))
|
||||||
{
|
{
|
||||||
col->red = (col->red << 4) | (col->red >> 4);
|
col->red = (col->red << 4) | (col->red >> 4);
|
||||||
col->green = (col->green << 4) | (col->green >> 4);
|
col->green = (col->green << 4) | (col->green >> 4);
|
||||||
@ -431,7 +440,7 @@ _clutter_pixel_to_id (guchar pixel[4])
|
|||||||
/* reduce the pixel components to the number of bits actually used of the
|
/* reduce the pixel components to the number of bits actually used of the
|
||||||
* 8bits.
|
* 8bits.
|
||||||
*/
|
*/
|
||||||
if (G_UNLIKELY (clutter_debug_flags & CLUTTER_DEBUG_DUMP_PICK_BUFFERS))
|
if (G_UNLIKELY (clutter_pick_debug_flags & CLUTTER_DEBUG_DUMP_PICK_BUFFERS))
|
||||||
{
|
{
|
||||||
guchar tmp;
|
guchar tmp;
|
||||||
|
|
||||||
@ -590,7 +599,7 @@ _clutter_do_pick (ClutterStage *stage,
|
|||||||
/* needed for when a context switch happens */
|
/* needed for when a context switch happens */
|
||||||
_clutter_stage_maybe_setup_viewport (stage);
|
_clutter_stage_maybe_setup_viewport (stage);
|
||||||
|
|
||||||
if (G_LIKELY (!(clutter_debug_flags & CLUTTER_DEBUG_DUMP_PICK_BUFFERS)))
|
if (G_LIKELY (!(clutter_pick_debug_flags & CLUTTER_DEBUG_DUMP_PICK_BUFFERS)))
|
||||||
cogl_clip_push_window_rectangle (x, y, 1, 1);
|
cogl_clip_push_window_rectangle (x, y, 1, 1);
|
||||||
|
|
||||||
cogl_disable_fog ();
|
cogl_disable_fog ();
|
||||||
@ -615,7 +624,7 @@ _clutter_do_pick (ClutterStage *stage,
|
|||||||
context->pick_mode = CLUTTER_PICK_NONE;
|
context->pick_mode = CLUTTER_PICK_NONE;
|
||||||
CLUTTER_TIMER_STOP (_clutter_uprof_context, pick_paint);
|
CLUTTER_TIMER_STOP (_clutter_uprof_context, pick_paint);
|
||||||
|
|
||||||
if (G_LIKELY (!(clutter_debug_flags & CLUTTER_DEBUG_DUMP_PICK_BUFFERS)))
|
if (G_LIKELY (!(clutter_pick_debug_flags & CLUTTER_DEBUG_DUMP_PICK_BUFFERS)))
|
||||||
cogl_clip_pop ();
|
cogl_clip_pop ();
|
||||||
|
|
||||||
/* Make sure Cogl flushes any batched geometry to the GPU driver */
|
/* Make sure Cogl flushes any batched geometry to the GPU driver */
|
||||||
@ -629,7 +638,7 @@ _clutter_do_pick (ClutterStage *stage,
|
|||||||
pixel);
|
pixel);
|
||||||
CLUTTER_TIMER_STOP (_clutter_uprof_context, pick_read);
|
CLUTTER_TIMER_STOP (_clutter_uprof_context, pick_read);
|
||||||
|
|
||||||
if (G_UNLIKELY (clutter_debug_flags & CLUTTER_DEBUG_DUMP_PICK_BUFFERS))
|
if (G_UNLIKELY (clutter_pick_debug_flags & CLUTTER_DEBUG_DUMP_PICK_BUFFERS))
|
||||||
{
|
{
|
||||||
read_pixels_to_file ("pick-buffer", 0, 0,
|
read_pixels_to_file ("pick-buffer", 0, 0,
|
||||||
clutter_actor_get_width (CLUTTER_ACTOR (stage)),
|
clutter_actor_get_width (CLUTTER_ACTOR (stage)),
|
||||||
@ -1646,6 +1655,26 @@ pre_parse_hook (GOptionContext *context,
|
|||||||
}
|
}
|
||||||
#endif /* CLUTTER_ENABLE_PROFILE */
|
#endif /* CLUTTER_ENABLE_PROFILE */
|
||||||
|
|
||||||
|
env_string = g_getenv ("CLUTTER_PICK");
|
||||||
|
if (env_string != NULL)
|
||||||
|
{
|
||||||
|
clutter_pick_debug_flags =
|
||||||
|
g_parse_debug_string (env_string,
|
||||||
|
clutter_pick_debug_keys,
|
||||||
|
G_N_ELEMENTS (clutter_pick_debug_keys));
|
||||||
|
env_string = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
env_string = g_getenv ("CLUTTER_PAINT");
|
||||||
|
if (env_string != NULL)
|
||||||
|
{
|
||||||
|
clutter_paint_debug_flags =
|
||||||
|
g_parse_debug_string (env_string,
|
||||||
|
clutter_paint_debug_keys,
|
||||||
|
G_N_ELEMENTS (clutter_paint_debug_keys));
|
||||||
|
env_string = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
env_string = g_getenv ("CLUTTER_SHOW_FPS");
|
env_string = g_getenv ("CLUTTER_SHOW_FPS");
|
||||||
if (env_string)
|
if (env_string)
|
||||||
clutter_show_fps = TRUE;
|
clutter_show_fps = TRUE;
|
||||||
|
@ -331,10 +331,12 @@ clutter_backend_glx_get_features (ClutterBackend *backend)
|
|||||||
/* GLX_INTEL_swap_event allows us to avoid blocking the CPU while
|
/* GLX_INTEL_swap_event allows us to avoid blocking the CPU while
|
||||||
* we wait for glXSwapBuffers to complete, and instead we get an X
|
* we wait for glXSwapBuffers to complete, and instead we get an X
|
||||||
* event notifying us of completion... */
|
* event notifying us of completion... */
|
||||||
if (!(clutter_debug_flags & CLUTTER_DEBUG_DISABLE_SWAP_EVENTS) &&
|
if (!(clutter_paint_debug_flags & CLUTTER_DEBUG_DISABLE_SWAP_EVENTS) &&
|
||||||
_cogl_check_extension ("GLX_INTEL_swap_event", glx_extensions) &&
|
_cogl_check_extension ("GLX_INTEL_swap_event", glx_extensions) &&
|
||||||
flags & CLUTTER_FEATURE_SYNC_TO_VBLANK)
|
flags & CLUTTER_FEATURE_SYNC_TO_VBLANK)
|
||||||
flags |= CLUTTER_FEATURE_SWAP_EVENTS;
|
{
|
||||||
|
flags |= CLUTTER_FEATURE_SWAP_EVENTS;
|
||||||
|
}
|
||||||
#endif /* GLX_INTEL_swap_event */
|
#endif /* GLX_INTEL_swap_event */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user