ImageBuffer: Improved logic for slot management

This commit is contained in:
2026-02-28 21:22:58 +01:00
parent c92afa95fb
commit c897008d6e
14 changed files with 242 additions and 57 deletions

View File

@@ -4,6 +4,7 @@
#include <catch2/catch_all.hpp>
#include "../common/ImageBuffer.h"
#include "../common/ZeroCopyReturnValue.h"
TEST_CASE("ImageBuffer_Location size") {
ImageBuffer buf(2*1024*1024);
@@ -39,11 +40,28 @@ TEST_CASE("ImageBuffer") {
ZeroCopyReturnValue *ret4 = buf_ctrl.GetImageSlot();
REQUIRE(ret4 == nullptr);
REQUIRE(buf_ctrl.GetStatus().preparation_slots == 4);
REQUIRE(buf_ctrl.GetStatus().sending_slots == 0);
REQUIRE(buf_ctrl.GetStatus().available_slots == 0);
ret0->ReadyToSend();
ret1->ReadyToSend();
REQUIRE(buf_ctrl.GetStatus().preparation_slots == 2);
REQUIRE(buf_ctrl.GetStatus().sending_slots == 2);
REQUIRE(buf_ctrl.GetStatus().available_slots == 0);
ret2->ReadyToSend();
ret3->ReadyToSend();
REQUIRE(buf_ctrl.GetStatus().preparation_slots == 0);
REQUIRE(buf_ctrl.GetStatus().sending_slots == 4);
REQUIRE(buf_ctrl.GetStatus().available_slots == 0);
ret0->release();
ret1->release();
ret2->release();
ret3->release();
REQUIRE(buf_ctrl.GetStatus().available_slots == 4);
REQUIRE(buf_ctrl.GetAvailSlots() == 4);
REQUIRE(buf_ctrl.CheckIfBufferReturned(std::chrono::microseconds(1)));
@@ -113,17 +131,20 @@ TEST_CASE("ImageBuffer_Counter") {
ZeroCopyReturnValue *ret0 = buf_ctrl.GetImageSlot();
REQUIRE(ret0 != nullptr);
ret0->SetImageNumber(0);
ret0->release();
ret0->ReadyToSend();
auto cnt_3 = buf_ctrl.GetStatus().current_counter;
ZeroCopyReturnValue *ret1 = buf_ctrl.GetImageSlot();
REQUIRE(ret1 != nullptr);
ret1->SetImageNumber(1);
ret1->release();
ret1->ReadyToSend();
auto cnt_4 = buf_ctrl.GetStatus().current_counter;
ret0->release();
ret1->release();
REQUIRE(buf_ctrl.Finalize(std::chrono::microseconds(1)));
auto cnt_5 = buf_ctrl.GetStatus().current_counter;
@@ -139,9 +160,6 @@ TEST_CASE("ImageBuffer_Counter") {
CHECK(cnt_4 != cnt_5);
}
TEST_CASE("ImageBuffer_Preview_Access_GetImage_MaxImage") {
DiffractionExperiment experiment(DetJF(18,3,8,36));
@@ -204,7 +222,6 @@ TEST_CASE("ImageBuffer_Restart") {
REQUIRE(buf_ctrl.GetAvailSlots() == 4);
REQUIRE(buf_ctrl.GetStatus().images_in_the_buffer.empty());
ret0 = buf_ctrl.GetImageSlot();
REQUIRE(ret0 != nullptr);
ret0->SetImageNumber(0);