34TEST(PipelineCompileQueueVulkanTest, OnJobAddedProcessesJobsInParallel) {
37 ASSERT_NE(
queue,
nullptr);
39 std::atomic<int> concurrent_jobs{0};
40 std::atomic<int> max_concurrent{0};
55 queue->PostJobForDescriptor(desc1, [&]() {
56 int current = ++concurrent_jobs;
57 int prev_max = max_concurrent.load();
58 while (current > prev_max &&
59 !max_concurrent.compare_exchange_weak(prev_max, current)) {
61 std::this_thread::sleep_for(std::chrono::milliseconds(10));
66 queue->PostJobForDescriptor(desc2, [&]() {
67 int current = ++concurrent_jobs;
68 int prev_max = max_concurrent.load();
69 while (current > prev_max &&
70 !max_concurrent.compare_exchange_weak(prev_max, current)) {
72 std::this_thread::sleep_for(std::chrono::milliseconds(10));
77 queue->PostJobForDescriptor(desc3, [&]() {
78 int current = ++concurrent_jobs;
79 int prev_max = max_concurrent.load();
80 while (current > prev_max &&
81 !max_concurrent.compare_exchange_weak(prev_max, current)) {
83 std::this_thread::sleep_for(std::chrono::milliseconds(10));
90 EXPECT_GE(max_concurrent.load(), 1);
93TEST(PipelineCompileQueueVulkanTest,
94 PostJobForDescriptorWithDuplicateRunsEagerly) {
97 ASSERT_NE(
queue,
nullptr);
99 std::atomic<int> first_job_count{0};
100 std::atomic<int> second_job_count{0};
105 queue->PostJobForDescriptor(desc, [&]() {
110 queue->PostJobForDescriptor(desc, [&]() {
117 EXPECT_EQ(first_job_count, 1);
118 EXPECT_EQ(second_job_count, 1);
121TEST(PipelineCompileQueueVulkanTest, MultipleJobsCompleteSuccessfully) {
124 ASSERT_NE(
queue,
nullptr);
126 std::atomic<int> completed_jobs{0};
150 queue->PostJobForDescriptor(desc1, [&]() {
155 queue->PostJobForDescriptor(desc2, [&]() {
160 queue->PostJobForDescriptor(desc3, [&]() {
165 queue->PostJobForDescriptor(desc4, [&]() {
170 queue->PostJobForDescriptor(desc5, [&]() {
177 EXPECT_EQ(completed_jobs, 5);