Changeset 150091 in webkit


Ignore:
Timestamp:
May 14, 2013 3:40:20 PM (11 years ago)
Author:
commit-queue@webkit.org
Message:

[BlackBerry] Improve Fatfinger phase.
https://bugs.webkit.org/show_bug.cgi?id=107403

Patch by Tiancheng Jiang <tijiang@rim.com> on 2013-05-14
Reviewed by Rob Buis.

Internally reviewed by Genevieve Mak.
BlackBerry PR 324965.

Cache and reuse intersected nodes as long as hit position has not been
changed.

  • Api/WebPage.cpp:

(BlackBerry::WebKit::WebPagePrivate::hitTestResult):

  • Api/WebPage_p.h:

(WebPagePrivate):

  • WebKitSupport/FatFingers.cpp:

(BlackBerry::WebKit::FatFingers::findBestPoint):
(BlackBerry::WebKit::FatFingers::findIntersectingRegions):
(BlackBerry::WebKit::FatFingers::getNodesFromRect):

  • WebKitSupport/FatFingers.h:
Location:
trunk/Source/WebKit/blackberry
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/blackberry/Api/WebPage.cpp

    r150071 r150091  
    61996199    if (m_cachedHitTestContentPos != contentPos) {
    62006200        m_cachedHitTestContentPos = contentPos;
     6201        m_cachedRectHitTestResults.clear();
    62016202        m_cachedHitTestResult = m_mainFrame->eventHandler()->hitTestResultAtPoint(m_cachedHitTestContentPos, HitTestRequest::ReadOnly | HitTestRequest::Active);
    62026203    }
  • trunk/Source/WebKit/blackberry/Api/WebPage_p.h

    r150071 r150091  
    646646    WebCore::HitTestResult m_cachedHitTestResult;
    647647
     648    typedef HashMap<RefPtr<WebCore::Document>, ListHashSet<RefPtr<WebCore::Node> > > CachedRectHitTestResults;
     649    CachedRectHitTestResults m_cachedRectHitTestResults;
     650
    648651#if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
    649652    NotificationManager m_notificationManager;
  • trunk/Source/WebKit/blackberry/ChangeLog

    r150082 r150091  
     12013-05-14  Tiancheng Jiang  <tijiang@rim.com>
     2
     3        [BlackBerry] Improve Fatfinger phase.
     4        https://bugs.webkit.org/show_bug.cgi?id=107403
     5
     6        Reviewed by Rob Buis.
     7
     8        Internally reviewed by Genevieve Mak.
     9        BlackBerry PR 324965.
     10
     11        Cache and reuse intersected nodes as long as hit position has not been
     12        changed.
     13
     14        * Api/WebPage.cpp:
     15        (BlackBerry::WebKit::WebPagePrivate::hitTestResult):
     16        * Api/WebPage_p.h:
     17        (WebPagePrivate):
     18        * WebKitSupport/FatFingers.cpp:
     19        (BlackBerry::WebKit::FatFingers::findBestPoint):
     20        (BlackBerry::WebKit::FatFingers::findIntersectingRegions):
     21        (BlackBerry::WebKit::FatFingers::getNodesFromRect):
     22        * WebKitSupport/FatFingers.h:
     23
    1242013-05-14  Andrew Lo  <anlo@rim.com>
    225
  • trunk/Source/WebKit/blackberry/WebKitSupport/FatFingers.cpp

    r149809 r150091  
    160160    m_contentPos = Platform::pointClampedToRect(m_contentPos, viewportRect);
    161161
    162     m_cachedRectHitTestResults.clear();
    163 
    164162    FatFingersResult result(m_contentPos);
    165163
     
    199197
    200198    bool foundOne = findIntersectingRegions(m_webPage->m_mainFrame->document(), intersectingRegions, remainingFingerRegion);
    201 
    202     m_cachedRectHitTestResults.clear();
    203199
    204200    if (!foundOne)
     
    315311    // intersection of the bounding box with the finger rect.
    316312    ListHashSet<RefPtr<Node> > intersectedNodes;
    317     getNodesFromRect(document, frameContentPos, intersectedNodes);
     313
     314    if (m_webPage->m_cachedRectHitTestResults.contains(document))
     315        intersectedNodes = m_webPage->m_cachedRectHitTestResults.get(document);
     316    else
     317        getNodesFromRect(document, frameContentPos, intersectedNodes);
    318318
    319319    ListHashSet<RefPtr<Node> >::const_iterator it = intersectedNodes.begin();
     
    479479    document->renderView()->layer()->hitTest(requestType, result);
    480480    intersectedNodes = result.rectBasedTestResult();
    481     m_cachedRectHitTestResults.add(document, intersectedNodes);
     481    m_webPage->m_cachedRectHitTestResults.add(document, intersectedNodes);
    482482}
    483483
  • trunk/Source/WebKit/blackberry/WebKitSupport/FatFingers.h

    r149809 r150091  
    7373    typedef std::pair<WebCore::Node*, Platform::IntRectRegion> IntersectingRegion;
    7474
    75     enum CachedResultsStrategy { GetFromRenderTree = 0, GetFromCache };
    76     typedef HashMap<RefPtr<WebCore::Document>, ListHashSet<RefPtr<WebCore::Node> > > CachedRectHitTestResults;
    77 
    7875    bool checkFingerIntersection(const Platform::IntRectRegion&,
    7976        const Platform::IntRectRegion& remainingFingerRegion,
     
    106103    WebCore::IntPoint m_contentPos;
    107104    TargetType m_targetType;
    108     CachedRectHitTestResults m_cachedRectHitTestResults;
    109105};
    110106
Note: See TracChangeset for help on using the changeset viewer.