summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h')
-rw-r--r--chromium/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h60
1 files changed, 30 insertions, 30 deletions
diff --git a/chromium/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h b/chromium/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h
index 20fb1a37a14..e34eb40b16e 100644
--- a/chromium/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h
+++ b/chromium/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h
@@ -17,6 +17,7 @@
#include "base/memory/weak_ptr.h"
#include "base/message_loop/message_loop.h"
#include "base/metrics/single_sample_metrics.h"
+#include "base/optional.h"
#include "base/single_thread_task_runner.h"
#include "base/synchronization/lock.h"
#include "base/task/sequence_manager/task_queue.h"
@@ -26,7 +27,6 @@
#include "third_party/blink/public/platform/scheduler/web_thread_scheduler.h"
#include "third_party/blink/renderer/platform/platform_export.h"
#include "third_party/blink/renderer/platform/scheduler/child/pollable_thread_safe_flag.h"
-#include "third_party/blink/renderer/platform/scheduler/child/task_queue_with_task_type.h"
#include "third_party/blink/renderer/platform/scheduler/common/idle_canceled_delayed_task_sweeper.h"
#include "third_party/blink/renderer/platform/scheduler/common/idle_helper.h"
#include "third_party/blink/renderer/platform/scheduler/common/thread_scheduler_impl.h"
@@ -125,8 +125,13 @@ class PLATFORM_EXPORT MainThreadSchedulerImpl
net::RequestPrioritySize::NUM_PRIORITIES>
net_to_blink_priority;
- // Turn on relevant experiments during the loading phase.
- bool experiment_only_when_loading;
+ using FrameTaskTypeToQueueTraitsArray =
+ std::array<base::Optional<MainThreadTaskQueue::QueueTraits>,
+ static_cast<size_t>(TaskType::kCount)>;
+ // Array of QueueTraits indexed by TaskType, containing TaskType::kCount
+ // entries. This is initialized early with all valid entries. Entries that
+ // aren't valid task types, i.e. non-frame level, are base::nullopt.
+ FrameTaskTypeToQueueTraitsArray frame_task_types_to_queue_traits;
};
static const char* UseCaseToString(UseCase use_case);
@@ -154,6 +159,7 @@ class PLATFORM_EXPORT MainThreadSchedulerImpl
std::unique_ptr<WebThread> CreateMainThread() override;
scoped_refptr<SingleThreadIdleTaskRunner> IdleTaskRunner() override;
scoped_refptr<base::SingleThreadTaskRunner> IPCTaskRunner() override;
+ scoped_refptr<base::SingleThreadTaskRunner> CleanupTaskRunner() override;
std::unique_ptr<WebRenderWidgetSchedulingState>
NewRenderWidgetSchedulingState() override;
void WillBeginFrame(const viz::BeginFrameArgs& args) override;
@@ -186,7 +192,7 @@ class PLATFORM_EXPORT MainThreadSchedulerImpl
void Shutdown() override;
void SetTopLevelBlameContext(
base::trace_event::BlameContext* blame_context) override;
- void AddRAILModeObserver(RAILModeObserver* observer) override;
+ void AddRAILModeObserver(WebRAILModeObserver* observer) override;
void SetRendererProcessType(RendererProcessType type) override;
WebScopedVirtualTimePauser CreateWebScopedVirtualTimePauser(
const char* name,
@@ -582,6 +588,9 @@ class PLATFORM_EXPORT MainThreadSchedulerImpl
MainThreadSchedulerImpl* scheduler_; // NOT OWNED
};
+ // ThreadSchedulerImpl implementation:
+ SchedulerHelper* GetHelper() override;
+
// IdleHelper::Delegate implementation:
bool CanEnterLongIdlePeriod(
base::TimeTicks now,
@@ -589,8 +598,8 @@ class PLATFORM_EXPORT MainThreadSchedulerImpl
void IsNotQuiescent() override {}
void OnIdlePeriodStarted() override;
void OnIdlePeriodEnded() override;
-
void OnPendingTasksChanged(bool has_tasks) override;
+
void DispatchRequestBeginMainFrameNotExpected(bool has_tasks);
void EndIdlePeriod();
@@ -643,7 +652,7 @@ class PLATFORM_EXPORT MainThreadSchedulerImpl
kForceUpdate,
};
- // The implelemtation of UpdatePolicy & ForceUpdatePolicy. It is allowed to
+ // The implementation of UpdatePolicy & ForceUpdatePolicy. It is allowed to
// early out if |update_type| is kMayEarlyOutIfPolicyUnchanged.
virtual void UpdatePolicyLocked(UpdateType update_type);
@@ -702,15 +711,6 @@ class PLATFORM_EXPORT MainThreadSchedulerImpl
// TaskQueueThrottler.
void VirtualTimeResumed();
- // Returns true if the current task should not be reported in UKM because no
- // thread time was recorded for it. Also updates |sampling_rate| to account
- // for the ignored tasks by sampling the remaining tasks with higher
- // probability.
- bool ShouldIgnoreTaskForUkm(bool has_thread_time, double* sampling_rate);
-
- // Returns true with probability of kSamplingRateForTaskUkm.
- bool ShouldRecordTaskUkm(bool has_thread_time);
-
// Returns true if there is a change in the main thread's policy that should
// trigger a priority update.
bool ShouldUpdateTaskQueuePriorities(Policy new_policy) const;
@@ -725,12 +725,12 @@ class PLATFORM_EXPORT MainThreadSchedulerImpl
const base::sequence_manager::TaskQueue::Task& task,
const base::sequence_manager::TaskQueue::TaskTiming& task_timing);
- void RecordTaskUkmImpl(
+ UkmRecordingStatus RecordTaskUkmImpl(
MainThreadTaskQueue* queue,
const base::sequence_manager::TaskQueue::Task& task,
const base::sequence_manager::TaskQueue::TaskTiming& task_timing,
- PageSchedulerImpl* page_scheduler,
- size_t page_schedulers_to_attribute);
+ FrameSchedulerImpl* frame_scheduler,
+ bool precise_attribution);
void InitWakeUpBudgetPoolIfNeeded();
@@ -777,12 +777,14 @@ class PLATFORM_EXPORT MainThreadSchedulerImpl
scoped_refptr<MainThreadTaskQueue> v8_task_queue_;
scoped_refptr<MainThreadTaskQueue> ipc_task_queue_;
+ scoped_refptr<MainThreadTaskQueue> cleanup_task_queue_;
- scoped_refptr<TaskQueueWithTaskType> v8_task_runner_;
- scoped_refptr<TaskQueueWithTaskType> compositor_task_runner_;
- scoped_refptr<TaskQueueWithTaskType> control_task_runner_;
- scoped_refptr<TaskQueueWithTaskType> input_task_runner_;
- scoped_refptr<TaskQueueWithTaskType> ipc_task_runner_;
+ scoped_refptr<base::SingleThreadTaskRunner> v8_task_runner_;
+ scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_;
+ scoped_refptr<base::SingleThreadTaskRunner> control_task_runner_;
+ scoped_refptr<base::SingleThreadTaskRunner> input_task_runner_;
+ scoped_refptr<base::SingleThreadTaskRunner> ipc_task_runner_;
+ scoped_refptr<base::SingleThreadTaskRunner> cleanup_task_runner_;
// Note |virtual_time_domain_| is lazily created.
std::unique_ptr<AutoAdvancingVirtualTimeDomain> virtual_time_domain_;
@@ -853,9 +855,10 @@ class PLATFORM_EXPORT MainThreadSchedulerImpl
std::unique_ptr<base::SingleSampleMetric> max_queueing_time_metric;
base::TimeDelta max_queueing_time;
base::TimeTicks background_status_changed_at;
- std::set<PageSchedulerImpl*> page_schedulers; // Not owned.
- base::ObserverList<RAILModeObserver> rail_mode_observers; // Not owned.
- WakeUpBudgetPool* wake_up_budget_pool; // Not owned.
+ std::set<PageSchedulerImpl*> page_schedulers; // Not owned.
+ base::ObserverList<WebRAILModeObserver>::Unchecked
+ rail_mode_observers; // Not owned.
+ WakeUpBudgetPool* wake_up_budget_pool; // Not owned.
MainThreadMetricsHelper metrics_helper;
TraceableState<RendererProcessType, kTracingCategoryNameTopLevel>
process_type;
@@ -866,7 +869,7 @@ class PLATFORM_EXPORT MainThreadSchedulerImpl
base::Optional<base::sequence_manager::TaskQueue::QueuePriority>,
kTracingCategoryNameInfo>
task_priority_for_tracing; // Only used for tracing.
- base::ObserverList<VirtualTimeObserver> virtual_time_observers;
+ base::ObserverList<VirtualTimeObserver>::Unchecked virtual_time_observers;
base::Time initial_virtual_time;
base::TimeTicks initial_virtual_time_ticks;
@@ -896,9 +899,6 @@ class PLATFORM_EXPORT MainThreadSchedulerImpl
// True if a nested RunLoop is running.
bool nested_runloop;
- std::mt19937_64 random_generator;
- std::uniform_real_distribution<double> uniform_distribution;
-
// High-priority for compositing events after input experiment.
PrioritizeCompositingAfterInputExperiment compositing_experiment;
bool should_prioritize_compositing;