Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3662)

Unified Diff: content/renderer/scheduler/renderer_scheduler_impl.h

Issue 1025323003: Introduce a SchedulerHelper in content/child/scheduler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Sami's suggestions Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/scheduler/renderer_scheduler_impl.h
diff --git a/content/renderer/scheduler/renderer_scheduler_impl.h b/content/renderer/scheduler/renderer_scheduler_impl.h
index 7e3ec6c7dfb9936e4c1f6a6de100c232caa04313..34286a6ed3b40c47c2bbe0ef453cf8735d0b9659 100644
--- a/content/renderer/scheduler/renderer_scheduler_impl.h
+++ b/content/renderer/scheduler/renderer_scheduler_impl.h
@@ -7,13 +7,9 @@
#include "base/atomicops.h"
#include "base/synchronization/lock.h"
-#include "base/threading/thread_checker.h"
-#include "cc/test/test_now_source.h"
-#include "content/renderer/scheduler/cancelable_closure_holder.h"
+#include "content/child/scheduler/scheduler_helper.h"
#include "content/renderer/scheduler/deadline_task_runner.h"
#include "content/renderer/scheduler/renderer_scheduler.h"
-#include "content/renderer/scheduler/single_thread_idle_task_runner.h"
-#include "content/renderer/scheduler/task_queue_manager.h"
namespace base {
namespace trace_event {
@@ -23,10 +19,9 @@ class ConvertableToTraceFormat;
namespace content {
-class RendererTaskQueueSelector;
-class NestableSingleThreadTaskRunner;
-
-class CONTENT_EXPORT RendererSchedulerImpl : public RendererScheduler {
+class CONTENT_EXPORT RendererSchedulerImpl
+ : public RendererScheduler,
+ public SchedulerHelper::SchedulerHelperDelegate {
public:
RendererSchedulerImpl(
scoped_refptr<NestableSingleThreadTaskRunner> main_task_runner);
@@ -34,8 +29,8 @@ class CONTENT_EXPORT RendererSchedulerImpl : public RendererScheduler {
// RendererScheduler implementation:
scoped_refptr<base::SingleThreadTaskRunner> DefaultTaskRunner() override;
- scoped_refptr<base::SingleThreadTaskRunner> CompositorTaskRunner() override;
scoped_refptr<SingleThreadIdleTaskRunner> IdleTaskRunner() override;
+ scoped_refptr<base::SingleThreadTaskRunner> CompositorTaskRunner() override;
scoped_refptr<base::SingleThreadTaskRunner> LoadingTaskRunner() override;
void WillBeginFrame(const cc::BeginFrameArgs& args) override;
void BeginFrameNotExpectedSoon() override;
@@ -43,9 +38,9 @@ class CONTENT_EXPORT RendererSchedulerImpl : public RendererScheduler {
void DidReceiveInputEventOnCompositorThread(
const blink::WebInputEvent& web_input_event) override;
void DidAnimateForInputOnCompositorThread() override;
- bool CanExceedIdleDeadlineIfRequired() const override;
bool IsHighPriorityWorkAnticipated() override;
bool ShouldYieldForHighPriorityWork() override;
+ bool CanExceedIdleDeadlineIfRequired() const override;
void AddTaskObserver(base::MessageLoop::TaskObserver* task_observer) override;
void RemoveTaskObserver(
base::MessageLoop::TaskObserver* task_observer) override;
@@ -53,6 +48,8 @@ class CONTENT_EXPORT RendererSchedulerImpl : public RendererScheduler {
void SetTimeSourceForTesting(scoped_refptr<cc::TestNowSource> time_source);
void SetWorkBatchSizeForTesting(size_t work_batch_size);
+ void CurrentIdleTaskDeadlineCallbackForTesting(
rmcilroy 2015/03/27 14:34:41 nit - GetCurrentIdleTaskDeadlineCallbackForTesting
alex clarke (OOO till 29th) 2015/03/27 16:09:17 Done.
+ base::TimeTicks* deadline_out) const;
private:
friend class RendererSchedulerImplTest;
@@ -60,12 +57,8 @@ class CONTENT_EXPORT RendererSchedulerImpl : public RendererScheduler {
// Keep RendererSchedulerImpl::TaskQueueIdToString in sync with this enum.
enum QueueId {
- DEFAULT_TASK_QUEUE,
- COMPOSITOR_TASK_QUEUE,
+ COMPOSITOR_TASK_QUEUE = SchedulerHelper::TASK_QUEUE_COUNT,
LOADING_TASK_QUEUE,
- IDLE_TASK_QUEUE,
- CONTROL_TASK_QUEUE,
- CONTROL_TASK_AFTER_WAKEUP_QUEUE,
// Must be the last entry.
TASK_QUEUE_COUNT,
};
@@ -85,15 +78,6 @@ class CONTENT_EXPORT RendererSchedulerImpl : public RendererScheduler {
ACTIVE_AND_AWAITING_TOUCHSTART_RESPONSE
};
- // Keep RendererSchedulerImpl::IdlePeriodStateToString in sync with this enum.
- enum class IdlePeriodState {
- NOT_IN_IDLE_PERIOD,
- IN_SHORT_IDLE_PERIOD,
- IN_LONG_IDLE_PERIOD,
- IN_LONG_IDLE_PERIOD_WITH_MAX_DEADLINE,
- ENDING_LONG_IDLE_PERIOD
- };
-
class PollableNeedsUpdateFlag {
public:
PollableNeedsUpdateFlag(base::Lock* write_lock);
@@ -112,13 +96,17 @@ class CONTENT_EXPORT RendererSchedulerImpl : public RendererScheduler {
DISALLOW_COPY_AND_ASSIGN(PollableNeedsUpdateFlag);
};
+ // SchedulerHelperDelegate implementation:
+ bool CanEnterLongIdlePeriod(
+ base::TimeTicks now,
+ base::TimeDelta* next_long_idle_period_delay_out) override;
+
// Returns the serialized scheduler state for tracing.
scoped_refptr<base::trace_event::ConvertableToTraceFormat> AsValueLocked(
base::TimeTicks optional_now) const;
static const char* TaskQueueIdToString(QueueId queue_id);
static const char* PolicyToString(Policy policy);
static const char* InputStreamStateToString(InputStreamState state);
- static const char* IdlePeriodStateToString(IdlePeriodState state);
static InputStreamState ComputeNewInputStreamState(
InputStreamState current_state,
@@ -128,15 +116,6 @@ class CONTENT_EXPORT RendererSchedulerImpl : public RendererScheduler {
// The time we should stay in a priority-escalated mode after an input event.
static const int kPriorityEscalationAfterInputMillis = 100;
- // The maximum length of an idle period.
- static const int kMaximumIdlePeriodMillis = 50;
-
- // The minimum delay to wait between retrying to initiate a long idle time.
- static const int kRetryInitiateLongIdlePeriodDelayMillis = 1;
-
- // IdleTaskDeadlineSupplier Implementation:
- void CurrentIdleTaskDeadlineCallback(base::TimeTicks* deadline_out) const;
-
// Returns the current scheduler policy. Must be called from the main thread.
Policy SchedulerPolicy() const;
@@ -174,47 +153,17 @@ class CONTENT_EXPORT RendererSchedulerImpl : public RendererScheduler {
// input was processed.
void DidProcessInputEvent(base::TimeTicks begin_frame_time);
- // Returns the new idle period state for the next long idle period. Fills in
- // |next_long_idle_period_delay_out| with the next time we should try to
- // initiate the next idle period.
- IdlePeriodState ComputeNewLongIdlePeriodState(
- const base::TimeTicks now,
- base::TimeDelta* next_long_idle_period_delay_out);
-
- // Initiate a long idle period.
- void InitiateLongIdlePeriod();
- void InitiateLongIdlePeriodAfterWakeup();
-
- // Start and end an idle period.
- void StartIdlePeriod(IdlePeriodState new_idle_period_state);
- void EndIdlePeriod();
+ SchedulerHelper helper_;
- // Returns true if |state| represents being within an idle period state.
- static bool IsInIdlePeriod(IdlePeriodState state);
-
- base::TimeTicks Now() const;
-
- base::ThreadChecker main_thread_checker_;
- scoped_ptr<RendererTaskQueueSelector> renderer_task_queue_selector_;
- scoped_ptr<TaskQueueManager> task_queue_manager_;
scoped_refptr<base::SingleThreadTaskRunner> control_task_runner_;
- scoped_refptr<base::SingleThreadTaskRunner> control_task_after_wakeup_runner_;
- scoped_refptr<base::SingleThreadTaskRunner> default_task_runner_;
scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_;
scoped_refptr<base::SingleThreadTaskRunner> loading_task_runner_;
- scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_;
base::Closure update_policy_closure_;
DeadlineTaskRunner delayed_update_policy_runner_;
- CancelableClosureHolder end_idle_period_closure_;
- CancelableClosureHolder initiate_next_long_idle_period_closure_;
- CancelableClosureHolder initiate_next_long_idle_period_after_wakeup_closure_;
// Don't access current_policy_ directly, instead use SchedulerPolicy().
Policy current_policy_;
- IdlePeriodState idle_period_state_;
-
- base::TimeTicks estimated_next_frame_begin_;
base::TimeTicks current_policy_expiration_time_;
// The incoming_signals_lock_ mutex protects access to all variables in the
@@ -226,9 +175,6 @@ class CONTENT_EXPORT RendererSchedulerImpl : public RendererScheduler {
InputStreamState input_stream_state_;
PollableNeedsUpdateFlag policy_may_need_update_;
- scoped_refptr<cc::TestNowSource> time_source_;
-
- base::WeakPtr<RendererSchedulerImpl> weak_renderer_scheduler_ptr_;
base::WeakPtrFactory<RendererSchedulerImpl> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(RendererSchedulerImpl);

Powered by Google App Engine
This is Rietveld 408576698