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

Unified Diff: components/scheduler/renderer/renderer_scheduler_impl.cc

Issue 1971763003: scheduler: Detect when a main thread touch stream turns into a compositor gesture (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Review comments Created 4 years, 7 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: components/scheduler/renderer/renderer_scheduler_impl.cc
diff --git a/components/scheduler/renderer/renderer_scheduler_impl.cc b/components/scheduler/renderer/renderer_scheduler_impl.cc
index d28acbf82c767d1b2533f8f778a25e98690e5b57..5eb73a0de3a886ce5c763138e977d1e3a79e28c5 100644
--- a/components/scheduler/renderer/renderer_scheduler_impl.cc
+++ b/components/scheduler/renderer/renderer_scheduler_impl.cc
@@ -404,6 +404,10 @@ void RendererSchedulerImpl::EndIdlePeriodForTesting(
callback.Run();
}
+bool RendererSchedulerImpl::PolicyNeedsUpdateForTesting() {
+ return policy_may_need_update_.IsSet();
+}
+
// static
bool RendererSchedulerImpl::ShouldPrioritizeInputEvent(
const blink::WebInputEvent& web_input_event) {
@@ -458,7 +462,9 @@ void RendererSchedulerImpl::UpdateForInputEventOnCompositorThread(
"type", static_cast<int>(type), "input_event_state",
InputEventStateToString(input_event_state));
- bool gesture_already_in_progress = InputSignalsSuggestGestureInProgress(now);
+ base::TimeDelta unused_policy_duration;
+ UseCase previous_use_case =
+ ComputeCurrentUseCase(now, &unused_policy_duration);
bool was_awaiting_touch_start_response =
AnyThread().awaiting_touch_start_response;
@@ -493,6 +499,8 @@ void RendererSchedulerImpl::UpdateForInputEventOnCompositorThread(
case blink::WebInputEvent::GesturePinchUpdate:
case blink::WebInputEvent::GestureScrollUpdate:
+ // If we see events for an established gesture, we can lock it to the
+ // appropriate thread as the gesture can no longer be cancelled.
AnyThread().last_gesture_was_compositor_driven =
input_event_state == InputEventState::EVENT_CONSUMED_BY_COMPOSITOR;
AnyThread().awaiting_touch_start_response = false;
@@ -515,8 +523,10 @@ void RendererSchedulerImpl::UpdateForInputEventOnCompositorThread(
}
}
- // Avoid unnecessary policy updates, while a gesture is already in progress.
- if (!gesture_already_in_progress ||
+ // Avoid unnecessary policy updates if the use case did not change.
+ UseCase use_case = ComputeCurrentUseCase(now, &unused_policy_duration);
+
+ if (use_case != previous_use_case ||
was_awaiting_touch_start_response !=
AnyThread().awaiting_touch_start_response) {
EnsureUrgentPolicyUpdatePostedOnMainThread(FROM_HERE);
@@ -799,6 +809,11 @@ void RendererSchedulerImpl::UpdatePolicyLocked(UpdateType update_type) {
TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "use_case",
use_case);
TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
+ "touchstart_expected_soon",
+ MainThreadOnly().touchstart_expected_soon);
+ TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
+ "expensive_task_policy", expensive_task_policy);
+ TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
"RendererScheduler.loading_tasks_seem_expensive",
MainThreadOnly().loading_tasks_seem_expensive);
TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
@@ -862,22 +877,6 @@ void RendererSchedulerImpl::ApplyTaskQueuePolicy(
}
}
-bool RendererSchedulerImpl::InputSignalsSuggestGestureInProgress(
- base::TimeTicks now) const {
- base::TimeDelta unused_policy_duration;
- switch (ComputeCurrentUseCase(now, &unused_policy_duration)) {
- case UseCase::COMPOSITOR_GESTURE:
- case UseCase::MAIN_THREAD_GESTURE:
- case UseCase::SYNCHRONIZED_GESTURE:
- case UseCase::TOUCHSTART:
- return true;
-
- default:
- break;
- }
- return false;
-}
-
RendererSchedulerImpl::UseCase RendererSchedulerImpl::ComputeCurrentUseCase(
base::TimeTicks now,
base::TimeDelta* expected_use_case_duration) const {

Powered by Google App Engine
This is Rietveld 408576698