summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2017-11-30 17:50:46 +0100
committerAlexander Larsson <alexl@redhat.com>2017-11-30 21:57:42 +0100
commit61ea8e8676055c1c38d40b3f440e6bba5207ab53 (patch)
treef19b6ae8bc15c1762ab2ffa2406203876f929e70
parentaf890e66777497c732bc2117d3f013fa1557d1e9 (diff)
downloadgtk+-wip/alexl/broadway4.tar.gz
broadway: Add some (disabled) debugging toolswip/alexl/broadway4
-rw-r--r--gdk/broadway/broadway-output.c39
-rw-r--r--gdk/broadway/broadway-protocol.h16
2 files changed, 48 insertions, 7 deletions
diff --git a/gdk/broadway/broadway-output.c b/gdk/broadway/broadway-output.c
index 81332fa795..d74be05029 100644
--- a/gdk/broadway/broadway-output.c
+++ b/gdk/broadway/broadway-output.c
@@ -7,6 +7,8 @@
#include "broadway-output.h"
+//#define DEBUG_NODE_SENDING
+
/************************************************************************
* Basic I/O primitives *
************************************************************************/
@@ -309,6 +311,22 @@ broadway_output_set_transient_for (BroadwayOutput *output,
append_uint16 (output, parent_id);
}
+static gint append_node_depth = -1;
+
+static void
+append_type (BroadwayOutput *output, guint32 type, BroadwayNode *node)
+{
+#ifdef DEBUG_NODE_SENDING
+ g_print ("%*s%s", append_node_depth*2, "", broadway_node_type_names[type]);
+ if (type == BROADWAY_NODE_TEXTURE)
+ g_print (" %u", node->data[4]);
+ g_print ("\n");
+#endif
+
+ append_uint32 (output, type);
+}
+
+
/***********************************
* This outputs the tree to the client, while at the same time diffing
* against the old tree. This allows us to avoid sending certain
@@ -326,7 +344,6 @@ broadway_output_set_transient_for (BroadwayOutput *output,
* changing the dom node at all, and we emit a KEEP_THIS node.
*
***********************************/
-
static void
append_node (BroadwayOutput *output,
BroadwayNode *node,
@@ -335,28 +352,30 @@ append_node (BroadwayOutput *output,
{
guint32 i;
+ append_node_depth++;
+
if (old_node != NULL && broadway_node_equal (node, old_node))
{
if (broadway_node_deep_equal (node, old_node))
{
- append_uint32 (output, BROADWAY_NODE_KEEP_ALL);
- return;
+ append_type (output, BROADWAY_NODE_KEEP_ALL, node);
+ goto out;
}
if (all_parents_are_kept)
{
- append_uint32 (output, BROADWAY_NODE_KEEP_THIS);
+ append_type (output, BROADWAY_NODE_KEEP_THIS, node);
append_uint32 (output, node->n_children);
for (i = 0; i < node->n_children; i++)
append_node (output, node->children[i],
i < old_node->n_children ? old_node->children[i] : NULL,
TRUE);
- return;
+
+ goto out;
}
}
- append_uint32 (output, node->type);
-
+ append_type (output, node->type, node);
for (i = 0; i < node->n_data; i++)
append_uint32 (output, node->data[i]);
for (i = 0; i < node->n_children; i++)
@@ -364,6 +383,9 @@ append_node (BroadwayOutput *output,
node->children[i],
(old_node != NULL && i < old_node->n_children) ? old_node->children[i] : NULL,
FALSE);
+
+ out:
+ append_node_depth--;
}
void
@@ -387,6 +409,9 @@ broadway_output_window_set_nodes (BroadwayOutput *output,
append_uint32 (output, 0);
start = output->buf->len;
+#ifdef DEBUG_NODE_SENDING
+ g_print ("====== node tree for %d =======\n", id);
+#endif
append_node (output, root, old_root, TRUE);
end = output->buf->len;
patch_uint32 (output, (end - start) / 4, size_pos);
diff --git a/gdk/broadway/broadway-protocol.h b/gdk/broadway/broadway-protocol.h
index 3457d2c6c8..c2d386924e 100644
--- a/gdk/broadway/broadway-protocol.h
+++ b/gdk/broadway/broadway-protocol.h
@@ -24,6 +24,22 @@ typedef enum { /* Sync changes with broadway.js */
BROADWAY_NODE_KEEP_THIS = 12,
} BroadwayNodeType;
+static const char *broadway_node_type_names[] G_GNUC_UNUSED = {
+ "TEXTURE",
+ "CONTAINER",
+ "COLOR",
+ "BORDER",
+ "OUTSET_SHADOW",
+ "INSET_SHADOW",
+ "ROUNDED_CLIP",
+ "LINEAR_GRADIENT",
+ "SHADOW",
+ "OPACITY",
+ "CLIP",
+ "KEEP_ALL",
+ "KEEP_THIS",
+};
+
typedef enum {
BROADWAY_EVENT_ENTER = 'e',
BROADWAY_EVENT_LEAVE = 'l',