Bug 107165 - Traverse the layer tree instead of the render tree in closestScrollableNodeInDocumentIfPossible()
Summary: Traverse the layer tree instead of the render tree in closestScrollableNodeIn...
Status: RESOLVED INVALID
Alias: None
Product: WebKit
Classification: Unclassified
Component: UI Events (show other bugs)
Version: 528+ (Nightly build)
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Terry Anderson
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-01-17 13:08 PST by Terry Anderson
Modified: 2013-03-01 10:39 PST (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Terry Anderson 2013-01-17 13:08:08 PST
Consider Antonio's comment from https://bugs.webkit.org/show_bug.cgi?id=103952#c59:

> Source/WebCore/page/EventHandler.cpp:2613
> +    for (Node* scrollableNode = node; scrollableNode; scrollableNode = scrollableNode->parentNode()) {
> +        if (scrollableNode->isDocumentNode())
> +            break;
> +        RenderObject* renderer = scrollableNode->renderer();
> +        if (renderer && renderer->isBox() && toRenderBox(renderer)->canBeScrolledAndHasScrollableArea())
> +            return scrollableNode;
> +    }

It would be faster (sometimes measurably faster) if instead of traversing the Render tree upwards, you traversed the Layer tree, given that any scrollable renderer will have an associated  RenderLayer.
Comment 1 Terry Anderson 2013-01-17 13:15:49 PST
I should also re-consider Antonio's comment regarding a possibly-redundant boolean member variable:

> Source/WebCore/page/EventHandler.cpp:2633
> +    m_lastHitTestResultOverWidget = result.isOverWidget(); 

I do not think you need this m_lastHitTestResultOverWidget boolean. The Renderer can tell you this as well no? RenderObject::isWidget()
Comment 2 Terry Anderson 2013-03-01 10:39:53 PST
The function closestScrollableNodeCandidate() in EventHandler.cpp is being removed in https://bugs.webkit.org/show_bug.cgi?id=109769 since we're no longer going to be using it, so this issue is no longer valid.