Testing Continue/Suspend API.
521 {
522
524
525 m_ThreadPool.Suspend();
526
527 std::atomic_int executeCount;
528
529 {
531
532 for (int i = 0; i < 10; i++)
533 {
534 m_ThreadPool.SubmitPoolTask([&]() {
535 ++executeCount;
536 });
537 }
538
539 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize(), nThreads);
540 EXPECT_EQ(m_ThreadPool.GetTasks(), 10);
541
542 m_ThreadPool.Continue();
543
544 m_ThreadPool.Wait();
545 m_ThreadPool.Suspend();
546
547 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize(), nThreads);
548 EXPECT_EQ(m_ThreadPool.GetTasks(), 0);
549 EXPECT_EQ(executeCount.load(), 10);
550 }
551
552 {
554
555 for (int i = 0; i < 30; i++)
556 {
557 m_ThreadPool.SubmitPoolTask([&]() {
558 std::this_thread::sleep_for(std::chrono::seconds(2));
559 ++executeCount;
560 });
561 }
562
563 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize(), nThreads);
564 EXPECT_EQ(m_ThreadPool.GetTasks(), 30);
565
566 m_ThreadPool.Continue();
567 std::this_thread::sleep_for(std::chrono::seconds(1));
568 m_ThreadPool.Suspend();
569 std::this_thread::sleep_for(std::chrono::seconds(2));
570
571 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize(), nThreads);
572 EXPECT_EQ(m_ThreadPool.GetTasks(), 30 - nThreads);
573 EXPECT_EQ(executeCount.load(), 10 + nThreads);
574
575 m_ThreadPool.Continue();
576 m_ThreadPool.Wait();
577
578 EXPECT_EQ(m_ThreadPool.GetIdleThreadSize(), nThreads);
579 EXPECT_EQ(m_ThreadPool.GetTasks(), 0);
580 EXPECT_EQ(executeCount.load(), 40);
581 }
582 }
#define SPICESTEST_PROFILE_SCOPE(name)
#define SPICESTEST_PROFILE_FUNCTION()