Skip to content

Commit c13c54e

Browse files
committed
bus: use va_marshaller to avoid GValue boxing
Building your own marshaller list is most of the way there to get better signal performance, but you can go a bit further by having it generate va_marshallers and set those too. Not only do va_marshallers allow you to avoid the GValue boxing, it allows you to also get better profiling data at runtime. BUG=#2683
1 parent fa10c11 commit c13c54e

File tree

4 files changed

+144
-3
lines changed

4 files changed

+144
-3
lines changed

bus/Makefile.am

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,12 @@ BUILT_SOURCES = \
9999

100100
# gen marshal
101101
marshalers.h: marshalers.list
102-
$(AM_V_GEN) $(GLIB_GENMARSHAL) --prefix=bus_marshal $(srcdir)/marshalers.list --header --internal > $@.tmp && \
102+
$(AM_V_GEN) $(GLIB_GENMARSHAL) --prefix=bus_marshal $(srcdir)/marshalers.list --header --internal --valist-marshallers > $@.tmp && \
103103
mv $@.tmp $@
104104

105105
marshalers.c: marshalers.h marshalers.list
106106
$(AM_V_GEN) (echo "#include \"marshalers.h\""; \
107-
$(GLIB_GENMARSHAL) --prefix=bus_marshal $(srcdir)/marshalers.list --body --internal) > $@.tmp && \
107+
$(GLIB_GENMARSHAL) --prefix=bus_marshal $(srcdir)/marshalers.list --body --internal --valist-marshallers) > $@.tmp && \
108108
mv $@.tmp $@
109109

110110
if ENABLE_EMOJI_DICT

bus/dbusimpl.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,9 @@ bus_dbus_impl_class_init (BusDBusImplClass *class)
576576
G_TYPE_STRING,
577577
G_TYPE_STRING,
578578
G_TYPE_STRING);
579+
g_signal_set_va_marshaller (dbus_signals[NAME_OWNER_CHANGED],
580+
G_TYPE_FROM_CLASS (class),
581+
bus_marshal_VOID__OBJECT_STRING_STRING_STRINGv);
579582

580583
dbus_signals[NAME_LOST] =
581584
g_signal_new (I_("name-lost"),
@@ -588,6 +591,9 @@ bus_dbus_impl_class_init (BusDBusImplClass *class)
588591
2,
589592
BUS_TYPE_CONNECTION,
590593
G_TYPE_STRING);
594+
g_signal_set_va_marshaller (dbus_signals[NAME_LOST],
595+
G_TYPE_FROM_CLASS (class),
596+
bus_marshal_VOID__OBJECT_STRINGv);
591597

592598
dbus_signals[NAME_ACQUIRED] =
593599
g_signal_new (I_("name-acquired"),
@@ -600,6 +606,9 @@ bus_dbus_impl_class_init (BusDBusImplClass *class)
600606
2,
601607
BUS_TYPE_CONNECTION,
602608
G_TYPE_STRING);
609+
g_signal_set_va_marshaller (dbus_signals[NAME_ACQUIRED],
610+
G_TYPE_FROM_CLASS (class),
611+
bus_marshal_VOID__OBJECT_STRINGv);
603612
}
604613

605614
static void

bus/engineproxy.c

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,9 @@ bus_engine_proxy_class_init (BusEngineProxyClass *class)
189189
G_TYPE_NONE,
190190
1,
191191
IBUS_TYPE_TEXT);
192+
g_signal_set_va_marshaller (engine_signals[COMMIT_TEXT],
193+
G_TYPE_FROM_CLASS (class),
194+
bus_marshal_VOID__OBJECTv);
192195

193196
engine_signals[FORWARD_KEY_EVENT] =
194197
g_signal_new (I_("forward-key-event"),
@@ -202,6 +205,9 @@ bus_engine_proxy_class_init (BusEngineProxyClass *class)
202205
G_TYPE_UINT,
203206
G_TYPE_UINT,
204207
G_TYPE_UINT);
208+
g_signal_set_va_marshaller (engine_signals[FORWARD_KEY_EVENT],
209+
G_TYPE_FROM_CLASS (class),
210+
bus_marshal_VOID__UINT_UINT_UINTv);
205211

206212
engine_signals[DELETE_SURROUNDING_TEXT] =
207213
g_signal_new (I_("delete-surrounding-text"),
@@ -214,6 +220,9 @@ bus_engine_proxy_class_init (BusEngineProxyClass *class)
214220
2,
215221
G_TYPE_INT,
216222
G_TYPE_UINT);
223+
g_signal_set_va_marshaller (engine_signals[DELETE_SURROUNDING_TEXT],
224+
G_TYPE_FROM_CLASS (class),
225+
bus_marshal_VOID__INT_UINTv);
217226

218227
engine_signals[REQUIRE_SURROUNDING_TEXT] =
219228
g_signal_new (I_("require-surrounding-text"),
@@ -224,6 +233,9 @@ bus_engine_proxy_class_init (BusEngineProxyClass *class)
224233
bus_marshal_VOID__VOID,
225234
G_TYPE_NONE,
226235
0);
236+
g_signal_set_va_marshaller (engine_signals[REQUIRE_SURROUNDING_TEXT],
237+
G_TYPE_FROM_CLASS (class),
238+
bus_marshal_VOID__VOIDv);
227239

228240
engine_signals[UPDATE_PREEDIT_TEXT] =
229241
g_signal_new (I_("update-preedit-text"),
@@ -238,6 +250,9 @@ bus_engine_proxy_class_init (BusEngineProxyClass *class)
238250
G_TYPE_UINT,
239251
G_TYPE_BOOLEAN,
240252
G_TYPE_UINT);
253+
g_signal_set_va_marshaller (engine_signals[UPDATE_PREEDIT_TEXT],
254+
G_TYPE_FROM_CLASS (class),
255+
bus_marshal_VOID__OBJECT_UINT_BOOLEAN_UINTv);
241256

242257
engine_signals[SHOW_PREEDIT_TEXT] =
243258
g_signal_new (I_("show-preedit-text"),
@@ -248,6 +263,9 @@ bus_engine_proxy_class_init (BusEngineProxyClass *class)
248263
bus_marshal_VOID__VOID,
249264
G_TYPE_NONE,
250265
0);
266+
g_signal_set_va_marshaller (engine_signals[SHOW_PREEDIT_TEXT],
267+
G_TYPE_FROM_CLASS (class),
268+
bus_marshal_VOID__VOIDv);
251269

252270
engine_signals[HIDE_PREEDIT_TEXT] =
253271
g_signal_new (I_("hide-preedit-text"),
@@ -258,6 +276,9 @@ bus_engine_proxy_class_init (BusEngineProxyClass *class)
258276
bus_marshal_VOID__VOID,
259277
G_TYPE_NONE,
260278
0);
279+
g_signal_set_va_marshaller (engine_signals[HIDE_PREEDIT_TEXT],
280+
G_TYPE_FROM_CLASS (class),
281+
bus_marshal_VOID__VOIDv);
261282

262283
engine_signals[UPDATE_AUXILIARY_TEXT] =
263284
g_signal_new (I_("update-auxiliary-text"),
@@ -270,6 +291,9 @@ bus_engine_proxy_class_init (BusEngineProxyClass *class)
270291
2,
271292
IBUS_TYPE_TEXT,
272293
G_TYPE_BOOLEAN);
294+
g_signal_set_va_marshaller (engine_signals[UPDATE_AUXILIARY_TEXT],
295+
G_TYPE_FROM_CLASS (class),
296+
bus_marshal_VOID__OBJECT_BOOLEANv);
273297

274298
engine_signals[SHOW_AUXILIARY_TEXT] =
275299
g_signal_new (I_("show-auxiliary-text"),
@@ -280,6 +304,9 @@ bus_engine_proxy_class_init (BusEngineProxyClass *class)
280304
bus_marshal_VOID__VOID,
281305
G_TYPE_NONE,
282306
0);
307+
g_signal_set_va_marshaller (engine_signals[SHOW_AUXILIARY_TEXT],
308+
G_TYPE_FROM_CLASS (class),
309+
bus_marshal_VOID__VOIDv);
283310

284311
engine_signals[HIDE_AUXILIARY_TEXT] =
285312
g_signal_new (I_("hide-auxiliary-text"),
@@ -290,6 +317,9 @@ bus_engine_proxy_class_init (BusEngineProxyClass *class)
290317
bus_marshal_VOID__VOID,
291318
G_TYPE_NONE,
292319
0);
320+
g_signal_set_va_marshaller (engine_signals[HIDE_AUXILIARY_TEXT],
321+
G_TYPE_FROM_CLASS (class),
322+
bus_marshal_VOID__VOIDv);
293323

294324
engine_signals[UPDATE_LOOKUP_TABLE] =
295325
g_signal_new (I_("update-lookup-table"),
@@ -302,6 +332,9 @@ bus_engine_proxy_class_init (BusEngineProxyClass *class)
302332
2,
303333
IBUS_TYPE_LOOKUP_TABLE,
304334
G_TYPE_BOOLEAN);
335+
g_signal_set_va_marshaller (engine_signals[UPDATE_LOOKUP_TABLE],
336+
G_TYPE_FROM_CLASS (class),
337+
bus_marshal_VOID__OBJECT_BOOLEANv);
305338

306339
engine_signals[SHOW_LOOKUP_TABLE] =
307340
g_signal_new (I_("show-lookup-table"),
@@ -312,6 +345,9 @@ bus_engine_proxy_class_init (BusEngineProxyClass *class)
312345
bus_marshal_VOID__VOID,
313346
G_TYPE_NONE,
314347
0);
348+
g_signal_set_va_marshaller (engine_signals[SHOW_LOOKUP_TABLE],
349+
G_TYPE_FROM_CLASS (class),
350+
bus_marshal_VOID__VOIDv);
315351

