summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc
diff options
context:
space:
mode:
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.cc21
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