TaskRuner uses SingleThreadExecutor instead of MultiThreadExecutor(1)

PiperOrigin-RevId: 538325409
This commit is contained in:
Chun Zhang
2023-06-06 16:43:05 -07:00
committed by Copybara-Service
parent ba740c9a5c
commit f8a8fb74c7
3 changed files with 45 additions and 13 deletions
+6 -1
View File
@@ -19,12 +19,17 @@
#include "absl/functional/any_invocable.h"
#include "internal/platform/implementation/crypto.h"
#include "internal/platform/single_thread_executor.h"
#include "internal/platform/timer_impl.h"
namespace nearby {
TaskRunnerImpl::TaskRunnerImpl(uint32_t runner_count) {
executor_ = std::make_unique<::nearby::MultiThreadExecutor>(runner_count);
if (runner_count == 1) {
executor_ = std::make_unique<::nearby::SingleThreadExecutor>();
} else {
executor_ = std::make_unique<::nearby::MultiThreadExecutor>(runner_count);
}
}
TaskRunnerImpl::~TaskRunnerImpl() = default;
+1 -1
View File
@@ -50,7 +50,7 @@ class TaskRunnerImpl : public TaskRunner {
uint64_t GenerateId();
mutable absl::Mutex mutex_;
std::unique_ptr<::nearby::MultiThreadExecutor> executor_;
std::unique_ptr<::nearby::SubmittableExecutor> executor_;
absl::flat_hash_map<uint64_t, std::unique_ptr<Timer>> timers_map_
ABSL_GUARDED_BY(mutex_);
};
+38 -11
View File
@@ -25,8 +25,12 @@
namespace nearby {
namespace {
TEST(TaskRunnerImpl, PostTask) {
TaskRunnerImpl task_runner{1};
constexpr uint32_t kNumThreads[] = {1, 10};
class BaseTaskRunnerImplTest : public ::testing::TestWithParam<uint32_t> {};
TEST_P(BaseTaskRunnerImplTest, PostTask) {
TaskRunnerImpl task_runner{GetParam()};
absl::Notification notification;
bool called = false;
@@ -38,8 +42,8 @@ TEST(TaskRunnerImpl, PostTask) {
EXPECT_TRUE(called);
}
TEST(TaskRunnerImpl, PostSequenceTasks) {
TaskRunnerImpl task_runner{1};
TEST_P(BaseTaskRunnerImplTest, PostSequenceTasks) {
TaskRunnerImpl task_runner{GetParam()};
std::vector<std::string> completed_tasks;
absl::Notification notification;
@@ -66,8 +70,8 @@ TEST(TaskRunnerImpl, PostSequenceTasks) {
EXPECT_EQ(completed_tasks[1], "task2");
}
TEST(TaskRunnerImpl, DISABLED_PostDelayedTask) {
TaskRunnerImpl task_runner{1};
TEST_P(BaseTaskRunnerImplTest, DISABLED_PostDelayedTask) {
TaskRunnerImpl task_runner{GetParam()};
std::vector<std::string> completed_tasks;
absl::Notification notification;
@@ -94,8 +98,8 @@ TEST(TaskRunnerImpl, DISABLED_PostDelayedTask) {
EXPECT_EQ(completed_tasks[1], "task1");
}
TEST(TaskRunnerImpl, DISABLED_PostTwoDelayedTask) {
TaskRunnerImpl task_runner{1};
TEST_P(BaseTaskRunnerImplTest, DISABLED_PostTwoDelayedTask) {
TaskRunnerImpl task_runner{GetParam()};
std::vector<std::string> completed_tasks;
absl::Notification notification;
@@ -133,7 +137,26 @@ TEST(TaskRunnerImpl, DISABLED_PostTwoDelayedTask) {
EXPECT_EQ(completed_tasks[2], "task3");
}
TEST(TaskRunnerImpl, PostTasksOnRunnerWithMultipleThreads) {
TEST(BaseTaskRunnerImplTest, PostTasksOnRunnerWithOneThread) {
TaskRunnerImpl task_runner{10};
std::atomic_int count = 0;
absl::Notification notification;
for (int i = 0; i < 10; i++) {
task_runner.PostTask([&count, &notification]() {
absl::SleepFor(absl::Milliseconds(100));
count++;
if (count == 10) {
notification.Notify();
}
});
}
notification.WaitForNotificationWithTimeout(absl::Milliseconds(1900));
EXPECT_EQ(count, 10);
}
TEST(BaseTaskRunnerImplTest, PostTasksOnRunnerWithMultipleThreads) {
TaskRunnerImpl task_runner{10};
std::atomic_int count = 0;
absl::Notification notification;
@@ -152,11 +175,15 @@ TEST(TaskRunnerImpl, PostTasksOnRunnerWithMultipleThreads) {
EXPECT_EQ(count, 10);
}
TEST(TaskRunnerImpl, PostEmptyTask) {
TaskRunnerImpl task_runner{1};
TEST_P(BaseTaskRunnerImplTest, PostEmptyTask) {
TaskRunnerImpl task_runner{GetParam()};
EXPECT_TRUE(task_runner.PostTask(nullptr));
EXPECT_TRUE(task_runner.PostDelayedTask(absl::Milliseconds(100), nullptr));
}
INSTANTIATE_TEST_SUITE_P(ParameterizedBasePcpHandlerTest,
BaseTaskRunnerImplTest,
::testing::ValuesIn(kNumThreads));
} // namespace
} // namespace nearby