Changeset 110338 in webkit


Ignore:
Timestamp:
Mar 9, 2012 3:04:04 PM (12 years ago)
Author:
jamesr@google.com
Message:

[chromium] ScrollbarLayerChromium/CCScrollbarLayerImpl for CC-side scrollbar painting
https://bugs.webkit.org/show_bug.cgi?id=78872

Patch by Tien-Ren Chen <trchen@chromium.org> on 2012-03-09
Reviewed by James Robinson.

Source/WebCore:

New test ScrollbarLayerChromiumTest.resolveScrollLayerPointer

  • WebCore.gypi:
  • page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:

(WebCore::scrollLayerForFrameView):
(WebCore::scrollbarLayerDidChange):
(WebCore):
(WebCore::ScrollingCoordinator::frameViewHorizontalScrollbarLayerDidChange):
(WebCore::ScrollingCoordinator::frameViewVerticalScrollbarLayerDidChange):

  • platform/ScrollableArea.cpp:

(WebCore::ScrollableArea::invalidateScrollbar):

  • platform/graphics/chromium/GraphicsLayerChromium.h:

(WebCore::GraphicsLayerChromium::hasContentsLayer):

  • platform/graphics/chromium/LayerChromium.h:

(WebCore):
(WebCore::LayerChromium::toScrollbarLayerChromium):
(LayerChromium):

  • platform/graphics/chromium/ScrollbarLayerChromium.cpp: Added.

(WebCore):
(WebCore::ScrollbarLayerChromium::createCCLayerImpl):
(WebCore::ScrollbarLayerChromium::create):
(WebCore::ScrollbarLayerChromium::ScrollbarLayerChromium):
(WebCore::ScrollbarLayerChromium::pushPropertiesTo):

  • platform/graphics/chromium/ScrollbarLayerChromium.h: Added.

(WebCore):
(ScrollbarLayerChromium):
(WebCore::ScrollbarLayerChromium::scrollLayerId):
(WebCore::ScrollbarLayerChromium::toScrollbarLayerChromium):

  • platform/graphics/chromium/TreeSynchronizer.cpp:

(WebCore::TreeSynchronizer::synchronizeTrees):
(WebCore::TreeSynchronizer::collectExistingCCLayerImplRecursive):
(WebCore::TreeSynchronizer::reuseOrCreateCCLayerImpl):
(WebCore::TreeSynchronizer::synchronizeTreeRecursive):
(WebCore::TreeSynchronizer::updateScrollbarLayerPointersRecursive):
(WebCore):

  • platform/graphics/chromium/TreeSynchronizer.h:

(TreeSynchronizer):

  • platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:

(WebCore::CCLayerTreeHostImpl::updateMaxScrollPosition):

  • platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp: Added.

(WebCore):
(WebCore::CCScrollbarLayerImpl::create):
(WebCore::CCScrollbarLayerImpl::CCScrollbarLayerImpl):
(WebCore::CCScrollbarLayerImpl::willDraw):
(WebCore::CCScrollbarLayerImpl::appendQuads):
(WebCore::CCScrollbarLayerImpl::didDraw):
(WebCore::CCScrollbarLayerImpl::paint):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::x):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::y):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::width):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::height):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::size):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::location):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::parent):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::root):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::setFrameRect):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::frameRect):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::invalidate):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::invalidateRect):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::scrollbarOverlayStyle):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::getTickmarks):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::isScrollableAreaActive):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::isScrollViewScrollbar):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::convertFromContainingWindow):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::isCustomScrollbar):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::orientation):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::value):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::currentPos):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::visibleSize):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::totalSize):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::maximum):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::controlSize):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::lineStep):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::pageStep):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::pressedPart):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::hoveredPart):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::styleChanged):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::enabled):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::setEnabled):

  • platform/graphics/chromium/cc/CCScrollbarLayerImpl.h: Added.

