[gtk+/composite-templates] broadway: Restructure output
- From: Juan Pablo Ugarte <jpu src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/composite-templates] broadway: Restructure output
- Date: Sat, 6 Oct 2012 17:10:35 +0000 (UTC)
commit 34863384b9795b2da44c452e5c2e88dafdfba2e6
Author: Alexander Larsson <alexl redhat com>
Date: Mon Oct 1 12:09:07 2012 +0200
broadway: Restructure output
Now we queue all output commands in a single buffer, to
ensure we send everything in a single op even for v7plus.
gdk/broadway/broadway.c | 52 ++++++++++++++++++++++++----------------------
1 files changed, 27 insertions(+), 25 deletions(-)
---
diff --git a/gdk/broadway/broadway.c b/gdk/broadway/broadway.c
index b104758..b17d90b 100644
--- a/gdk/broadway/broadway.c
+++ b/gdk/broadway/broadway.c
@@ -173,6 +173,7 @@ to_png_a (int w, int h, int byte_stride, guint8 *data)
struct BroadwayOutput {
GOutputStream *out;
+ GString *buf;
int error;
guint32 serial;
gboolean proto_v7_plus;
@@ -212,13 +213,20 @@ broadway_output_send_cmd (BroadwayOutput *output,
}
static void
+broadway_output_send_cmd_pre_v7 (BroadwayOutput *output,
+ const void *buf, gsize count)
+{
+ g_output_stream_write_all (output->out, "\0", 1, NULL, NULL, NULL);
+ g_output_stream_write_all (output->out, buf, count, NULL, NULL, NULL);
+ g_output_stream_write_all (output->out, "\xff", 1, NULL, NULL, NULL);
+}
+
+
+static void
broadway_output_sendmsg (BroadwayOutput *output,
const void *buf, gsize count)
{
- if (!output->proto_v7_plus)
- g_output_stream_write_all (output->out, buf, count, NULL, NULL, NULL);
- else
- broadway_output_send_cmd (output, TRUE, BROADWAY_WS_TEXT, buf, count);
+ g_string_append_len (output->buf, buf, count);
}
void broadway_output_pong (BroadwayOutput *output)
@@ -227,43 +235,37 @@ void broadway_output_pong (BroadwayOutput *output)
broadway_output_send_cmd (output, TRUE, BROADWAY_WS_CNX_PONG, NULL, 0);
}
-static void
-broadway_output_sendmsg_initiate (BroadwayOutput *output)
-{
- if (!output->proto_v7_plus)
- g_output_stream_write (output->out, "\0", 1, NULL, NULL);
- else
- {
- }
-}
-
int
broadway_output_flush (BroadwayOutput *output)
{
+ if (output->buf->len == 0)
+ return TRUE;
+
if (!output->proto_v7_plus)
- {
- broadway_output_sendmsg (output, "\xff", 1);
- broadway_output_sendmsg (output, "\0", 1);
- return !output->error;
- }
- else /* no need to flush */
- return !output->error;
+ broadway_output_send_cmd_pre_v7 (output, output->buf->str, output->buf->len);
+ else
+ broadway_output_send_cmd (output, TRUE, BROADWAY_WS_TEXT,
+ output->buf->str, output->buf->len);
+
+ g_string_set_size (output->buf, 0);
+
+ return !output->error;
+
}
BroadwayOutput *
-broadway_output_new(GOutputStream *out, guint32 serial,
- gboolean proto_v7_plus)
+broadway_output_new (GOutputStream *out, guint32 serial,
+ gboolean proto_v7_plus)
{
BroadwayOutput *output;
output = g_new0 (BroadwayOutput, 1);
output->out = g_object_ref (out);
+ output->buf = g_string_new ("");
output->serial = serial;
output->proto_v7_plus = proto_v7_plus;
- broadway_output_sendmsg_initiate (output);
-
return output;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]