diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/chromium/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc b/chromium/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc index c6daad5a39e..fe2a37facc5 100644 --- a/chromium/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc +++ b/chromium/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc @@ -15,15 +15,15 @@ #include "third_party/blink/public/platform/blame_context.h" #include "third_party/blink/public/platform/web_string.h" #include "third_party/blink/renderer/platform/runtime_enabled_features.h" -#include "third_party/blink/renderer/platform/scheduler/child/features.h" +#include "third_party/blink/renderer/platform/scheduler/common/features.h" #include "third_party/blink/renderer/platform/scheduler/common/throttling/budget_pool.h" +#include "third_party/blink/renderer/platform/scheduler/common/tracing_helper.h" #include "third_party/blink/renderer/platform/scheduler/main_thread/auto_advancing_virtual_time_domain.h" #include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h" #include "third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.h" #include "third_party/blink/renderer/platform/scheduler/main_thread/page_visibility_state.h" #include "third_party/blink/renderer/platform/scheduler/main_thread/resource_loading_task_runner_handle_impl.h" #include "third_party/blink/renderer/platform/scheduler/main_thread/task_type_names.h" -#include "third_party/blink/renderer/platform/scheduler/util/tracing_helper.h" #include "third_party/blink/renderer/platform/scheduler/worker/worker_scheduler_proxy.h" namespace blink { @@ -452,6 +452,8 @@ base::Optional<QueueTraits> FrameSchedulerImpl::CreateQueueTraitsForTaskType( // when recovering from debugger JavaScript statetment. case TaskType::kInternalTest: return UnpausableTaskQueueTraits(); + case TaskType::kInternalTranslation: + return ForegroundOnlyTaskQueueTraits(); case TaskType::kDeprecatedNone: case TaskType::kMainThreadTaskQueueV8: case TaskType::kMainThreadTaskQueueCompositor: @@ -704,7 +706,8 @@ void FrameSchedulerImpl::UpdateQueuePolicy( if (!voter) return; DCHECK(parent_page_scheduler_); - bool queue_paused = frame_paused_ && queue->CanBePaused(); + bool queue_disabled = false; + queue_disabled |= frame_paused_ && queue->CanBePaused(); // Per-frame freezable task queues will be frozen after 5 mins in background // on Android, and if the browser freezes the page in the background. They // will be resumed when the page is visible. @@ -713,7 +716,12 @@ void FrameSchedulerImpl::UpdateQueuePolicy( // Override freezing if keep-active is true. if (queue_frozen && !queue->FreezeWhenKeepActive()) queue_frozen = !parent_page_scheduler_->KeepActive(); - voter->SetQueueEnabled(!queue_paused && !queue_frozen); + queue_disabled |= queue_frozen; + // Per-frame freezable queues of tasks which are specified as getting frozen + // immediately when their frame becomes invisible get frozen. They will be + // resumed when the frame becomes visible again. + queue_disabled |= !frame_visible_ && !queue->CanRunInBackground(); + voter->SetQueueEnabled(!queue_disabled); } SchedulingLifecycleState FrameSchedulerImpl::CalculateLifecycleState( @@ -979,5 +987,10 @@ FrameSchedulerImpl::UnpausableTaskQueueTraits() { return QueueTraits(); } +MainThreadTaskQueue::QueueTraits +FrameSchedulerImpl::ForegroundOnlyTaskQueueTraits() { + return ThrottleableTaskQueueTraits().SetCanRunInBackground(false); +} + } // namespace scheduler } // namespace blink |