316352
engine_signals[HIDE_LOOKUP_TABLE] =
317353
g_signal_new (I_("hide-lookup-table"),
@@ -322,6 +358,9 @@ bus_engine_proxy_class_init (BusEngineProxyClass *class)
322358
bus_marshal_VOID__VOID,
323359
G_TYPE_NONE,
324360
0);
361+
g_signal_set_va_marshaller (engine_signals[HIDE_LOOKUP_TABLE],
362+
G_TYPE_FROM_CLASS (class),
363+
bus_marshal_VOID__VOIDv);
325364

326365
engine_signals[PAGE_UP_LOOKUP_TABLE] =
327366
g_signal_new (I_("page-up-lookup-table"),
@@ -332,6 +371,9 @@ bus_engine_proxy_class_init (BusEngineProxyClass *class)
332371
bus_marshal_VOID__VOID,
333372
G_TYPE_NONE,
334373
0);
374+
g_signal_set_va_marshaller (engine_signals[PAGE_UP_LOOKUP_TABLE],
375+
G_TYPE_FROM_CLASS (class),
376+
bus_marshal_VOID__VOIDv);
335377

336378
engine_signals[PAGE_DOWN_LOOKUP_TABLE] =
337379
g_signal_new (I_("page-down-lookup-table"),
@@ -342,6 +384,9 @@ bus_engine_proxy_class_init (BusEngineProxyClass *class)
342384
bus_marshal_VOID__VOID,
343385
G_TYPE_NONE,
344386
0);
387+
g_signal_set_va_marshaller (engine_signals[PAGE_DOWN_LOOKUP_TABLE],
388+
G_TYPE_FROM_CLASS (class),
389+
bus_marshal_VOID__VOIDv);
345390

346391
engine_signals[CURSOR_UP_LOOKUP_TABLE] =
347392
g_signal_new (I_("cursor-up-lookup-table"),
@@ -352,6 +397,9 @@ bus_engine_proxy_class_init (BusEngineProxyClass *class)
352397
bus_marshal_VOID__VOID,
353398
G_TYPE_NONE,
354399
0);
400+
g_signal_set_va_marshaller (engine_signals[CURSOR_UP_LOOKUP_TABLE],
401+
G_TYPE_FROM_CLASS (class),
402+
bus_marshal_VOID__VOIDv);
355403

356404
engine_signals[CURSOR_DOWN_LOOKUP_TABLE] =
357405
g_signal_new (I_("cursor-down-lookup-table"),
@@ -362,6 +410,9 @@ bus_engine_proxy_class_init (BusEngineProxyClass *class)
362410
bus_marshal_VOID__VOID,
363411
G_TYPE_NONE,
364412
0);
413+
g_signal_set_va_marshaller (engine_signals[CURSOR_DOWN_LOOKUP_TABLE],
414+
G_TYPE_FROM_CLASS (class),
415+
bus_marshal_VOID__VOIDv);
365416

366417
engine_signals[REGISTER_PROPERTIES] =
367418
g_signal_new (I_("register-properties"),
@@ -373,6 +424,9 @@ bus_engine_proxy_class_init (BusEngineProxyClass *class)
373424
G_TYPE_NONE,
374425
1,
375426
IBUS_TYPE_PROP_LIST);
427+
g_signal_set_va_marshaller (engine_signals[REGISTER_PROPERTIES],
428+
G_TYPE_FROM_CLASS (class),
429+
bus_marshal_VOID__OBJECTv);
376430

377431
engine_signals[UPDATE_PROPERTY] =
378432
g_signal_new (I_("update-property"),
@@ -384,6 +438,9 @@ bus_engine_proxy_class_init (BusEngineProxyClass *class)
384438
G_TYPE_NONE,
385439
1,
386440
IBUS_TYPE_PROPERTY);
441+
g_signal_set_va_marshaller (engine_signals[UPDATE_PROPERTY],
442+
G_TYPE_FROM_CLASS (class),
443+
bus_marshal_VOID__OBJECTv);
387444

388445
engine_signals[PANEL_EXTENSION] =
389446
g_signal_new (I_("panel-extension"),
@@ -395,6 +452,9 @@ bus_engine_proxy_class_init (BusEngineProxyClass *class)
395452
G_TYPE_NONE,
396453
1,
397454
IBUS_TYPE_EXTENSION_EVENT);
455+
g_signal_set_va_marshaller (engine_signals[PANEL_EXTENSION],
456+
G_TYPE_FROM_CLASS (class),
457+
bus_marshal_VOID__OBJECTv);
398458

399459
text_empty = ibus_text_new_from_static_string ("");
400460
g_object_ref_sink (text_empty);

0 commit comments

Comments
 (0)