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

Unified Diff: third_party/WebKit/Source/platform/scheduler/renderer/task_queue_throttler.h

Issue 2778123003: [scheduler] Add WakeupBudgetPool. (Closed)
Patch Set: Addressed comments from alexclarke@ Created 3 years, 8 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: third_party/WebKit/Source/platform/scheduler/renderer/task_queue_throttler.h
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/task_queue_throttler.h b/third_party/WebKit/Source/platform/scheduler/renderer/task_queue_throttler.h
index 8e8567b834b16e65495edcfe5dfd6023d86299a3..018513c1ab24c1da845188008b4d5a08879c18ee 100644
--- a/third_party/WebKit/Source/platform/scheduler/renderer/task_queue_throttler.h
+++ b/third_party/WebKit/Source/platform/scheduler/renderer/task_queue_throttler.h
@@ -15,6 +15,8 @@
#include "platform/scheduler/base/cancelable_closure_holder.h"
#include "platform/scheduler/base/time_domain.h"
#include "platform/scheduler/renderer/budget_pool.h"
+#include "platform/scheduler/renderer/cpu_time_budget_pool.h"
+#include "platform/scheduler/renderer/wake_up_budget_pool.h"
#include "platform/scheduler/renderer/web_view_scheduler.h"
namespace base {
@@ -30,6 +32,15 @@ class BudgetPool;
class RendererSchedulerImpl;
class ThrottledTimeDomain;
class CPUTimeBudgetPool;
+class WakeUpBudgetPool;
+
+// kNewTasksOnly prevents new tasks from running (old tasks can run normally),
+// kAllTasks block queue completely.
+// kAllTasks-type block always blocks the queue completely.
+// kNewTasksOnly-type block does nothing when queue is already blocked by
+// kAllTasks, and overrides previous kNewTasksOnly block if any, which may
+// unblock some tasks.
+enum class QueueBlockType { kAllTasks, kNewTasksOnly };
// Interface for BudgetPool to interact with TaskQueueThrottler.
class BLINK_PLATFORM_EXPORT BudgetPoolController {
@@ -46,12 +57,10 @@ class BLINK_PLATFORM_EXPORT BudgetPoolController {
// Deletes the budget pool.
virtual void UnregisterBudgetPool(BudgetPool* budget_pool) = 0;
- // Insert a fence to prevent tasks from running and schedule a wake-up at
- // an appropriate time.
- virtual void BlockQueue(base::TimeTicks now, TaskQueue* queue) = 0;
-
- // Schedule a call to unblock queue at an appropriate moment.
- virtual void UnblockQueue(base::TimeTicks now, TaskQueue* queue) = 0;
+ // Ensure that an appropriate type of the fence is installed and schedule
+ // a pump for this queue when needed.
+ virtual void UpdateQueueThrottlingState(base::TimeTicks now,
+ TaskQueue* queue) = 0;
// Returns true if the |queue| is throttled (i.e. added to TaskQueueThrottler
// and throttling is not disabled).
@@ -99,8 +108,8 @@ class BLINK_PLATFORM_EXPORT TaskQueueThrottler : public TaskQueue::Observer,
void RemoveQueueFromBudgetPool(TaskQueue* queue,
BudgetPool* budget_pool) override;
void UnregisterBudgetPool(BudgetPool* budget_pool) override;
- void BlockQueue(base::TimeTicks now, TaskQueue* queue) override;
- void UnblockQueue(base::TimeTicks now, TaskQueue* queue) override;
+ void UpdateQueueThrottlingState(base::TimeTicks now,
+ TaskQueue* queue) override;
bool IsThrottled(TaskQueue* queue) const override;
// Increments the throttled refcount and causes |task_queue| to be throttled
@@ -132,6 +141,7 @@ class BLINK_PLATFORM_EXPORT TaskQueueThrottler : public TaskQueue::Observer,
// Returned object is owned by |TaskQueueThrottler|.
CPUTimeBudgetPool* CreateCPUTimeBudgetPool(const char* name);
+ WakeUpBudgetPool* CreateWakeUpBudgetPool(const char* name);
// Accounts for given task for cpu-based throttling needs.
void OnTaskRunTimeReported(TaskQueue* task_queue,
@@ -162,14 +172,23 @@ class BLINK_PLATFORM_EXPORT TaskQueueThrottler : public TaskQueue::Observer,
// Return next possible time when queue is allowed to run in accordance
// with throttling policy.
- base::TimeTicks GetNextAllowedRunTime(base::TimeTicks now, TaskQueue* queue);
+ base::TimeTicks GetNextAllowedRunTime(TaskQueue* queue,
+ base::TimeTicks desired_run_time);
+
+ bool CanRunTasksAt(TaskQueue* queue, base::TimeTicks moment, bool is_wakeup);
+
+ bool CanRunTasksUntil(TaskQueue* queue,
+ base::TimeTicks now,
+ base::TimeTicks moment);
void MaybeDeleteQueueMetadata(TaskQueueMap::iterator it);
- // Schedule a call PumpThrottledTasks at an appropriate moment for this queue.
- void SchedulePumpQueue(const tracked_objects::Location& from_here,
- base::TimeTicks now,
- TaskQueue* queue);
+ void UpdateQueueThrottlingStateInternal(base::TimeTicks now,
+ TaskQueue* queue,
+ bool is_wake_up);
+
+ base::Optional<QueueBlockType> GetQueueBlockType(base::TimeTicks now,
+ TaskQueue* queue);
TaskQueueMap queue_details_;
base::Callback<void(TaskQueue*, base::TimeTicks)>

Powered by Google App Engine
This is Rietveld 408576698