From ea043d642bf3adad852f6e0154f3c5f3feb7dae8 Mon Sep 17 00:00:00 2001 From: Yat Ho Date: Tue, 10 Feb 2026 12:22:45 +0800 Subject: [PATCH] perf(test): write zero tor in 512KiB blocks (#8391) * perf(test): write zero tor in 512KiB blocks * code review: allocate buffer on heap --- tests/libtransmission/test-fixtures.h | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/tests/libtransmission/test-fixtures.h b/tests/libtransmission/test-fixtures.h index 4e6c33a22..f48c84125 100644 --- a/tests/libtransmission/test-fixtures.h +++ b/tests/libtransmission/test-fixtures.h @@ -15,6 +15,7 @@ #include #include #include +#include #include @@ -435,10 +436,17 @@ protected: auto fd = tr_sys_file_open(filename, TR_SYS_FILE_WRITE | TR_SYS_FILE_CREATE | TR_SYS_FILE_TRUNCATE, 0600); auto const file_size = metainfo->file_size(i); - for (uint64_t j = 0; j < file_size; ++j) + static auto constexpr BlockSize = uint64_t{ 524288U }; + auto buf = std::vector(BlockSize); + for (uint64_t j = 0; j < file_size;) { - auto const ch = partial && j < metainfo->piece_size() ? '\1' : '\0'; - tr_sys_file_write(fd, &ch, 1, nullptr); + auto const piece_0_size = metainfo->piece_size(0U); + auto const is_one = partial && j < piece_0_size; + auto const n_write = std::min(BlockSize, (is_one ? piece_0_size : file_size) - j); + auto const ch = is_one ? '\1' : '\0'; + std::fill_n(std::begin(buf), n_write, ch); + tr_sys_file_write(fd, std::data(buf), n_write, nullptr); + j += n_write; } tr_sys_file_close(fd);