diff --git a/fml/message_loop_task_queues.cc b/fml/message_loop_task_queues.cc index 1d5a9091083f3..2c7515697515c 100644 --- a/fml/message_loop_task_queues.cc +++ b/fml/message_loop_task_queues.cc @@ -79,8 +79,7 @@ void MessageLoopTaskQueues::RegisterTask(TaskQueueId queue_id, if (queue_entry->subsumed_by != _kUnmerged) { loop_to_wake = queue_entry->subsumed_by; } - WakeUpUnlocked(loop_to_wake, - queue_entry->delayed_tasks.top().GetTargetTime()); + WakeUpUnlocked(loop_to_wake, GetNextWakeTimeUnlocked(loop_to_wake)); } bool MessageLoopTaskQueues::HasPendingTasks(TaskQueueId queue_id) const { diff --git a/fml/message_loop_task_queues_unittests.cc b/fml/message_loop_task_queues_unittests.cc index 1086bb28b8013..3bda17e2cb386 100644 --- a/fml/message_loop_task_queues_unittests.cc +++ b/fml/message_loop_task_queues_unittests.cc @@ -238,3 +238,42 @@ TEST(MessageLoopTaskQueue, DISABLED_ConcurrentQueueAndTaskCreatingCounts) { creation_1.join(); creation_2.join(); } + +TEST(MessageLoopTaskQueue, RegisterTaskWakesUpOwnerQueue) { + auto task_queue = fml::MessageLoopTaskQueues::GetInstance(); + auto platform_queue = task_queue->CreateTaskQueue(); + auto raster_queue = task_queue->CreateTaskQueue(); + + std::vector wakes; + + task_queue->SetWakeable(platform_queue, + new TestWakeable([&wakes](fml::TimePoint wake_time) { + wakes.push_back(wake_time); + })); + + task_queue->SetWakeable(raster_queue, + new TestWakeable([](fml::TimePoint wake_time) { + // The raster queue is owned by the platform queue. + ASSERT_FALSE(true); + })); + + auto time1 = fml::TimePoint::Now() + fml::TimeDelta::FromMilliseconds(1); + auto time2 = fml::TimePoint::Now() + fml::TimeDelta::FromMilliseconds(2); + + ASSERT_EQ(0UL, wakes.size()); + + task_queue->RegisterTask( + platform_queue, []() {}, time1); + + ASSERT_EQ(1UL, wakes.size()); + ASSERT_EQ(time1, wakes[0]); + + task_queue->Merge(platform_queue, raster_queue); + + task_queue->RegisterTask( + raster_queue, []() {}, time2); + + ASSERT_EQ(3UL, wakes.size()); + ASSERT_EQ(time1, wakes[1]); + ASSERT_EQ(time1, wakes[2]); +}