Refactor how frames are sent from receiver

This commit is contained in:
2024-04-14 21:47:06 +02:00
parent 5a793a9260
commit 85a169ec19
85 changed files with 1385 additions and 3656 deletions
+41 -29
View File
@@ -44,9 +44,9 @@ void test_puller(ZMQImagePuller *puller,
}
puller->WaitForImage();
}
// frame is END
auto end = puller->GetEndMessage();
if ((!end.write_master_file) || (end.write_master_file.value() != (writer_id == 0)))
auto start = puller->GetStartMessage();
if ((!start.write_master_file) || (start.write_master_file.value() != (writer_id == 0)))
diff_content[writer_id]++;
}
@@ -58,7 +58,7 @@ TEST_CASE("ZMQImageCommTest_1Writer","[ZeroMQ]") {
DiffractionExperiment x(DetectorGeometry(1));
x.Mode(DetectorMode::Raw);
x.PedestalG0Frames(0).NumTriggers(1).UseInternalPacketGenerator(false).PhotonEnergy_keV(12.4)
.ImagesPerTrigger(nframes);
.ImagesPerTrigger(nframes);
std::vector<DiffractionSpot> empty_spot_vector;
std::vector<float> empty_rad_int_profile;
@@ -84,19 +84,22 @@ TEST_CASE("ZMQImageCommTest_1Writer","[ZeroMQ]") {
puller.Connect(pusher_addr[0]);
std::thread sender_thread = std::thread([&] {
std::vector<uint8_t> serialization_buffer(16*1024*1024);
CBORStream2Serializer serializer(serialization_buffer.data(), serialization_buffer.size());
StartMessage message {
.images_per_file = 16
};
EndMessage end_message{
.write_master_file = true
.images_per_file = 16,
.write_master_file = true
};
EndMessage end_message{};
pusher.StartDataCollection(message);
for (int i = 0; i < nframes; i++) {
DataMessage data_message;
data_message.number = i;
PrepareCBORImage(data_message, x, image1.data() + i * x.GetPixelsNum(), x.GetPixelsNum() * sizeof(uint16_t));
pusher.SendImage(data_message);
serializer.SerializeImage(data_message);
pusher.SendImage(serialization_buffer.data(), serializer.GetBufferSize(), i);
}
pusher.EndDataCollection(end_message);
@@ -160,19 +163,22 @@ TEST_CASE("ZMQImageCommTest_2Writers","[ZeroMQ]") {
std::vector<size_t> diff_size(npullers), diff_content(npullers), diff_split(npullers), nimages(npullers);
std::thread sender_thread = std::thread([&] {
StartMessage message {
.images_per_file = 16
};
EndMessage end_message{
.write_master_file = true
};
pusher.StartDataCollection(message);
std::vector<uint8_t> serialization_buffer(16*1024*1024);
CBORStream2Serializer serializer(serialization_buffer.data(), serialization_buffer.size());
StartMessage message {
.images_per_file = 16,
.write_master_file = true
};
EndMessage end_message{};
pusher.StartDataCollection(message);
for (int i = 0; i < nframes; i++) {
DataMessage data_message;
data_message.number = i;
PrepareCBORImage(data_message, x, image1.data() + i * x.GetPixelsNum(), x.GetPixelsNum() * sizeof(uint16_t));
pusher.SendImage(data_message);
serializer.SerializeImage(data_message);
pusher.SendImage(serialization_buffer.data(), serializer.GetBufferSize(), i);
}
pusher.EndDataCollection(end_message);
@@ -246,19 +252,23 @@ TEST_CASE("ZMQImageCommTest_4Writers","[ZeroMQ]") {
std::vector<size_t> diff_size(npullers), diff_content(npullers), diff_split(npullers), nimages(npullers);
std::thread sender_thread = std::thread([&] {
StartMessage message {
.images_per_file = 16
};
EndMessage end_message{
.write_master_file = true
};
pusher.StartDataCollection(message);
std::vector<uint8_t> serialization_buffer(16*1024*1024);
CBORStream2Serializer serializer(serialization_buffer.data(), serialization_buffer.size());
StartMessage message {
.images_per_file = 16,
.write_master_file = true
};
EndMessage end_message{};
pusher.StartDataCollection(message);
for (int i = 0; i < nframes; i++) {
DataMessage data_message;
data_message.number = i;
PrepareCBORImage(data_message, x, image1.data() + i * x.GetPixelsNum(), x.GetPixelsNum() * sizeof(uint16_t));
pusher.SendImage(data_message);
serializer.SerializeImage(data_message);
pusher.SendImage(serialization_buffer.data(), serializer.GetBufferSize(), i);
}
pusher.EndDataCollection(end_message);
@@ -294,7 +304,7 @@ TEST_CASE("ZMQImageCommTest_4Writers","[ZeroMQ]") {
TEST_CASE("ZMQImagePuller_abort","[ZeroMQ]") {
const size_t nframes = 256;
DiffractionExperiment x;
x.Mode(DetectorMode::Raw);
x.PedestalG0Frames(0).NumTriggers(1).UseInternalPacketGenerator(false).PhotonEnergy_keV(12.4)
@@ -336,9 +346,11 @@ TEST_CASE("ZMQImageCommTest_NoWriter","[ZeroMQ]") {
DataMessage data_message;
data_message.number = 1;
data_message.image = image;
REQUIRE(!pusher.SendImage(data_message));
std::vector<uint8_t> v(16*1024*1024);
CBORStream2Serializer serializer(v.data(), v.size());
serializer.SerializeImage(data_message);
REQUIRE(!pusher.SendImage(v.data(), serializer.GetBufferSize(), 1));
EndMessage end_message;
REQUIRE(!pusher.EndDataCollection(end_message));
}
}