Skip to content

Commit a3cd110

Browse files
committed
perf: Reduce minimal encoding size of packed events.
We're using a union-like encoding now with an enum telling which union member to set.
1 parent a06a736 commit a3cd110

31 files changed

Lines changed: 314 additions & 407 deletions

auto_tests/BUILD.bazel

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ cc_library(
1616
deps = [
1717
":check_compat",
1818
"//c-toxcore/testing:misc_tools",
19-
"//c-toxcore/toxcore",
2019
"//c-toxcore/toxcore:Messenger",
2120
"//c-toxcore/toxcore:mono_time",
21+
"//c-toxcore/toxcore:tox",
2222
],
2323
)
2424

@@ -44,7 +44,6 @@ flaky_tests = {
4444
":check_compat",
4545
"//c-toxcore/testing:misc_tools",
4646
"//c-toxcore/toxav",
47-
"//c-toxcore/toxcore",
4847
"//c-toxcore/toxcore:DHT_srcs",
4948
"//c-toxcore/toxcore:Messenger",
5049
"//c-toxcore/toxcore:TCP_client",
@@ -61,6 +60,7 @@ flaky_tests = {
6160
"//c-toxcore/toxcore:onion",
6261
"//c-toxcore/toxcore:onion_announce",
6362
"//c-toxcore/toxcore:onion_client",
63+
"//c-toxcore/toxcore:tox",
6464
"//c-toxcore/toxcore:tox_dispatch",
6565
"//c-toxcore/toxcore:tox_events",
6666
"//c-toxcore/toxencryptsave",

auto_tests/tox_dispatch_test.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ static void print_events(Tox_Events *events)
4646
{
4747
const uint32_t size = tox_events_bytes_size(events);
4848

49-
if (size > 24) {
49+
if (size > 1) {
5050
tox_events_print(events);
5151
}
5252

@@ -76,9 +76,9 @@ static bool await_message(Tox **toxes, const Tox_Dispatch *dispatch)
7676
{
7777
for (uint32_t i = 0; i < 100; ++i) {
7878
// Ignore events on tox 1.
79-
print_events(tox_events_iterate(toxes[0], nullptr));
79+
print_events(tox_events_iterate(toxes[0], false, nullptr));
8080
// Check if tox 2 got the message from tox 1.
81-
Tox_Events *events = tox_events_iterate(toxes[1], nullptr);
81+
Tox_Events *events = tox_events_iterate(toxes[1], false, nullptr);
8282

8383
dump_events("/tmp/test.mp", events);
8484

@@ -131,8 +131,8 @@ static void test_tox_events(void)
131131
while (tox_self_get_connection_status(toxes[0]) == TOX_CONNECTION_NONE ||
132132
tox_self_get_connection_status(toxes[1]) == TOX_CONNECTION_NONE) {
133133
// Ignore connection events for now.
134-
print_events(tox_events_iterate(toxes[0], nullptr));
135-
print_events(tox_events_iterate(toxes[1], nullptr));
134+
print_events(tox_events_iterate(toxes[0], false, nullptr));
135+
print_events(tox_events_iterate(toxes[1], false, nullptr));
136136

137137
c_sleep(tox_iteration_interval(toxes[0]));
138138
}
@@ -142,8 +142,8 @@ static void test_tox_events(void)
142142
while (tox_friend_get_connection_status(toxes[0], 0, nullptr) == TOX_CONNECTION_NONE ||
143143
tox_friend_get_connection_status(toxes[1], 0, nullptr) == TOX_CONNECTION_NONE) {
144144
// Ignore connection events for now.
145-
print_events(tox_events_iterate(toxes[0], nullptr));
146-
print_events(tox_events_iterate(toxes[1], nullptr));
145+
print_events(tox_events_iterate(toxes[0], false, nullptr));
146+
print_events(tox_events_iterate(toxes[1], false, nullptr));
147147

148148
c_sleep(tox_iteration_interval(toxes[0]));
149149
}

auto_tests/tox_events_test.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ static bool await_message(Tox **toxes)
1515
{
1616
for (uint32_t i = 0; i < 100; ++i) {
1717
// Ignore events on tox 1.
18-
tox_events_free(tox_events_iterate(toxes[0], nullptr));
18+
tox_events_free(tox_events_iterate(toxes[0], false, nullptr));
1919
// Check if tox 2 got the message from tox 1.
20-
Tox_Events *events = tox_events_iterate(toxes[1], nullptr);
20+
Tox_Events *events = tox_events_iterate(toxes[1], false, nullptr);
2121

2222
if (events != nullptr) {
2323
ck_assert(tox_events_get_friend_message_size(events) == 1);
@@ -66,8 +66,8 @@ static void test_tox_events(void)
6666
while (tox_self_get_connection_status(toxes[0]) == TOX_CONNECTION_NONE ||
6767
tox_self_get_connection_status(toxes[1]) == TOX_CONNECTION_NONE) {
6868
// Ignore connection events for now.
69-
tox_events_free(tox_events_iterate(toxes[0], nullptr));
70-
tox_events_free(tox_events_iterate(toxes[1], nullptr));
69+
tox_events_free(tox_events_iterate(toxes[0], false, nullptr));
70+
tox_events_free(tox_events_iterate(toxes[1], false, nullptr));
7171

7272
c_sleep(tox_iteration_interval(toxes[0]));
7373
}
@@ -77,8 +77,8 @@ static void test_tox_events(void)
7777
while (tox_friend_get_connection_status(toxes[0], 0, nullptr) == TOX_CONNECTION_NONE ||
7878
tox_friend_get_connection_status(toxes[1], 0, nullptr) == TOX_CONNECTION_NONE) {
7979
// Ignore connection events for now.
80-
tox_events_free(tox_events_iterate(toxes[0], nullptr));
81-
tox_events_free(tox_events_iterate(toxes[1], nullptr));
80+
tox_events_free(tox_events_iterate(toxes[0], false, nullptr));
81+
tox_events_free(tox_events_iterate(toxes[1], false, nullptr));
8282

8383
c_sleep(tox_iteration_interval(toxes[0]));
8484
}

other/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ cc_binary(
1717
srcs = ["DHT_bootstrap.c"],
1818
deps = [
1919
"//c-toxcore/testing:misc_tools",
20-
"//c-toxcore/toxcore",
2120
"//c-toxcore/toxcore:DHT",
2221
"//c-toxcore/toxcore:TCP_server",
2322
"//c-toxcore/toxcore:friend_requests",
2423
"//c-toxcore/toxcore:logger",
2524
"//c-toxcore/toxcore:mono_time",
2625
"//c-toxcore/toxcore:network",
26+
"//c-toxcore/toxcore:tox",
2727
],
2828
)

other/bootstrap_daemon/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ cc_binary(
1010
]),
1111
deps = [
1212
"//c-toxcore/other:bootstrap_node_packets",
13-
"//c-toxcore/toxcore",
1413
"//c-toxcore/toxcore:DHT",
1514
"//c-toxcore/toxcore:TCP_server",
1615
"//c-toxcore/toxcore:ccompat",
1716
"//c-toxcore/toxcore:logger",
1817
"//c-toxcore/toxcore:mono_time",
1918
"//c-toxcore/toxcore:network",
2019
"//c-toxcore/toxcore:onion_announce",
20+
"//c-toxcore/toxcore:tox",
2121
"@libconfig",
2222
],
2323
)

other/fun/BUILD.bazel

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ cc_binary(
4646
"create_savedata.c",
4747
],
4848
deps = [
49-
"//c-toxcore/toxcore",
5049
"//c-toxcore/toxcore:ccompat",
50+
"//c-toxcore/toxcore:tox",
5151
"@libsodium",
5252
],
5353
)
@@ -83,8 +83,8 @@ cc_binary(
8383
srcs = ["strkey.c"],
8484
copts = ["-w"],
8585
deps = [
86-
"//c-toxcore/toxcore",
8786
"//c-toxcore/toxcore:ccompat",
87+
"//c-toxcore/toxcore:tox",
8888
"@libsodium",
8989
],
9090
)
@@ -95,7 +95,7 @@ cc_binary(
9595
srcs = ["save-generator.c"],
9696
deps = [
9797
"//c-toxcore/testing:misc_tools",
98-
"//c-toxcore/toxcore",
9998
"//c-toxcore/toxcore:ccompat",
99+
"//c-toxcore/toxcore:tox",
100100
],
101101
)

testing/BUILD.bazel

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ cc_library(
4040
hdrs = ["misc_tools.h"],
4141
visibility = ["//c-toxcore:__subpackages__"],
4242
deps = [
43-
"//c-toxcore/toxcore",
4443
"//c-toxcore/toxcore:ccompat",
44+
"//c-toxcore/toxcore:tox",
4545
"@libsodium",
4646
],
4747
)
@@ -84,6 +84,6 @@ cc_binary(
8484
srcs = ["random_testing.cc"],
8585
deps = [
8686
":misc_tools",
87-
"//c-toxcore/toxcore",
87+
"//c-toxcore/toxcore:tox",
8888
],
8989
)

toxcore/BUILD.bazel

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,7 @@ cc_library(
470470
)
471471

472472
cc_library(
473-
name = "toxcore",
473+
name = "tox",
474474
srcs = [
475475
"tox.c",
476476
"tox_api.c",
@@ -499,7 +499,7 @@ cc_library(
499499
deps = [
500500
":bin_unpack",
501501
":ccompat",
502-
":toxcore",
502+
":tox",
503503
"@msgpack-c",
504504
],
505505
)
@@ -516,8 +516,8 @@ cc_library(
516516
":bin_pack",
517517
":bin_unpack",
518518
":ccompat",
519+
":tox",
519520
":tox_unpack",
520-
":toxcore",
521521
"@msgpack-c",
522522
],
523523
)
@@ -533,6 +533,12 @@ cc_library(
533533
],
534534
)
535535

536+
alias(
537+
name = "toxcore",
538+
actual = ":tox_dispatch",
539+
visibility = ["//c-toxcore:__subpackages__"],
540+
)
541+
536542
sh_library(
537543
name = "cimple_files",
538544
srcs = glob([

toxcore/events/conference_connected.c

Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ static void tox_event_conference_connected_pack(
5858
const Tox_Event_Conference_Connected *event, msgpack_packer *mp)
5959
{
6060
assert(event != nullptr);
61-
bin_pack_array(mp, 1);
61+
bin_pack_array(mp, 2);
62+
bin_pack_u32(mp, TOX_EVENT_CONFERENCE_CONNECTED);
6263
bin_pack_u32(mp, event->conference_number);
6364
}
6465

@@ -67,12 +68,7 @@ static bool tox_event_conference_connected_unpack(
6768
Tox_Event_Conference_Connected *event, const msgpack_object *obj)
6869
{
6970
assert(event != nullptr);
70-
71-
if (obj->type != MSGPACK_OBJECT_ARRAY || obj->via.array.size < 1) {
72-
return false;
73-
}
74-
75-
return bin_unpack_u32(&event->conference_number, &obj->via.array.ptr[0]);
71+
return bin_unpack_u32(&event->conference_number, obj);
7672
}
7773

7874

@@ -146,32 +142,20 @@ void tox_events_pack_conference_connected(const Tox_Events *events, msgpack_pack
146142
{
147143
const uint32_t size = tox_events_get_conference_connected_size(events);
148144

149-
bin_pack_array(mp, size);
150-
151145
for (uint32_t i = 0; i < size; ++i) {
152146
tox_event_conference_connected_pack(tox_events_get_conference_connected(events, i), mp);
153147
}
154148
}
155149

156150
bool tox_events_unpack_conference_connected(Tox_Events *events, const msgpack_object *obj)
157151
{
158-
if (obj->type != MSGPACK_OBJECT_ARRAY) {
159-
return false;
160-
}
161-
162-
for (uint32_t i = 0; i < obj->via.array.size; ++i) {
163-
Tox_Event_Conference_Connected *event = tox_events_add_conference_connected(events);
164-
165-
if (event == nullptr) {
166-
return false;
167-
}
152+
Tox_Event_Conference_Connected *event = tox_events_add_conference_connected(events);
168153

169-
if (!tox_event_conference_connected_unpack(event, &obj->via.array.ptr[i])) {
170-
return false;
171-
}
154+
if (event == nullptr) {
155+
return false;
172156
}
173157

174-
return true;
158+
return tox_event_conference_connected_unpack(event, obj);
175159
}
176160

177161

toxcore/events/conference_invite.c

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,8 @@ static void tox_event_conference_invite_pack(
107107
const Tox_Event_Conference_Invite *event, msgpack_packer *mp)
108108
{
109109
assert(event != nullptr);
110+
bin_pack_array(mp, 2);
111+
bin_pack_u32(mp, TOX_EVENT_CONFERENCE_INVITE);
110112
bin_pack_array(mp, 3);
111113
bin_pack_u32(mp, event->friend_number);
112114
bin_pack_u32(mp, event->type);
@@ -198,32 +200,20 @@ void tox_events_pack_conference_invite(const Tox_Events *events, msgpack_packer
198200
{
199201
const uint32_t size = tox_events_get_conference_invite_size(events);
200202

201-
bin_pack_array(mp, size);
202-
203203
for (uint32_t i = 0; i < size; ++i) {
204204
tox_event_conference_invite_pack(tox_events_get_conference_invite(events, i), mp);
205205
}
206206
}
207207

208208
bool tox_events_unpack_conference_invite(Tox_Events *events, const msgpack_object *obj)
209209
{
210-
if (obj->type != MSGPACK_OBJECT_ARRAY) {
211-
return false;
212-
}
210+
Tox_Event_Conference_Invite *event = tox_events_add_conference_invite(events);
213211

214-
for (uint32_t i = 0; i < obj->via.array.size; ++i) {
215-
Tox_Event_Conference_Invite *event = tox_events_add_conference_invite(events);
216-
217-
if (event == nullptr) {
218-
return false;
219-
}
220-
221-
if (!tox_event_conference_invite_unpack(event, &obj->via.array.ptr[i])) {
222-
return false;
223-
}
212+
if (event == nullptr) {
213+
return false;
224214
}
225215

226-
return true;
216+
return tox_event_conference_invite_unpack(event, obj);
227217
}
228218

229219

0 commit comments

Comments
 (0)