150TEST(MessageLoop, TaskObserverFire) {
151 bool started =
false;
152 bool terminated =
false;
153 std::thread thread([&started, &terminated]() {
155 const size_t count = 25;
157 size_t task_count = 0;
158 size_t obs_count = 0;
159 auto obs = [&obs_count]() { obs_count++; };
160 for (
size_t i = 0; i <
count; i++) {
161 loop.GetTaskRunner()->PostTask([&terminated, i, &task_count]() {
162 ASSERT_EQ(task_count, i);
164 if (
count == i + 1) {
170 loop.AddTaskObserver(0, obs);
172 ASSERT_EQ(task_count,
count);
173 ASSERT_EQ(obs_count,
count);
177 ASSERT_TRUE(started);
178 ASSERT_TRUE(terminated);
194TEST(MessageLoop, CanCreateConcurrentMessageLoop) {
196 auto task_runner = loop->GetTaskRunner();
197 const size_t kCount = 10;
199 std::mutex thread_ids_mutex;
200 std::set<std::thread::id> thread_ids;
201 for (
size_t i = 0; i < kCount; ++i) {
202 task_runner->PostTask([&]() {
203 std::this_thread::sleep_for(std::chrono::seconds(1));
204 std::cout <<
"Ran on thread: " << std::this_thread::get_id() << std::endl;
206 std::scoped_lock lock(thread_ids_mutex);
207 thread_ids.insert(std::this_thread::get_id());
213 ASSERT_GE(thread_ids.size(), 1u);