Title: [248630] trunk/Source/WebCore
- Revision
- 248630
- Author
- [email protected]
- Date
- 2019-08-13 13:26:07 -0700 (Tue, 13 Aug 2019)
Log Message
[ContentChangeObserver] Scope events in adjustObservedState
https://bugs.webkit.org/show_bug.cgi?id=200679
<rdar://problem/54266172>
Reviewed by Simon Fraser.
This is in preparation for simplifying adjustObservedState.
* page/ios/ContentChangeObserver.cpp:
(WebCore::ContentChangeObserver::didFinishTransition):
(WebCore::ContentChangeObserver::adjustObservedState):
* page/ios/ContentChangeObserver.h:
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (248629 => 248630)
--- trunk/Source/WebCore/ChangeLog 2019-08-13 20:08:27 UTC (rev 248629)
+++ trunk/Source/WebCore/ChangeLog 2019-08-13 20:26:07 UTC (rev 248630)
@@ -1,3 +1,18 @@
+2019-08-13 Zalan Bujtas <[email protected]>
+
+ [ContentChangeObserver] Scope events in adjustObservedState
+ https://bugs.webkit.org/show_bug.cgi?id=200679
+ <rdar://problem/54266172>
+
+ Reviewed by Simon Fraser.
+
+ This is in preparation for simplifying adjustObservedState.
+
+ * page/ios/ContentChangeObserver.cpp:
+ (WebCore::ContentChangeObserver::didFinishTransition):
+ (WebCore::ContentChangeObserver::adjustObservedState):
+ * page/ios/ContentChangeObserver.h:
+
2019-08-13 Justin Fan <[email protected]>
[WebGPU] Improve GPUBindGroup performance using one device-shared argument MTLBuffer
Modified: trunk/Source/WebCore/page/ios/ContentChangeObserver.cpp (248629 => 248630)
--- trunk/Source/WebCore/page/ios/ContentChangeObserver.cpp 2019-08-13 20:08:27 UTC (rev 248629)
+++ trunk/Source/WebCore/page/ios/ContentChangeObserver.cpp 2019-08-13 20:26:07 UTC (rev 248630)
@@ -250,7 +250,9 @@
weakThis->adjustObservedState(Event::EndedTransitionButFinalStyleIsNotDefiniteYet);
return;
}
- weakThis->adjustObservedState(isConsideredClickable(*targetElement, ElementHadRenderer::Yes) ? Event::CompletedTransitionWithClickableContent : Event::CompletedTransitionWithoutClickableContent);
+ if (isConsideredClickable(*targetElement, ElementHadRenderer::Yes))
+ weakThis->contentVisibilityDidChange();
+ weakThis->adjustObservedState(Event::CompletedTransition);
});
}
@@ -518,80 +520,108 @@
m_document.page()->chrome().client().didFinishContentChangeObserving(*m_document.frame(), observedContentChange());
};
- switch (event) {
- case Event::StartedTouchStartEventDispatching:
- resetToStartObserving();
- setShouldObserveDOMTimerScheduling(true);
- setShouldObserveTransitions(true);
- break;
- case Event::EndedTouchStartEventDispatching:
- setShouldObserveDOMTimerScheduling(false);
- setShouldObserveTransitions(false);
- setIsBetweenTouchEndAndMouseMoved(true);
- break;
- case Event::WillNotProceedWithClick:
- reset();
- break;
- case Event::StartedMouseMovedEventDispatching:
- ASSERT(!m_document.hasPendingStyleRecalc());
- if (!isBetweenTouchEndAndMouseMoved())
+ // These user initiated events trigger content observation (touchStart and mouseMove).
+ {
+ if (event == Event::StartedTouchStartEventDispatching) {
resetToStartObserving();
- setIsBetweenTouchEndAndMouseMoved(false);
- setShouldObserveDOMTimerScheduling(!hasVisibleChangeState());
- setShouldObserveTransitions(!hasVisibleChangeState());
- break;
- case Event::EndedMouseMovedEventDispatching:
- setShouldObserveDOMTimerScheduling(false);
- setShouldObserveTransitions(false);
- break;
- case Event::StartedStyleRecalc:
- setShouldObserveNextStyleRecalc(false);
- FALLTHROUGH;
- case Event::StartedDOMTimerExecution:
- ASSERT(isObservationTimeWindowActive() || observedContentChange() == WKContentIndeterminateChange);
- break;
- case Event::InstalledDOMTimer:
- case Event::StartedFixedObservationTimeWindow:
- case Event::AddedTransition:
- ASSERT(!hasVisibleChangeState());
- setHasIndeterminateState();
- break;
- case Event::EndedDOMTimerExecution:
- setShouldObserveNextStyleRecalc(m_document.hasPendingStyleRecalc());
- FALLTHROUGH;
- case Event::EndedStyleRecalc:
- case Event::RemovedDOMTimer:
- case Event::CanceledTransition:
- if (!isObservationTimeWindowActive())
+ setShouldObserveDOMTimerScheduling(true);
+ setShouldObserveTransitions(true);
+ return;
+ }
+ if (event == Event::EndedTouchStartEventDispatching) {
+ setShouldObserveDOMTimerScheduling(false);
+ setShouldObserveTransitions(false);
+ setIsBetweenTouchEndAndMouseMoved(true);
+ return;
+ }
+ if (event == Event::StartedMouseMovedEventDispatching) {
+ ASSERT(!m_document.hasPendingStyleRecalc());
+ if (!isBetweenTouchEndAndMouseMoved())
+ resetToStartObserving();
+ setIsBetweenTouchEndAndMouseMoved(false);
+ setShouldObserveDOMTimerScheduling(!hasVisibleChangeState());
+ setShouldObserveTransitions(!hasVisibleChangeState());
+ return;
+ }
+ if (event == Event::EndedMouseMovedEventDispatching) {
+ setShouldObserveDOMTimerScheduling(false);
+ setShouldObserveTransitions(false);
+ return;
+ }
+ }
+ // Fixed window observation starts soon after mouseMove when we don't have a definite answer to whether we should proceed with hover or click.
+ {
+ if (event == Event::StartedFixedObservationTimeWindow) {
+ ASSERT(!hasVisibleChangeState());
+ setHasIndeterminateState();
+ return;
+ }
+ if (event == Event::EndedFixedObservationTimeWindow) {
adjustStateAndNotifyContentChangeIfNeeded();
- break;
- case Event::EndedTransitionButFinalStyleIsNotDefiniteYet:
- // onAnimationEnd can be called while in the middle of resolving the document (synchronously) or
- // asynchronously right before the style update is issued. It also means we don't know whether this animation ends up producing visible content yet.
- if (m_document.inStyleRecalc()) {
- // We need to start observing this style change synchronously.
- m_isInObservedStyleRecalc = true;
- } else
- setShouldObserveNextStyleRecalc(true);
- break;
- case Event::CompletedTransitionWithClickableContent:
- // Set visibility flag on and report visible change synchronously or asynchronously depending whether we are in the middle of style recalc.
- contentVisibilityDidChange();
- FALLTHROUGH;
- case Event::CompletedTransitionWithoutClickableContent:
- if (m_document.inStyleRecalc())
- m_isInObservedStyleRecalc = true;
- else if (!isObservationTimeWindowActive())
- adjustStateAndNotifyContentChangeIfNeeded();
- break;
- case Event::EndedFixedObservationTimeWindow:
- adjustStateAndNotifyContentChangeIfNeeded();
- break;
- case Event::ContentVisibilityChanged:
+ return;
+ }
+ }
+ // These events (DOM timer, transition and style recalc) could trigger style changes that are candidates to visibility checking.
+ {
+ if (event == Event::InstalledDOMTimer || event == Event::AddedTransition) {
+ ASSERT(!hasVisibleChangeState());
+ setHasIndeterminateState();
+ return;
+ }
+ if (event == Event::RemovedDOMTimer || event == Event::CanceledTransition) {
+ if (!isObservationTimeWindowActive())
+ adjustStateAndNotifyContentChangeIfNeeded();
+ return;
+ }
+ if (event == Event::StartedDOMTimerExecution) {
+ ASSERT(isObservationTimeWindowActive() || observedContentChange() == WKContentIndeterminateChange);
+ return;
+ }
+ if (event == Event::EndedDOMTimerExecution) {
+ setShouldObserveNextStyleRecalc(m_document.hasPendingStyleRecalc());
+ if (!isObservationTimeWindowActive())
+ adjustStateAndNotifyContentChangeIfNeeded();
+ return;
+ }
+ if (event == Event::EndedTransitionButFinalStyleIsNotDefiniteYet) {
+ // onAnimationEnd can be called while in the middle of resolving the document (synchronously) or
+ // asynchronously right before the style update is issued. It also means we don't know whether this animation ends up producing visible content yet.
+ if (m_document.inStyleRecalc()) {
+ // We need to start observing this style change synchronously.
+ m_isInObservedStyleRecalc = true;
+ } else
+ setShouldObserveNextStyleRecalc(true);
+ return;
+ }
+ if (event == Event::CompletedTransition) {
+ if (m_document.inStyleRecalc())
+ m_isInObservedStyleRecalc = true;
+ else if (!isObservationTimeWindowActive())
+ adjustStateAndNotifyContentChangeIfNeeded();
+ return;
+ }
+ if (event == Event::StartedStyleRecalc) {
+ setShouldObserveNextStyleRecalc(false);
+ ASSERT(isObservationTimeWindowActive() || observedContentChange() == WKContentIndeterminateChange);
+ return;
+ }
+ if (event == Event::EndedStyleRecalc) {
+ if (!isObservationTimeWindowActive())
+ adjustStateAndNotifyContentChangeIfNeeded();
+ return;
+ }
+ }
+ // Either the page decided to call preventDefault on the touch action or the tap gesture evolved to some other gesture (long press, double tap).
+ if (event == Event::WillNotProceedWithClick) {
+ reset();
+ return;
+ }
+ // The page produced an visible change on an actionable content.
+ if (event == Event::ContentVisibilityChanged) {
setHasVisibleChangeState();
// Stop pending activities. We don't need to observe them anymore.
stopObservingPendingActivities();
- break;
+ return;
}
}
Modified: trunk/Source/WebCore/page/ios/ContentChangeObserver.h (248629 => 248630)
--- trunk/Source/WebCore/page/ios/ContentChangeObserver.h 2019-08-13 20:08:27 UTC (rev 248629)
+++ trunk/Source/WebCore/page/ios/ContentChangeObserver.h 2019-08-13 20:26:07 UTC (rev 248630)
@@ -196,8 +196,7 @@
EndedStyleRecalc,
AddedTransition,
EndedTransitionButFinalStyleIsNotDefiniteYet,
- CompletedTransitionWithClickableContent,
- CompletedTransitionWithoutClickableContent,
+ CompletedTransition,
CanceledTransition,
StartedFixedObservationTimeWindow,
EndedFixedObservationTimeWindow,
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes