add new test start variant

This commit is contained in:
awe
2026-04-28 19:17:03 +03:00
parent d450e3b8b3
commit 486a811f3b
3 changed files with 193 additions and 16 deletions

View File

@ -77,6 +77,7 @@ namespace {
constexpr std::size_t kFrameWordCount = 4U;
constexpr std::size_t kFrameByteCount = kFrameWordCount * sizeof(uint16_t);
constexpr std::size_t kWriteBatchFrames = 256U;
using EncodedFrame = std::array<std::uint8_t, kFrameByteCount>;
@ -377,7 +378,8 @@ void TtyProtocolWriter::enqueue_frame(uint16_t word0, uint16_t word1, uint16_t w
void TtyProtocolWriter::worker_loop() {
for (;;) {
EncodedFrame frame {};
std::array<std::uint8_t, kWriteBatchFrames * kFrameByteCount> write_batch;
std::size_t batch_count = 0;
{
std::unique_lock<std::mutex> lock(impl_->mutex);
impl_->data_ready_cv.wait(lock, [this]() {
@ -388,13 +390,17 @@ void TtyProtocolWriter::worker_loop() {
return;
}
frame = impl_->ring[impl_->head];
impl_->head = (impl_->head + 1U) % impl_->capacity_frames;
--impl_->size;
batch_count = std::min<std::size_t>(impl_->size, kWriteBatchFrames);
for (std::size_t i = 0; i < batch_count; ++i) {
const EncodedFrame& frame = impl_->ring[impl_->head];
std::memcpy(write_batch.data() + (i * kFrameByteCount), frame.data(), kFrameByteCount);
impl_->head = (impl_->head + 1U) % impl_->capacity_frames;
--impl_->size;
}
}
const std::uint8_t* bytes = frame.data();
std::size_t remaining = frame.size();
const std::uint8_t* bytes = write_batch.data();
std::size_t remaining = batch_count * kFrameByteCount;
while (remaining != 0U) {
const ssize_t written = ::write(impl_->fd, bytes, remaining);
if (written < 0) {
@ -436,7 +442,7 @@ void TtyProtocolWriter::worker_loop() {
{
std::lock_guard<std::mutex> lock(impl_->mutex);
++impl_->stats.frames_written;
impl_->stats.frames_written += static_cast<std::uint64_t>(batch_count);
}
}
}