summaryrefslogtreecommitdiff
path: root/gtk/gtkcssnode.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2015-02-25 18:25:01 +0100
committerBenjamin Otte <otte@redhat.com>2015-03-18 15:23:33 +0100
commitd9727290cfcbf68fe55bb29156a312b20ab9e615 (patch)
tree1dcb2f2ab3f028c9d1eac2e0e31ff24b688eee7e /gtk/gtkcssnode.c
parent68b8f792d6edb7e5e67dbbba0991ce7dc1a7a449 (diff)
downloadgtk+-d9727290cfcbf68fe55bb29156a312b20ab9e615.tar.gz
cssnode: Special-case TIMESTAMP invalidations
Only invalidate timestamps if the node is marked as invalid. We overload the meaning of "invalid" as "tracks timestamps". While I don't like the way this is written, it is an important optimization because 95+% of nodes don't animate so timestamps don't matter to them. But timestamps are invalidated 60x per second.
Diffstat (limited to 'gtk/gtkcssnode.c')
-rw-r--r--gtk/gtkcssnode.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gtk/gtkcssnode.c b/gtk/gtkcssnode.c
index 585ead7ea3..11200d84ef 100644
--- a/gtk/gtkcssnode.c
+++ b/gtk/gtkcssnode.c
@@ -860,6 +860,12 @@ void
gtk_css_node_invalidate (GtkCssNode *cssnode,
GtkCssChange change)
{
+ if (!cssnode->invalid)
+ change &= ~GTK_CSS_CHANGE_TIMESTAMP;
+
+ if (change == 0)
+ return;
+
cssnode->pending_changes |= change;
GTK_CSS_NODE_GET_CLASS (cssnode)->invalidate (cssnode);