Changeset 285883 in webkit
- Timestamp:
- Nov 16, 2021, 2:05:01 PM (5 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 4 edited
-
ChangeLog (modified) (1 diff)
-
page/mac/WheelEventDeltaFilterMac.h (modified) (1 diff)
-
page/mac/WheelEventDeltaFilterMac.mm (modified) (6 diffs)
-
page/scrolling/ThreadedScrollingTree.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r285872 r285883 1 2021-11-16 Simon Fraser <simon.fraser@apple.com> 2 3 Use IOHIDEvent timestamps for momentum velocity computation 4 https://bugs.webkit.org/show_bug.cgi?id=233168 5 6 Reviewed by Tim Horton. 7 8 NSEvent timetamps can have some jitter on some devices (rdar://85309639) so drop 9 down to IOHIDEvent timestamps when computing the initial velocity for a momentum 10 scroll animation, for improved accuracy. 11 12 * page/mac/WheelEventDeltaFilterMac.h: 13 * page/mac/WheelEventDeltaFilterMac.mm: 14 (WebCore::WheelEventDeltaFilterMac::updateFromEvent): 15 (WebCore::WheelEventDeltaFilterMac::reset): 16 * page/scrolling/ThreadedScrollingTree.cpp: 17 (WebCore::ThreadedScrollingTree::willStartRenderingUpdate): 18 1 19 2021-11-16 Andres Gonzalez <andresg_22@apple.com> 2 20 -
trunk/Source/WebCore/page/mac/WheelEventDeltaFilterMac.h
r285367 r285883 48 48 RetainPtr<_NSScrollingPredominantAxisFilter> m_predominantAxisFilter; 49 49 WallTime m_initialWallTime; 50 WallTime m_lastIOHIDEventTimestamp; 50 51 }; 51 52 -
trunk/Source/WebCore/page/mac/WheelEventDeltaFilterMac.mm
r285367 r285883 30 30 31 31 #import "FloatPoint.h" 32 #import "Logging.h" 32 33 #import "PlatformWheelEvent.h" 33 34 #import <pal/spi/mac/NSScrollingInputFilterSPI.h> … … 44 45 void WheelEventDeltaFilterMac::updateFromEvent(const PlatformWheelEvent& event) 45 46 { 46 if (event.momentumPhase() != PlatformWheelEventPhase::None) 47 if (event.momentumPhase() != PlatformWheelEventPhase::None) { 48 m_lastIOHIDEventTimestamp = event.ioHIDEventTimestamp(); 47 49 return; 50 } 48 51 49 52 // The absolute value of timestamp doesn't matter; the filter looks at deltas from the previous event. … … 52 55 switch (event.phase()) { 53 56 case PlatformWheelEventPhase::None: 57 case PlatformWheelEventPhase::Ended: 54 58 break; 55 59 56 60 case PlatformWheelEventPhase::Began: 61 reset(); 62 FALLTHROUGH; 57 63 case PlatformWheelEventPhase::Changed: { 58 64 NSPoint filteredDeltaResult; … … 60 66 61 67 [m_predominantAxisFilter filterInputDelta:toFloatPoint(event.delta()) timestamp:timestamp.seconds() outputDelta:&filteredDeltaResult velocity:&filteredVelocityResult]; 62 m_currentFilteredVelocity = toFloatSize(filteredVelocityResult);68 auto axisFilteredVelocity = toFloatSize(filteredVelocityResult); 63 69 m_currentFilteredDelta = toFloatSize(filteredDeltaResult); 70 71 // Use a 1ms minimum to avoid divide by zero. The usual cadence of these events matches screen refresh rate. 72 auto deltaFromLastEvent = std::max(event.ioHIDEventTimestamp() - m_lastIOHIDEventTimestamp, 1_ms); 73 m_currentFilteredVelocity = event.delta() / deltaFromLastEvent.seconds(); 74 75 // Apply the axis-locking that m_predominantAxisFilter does. 76 if (!axisFilteredVelocity.width()) 77 m_currentFilteredVelocity.setWidth(0); 78 if (!axisFilteredVelocity.height()) 79 m_currentFilteredVelocity.setHeight(0); 80 81 LOG(ScrollAnimations, "WheelEventDeltaFilterMac::updateFromEvent: _NSScrollingPredominantAxisFilter velocity %.2f, %2f, IOHIDEvent velocity %.2f,%.2f", 82 axisFilteredVelocity.width(), axisFilteredVelocity.height(), m_currentFilteredVelocity.width(), m_currentFilteredVelocity.height()); 64 83 break; 65 84 } … … 67 86 case PlatformWheelEventPhase::Cancelled: 68 87 case PlatformWheelEventPhase::Stationary: 69 case PlatformWheelEventPhase::Ended:70 88 reset(); 71 89 break; 72 90 } 91 92 m_lastIOHIDEventTimestamp = event.ioHIDEventTimestamp(); 73 93 } 74 94 … … 78 98 m_currentFilteredVelocity = { }; 79 99 m_currentFilteredDelta = { }; 100 m_lastIOHIDEventTimestamp = { }; 80 101 } 81 102 -
trunk/Source/WebCore/page/scrolling/ThreadedScrollingTree.cpp
r285858 r285883 338 338 ASSERT(isMainThread()); 339 339 340 LOG_WITH_STREAM(ScrollAnimations, stream << "ThreadedScrollingTree::willStartRenderingUpdate - scrollingThreadIsActive " << scrollingThreadIsActive());341 342 340 if (!scrollingThreadIsActive()) 343 341 return;
Note:
See TracChangeset
for help on using the changeset viewer.