Add read-update-write benchmarks

Add benchmarks for parsing, updating, and serializing in Rust and C.
Update the fork instructions in AGENTS.md.
This commit is contained in:
2026-05-04 23:13:53 -07:00
parent ea68537f0b
commit a0c2747583
3 changed files with 59 additions and 2 deletions
+29
View File
@@ -342,6 +342,34 @@ static void fn_count_all_crew(void *state) {
upb_Arena_Free(arena);
}
static void fn_read_update_write(void *state) {
BenchData *d = state;
upb_Arena *arena = upb_Arena_New();
Campaign *c = Campaign_parse((const char *)d->data, d->len, arena);
upb_StringView name = { .data = "updated", .size = 7 };
Campaign_set_name(c, name);
size_t len;
char *out = Campaign_serialize(c, arena, &len);
g_sink = (uintptr_t)out;
upb_Arena_Free(arena);
}
static void bench_read_update_write(void) {
const char *sizes[] = {"tiny", "small", "medium", NULL};
printf("\n=== read_update_write ===\n");
for (int i = 0; sizes[i]; i++) {
BenchData d;
if (!load_bench_data(&d, sizes[i])) continue;
char label[80];
snprintf(label, sizeof(label), "Campaign_parse+set+serialize/%s [%zu B]", sizes[i], d.len);
run_bench(fn_read_update_write, &d, d.len, label);
free_bench_data(&d);
}
}
static void bench_iterate(void) {
const char *sizes[] = {"tiny", "small", "medium", NULL};
printf("\n=== iterate ===\n");
@@ -374,6 +402,7 @@ int main(void) {
bench_deep_parse();
bench_field_access();
bench_iterate();
bench_read_update_write();
printf("\n");
return 0;