(WebCore):
(CCScrollbarLayerImpl):
(WebCore::CCScrollbarLayerImpl::setScrollbarOverlayStyle):
(WebCore::CCScrollbarLayerImpl::setTickmarks):
(WebCore::CCScrollbarLayerImpl::setIsScrollableAreaActive):
(WebCore::CCScrollbarLayerImpl::setIsScrollViewScrollbar):
(WebCore::CCScrollbarLayerImpl::setOrientation):
(WebCore::CCScrollbarLayerImpl::setControlSize):
(WebCore::CCScrollbarLayerImpl::setPressedPart):
(WebCore::CCScrollbarLayerImpl::setHoveredPart):
(WebCore::CCScrollbarLayerImpl::setEnabled):
(WebCore::CCScrollbarLayerImpl::scrollLayer):
(WebCore::CCScrollbarLayerImpl::setScrollLayer):
(CCScrollbar):
(WebCore::CCScrollbarLayerImpl::CCScrollbar::CCScrollbar):

Source/WebKit/chromium:

  • WebKit.gypi:
  • tests/ScrollbarLayerChromiumTest.cpp: Added.

(WebCore):
(MockScrollbar):
(WebCore::MockScrollbar::x):
(WebCore::MockScrollbar::y):
(WebCore::MockScrollbar::width):
(WebCore::MockScrollbar::height):
(WebCore::MockScrollbar::size):
(WebCore::MockScrollbar::location):
(WebCore::MockScrollbar::parent):
(WebCore::MockScrollbar::root):
(WebCore::MockScrollbar::setFrameRect):
(WebCore::MockScrollbar::frameRect):
(WebCore::MockScrollbar::invalidate):
(WebCore::MockScrollbar::invalidateRect):
(WebCore::MockScrollbar::scrollbarOverlayStyle):
(WebCore::MockScrollbar::getTickmarks):
(WebCore::MockScrollbar::isScrollableAreaActive):
(WebCore::MockScrollbar::isScrollViewScrollbar):
(WebCore::MockScrollbar::convertFromContainingWindow):
(WebCore::MockScrollbar::isCustomScrollbar):
(WebCore::MockScrollbar::orientation):
(WebCore::MockScrollbar::value):
(WebCore::MockScrollbar::currentPos):
(WebCore::MockScrollbar::visibleSize):
(WebCore::MockScrollbar::totalSize):
(WebCore::MockScrollbar::maximum):
(WebCore::MockScrollbar::controlSize):
(WebCore::MockScrollbar::lineStep):
(WebCore::MockScrollbar::pageStep):
(WebCore::MockScrollbar::pressedPart):
(WebCore::MockScrollbar::hoveredPart):
(WebCore::MockScrollbar::styleChanged):
(WebCore::MockScrollbar::enabled):
(WebCore::MockScrollbar::setEnabled):
(WebCore::MockScrollbar::MockScrollbar):
(WebCore::MockScrollbar::~MockScrollbar):
(WebCore::TEST):

