[maemo-commits] [maemo-commits] r17143 - in projects/haf/trunk/clutter: clutter clutter/x11 debian
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Mon Jan 12 18:23:35 EET 2009
- Previous message: [maemo-commits] r17142 - projects/haf/trunk/libmatchbox2/debian
- Next message: [maemo-commits] r17144 - in projects/haf/trunk/libmatchbox2: . tests
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: gw Date: 2009-01-12 18:23:31 +0200 (Mon, 12 Jan 2009) New Revision: 17143 Modified: projects/haf/trunk/clutter/clutter/clutter-main.h projects/haf/trunk/clutter/clutter/clutter-stage.c projects/haf/trunk/clutter/clutter/x11/clutter-x11-texture-pixmap.c projects/haf/trunk/clutter/debian/changelog Log: * It turns out XDamage doesn't work unless explicitly turned on in x11-texture-pixmap using .._set_automatic, so totally removed the #ifdefs * Modified clutter_stage_redraw_damage to set the stage to be redrawn with a delay - which helps get rid of multiple redraws when we get >1 XDamage events within a few ms of each other. Modified: projects/haf/trunk/clutter/clutter/clutter-main.h =================================================================== --- projects/haf/trunk/clutter/clutter/clutter-main.h 2009-01-12 15:47:27 UTC (rev 17142) +++ projects/haf/trunk/clutter/clutter/clutter-main.h 2009-01-12 16:23:31 UTC (rev 17143) @@ -78,6 +78,15 @@ */ #define CLUTTER_PRIORITY_TIMELINE (G_PRIORITY_DEFAULT + 30) +/** + * CLUTTER_REDRAW_INTERVAL: + * + * The amount of time between a redraw request and the actual redraw. + * + * Since: 0.8.2-maemo + */ +#define CLUTTER_REDRAW_INTERVAL (25) + /* Initialisation */ void clutter_base_init (void); ClutterInitError clutter_init (int *argc, Modified: projects/haf/trunk/clutter/clutter/clutter-stage.c =================================================================== --- projects/haf/trunk/clutter/clutter/clutter-stage.c 2009-01-12 15:47:27 UTC (rev 17142) +++ projects/haf/trunk/clutter/clutter/clutter-stage.c 2009-01-12 16:23:31 UTC (rev 17143) @@ -1950,7 +1950,17 @@ clutter_actor_get_geometry(CLUTTER_ACTOR(stage), &stage->priv->damaged_area); - clutter_stage_queue_redraw_damage(stage); + if (!stage->priv->update_idle) + { + CLUTTER_TIMESTAMP (SCHEDULER, "Adding idle source for stage: %p", stage); + + /* FIXME: weak_ref self in case we disappear before paint? */ + stage->priv->update_idle = + clutter_threads_add_idle_full (CLUTTER_PRIORITY_REDRAW, + redraw_update_idle, + stage, + NULL); + } } /** @@ -1977,12 +1987,16 @@ { CLUTTER_TIMESTAMP (SCHEDULER, "Adding idle source for stage: %p", stage); - /* FIXME: weak_ref self in case we dissapear before paint? */ + /* FIXME: weak_ref self in case we disappear before paint? */ stage->priv->update_idle = - clutter_threads_add_idle_full (CLUTTER_PRIORITY_REDRAW, - redraw_update_idle, - stage, - NULL); + clutter_threads_add_timeout_full ( CLUTTER_PRIORITY_REDRAW, + CLUTTER_REDRAW_INTERVAL, + redraw_update_idle, + stage, + NULL); + /* we're rendering with a timeout here so we can stop + * double-redraws we're doing when we get multiple XDamage events + * for what should be a single frame. */ } } Modified: projects/haf/trunk/clutter/clutter/x11/clutter-x11-texture-pixmap.c =================================================================== --- projects/haf/trunk/clutter/clutter/x11/clutter-x11-texture-pixmap.c 2009-01-12 15:47:27 UTC (rev 17142) +++ projects/haf/trunk/clutter/clutter/x11/clutter-x11-texture-pixmap.c 2009-01-12 16:23:31 UTC (rev 17143) @@ -47,14 +47,7 @@ #include "cogl/cogl.h" -/* We need this back on because the lack of notifications for Configure causes - * textures not to update when they change size, and bug 95594 to revert - */ -#define XDAMAGE_HANDLING - -#ifdef XDAMAGE_HANDLING #include <X11/extensions/Xdamage.h> -#endif #include <X11/extensions/Xcomposite.h> #include <sys/ipc.h> @@ -85,10 +78,8 @@ LAST_SIGNAL }; -#ifdef XDAMAGE_HANDLING static ClutterX11FilterReturn on_x_event_filter (XEvent *xev, ClutterEvent *cev, gpointer data); -#endif static void clutter_x11_texture_pixmap_update_area_real (ClutterX11TexturePixmap *texture, @@ -98,10 +89,8 @@ gint height); static void clutter_x11_texture_pixmap_set_mapped (ClutterX11TexturePixmap *texture, gboolean mapped); -#ifdef XDAMAGE_HANDLING static void clutter_x11_texture_pixmap_destroyed (ClutterX11TexturePixmap *texture); -#endif static guint signals[LAST_SIGNAL] = { 0, }; @@ -116,10 +105,9 @@ XShmSegmentInfo shminfo; gboolean automatic_updates; -#ifdef XDAMAGE_HANDLING + Damage damage; Drawable damage_drawable; -#endif /* FIXME: lots of gbooleans. coalesce into bitfields */ gboolean have_shm; @@ -131,16 +119,13 @@ gint window_x, window_y; }; -#ifdef XDAMAGE_HANDLING static int _damage_event_base = 0; -#endif /* FIXME: Ultimatly with current cogl we should subclass clutter actor */ G_DEFINE_TYPE (ClutterX11TexturePixmap, \ clutter_x11_texture_pixmap, \ CLUTTER_TYPE_TEXTURE); -#ifdef XDAMAGE_HANDLING static gboolean check_extensions (ClutterX11TexturePixmap *texture) { @@ -164,7 +149,6 @@ return TRUE; } -#endif static void free_shm_resources (ClutterX11TexturePixmap *texture) @@ -268,7 +252,6 @@ return FALSE; } -#ifdef XDAMAGE_HANDLING static ClutterX11FilterReturn on_x_event_filter (XEvent *xev, ClutterEvent *cev, gpointer data) { @@ -319,7 +302,6 @@ r_damage[i].y, r_damage[i].width, r_damage[i].height); - g_debug("XDAMAGE END"); XFree (r_damage); } @@ -367,10 +349,8 @@ return CLUTTER_X11_FILTER_CONTINUE; } -#endif -#ifdef XDAMAGE_HANDLING static void free_damage_resources (ClutterX11TexturePixmap *texture) { @@ -392,7 +372,6 @@ clutter_x11_remove_filter (on_x_event_filter, (gpointer)texture); } -#endif static void clutter_x11_texture_pixmap_init (ClutterX11TexturePixmap *self) @@ -402,21 +381,17 @@ CLUTTER_X11_TYPE_TEXTURE_PIXMAP, ClutterX11TexturePixmapPrivate); -#ifdef XDAMAGE_HANDLING if (!check_extensions (self)) { /* FIMXE: means display lacks needed extensions for at least auto. * - a _can_autoupdate() method ? */ } -#endif self->priv->image = NULL; self->priv->automatic_updates = FALSE; -#ifdef XDAMAGE_HANDLING self->priv->damage = None; self->priv->damage_drawable = None; -#endif self->priv->window = None; self->priv->pixmap = None; self->priv->pixmap_height = 0; @@ -436,11 +411,9 @@ ClutterX11TexturePixmap *texture = CLUTTER_X11_TEXTURE_PIXMAP (object); ClutterX11TexturePixmapPrivate *priv = texture->priv; -#ifdef XDAMAGE_HANDLING free_damage_resources (texture); clutter_x11_remove_filter (on_x_event_filter_too, (gpointer)texture); -#endif if (priv->owns_pixmap && priv->pixmap) { @@ -1134,7 +1107,6 @@ if (priv->window == window && automatic == priv->window_redirect_automatic) return; -#ifdef XDAMAGE_HANDLING if (priv->window) { clutter_x11_remove_filter (on_x_event_filter_too, (gpointer)texture); @@ -1146,7 +1118,6 @@ XSync (clutter_x11_get_default_display (), False); clutter_x11_untrap_x_errors (); } -#endif priv->window = window; priv->window_redirect_automatic = automatic; @@ -1167,26 +1138,22 @@ return; } -#ifdef XDAMAGE_HANDLING XCompositeRedirectWindow (dpy, window, automatic ? CompositeRedirectAutomatic : CompositeRedirectManual); -#endif XSync (dpy, False); } clutter_x11_untrap_x_errors (); -#ifdef XDAMAGE_HANDLING if (priv->window) { XSelectInput (dpy, priv->window, attr.your_event_mask | StructureNotifyMask); clutter_x11_add_filter (on_x_event_filter_too, (gpointer)texture); } -#endif g_object_ref (texture); g_object_notify (G_OBJECT (texture), "window"); @@ -1290,7 +1257,6 @@ } } -#ifdef XDAMAGE_HANDLING static void clutter_x11_texture_pixmap_destroyed (ClutterX11TexturePixmap *texture) { @@ -1309,7 +1275,6 @@ * be useful e.g. for destroy animations -- app's responsibility. */ } -#endif /** * clutter_x11_texture_pixmap_update_area: @@ -1342,9 +1307,7 @@ gboolean setting) { ClutterX11TexturePixmapPrivate *priv; -#ifdef XDAMAGE_HANDLING Display *dpy; -#endif g_return_if_fail (CLUTTER_X11_IS_TEXTURE_PIXMAP (texture)); @@ -1353,7 +1316,6 @@ if (setting == priv->automatic_updates) return; -#ifdef XDAMAGE_HANDLING dpy = clutter_x11_get_default_display(); if (setting == TRUE) @@ -1376,7 +1338,6 @@ } else free_damage_resources (texture); -#endif priv->automatic_updates = setting; Modified: projects/haf/trunk/clutter/debian/changelog =================================================================== --- projects/haf/trunk/clutter/debian/changelog 2009-01-12 15:47:27 UTC (rev 17142) +++ projects/haf/trunk/clutter/debian/changelog 2009-01-12 16:23:31 UTC (rev 17143) @@ -1,8 +1,12 @@ clutter (0.8.2-0maemo14~unreleased) unstable; urgency=low - * unreleased + * It turns out XDamage doesn't work unless explicitly turned on in + x11-texture-pixmap using .._set_automatic, so totally removed the #ifdefs + * Modified clutter_stage_redraw_damage to set the stage to be redrawn with + a delay - which helps get rid of multiple redraws when we get >1 XDamage + events within a few ms of each other. - -- Gordon Williams <gordon.williams at collabora.co.uk> Mon, 12 Jan 2009 17:31:48 +0200 + -- Gordon Williams <gordon.williams at collabora.co.uk> Mon, 12 Jan 2009 16:21:48 +0000 clutter (0.8.2-0maemo13) unstable; urgency=low @@ -23,7 +27,7 @@ * Commented out extra code that caused clutter to not compile with -Werror * Reinstated XDamage and XComposite as something in it reverted bug 95594 (and multiple XDamage shouldn't be an issue with the next bunch of work - I'm working on) + I'm working on). -- Gordon Williams <gordon.williams at collabora.co.uk> Wed, 12 Jan 2009 12:17:52 +0000
- Previous message: [maemo-commits] r17142 - projects/haf/trunk/libmatchbox2/debian
- Next message: [maemo-commits] r17144 - in projects/haf/trunk/libmatchbox2: . tests
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]