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

Unified Diff: content/browser/renderer_host/input/synthetic_gesture_controller.cc

Issue 2856423002: input: Change how synthesized events are dispatched in telemetry tests. (Closed)
Patch Set: . Created 3 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: content/browser/renderer_host/input/synthetic_gesture_controller.cc
diff --git a/content/browser/renderer_host/input/synthetic_gesture_controller.cc b/content/browser/renderer_host/input/synthetic_gesture_controller.cc
index 9e5bc84403eb18e01f09e43b26b9db51fbd20211..51c28aa406042f57fed6562efd9c550582f7a982 100644
--- a/content/browser/renderer_host/input/synthetic_gesture_controller.cc
+++ b/content/browser/renderer_host/input/synthetic_gesture_controller.cc
@@ -6,6 +6,7 @@
#include <utility>
+#include "base/threading/thread_task_runner_handle.h"
#include "base/trace_event/trace_event.h"
#include "content/browser/renderer_host/input/synthetic_gesture_target.h"
#include "content/common/input/synthetic_smooth_scroll_gesture_params.h"
@@ -15,8 +16,11 @@
namespace content {
SyntheticGestureController::SyntheticGestureController(
- std::unique_ptr<SyntheticGestureTarget> gesture_target)
- : gesture_target_(std::move(gesture_target)) {}
+ std::unique_ptr<SyntheticGestureTarget> gesture_target,
+ BeginFrameRequestCallback begin_frame_callback)
+ : gesture_target_(std::move(gesture_target)),
+ begin_frame_callback_(std::move(begin_frame_callback)),
+ weak_ptr_factory_(this) {}
SyntheticGestureController::~SyntheticGestureController() {}
@@ -34,51 +38,44 @@ void SyntheticGestureController::QueueSyntheticGesture(
StartGesture(*pending_gesture_queue_.FrontGesture());
}
-void SyntheticGestureController::Flush(base::TimeTicks timestamp) {
+void SyntheticGestureController::OnBeginFrame() {
+ // TODO(sad): Instead of dispatching the events immediately, dispatch after an
+ // offset.
+ DispatchNextEvent();
+}
+
+bool SyntheticGestureController::DispatchNextEvent(base::TimeTicks timestamp) {
TRACE_EVENT0("input", "SyntheticGestureController::Flush");
if (pending_gesture_queue_.IsEmpty())
- return;
-
- if (pending_gesture_result_)
- return;
+ return false;
- SyntheticGesture* gesture = pending_gesture_queue_.FrontGesture();
SyntheticGesture::Result result =
- gesture->ForwardInputEvents(timestamp, gesture_target_.get());
+ pending_gesture_queue_.FrontGesture()->ForwardInputEvents(
+ timestamp, gesture_target_.get());
if (result == SyntheticGesture::GESTURE_RUNNING) {
- gesture_target_->SetNeedsFlush();
- return;
+ begin_frame_callback_.Run(
+ base::BindOnce(&SyntheticGestureController::OnBeginFrame,
+ weak_ptr_factory_.GetWeakPtr()));
+ return true;
}
- // It's possible that all events generated by the gesture have been fully
- // dispatched at this point, in which case |OnDidFlushInput()| was called
- // before |pending_gesture_result_| was initialized. Requesting another flush
- // will trigger the necessary gesture-ending call to |OnDidFlushInput()|.
- pending_gesture_result_.reset(new SyntheticGesture::Result(result));
- gesture_target_->SetNeedsFlush();
-}
-
-void SyntheticGestureController::OnDidFlushInput() {
- if (!pending_gesture_result_)
- return;
-
- DCHECK(!pending_gesture_queue_.IsEmpty());
- auto pending_gesture_result = std::move(pending_gesture_result_);
StopGesture(*pending_gesture_queue_.FrontGesture(),
- pending_gesture_queue_.FrontCallback(),
- *pending_gesture_result);
+ pending_gesture_queue_.FrontCallback(), result);
pending_gesture_queue_.Pop();
-
- if (!pending_gesture_queue_.IsEmpty())
- StartGesture(*pending_gesture_queue_.FrontGesture());
+ if (pending_gesture_queue_.IsEmpty())
+ return false;
+ StartGesture(*pending_gesture_queue_.FrontGesture());
+ return true;
}
void SyntheticGestureController::StartGesture(const SyntheticGesture& gesture) {
TRACE_EVENT_ASYNC_BEGIN0("input,benchmark",
"SyntheticGestureController::running",
&gesture);
- gesture_target_->SetNeedsFlush();
+ begin_frame_callback_.Run(
+ base::BindOnce(&SyntheticGestureController::OnBeginFrame,
+ weak_ptr_factory_.GetWeakPtr()));
}
void SyntheticGestureController::StopGesture(

Powered by Google App Engine
This is Rietveld 408576698