Location:
trunk/Source
Files:
5 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r110336 r110338  
     12012-03-09  Tien-Ren Chen  <trchen@chromium.org>
     2
     3        [chromium] ScrollbarLayerChromium/CCScrollbarLayerImpl for CC-side scrollbar painting
     4        https://bugs.webkit.org/show_bug.cgi?id=78872
     5
     6        Reviewed by James Robinson.
     7
     8        New test ScrollbarLayerChromiumTest.resolveScrollLayerPointer
     9
     10        * WebCore.gypi:
     11        * page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:
     12        (WebCore::scrollLayerForFrameView):
     13        (WebCore::scrollbarLayerDidChange):
     14        (WebCore):
     15        (WebCore::ScrollingCoordinator::frameViewHorizontalScrollbarLayerDidChange):
     16        (WebCore::ScrollingCoordinator::frameViewVerticalScrollbarLayerDidChange):
     17        * platform/ScrollableArea.cpp:
     18        (WebCore::ScrollableArea::invalidateScrollbar):
     19        * platform/graphics/chromium/GraphicsLayerChromium.h:
     20        (WebCore::GraphicsLayerChromium::hasContentsLayer):
     21        * platform/graphics/chromium/LayerChromium.h:
     22        (WebCore):
     23        (WebCore::LayerChromium::toScrollbarLayerChromium):
     24        (LayerChromium):
     25        * platform/graphics/chromium/ScrollbarLayerChromium.cpp: Added.
     26        (WebCore):
     27        (WebCore::ScrollbarLayerChromium::createCCLayerImpl):
     28        (WebCore::ScrollbarLayerChromium::create):
     29        (WebCore::ScrollbarLayerChromium::ScrollbarLayerChromium):
     30        (WebCore::ScrollbarLayerChromium::pushPropertiesTo):
     31        * platform/graphics/chromium/ScrollbarLayerChromium.h: Added.
     32        (WebCore):
     33        (ScrollbarLayerChromium):
     34        (WebCore::ScrollbarLayerChromium::scrollLayerId):
     35        (WebCore::ScrollbarLayerChromium::toScrollbarLayerChromium):
     36        * platform/graphics/chromium/TreeSynchronizer.cpp:
     37        (WebCore::TreeSynchronizer::synchronizeTrees):
     38        (WebCore::TreeSynchronizer::collectExistingCCLayerImplRecursive):
     39        (WebCore::TreeSynchronizer::reuseOrCreateCCLayerImpl):
     40        (WebCore::TreeSynchronizer::synchronizeTreeRecursive):
     41        (WebCore::TreeSynchronizer::updateScrollbarLayerPointersRecursive):
     42        (WebCore):
     43        * platform/graphics/chromium/TreeSynchronizer.h:
     44        (TreeSynchronizer):
     45        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
     46        (WebCore::CCLayerTreeHostImpl::updateMaxScrollPosition):
     47        * platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp: Added.
     48        (WebCore):
     49        (WebCore::CCScrollbarLayerImpl::create):
     50        (WebCore::CCScrollbarLayerImpl::CCScrollbarLayerImpl):
     51        (WebCore::CCScrollbarLayerImpl::willDraw):
     52        (WebCore::CCScrollbarLayerImpl::appendQuads):
     53        (WebCore::CCScrollbarLayerImpl::didDraw):
     54        (WebCore::CCScrollbarLayerImpl::paint):
     55        (WebCore::CCScrollbarLayerImpl::CCScrollbar::x):
     56        (WebCore::CCScrollbarLayerImpl::CCScrollbar::y):
     57        (WebCore::CCScrollbarLayerImpl::CCScrollbar::width):
     58        (WebCore::CCScrollbarLayerImpl::CCScrollbar::height):
     59        (WebCore::CCScrollbarLayerImpl::CCScrollbar::size):
     60        (WebCore::CCScrollbarLayerImpl::CCScrollbar::location):
     61        (WebCore::CCScrollbarLayerImpl::CCScrollbar::parent):
     62        (WebCore::CCScrollbarLayerImpl::CCScrollbar::root):
     63        (WebCore::CCScrollbarLayerImpl::CCScrollbar::setFrameRect):
     64        (WebCore::CCScrollbarLayerImpl::CCScrollbar::frameRect):
     65        (WebCore::CCScrollbarLayerImpl::CCScrollbar::invalidate):
     66        (WebCore::CCScrollbarLayerImpl::CCScrollbar::invalidateRect):
     67        (WebCore::CCScrollbarLayerImpl::CCScrollbar::scrollbarOverlayStyle):
     68        (WebCore::CCScrollbarLayerImpl::CCScrollbar::getTickmarks):
     69        (WebCore::CCScrollbarLayerImpl::CCScrollbar::isScrollableAreaActive):
     70        (WebCore::CCScrollbarLayerImpl::CCScrollbar::isScrollViewScrollbar):
     71        (WebCore::CCScrollbarLayerImpl::CCScrollbar::convertFromContainingWindow):
     72        (WebCore::CCScrollbarLayerImpl::CCScrollbar::isCustomScrollbar):
     73        (WebCore::CCScrollbarLayerImpl::CCScrollbar::orientation):
     74        (WebCore::CCScrollbarLayerImpl::CCScrollbar::value):
     75        (WebCore::CCScrollbarLayerImpl::CCScrollbar::currentPos):
     76        (WebCore::CCScrollbarLayerImpl::CCScrollbar::visibleSize):
     77        (WebCore::CCScrollbarLayerImpl::CCScrollbar::totalSize):
     78        (WebCore::CCScrollbarLayerImpl::CCScrollbar::maximum):
     79        (WebCore::CCScrollbarLayerImpl::CCScrollbar::controlSize):
     80        (WebCore::CCScrollbarLayerImpl::CCScrollbar::lineStep):
     81        (WebCore::CCScrollbarLayerImpl::CCScrollbar::pageStep):
     82        (WebCore::CCScrollbarLayerImpl::CCScrollbar::pressedPart):
     83        (WebCore::CCScrollbarLayerImpl::CCScrollbar::hoveredPart):
     84        (WebCore::CCScrollbarLayerImpl::CCScrollbar::styleChanged):
     85        (WebCore::CCScrollbarLayerImpl::CCScrollbar::enabled):
     86        (WebCore::CCScrollbarLayerImpl::CCScrollbar::setEnabled):
     87        * platform/graphics/chromium/cc/CCScrollbarLayerImpl.h: Added.
     88        (WebCore):
     89        (CCScrollbarLayerImpl):
     90        (WebCore::CCScrollbarLayerImpl::setScrollbarOverlayStyle):
     91        (WebCore::CCScrollbarLayerImpl::setTickmarks):
     92        (WebCore::CCScrollbarLayerImpl::setIsScrollableAreaActive):
     93        (WebCore::CCScrollbarLayerImpl::setIsScrollViewScrollbar):
     94        (WebCore::CCScrollbarLayerImpl::setOrientation):
     95        (WebCore::CCScrollbarLayerImpl::setControlSize):
     96        (WebCore::CCScrollbarLayerImpl::setPressedPart):
     97        (WebCore::CCScrollbarLayerImpl::setHoveredPart):
     98        (WebCore::CCScrollbarLayerImpl::setEnabled):
     99        (WebCore::CCScrollbarLayerImpl::scrollLayer):
     100        (WebCore::CCScrollbarLayerImpl::setScrollLayer):
     101        (CCScrollbar):
     102        (WebCore::CCScrollbarLayerImpl::CCScrollbar::CCScrollbar):
     103
    11042012-03-09  Julien Chaffraix  <jchaffraix@webkit.org>
    2105
  • trunk/Source/WebCore/WebCore.gypi

    r110322 r110338  
    33773377            'platform/graphics/chromium/LayerTextureUpdater.h',
    33783378            'platform/graphics/chromium/MediaPlayerPrivateChromium.h',
     3379            'platform/graphics/chromium/ScrollbarLayerChromium.cpp',
     3380            'platform/graphics/chromium/ScrollbarLayerChromium.h',
    33793381            'platform/graphics/chromium/SolidColorLayerChromium.cpp',
    33803382            'platform/graphics/chromium/SolidColorLayerChromium.h',
     
    34923494            'platform/graphics/chromium/cc/CCSchedulerStateMachine.h',
    34933495            'platform/graphics/chromium/cc/CCScopedThreadProxy.h',
     3496            'platform/graphics/chromium/cc/CCScrollbarLayerImpl.cpp',
     3497            'platform/graphics/chromium/cc/CCScrollbarLayerImpl.h',
    34943498            'platform/graphics/chromium/cc/CCSharedQuadState.cpp',
    34953499            'platform/graphics/chromium/cc/CCSharedQuadState.h',
  • trunk/Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp

    r108937 r110338  
    2828#include "ScrollingCoordinator.h"
    2929
     30#include "Frame.h"
     31#include "FrameView.h"
    3032#include "LayerChromium.h"
    3133#include "Region.h"
     34#include "RenderLayerCompositor.h"
     35#include "RenderView.h"
     36#include "ScrollbarLayerChromium.h"
     37#include "ScrollbarTheme.h"
     38#include "cc/CCProxy.h"
    3239
    3340namespace WebCore {
     
    5966}
    6067
    61 void ScrollingCoordinator::frameViewHorizontalScrollbarLayerDidChange(FrameView*, GraphicsLayer* horizontalScrollbarLayer)
     68static GraphicsLayer* scrollLayerForFrameView(FrameView* frameView)
    6269{
    63     // FIXME: Implement!
     70#if USE(ACCELERATED_COMPOSITING)
     71    Frame* frame = frameView->frame();
     72    if (!frame)
     73        return 0;
     74
     75    RenderView* renderView = frame->contentRenderer();
     76    if (!renderView)
     77        return 0;
     78    return renderView->compositor()->scrollLayer();
     79#else
     80    return 0;
     81#endif
    6482}
    6583
    66 void ScrollingCoordinator::frameViewVerticalScrollbarLayerDidChange(FrameView*, GraphicsLayer* verticalScrollbarLayer)
     84static void scrollbarLayerDidChange(Scrollbar* scrollbar, LayerChromium* scrollLayer, GraphicsLayer* scrollbarGraphicsLayer)
    6785{
    68     // FIXME: Implement!
     86    ASSERT(scrollbar);
     87    ASSERT(scrollLayer);
     88    ASSERT(scrollbarGraphicsLayer);
     89
     90    if (scrollbar->isCustomScrollbar() || !CCProxy::hasImplThread()) {
     91        scrollbarGraphicsLayer->setContentsToMedia(0);
     92        scrollbarGraphicsLayer->setDrawsContent(true);
     93        return;
     94    }
     95
     96    RefPtr<ScrollbarLayerChromium> scrollbarLayer = ScrollbarLayerChromium::create(scrollbar, scrollLayer->id());
     97    scrollbarGraphicsLayer->setContentsToMedia(scrollbarLayer.get());
     98    scrollbarGraphicsLayer->setDrawsContent(false);
     99}
     100
     101void ScrollingCoordinator::frameViewHorizontalScrollbarLayerDidChange(FrameView* frameView, GraphicsLayer* horizontalScrollbarLayer)
     102{
     103    if (!horizontalScrollbarLayer || !coordinatesScrollingForFrameView(frameView))
     104        return;
     105
     106    LayerChromium* scrollLayer = m_private->scrollLayer();
     107    if (!scrollLayer) // FIXME: sometimes we get called before setScrollLayer, workaround by finding the scroll layout ourselves.
     108        scrollLayer = scrollLayerForFrameView(frameView)->platformLayer();
     109
     110    scrollbarLayerDidChange(frameView->horizontalScrollbar(), scrollLayer, horizontalScrollbarLayer);
     111}
     112
     113void ScrollingCoordinator::frameViewVerticalScrollbarLayerDidChange(FrameView* frameView, GraphicsLayer* verticalScrollbarLayer)
     114{
     115    if (!verticalScrollbarLayer || !coordinatesScrollingForFrameView(frameView))
     116        return;
     117
     118    LayerChromium* scrollLayer = m_private->scrollLayer();
     119    if (!scrollLayer) // FIXME: sometimes we get called before setScrollLayer, workaround by finding the scroll layout ourselves.
     120        scrollLayer = scrollLayerForFrameView(frameView)->platformLayer();
     121
     122    scrollbarLayerDidChange(frameView->verticalScrollbar(), scrollLayer, verticalScrollbarLayer);
    69123}
    70124
  • trunk/Source/WebCore/platform/ScrollableArea.cpp

    r110185 r110338  
    293293        if (GraphicsLayer* graphicsLayer = layerForHorizontalScrollbar()) {
    294294            graphicsLayer->setNeedsDisplay();
     295            graphicsLayer->setContentsNeedsDisplay();
    295296            return;
    296297        }
     
    298299        if (GraphicsLayer* graphicsLayer = layerForVerticalScrollbar()) {
    299300            graphicsLayer->setNeedsDisplay();
     301            graphicsLayer->setContentsNeedsDisplay();
    300302            return;
    301303        }
  • trunk/Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h

    r109424 r110338  
    9898    virtual void setContentsToMedia(PlatformLayer*);
    9999    virtual void setContentsToCanvas(PlatformLayer*);
     100    virtual bool hasContentsLayer() const { return m_contentsLayer; }
    100101
    101102    virtual bool addAnimation(const KeyframeValueList&, const IntSize& boxSize, const Animation*, const String&, double timeOffset);
  • trunk/Source/WebCore/platform/graphics/chromium/LayerChromium.h

    r110317 r110338  
    6262class CCTextureUpdater;
    6363class GraphicsContext3D;
     64class ScrollbarLayerChromium;
    6465
    6566// Base class for composited layers. Special layer types are derived from
     
    229230
    230231    virtual Region opaqueContentsRegion() const { return Region(); };
     232
     233    virtual ScrollbarLayerChromium* toScrollbarLayerChromium() { return 0; }
    231234
    232235protected:
  • trunk/Source/WebCore/platform/graphics/chromium/TreeSynchronizer.cpp

    r108886 r110338  
    2929
    3030#include "LayerChromium.h"
     31#include "ScrollbarLayerChromium.h"
    3132#include "cc/CCLayerImpl.h"
     33#include "cc/CCScrollbarLayerImpl.h"
    3234#include <wtf/RefPtr.h>
    3335
     
    3638PassOwnPtr<CCLayerImpl> TreeSynchronizer::synchronizeTrees(LayerChromium* layerChromiumRoot, PassOwnPtr<CCLayerImpl> oldCCLayerImplRoot)
    3739{
    38     CCLayerImplMap map;
    39     collectExistingCCLayerImplRecursive(map, oldCCLayerImplRoot);
     40    OwnPtrCCLayerImplMap oldLayers;
     41    RawPtrCCLayerImplMap newLayers;
    4042
    41     return synchronizeTreeRecursive(map, layerChromiumRoot);
     43    collectExistingCCLayerImplRecursive(oldLayers, oldCCLayerImplRoot);
     44
     45    OwnPtr<CCLayerImpl> newTree = synchronizeTreeRecursive(newLayers, oldLayers, layerChromiumRoot);
     46
     47    updateScrollbarLayerPointersRecursive(newLayers, layerChromiumRoot);
     48
     49    return newTree.release();
    4250}
    4351
    44 void TreeSynchronizer::collectExistingCCLayerImplRecursive(CCLayerImplMap& map, PassOwnPtr<CCLayerImpl> popCCLayerImpl)
     52void TreeSynchronizer::collectExistingCCLayerImplRecursive(OwnPtrCCLayerImplMap& oldLayers, PassOwnPtr<CCLayerImpl> popCCLayerImpl)
    4553{
    4654    OwnPtr<CCLayerImpl> ccLayerImpl = popCCLayerImpl;
     
    5159    Vector<OwnPtr<CCLayerImpl> >& children = ccLayerImpl->m_children;
    5260    for (size_t i = 0; i < children.size(); ++i)
    53         collectExistingCCLayerImplRecursive(map, children[i].release());
     61        collectExistingCCLayerImplRecursive(oldLayers, children[i].release());
    5462
    55     collectExistingCCLayerImplRecursive(map, ccLayerImpl->m_maskLayer.release());
    56     collectExistingCCLayerImplRecursive(map, ccLayerImpl->m_replicaLayer.release());
     63    collectExistingCCLayerImplRecursive(oldLayers, ccLayerImpl->m_maskLayer.release());
     64    collectExistingCCLayerImplRecursive(oldLayers, ccLayerImpl->m_replicaLayer.release());
    5765
    5866    int id = ccLayerImpl->id();
    59     map.set(id, ccLayerImpl.release());
     67    oldLayers.set(id, ccLayerImpl.release());
    6068}
    6169
    62 PassOwnPtr<CCLayerImpl> TreeSynchronizer::reuseOrCreateCCLayerImpl(CCLayerImplMap& map, LayerChromium* layer)
     70PassOwnPtr<CCLayerImpl> TreeSynchronizer::reuseOrCreateCCLayerImpl(RawPtrCCLayerImplMap& newLayers, OwnPtrCCLayerImplMap& oldLayers, LayerChromium* layer)
    6371{
    64     OwnPtr<CCLayerImpl> ccLayerImpl = map.take(layer->id());
     72    OwnPtr<CCLayerImpl> ccLayerImpl = oldLayers.take(layer->id());
    6573
    6674    if (!ccLayerImpl)
    67         return layer->createCCLayerImpl();
     75        ccLayerImpl = layer->createCCLayerImpl();
    6876
     77    newLayers.set(layer->id(), ccLayerImpl.get());
    6978    return ccLayerImpl.release();
    7079}
    7180
    72 PassOwnPtr<CCLayerImpl> TreeSynchronizer::synchronizeTreeRecursive(CCLayerImplMap& map, LayerChromium* layer)
     81PassOwnPtr<CCLayerImpl> TreeSynchronizer::synchronizeTreeRecursive(RawPtrCCLayerImplMap& newLayers, OwnPtrCCLayerImplMap& oldLayers, LayerChromium* layer)
    7382{
    7483    if (!layer)
    7584        return nullptr;
    7685
    77     OwnPtr<CCLayerImpl> ccLayerImpl = reuseOrCreateCCLayerImpl(map, layer);
     86    OwnPtr<CCLayerImpl> ccLayerImpl = reuseOrCreateCCLayerImpl(newLayers, oldLayers, layer);
    7887
    7988    ccLayerImpl->clearChildList();
    8089    const Vector<RefPtr<LayerChromium> >& children = layer->children();
    8190    for (size_t i = 0; i < children.size(); ++i)
    82         ccLayerImpl->addChild(synchronizeTreeRecursive(map, children[i].get()));
     91        ccLayerImpl->addChild(synchronizeTreeRecursive(newLayers, oldLayers, children[i].get()));
    8392
    84     ccLayerImpl->setMaskLayer(synchronizeTreeRecursive(map, layer->maskLayer()));
    85     ccLayerImpl->setReplicaLayer(synchronizeTreeRecursive(map, layer->replicaLayer()));
     93    ccLayerImpl->setMaskLayer(synchronizeTreeRecursive(newLayers, oldLayers, layer->maskLayer()));
     94    ccLayerImpl->setReplicaLayer(synchronizeTreeRecursive(newLayers, oldLayers, layer->replicaLayer()));
    8695
    8796    layer->pushPropertiesTo(ccLayerImpl.get());
     
    8998}
    9099
     100void TreeSynchronizer::updateScrollbarLayerPointersRecursive(const RawPtrCCLayerImplMap& newLayers, LayerChromium* layer)
     101{
     102    const Vector<RefPtr<LayerChromium> >& children = layer->children();
     103    for (size_t i = 0; i < children.size(); ++i)
     104        updateScrollbarLayerPointersRecursive(newLayers, children[i].get());
     105
     106    ScrollbarLayerChromium* scrollbarLayer = layer->toScrollbarLayerChromium();
     107    if (!scrollbarLayer)
     108        return;
     109
     110    CCScrollbarLayerImpl* ccScrollbarLayerImpl = static_cast<CCScrollbarLayerImpl*>(newLayers.get(scrollbarLayer->id()));
     111    ASSERT(ccScrollbarLayerImpl);
     112    ccScrollbarLayerImpl->setScrollLayer(newLayers.get(scrollbarLayer->scrollLayerId()));
     113}
     114
    91115} // namespace WebCore
  • trunk/Source/WebCore/platform/graphics/chromium/TreeSynchronizer.h

    r108886 r110338  
    4747    TreeSynchronizer(); // Not instantiable.
    4848
    49     typedef HashMap<int, OwnPtr<CCLayerImpl> > CCLayerImplMap;
     49    typedef HashMap<int, OwnPtr<CCLayerImpl> > OwnPtrCCLayerImplMap;
     50    typedef HashMap<int, CCLayerImpl*> RawPtrCCLayerImplMap;
    5051
    5152    // Declared as static member functions so they can access functions on LayerChromium as a friend class.
    52     static PassOwnPtr<CCLayerImpl> reuseOrCreateCCLayerImpl(CCLayerImplMap&, LayerChromium*);
    53     static void collectExistingCCLayerImplRecursive(CCLayerImplMap&, PassOwnPtr<CCLayerImpl>);
    54     static PassOwnPtr<CCLayerImpl> synchronizeTreeRecursive(CCLayerImplMap&, LayerChromium*);
     53    static PassOwnPtr<CCLayerImpl> reuseOrCreateCCLayerImpl(RawPtrCCLayerImplMap& newLayers, OwnPtrCCLayerImplMap& oldLayers, LayerChromium*);
     54    static void collectExistingCCLayerImplRecursive(OwnPtrCCLayerImplMap& oldLayers, PassOwnPtr<CCLayerImpl>);
     55    static PassOwnPtr<CCLayerImpl> synchronizeTreeRecursive(RawPtrCCLayerImplMap& newLayers, OwnPtrCCLayerImplMap& oldLayers, LayerChromium*);
     56    static void updateScrollbarLayerPointersRecursive(const RawPtrCCLayerImplMap& newLayers, LayerChromium*);
    5557};
    5658
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp

    r110299 r110338  
    543543
    544544    FloatSize viewBounds = m_viewportSize;
     545    if (CCLayerImpl* clipLayer = m_scrollLayerImpl->parent()) {
     546        if (clipLayer->masksToBounds())
     547            viewBounds = clipLayer->bounds();
     548    }
    545549    viewBounds.scale(1 / m_pageScaleDelta);
    546550
  • trunk/Source/WebKit/chromium/ChangeLog

    r110325 r110338  
     12012-03-09  Tien-Ren Chen  <trchen@chromium.org>
     2
     3        [chromium] ScrollbarLayerChromium/CCScrollbarLayerImpl for CC-side scrollbar painting
     4        https://bugs.webkit.org/show_bug.cgi?id=78872
     5
     6        Reviewed by James Robinson.
     7
     8        * WebKit.gypi:
     9        * tests/ScrollbarLayerChromiumTest.cpp: Added.
     10        (WebCore):
     11        (MockScrollbar):
     12        (WebCore::MockScrollbar::x):
     13        (WebCore::MockScrollbar::y):
     14        (WebCore::MockScrollbar::width):
     15        (WebCore::MockScrollbar::height):
     16        (WebCore::MockScrollbar::size):
     17        (WebCore::MockScrollbar::location):
     18        (WebCore::MockScrollbar::parent):
     19        (WebCore::MockScrollbar::root):
     20        (WebCore::MockScrollbar::setFrameRect):
     21        (WebCore::MockScrollbar::frameRect):
     22        (WebCore::MockScrollbar::invalidate):
     23        (WebCore::MockScrollbar::invalidateRect):
     24        (WebCore::MockScrollbar::scrollbarOverlayStyle):
     25        (WebCore::MockScrollbar::getTickmarks):
     26        (WebCore::MockScrollbar::isScrollableAreaActive):
     27        (WebCore::MockScrollbar::isScrollViewScrollbar):
     28        (WebCore::MockScrollbar::convertFromContainingWindow):
     29        (WebCore::MockScrollbar::isCustomScrollbar):
     30        (WebCore::MockScrollbar::orientation):
     31        (WebCore::MockScrollbar::value):
     32        (WebCore::MockScrollbar::currentPos):
     33        (WebCore::MockScrollbar::visibleSize):
     34        (WebCore::MockScrollbar::totalSize):
     35        (WebCore::MockScrollbar::maximum):
     36        (WebCore::MockScrollbar::controlSize):
     37        (WebCore::MockScrollbar::lineStep):
     38        (WebCore::MockScrollbar::pageStep):
     39        (WebCore::MockScrollbar::pressedPart):
     40        (WebCore::MockScrollbar::hoveredPart):
     41        (WebCore::MockScrollbar::styleChanged):
     42        (WebCore::MockScrollbar::enabled):
     43        (WebCore::MockScrollbar::setEnabled):
     44        (WebCore::MockScrollbar::MockScrollbar):
     45        (WebCore::MockScrollbar::~MockScrollbar):
     46        (WebCore::TEST):
     47
    1482012-03-08  James Robinson  <jamesr@chromium.org>
    249
  • trunk/Source/WebKit/chromium/WebKit.gypi

    r110056 r110338  
    115115            'tests/PODRedBlackTreeTest.cpp',
    116116            'tests/RenderTableCellTest.cpp',
     117            'tests/ScrollbarLayerChromiumTest.cpp',
    117118            'tests/TextureManagerTest.cpp',
    118119            'tests/TiledLayerChromiumTest.cpp',
Note: See TracChangeset for help on using the changeset viewer.