atproto utils for zig zat.dev
atproto sdk zig
26
fork

Configure Feed

Select the types of activity you want to include in your feed.

add benchmarks for low-level buffer-direct API

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

jcalabro e2b7b641 df6d1389

+92
+92
src/internal/repo/cbor_bench.zig
··· 341 341 std.mem.doNotOptimizeAway(val); 342 342 } 343 343 344 + // --- low-level write (buffer-direct) --- 345 + 346 + fn benchWriteTextDirect() void { 347 + var buf: [128]u8 = undefined; 348 + const end = cbor.writeText(&buf, 0, bench_text); 349 + std.mem.doNotOptimizeAway(end); 350 + } 351 + 352 + fn benchWriteUintDirect() void { 353 + var buf: [16]u8 = undefined; 354 + const end = cbor.writeUint(&buf, 0, 1_234_567_890); 355 + std.mem.doNotOptimizeAway(end); 356 + } 357 + 358 + fn benchWriteCidLinkDirect() void { 359 + var buf: [128]u8 = undefined; 360 + const end = cbor.writeCidLink(&buf, 0, bench_cid.raw); 361 + std.mem.doNotOptimizeAway(end); 362 + } 363 + 364 + fn benchWriteRecordDirect() void { 365 + // manually write the bench record using low-level API (simulates generated code) 366 + var buf: [1024]u8 = undefined; 367 + var p: usize = 0; 368 + p = cbor.writeMapHeader(&buf, p, 5); 369 + // keys in DAG-CBOR order: text(4), $type(5), langs(5), reply(5), createdAt(9) 370 + p = cbor.writeText(&buf, p, "text"); 371 + p = cbor.writeText(&buf, p, "Hello, world! This is a test post with some content."); 372 + p = cbor.writeText(&buf, p, "$type"); 373 + p = cbor.writeText(&buf, p, "app.bsky.feed.post"); 374 + p = cbor.writeText(&buf, p, "langs"); 375 + p = cbor.writeArrayHeader(&buf, p, 1); 376 + p = cbor.writeText(&buf, p, "en"); 377 + p = cbor.writeText(&buf, p, "reply"); 378 + p = cbor.writeMapHeader(&buf, p, 2); 379 + p = cbor.writeText(&buf, p, "parent"); 380 + p = cbor.writeMapHeader(&buf, p, 2); 381 + p = cbor.writeText(&buf, p, "cid"); 382 + p = cbor.writeText(&buf, p, "bafyreib3pwrff2yadznophzf4hcvtyoctwzcujvz7x4pngk2isicz7yszq"); 383 + p = cbor.writeText(&buf, p, "uri"); 384 + p = cbor.writeText(&buf, p, "at://did:plc:4nendwqrs754gt6qvgr56jmn/app.bsky.feed.post/3medg2qvcuc2c"); 385 + p = cbor.writeText(&buf, p, "root"); 386 + p = cbor.writeMapHeader(&buf, p, 2); 387 + p = cbor.writeText(&buf, p, "cid"); 388 + p = cbor.writeText(&buf, p, "bafyreib3pwrff2yadznophzf4hcvtyoctwzcujvz7x4pngk2isicz7yszq"); 389 + p = cbor.writeText(&buf, p, "uri"); 390 + p = cbor.writeText(&buf, p, "at://did:plc:4nendwqrs754gt6qvgr56jmn/app.bsky.feed.post/3medg2qvcuc2c"); 391 + p = cbor.writeText(&buf, p, "createdAt"); 392 + p = cbor.writeText(&buf, p, "2024-01-15T12:00:00.000Z"); 393 + std.mem.doNotOptimizeAway(p); 394 + } 395 + 396 + // --- low-level read (buffer-direct) --- 397 + 398 + fn benchReadTextDirect() void { 399 + const r = cbor.readText(encoded_text, 0) catch @panic("readText"); 400 + std.mem.doNotOptimizeAway(r); 401 + } 402 + 403 + fn benchReadUintDirect() void { 404 + const r = cbor.readUint(encoded_uint, 0) catch @panic("readUint"); 405 + std.mem.doNotOptimizeAway(r); 406 + } 407 + 408 + fn benchReadCidLinkDirect() void { 409 + const r = cbor.readCidLink(encoded_cid_link, 0) catch @panic("readCidLink"); 410 + std.mem.doNotOptimizeAway(r); 411 + } 412 + 413 + fn benchSkipValue() void { 414 + const end = cbor.skipValue(encoded_record, 0) catch @panic("skipValue"); 415 + std.mem.doNotOptimizeAway(end); 416 + } 417 + 418 + fn benchPeekType() void { 419 + const typ = cbor.peekType(encoded_record) catch @panic("peekType"); 420 + std.mem.doNotOptimizeAway(typ); 421 + } 422 + 344 423 // --- CID: stack vs heap allocation --- 345 424 346 425 fn benchComputeCIDStack() void { ··· 459 538 460 539 std.debug.print("\nCAR v1 ({d} bytes, 5 blocks):\n", .{car_5_blocks.len}); 461 540 bench("read CAR 5 blocks (verified)", benchCarRead5); 541 + 542 + std.debug.print("\nlow-level write (buffer-direct):\n", .{}); 543 + bench("writeText (54 bytes)", benchWriteTextDirect); 544 + bench("writeUint (1234567890)", benchWriteUintDirect); 545 + bench("writeCidLink", benchWriteCidLinkDirect); 546 + bench("writeRecord (manual, 434 bytes)", benchWriteRecordDirect); 547 + 548 + std.debug.print("\nlow-level read (buffer-direct):\n", .{}); 549 + bench("readText (54 bytes)", benchReadTextDirect); 550 + bench("readUint (1234567890)", benchReadUintDirect); 551 + bench("readCidLink", benchReadCidLinkDirect); 552 + bench("skipValue (434-byte record)", benchSkipValue); 553 + bench("peekType (434-byte record)", benchPeekType); 462 554 463 555 std.debug.print("\ndiagnostic (cost breakdown):\n", .{}); 464 556 bench("UTF-8 validate (434 bytes)", benchUtf8Validate);