前后端全部提交
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
#include <render_3D/Render_3D.hpp>
|
||||
#include <gtest/gtest.h>
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
#include <thread>
|
||||
namespace aethera::render_3d {
|
||||
@@ -55,12 +56,15 @@ TEST(Render_3D_Scene, Paint_Submits_Without_Waiting_For_Gpu) {
|
||||
auto scene_result = typename Scene_Object::Builder(visual.get()).build();
|
||||
ASSERT_TRUE(scene_result.has_value());
|
||||
auto scene = std::move(scene_result).value();
|
||||
std::atomic_bool frame_ready{};
|
||||
std::shared_ptr<const Pixel_Frame> frame;
|
||||
scene->set_frame_callback([&](std::shared_ptr<const Pixel_Frame> value) { frame = std::move(value); frame_ready.store(true, std::memory_order_release); });
|
||||
const auto started = std::chrono::steady_clock::now();
|
||||
EXPECT_EQ(scene->request_frame(), Render_Scene_3D::Request_Frame_Result::queued);
|
||||
scene->render();
|
||||
const auto submit_duration = std::chrono::steady_clock::now() - started;
|
||||
EXPECT_LT(submit_duration, std::chrono::seconds(1));
|
||||
for (std::size_t attempt = 0; attempt != 500 && !scene->latest_frame(); ++attempt) std::this_thread::sleep_for(std::chrono::milliseconds(10));
|
||||
EXPECT_NE(scene->latest_frame(), nullptr);
|
||||
for (std::size_t attempt = 0; attempt != 500 && !frame_ready.load(std::memory_order_acquire); ++attempt) std::this_thread::sleep_for(std::chrono::milliseconds(10));
|
||||
EXPECT_NE(frame, nullptr);
|
||||
}
|
||||
catch (const std::exception& error) {
|
||||
GTEST_SKIP() << "Vulkan/Datoviz unavailable: " << error.what();
|
||||
|
||||
Reference in New Issue
Block a user