Chromium Code Reviews| Index: third_party/WebKit/Source/core/input/MouseEventManager.cpp |
| diff --git a/third_party/WebKit/Source/core/input/MouseEventManager.cpp b/third_party/WebKit/Source/core/input/MouseEventManager.cpp |
| index e4a1ec7df78bfad490fc49ea7b359e7fa48cdcce..5d9f2b465a39681309c10be8cc00add88f7e823d 100644 |
| --- a/third_party/WebKit/Source/core/input/MouseEventManager.cpp |
| +++ b/third_party/WebKit/Source/core/input/MouseEventManager.cpp |
| @@ -56,7 +56,11 @@ String CanvasRegionId(Node* node, const WebMouseEvent& mouse_event) { |
| // The amount of time to wait before sending a fake mouse event triggered |
| // during a scroll. |
| -const double kFakeMouseMoveInterval = 0.1; |
| +const double kFakeMouseMoveIntervalDuringScroll = 0.1; |
| + |
| +// The amount of time to wait before sending a fake mouse event on style and |
| +// layout changes sets to 50Hz, same as common screen refresh rate. |
| +const double kFakeMouseMoveIntervalPerFrame = 0.02; |
|
dtapuska
2017/06/28 19:15:17
I believe constexpr is preferred
lanwei
2017/07/04 18:37:15
Done.
|
| // TODO(crbug.com/653490): Read these values from the OS. |
| #if OS(MACOSX) |
| @@ -581,7 +585,8 @@ void MouseEventManager::SetLastKnownMousePosition(const WebMouseEvent& event) { |
| last_known_mouse_global_position_ = event.PositionInScreen(); |
| } |
| -void MouseEventManager::DispatchFakeMouseMoveEventSoon() { |
| +void MouseEventManager::DispatchFakeMouseMoveEventSoon( |
| + DispatchInterval dispatch_interval) { |
| if (mouse_pressed_) |
|
dtapuska
2017/06/28 19:15:18
So if mouse is pressed or cursor isn't known then
lanwei
2017/07/04 18:37:15
We should update hover states and mouse cursor whe
|
| return; |
| @@ -590,8 +595,12 @@ void MouseEventManager::DispatchFakeMouseMoveEventSoon() { |
| // Reschedule the timer, to prevent dispatching mouse move events |
| // during a scroll. This avoids a potential source of scroll jank. |
| - fake_mouse_move_event_timer_.StartOneShot(kFakeMouseMoveInterval, |
| - BLINK_FROM_HERE); |
| + // Or dispatch a fake mouse move to update hover states when the layout |
| + // changes. |
| + double interval = dispatch_interval == DispatchInterval::kDuringScroll |
| + ? kFakeMouseMoveIntervalDuringScroll |
| + : kFakeMouseMoveIntervalPerFrame; |
| + fake_mouse_move_event_timer_.StartOneShot(interval, BLINK_FROM_HERE); |
| } |
| void MouseEventManager::DispatchFakeMouseMoveEventSoonInQuad( |
| @@ -604,7 +613,7 @@ void MouseEventManager::DispatchFakeMouseMoveEventSoonInQuad( |
| view->RootFrameToContents(last_known_mouse_position_))) |
| return; |
| - DispatchFakeMouseMoveEventSoon(); |
| + DispatchFakeMouseMoveEventSoon(DispatchInterval::kDuringScroll); |
| } |
| WebInputEventResult MouseEventManager::HandleMousePressEvent( |
| @@ -1097,4 +1106,8 @@ bool MouseEventManager::MouseDownMayStartDrag() { |
| return mouse_down_may_start_drag_; |
| } |
| +bool MouseEventManager::FakeMouseMovePending() { |
| + return fake_mouse_move_event_timer_.IsActive(); |
| +} |
| + |
| } // namespace blink |