Changeset 94353 in webkit


Ignore:
Timestamp:
Sep 1, 2011 3:40:08 PM (13 years ago)
Author:
nduca@chromium.org
Message:

[chromium] Introduce CCSingleThreadProxy in order to move LayerRenderer to CCLayerTreeHostImpl
https://bugs.webkit.org/show_bug.cgi?id=66807

Reviewed by James Robinson.

Source/WebCore:

  • WebCore.gypi:
  • platform/graphics/chromium/ContentLayerChromium.cpp:

(WebCore::ContentLayerChromium::createTextureUpdater):

  • platform/graphics/chromium/ImageLayerChromium.cpp:

(WebCore::ImageLayerChromium::createTextureUpdater):

  • platform/graphics/chromium/LayerChromium.cpp:

(WebCore::LayerChromium::setLayerRendererRecursive):

  • platform/graphics/chromium/LayerChromium.h:
  • platform/graphics/chromium/LayerRendererChromium.cpp:

(WebCore::LayerRendererChromium::create):
(WebCore::LayerRendererChromium::LayerRendererChromium):
(WebCore::LayerRendererChromium::initialize):
(WebCore::LayerRendererChromium::close):
(WebCore::LayerRendererChromium::updateLayers):
(WebCore::LayerRendererChromium::drawLayers):
(WebCore::LayerRendererChromium::drawLayersInternal):
(WebCore::LayerRendererChromium::getOffscreenLayerTexture):
(WebCore::LayerRendererChromium::isContextLost):

  • platform/graphics/chromium/LayerRendererChromium.h:

(WebCore::LayerRendererChromium::capabilities):
(WebCore::LayerRendererChromium::rootLayerImpl):
(WebCore::LayerRendererChromium::contextSupportsMapSub):
(WebCore::LayerRendererChromium::viewportSize):

  • platform/graphics/chromium/LayerTextureUpdaterCanvas.h:
  • platform/graphics/chromium/TiledLayerChromium.cpp:

(WebCore::TiledLayerChromium::setLayerTreeHost):

  • platform/graphics/chromium/VideoLayerChromium.cpp:

(WebCore::VideoLayerChromium::reserveTextures):

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

(WebCore::CCCanvasLayerImpl::draw):

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

(WebCore::CCLayerTreeHost::CCLayerTreeHost):
(WebCore::CCLayerTreeHost::initialize):
(WebCore::CCLayerTreeHost::~CCLayerTreeHost):
(WebCore::CCLayerTreeHost::animateAndLayout):
(WebCore::CCLayerTreeHost::preCommit):
(WebCore::CCLayerTreeHost::commitTo):
(WebCore::CCLayerTreeHost::createCompositorThread):
(WebCore::CCLayerTreeHost::createLayerTreeHostContext3D):
(WebCore::CCLayerTreeHost::createLayerTreeHostImpl):
(WebCore::CCLayerTreeHost::didRecreateGraphicsContext):
(WebCore::CCLayerTreeHost::scheduleComposite):
(WebCore::CCLayerTreeHost::context):
(WebCore::CCLayerTreeHost::compositeAndReadback):
(WebCore::CCLayerTreeHost::finishAllRendering):
(WebCore::CCLayerTreeHost::layerRendererCapabilities):
(WebCore::CCLayerTreeHost::setRootLayer):
(WebCore::CCLayerTreeHost::skiaContext):
(WebCore::CCLayerTreeHost::setViewport):
(WebCore::CCLayerTreeHost::setVisible):
(WebCore::CCLayerTreeHost::loseCompositorContext):
(WebCore::CCLayerTreeHost::contentsTextureManager):
(WebCore::CCLayerTreeHost::composite):

  • platform/graphics/chromium/cc/CCLayerTreeHost.h:

(WebCore::CCSettings::CCSettings):
(WebCore::LayerRendererCapabilities::LayerRendererCapabilities):

  • platform/graphics/chromium/cc/CCLayerTreeHostCommitter.h: Removed.
  • platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:

(WebCore::CCLayerTreeHostImpl::create):
(WebCore::CCLayerTreeHostImpl::CCLayerTreeHostImpl):
(WebCore::CCLayerTreeHostImpl::~CCLayerTreeHostImpl):
(WebCore::CCLayerTreeHostImpl::commitComplete):
(WebCore::CCLayerTreeHostImpl::context):
(WebCore::CCLayerTreeHostImpl::drawLayers):
(WebCore::CCLayerTreeHostImpl::finishAllRendering):
(WebCore::CCLayerTreeHostImpl::isContextLost):
(WebCore::CCLayerTreeHostImpl::layerRendererCapabilities):
(WebCore::CCLayerTreeHostImpl::present):
(WebCore::CCLayerTreeHostImpl::readback):
(WebCore::CCLayerTreeHostImpl::setRootLayer):
(WebCore::CCLayerTreeHostImpl::setVisible):
(WebCore::CCLayerTreeHostImpl::initializeLayerRenderer):
(WebCore::CCLayerTreeHostImpl::updateLayers):
(WebCore::CCLayerTreeHostImpl::setViewport):

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

(WebCore::CCLayerTreeHostImpl::layerRenderer):
(WebCore::CCLayerTreeHostImpl::rootLayer):
(WebCore::CCLayerTreeHostImpl::viewportSize):

  • platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.cpp: Removed.
  • platform/graphics/chromium/cc/CCMainThreadTask.h:

(WebCore::MainThreadTask4::create):
(WebCore::MainThreadTask4::MainThreadTask4):
(WebCore::MainThreadTask4::performTask):
(WebCore::MainThreadTask5::create):
(WebCore::MainThreadTask5::MainThreadTask5):
(WebCore::MainThreadTask5::performTask):
(WebCore::createMainThreadTask):

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

(WebCore::CCPluginLayerImpl::draw):

  • platform/graphics/chromium/cc/CCProxy.cpp: Renamed from Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommitter.cpp.

(WebCore::CCProxy::isMainThread):
(WebCore::CCProxy::isImplThread):
(WebCore::CCProxy::setImplThread):

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

(WebCore::CCProxy::~CCProxy):
(WebCore::CCProxy::CCProxy):

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

(WebCore::ScopedSetImplThread::ScopedSetImplThread):
(WebCore::ScopedSetImplThread::~ScopedSetImplThread):
(WebCore::CCSingleThreadProxy::create):
(WebCore::CCSingleThreadProxy::CCSingleThreadProxy):
(WebCore::CCSingleThreadProxy::start):
(WebCore::CCSingleThreadProxy::~CCSingleThreadProxy):
(WebCore::CCSingleThreadProxy::compositeAndReadback):
(WebCore::CCSingleThreadProxy::context):
(WebCore::CCSingleThreadProxy::finishAllRendering):
(WebCore::CCSingleThreadProxy::isStarted):
(WebCore::CCSingleThreadProxy::initializeLayerRenderer):
(WebCore::CCSingleThreadProxy::layerRendererCapabilities):
(WebCore::CCSingleThreadProxy::loseCompositorContext):
(WebCore::CCSingleThreadProxy::setNeedsCommitAndRedraw):
(WebCore::CCSingleThreadProxy::setNeedsRedraw):
(WebCore::CCSingleThreadProxy::stop):
(WebCore::CCSingleThreadProxy::skiaContext):
(WebCore::CCSingleThreadProxy::contentsTextureManager):
(WebCore::CCSingleThreadProxy::compositeImmediately):
(WebCore::CCSingleThreadProxy::compositeIfNeeded):
(WebCore::CCSingleThreadProxy::doComposite):

  • platform/graphics/chromium/cc/CCSingleThreadProxy.h: Copied from Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.h.
  • platform/graphics/chromium/cc/CCThreadProxy.cpp: Added.

(WebCore::CCThreadProxy::create):
(WebCore::CCThreadProxy::CCThreadProxy):
(WebCore::CCThreadProxy::~CCThreadProxy):
(WebCore::CCThreadProxy::compositeAndReadback):
(WebCore::CCThreadProxy::context):
(WebCore::CCThreadProxy::finishAllRendering):
(WebCore::CCThreadProxy::isStarted):
(WebCore::CCThreadProxy::initializeLayerRenderer):
(WebCore::CCThreadProxy::layerRendererCapabilities):
(WebCore::CCThreadProxy::loseCompositorContext):
(WebCore::CCThreadProxy::setNeedsCommitAndRedraw):
(WebCore::CCThreadProxy::setNeedsRedraw):
(WebCore::CCThreadProxy::start):
(WebCore::CCThreadProxy::stop):
(WebCore::CCThreadProxy::skiaContext):
(WebCore::CCThreadProxy::contentsTextureManager):
(WebCore::CCThreadProxy::beginFrameAndCommitOnCCThread):
(WebCore::CCThreadProxy::beginFrameAndCommit):
(WebCore::CCThreadProxy::commitOnCCThread):
(WebCore::CCThreadProxy::drawLayersOnCCThread):
(WebCore::CCThreadProxy::setNeedsCommitAndRedrawOnCCThread):
(WebCore::CCThreadProxy::setNeedsRedrawOnCCThread):
(WebCore::CCThreadProxy::initializeImplOnCCThread):
(WebCore::CCThreadProxy::initializeLayerRendererOnCCThread):
(WebCore::CCThreadProxy::layerTreeHostClosedOnCCThread):

  • platform/graphics/chromium/cc/CCThreadProxy.h: Renamed from Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.h.
  • platform/graphics/chromium/cc/CCThreadTask.h:

(WebCore::CCThreadTask5::create):
(WebCore::CCThreadTask5::CCThreadTask5):
(WebCore::CCThreadTask5::performTask):
(WebCore::createCCThreadTask):

  • platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
  • platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:

(WebCore::CCVideoLayerImpl::draw):

Source/WebKit/chromium:

  • src/WebViewImpl.cpp:

(WebKit::WebViewImpl::composite):
(WebKit::WebViewImpl::setRootGraphicsLayer):
(WebKit::WebViewImpl::setIsAcceleratedCompositingActive):
(WebKit::WebViewImpl::didRecreateGraphicsContext):

  • tests/CCThreadTaskTest.cpp:

(WebCore::TEST):

Location:
trunk/Source
Files:
3 added
2 deleted
25 edited
1 copied
2 moved

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r94352 r94353  
     12011-08-29  Nat Duca  <nduca@chromium.org>
     2
     3        [chromium] Introduce CCSingleThreadProxy in order to move LayerRenderer to CCLayerTreeHostImpl
     4        https://bugs.webkit.org/show_bug.cgi?id=66807
     5
     6        Reviewed by James Robinson.
     7
     8        * WebCore.gypi:
     9        * platform/graphics/chromium/ContentLayerChromium.cpp:
     10        (WebCore::ContentLayerChromium::createTextureUpdater):
     11        * platform/graphics/chromium/ImageLayerChromium.cpp:
     12        (WebCore::ImageLayerChromium::createTextureUpdater):
     13        * platform/graphics/chromium/LayerChromium.cpp:
     14        (WebCore::LayerChromium::setLayerRendererRecursive):
     15        * platform/graphics/chromium/LayerChromium.h:
     16        * platform/graphics/chromium/LayerRendererChromium.cpp:
     17        (WebCore::LayerRendererChromium::create):
     18        (WebCore::LayerRendererChromium::LayerRendererChromium):
     19        (WebCore::LayerRendererChromium::initialize):
     20        (WebCore::LayerRendererChromium::close):
     21        (WebCore::LayerRendererChromium::updateLayers):
     22        (WebCore::LayerRendererChromium::drawLayers):
     23        (WebCore::LayerRendererChromium::drawLayersInternal):
     24        (WebCore::LayerRendererChromium::getOffscreenLayerTexture):
     25        (WebCore::LayerRendererChromium::isContextLost):
     26        * platform/graphics/chromium/LayerRendererChromium.h:
     27        (WebCore::LayerRendererChromium::capabilities):
     28        (WebCore::LayerRendererChromium::rootLayerImpl):
     29        (WebCore::LayerRendererChromium::contextSupportsMapSub):
     30        (WebCore::LayerRendererChromium::viewportSize):
     31        * platform/graphics/chromium/LayerTextureUpdaterCanvas.h:
     32        * platform/graphics/chromium/TiledLayerChromium.cpp:
     33        (WebCore::TiledLayerChromium::setLayerTreeHost):
     34        * platform/graphics/chromium/VideoLayerChromium.cpp:
     35        (WebCore::VideoLayerChromium::reserveTextures):
     36        * platform/graphics/chromium/cc/CCCanvasLayerImpl.cpp:
     37        (WebCore::CCCanvasLayerImpl::draw):
     38        * platform/graphics/chromium/cc/CCLayerTreeHost.cpp:
     39        (WebCore::CCLayerTreeHost::CCLayerTreeHost):
     40        (WebCore::CCLayerTreeHost::initialize):
     41        (WebCore::CCLayerTreeHost::~CCLayerTreeHost):
     42        (WebCore::CCLayerTreeHost::animateAndLayout):
     43        (WebCore::CCLayerTreeHost::preCommit):
     44        (WebCore::CCLayerTreeHost::commitTo):
     45        (WebCore::CCLayerTreeHost::createCompositorThread):
     46        (WebCore::CCLayerTreeHost::createLayerTreeHostContext3D):
     47        (WebCore::CCLayerTreeHost::createLayerTreeHostImpl):
     48        (WebCore::CCLayerTreeHost::didRecreateGraphicsContext):
     49        (WebCore::CCLayerTreeHost::scheduleComposite):
     50        (WebCore::CCLayerTreeHost::context):
     51        (WebCore::CCLayerTreeHost::compositeAndReadback):
     52        (WebCore::CCLayerTreeHost::finishAllRendering):
     53        (WebCore::CCLayerTreeHost::layerRendererCapabilities):
     54        (WebCore::CCLayerTreeHost::setRootLayer):
     55        (WebCore::CCLayerTreeHost::skiaContext):
     56        (WebCore::CCLayerTreeHost::setViewport):
     57        (WebCore::CCLayerTreeHost::setVisible):
     58        (WebCore::CCLayerTreeHost::loseCompositorContext):
     59        (WebCore::CCLayerTreeHost::contentsTextureManager):
     60        (WebCore::CCLayerTreeHost::composite):
     61        * platform/graphics/chromium/cc/CCLayerTreeHost.h:
     62        (WebCore::CCSettings::CCSettings):
     63        (WebCore::LayerRendererCapabilities::LayerRendererCapabilities):
     64        * platform/graphics/chromium/cc/CCLayerTreeHostCommitter.h: Removed.
     65        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:
     66        (WebCore::CCLayerTreeHostImpl::create):
     67        (WebCore::CCLayerTreeHostImpl::CCLayerTreeHostImpl):
     68        (WebCore::CCLayerTreeHostImpl::~CCLayerTreeHostImpl):
     69        (WebCore::CCLayerTreeHostImpl::commitComplete):
     70        (WebCore::CCLayerTreeHostImpl::context):
     71        (WebCore::CCLayerTreeHostImpl::drawLayers):
     72        (WebCore::CCLayerTreeHostImpl::finishAllRendering):
     73        (WebCore::CCLayerTreeHostImpl::isContextLost):
     74        (WebCore::CCLayerTreeHostImpl::layerRendererCapabilities):
     75        (WebCore::CCLayerTreeHostImpl::present):
     76        (WebCore::CCLayerTreeHostImpl::readback):
     77        (WebCore::CCLayerTreeHostImpl::setRootLayer):
     78        (WebCore::CCLayerTreeHostImpl::setVisible):
     79        (WebCore::CCLayerTreeHostImpl::initializeLayerRenderer):
     80        (WebCore::CCLayerTreeHostImpl::updateLayers):
     81        (WebCore::CCLayerTreeHostImpl::setViewport):
     82        * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:
     83        (WebCore::CCLayerTreeHostImpl::layerRenderer):
     84        (WebCore::CCLayerTreeHostImpl::rootLayer):
     85        (WebCore::CCLayerTreeHostImpl::viewportSize):
     86        * platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.cpp: Removed.
     87        * platform/graphics/chromium/cc/CCMainThreadTask.h:
     88        (WebCore::MainThreadTask4::create):
     89        (WebCore::MainThreadTask4::MainThreadTask4):
     90        (WebCore::MainThreadTask4::performTask):
     91        (WebCore::MainThreadTask5::create):
     92        (WebCore::MainThreadTask5::MainThreadTask5):
     93        (WebCore::MainThreadTask5::performTask):
     94        (WebCore::createMainThreadTask):
     95        * platform/graphics/chromium/cc/CCPluginLayerImpl.cpp:
     96        (WebCore::CCPluginLayerImpl::draw):
     97        * platform/graphics/chromium/cc/CCProxy.cpp: Renamed from Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommitter.cpp.
     98        (WebCore::CCProxy::isMainThread):
     99        (WebCore::CCProxy::isImplThread):
     100        (WebCore::CCProxy::setImplThread):
     101        * platform/graphics/chromium/cc/CCProxy.h: Added.
     102        (WebCore::CCProxy::~CCProxy):
     103        (WebCore::CCProxy::CCProxy):
     104        * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp: Added.
     105        (WebCore::ScopedSetImplThread::ScopedSetImplThread):
     106        (WebCore::ScopedSetImplThread::~ScopedSetImplThread):
     107        (WebCore::CCSingleThreadProxy::create):
     108        (WebCore::CCSingleThreadProxy::CCSingleThreadProxy):
     109        (WebCore::CCSingleThreadProxy::start):
     110        (WebCore::CCSingleThreadProxy::~CCSingleThreadProxy):
     111        (WebCore::CCSingleThreadProxy::compositeAndReadback):
     112        (WebCore::CCSingleThreadProxy::context):
     113        (WebCore::CCSingleThreadProxy::finishAllRendering):
     114        (WebCore::CCSingleThreadProxy::isStarted):
     115        (WebCore::CCSingleThreadProxy::initializeLayerRenderer):
     116        (WebCore::CCSingleThreadProxy::layerRendererCapabilities):
     117        (WebCore::CCSingleThreadProxy::loseCompositorContext):
     118        (WebCore::CCSingleThreadProxy::setNeedsCommitAndRedraw):
     119        (WebCore::CCSingleThreadProxy::setNeedsRedraw):
     120        (WebCore::CCSingleThreadProxy::stop):
     121        (WebCore::CCSingleThreadProxy::skiaContext):
     122        (WebCore::CCSingleThreadProxy::contentsTextureManager):
     123        (WebCore::CCSingleThreadProxy::compositeImmediately):
     124        (WebCore::CCSingleThreadProxy::compositeIfNeeded):
     125        (WebCore::CCSingleThreadProxy::doComposite):
     126        * platform/graphics/chromium/cc/CCSingleThreadProxy.h: Copied from Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.h.
     127        * platform/graphics/chromium/cc/CCThreadProxy.cpp: Added.
     128        (WebCore::CCThreadProxy::create):
     129        (WebCore::CCThreadProxy::CCThreadProxy):
     130        (WebCore::CCThreadProxy::~CCThreadProxy):
     131        (WebCore::CCThreadProxy::compositeAndReadback):
     132        (WebCore::CCThreadProxy::context):
     133        (WebCore::CCThreadProxy::finishAllRendering):
     134        (WebCore::CCThreadProxy::isStarted):
     135        (WebCore::CCThreadProxy::initializeLayerRenderer):
     136        (WebCore::CCThreadProxy::layerRendererCapabilities):
     137        (WebCore::CCThreadProxy::loseCompositorContext):
     138        (WebCore::CCThreadProxy::setNeedsCommitAndRedraw):
     139        (WebCore::CCThreadProxy::setNeedsRedraw):
     140        (WebCore::CCThreadProxy::start):
     141        (WebCore::CCThreadProxy::stop):
     142        (WebCore::CCThreadProxy::skiaContext):
     143        (WebCore::CCThreadProxy::contentsTextureManager):
     144        (WebCore::CCThreadProxy::beginFrameAndCommitOnCCThread):
     145        (WebCore::CCThreadProxy::beginFrameAndCommit):
     146        (WebCore::CCThreadProxy::commitOnCCThread):
     147        (WebCore::CCThreadProxy::drawLayersOnCCThread):
     148        (WebCore::CCThreadProxy::setNeedsCommitAndRedrawOnCCThread):
     149        (WebCore::CCThreadProxy::setNeedsRedrawOnCCThread):
     150        (WebCore::CCThreadProxy::initializeImplOnCCThread):
     151        (WebCore::CCThreadProxy::initializeLayerRendererOnCCThread):
     152        (WebCore::CCThreadProxy::layerTreeHostClosedOnCCThread):
     153        * platform/graphics/chromium/cc/CCThreadProxy.h: Renamed from Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.h.
     154        * platform/graphics/chromium/cc/CCThreadTask.h:
     155        (WebCore::CCThreadTask5::create):
     156        (WebCore::CCThreadTask5::CCThreadTask5):
     157        (WebCore::CCThreadTask5::performTask):
     158        (WebCore::createCCThreadTask):
     159        * platform/graphics/chromium/cc/CCTiledLayerImpl.cpp:
     160        * platform/graphics/chromium/cc/CCVideoLayerImpl.cpp:
     161        (WebCore::CCVideoLayerImpl::draw):
     162
    11632011-09-01  Dan Bernstein  <mitz@apple.com>
    2164
  • trunk/Source/WebCore/WebCore.gypi

    r94299 r94353  
    35383538            'platform/graphics/chromium/cc/CCLayerTreeHost.cpp',
    35393539            'platform/graphics/chromium/cc/CCLayerTreeHost.h',
    3540             'platform/graphics/chromium/cc/CCLayerTreeHostCommitter.cpp',
    3541             'platform/graphics/chromium/cc/CCLayerTreeHostCommitter.h',
    35423540            'platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp',
    35433541            'platform/graphics/chromium/cc/CCLayerTreeHostImpl.h',
    3544             'platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.cpp',
    3545             'platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.h',
    35463542            'platform/graphics/chromium/cc/CCMainThread.cpp',
    35473543            'platform/graphics/chromium/cc/CCMainThread.h',
     
    35493545            'platform/graphics/chromium/cc/CCPluginLayerImpl.cpp',
    35503546            'platform/graphics/chromium/cc/CCPluginLayerImpl.h',
     3547            'platform/graphics/chromium/cc/CCProxy.h',
     3548            'platform/graphics/chromium/cc/CCProxy.cpp',
     3549            'platform/graphics/chromium/cc/CCSingleThreadProxy.h',
     3550            'platform/graphics/chromium/cc/CCSingleThreadProxy.cpp',
    35513551            'platform/graphics/chromium/cc/CCRenderSurface.cpp',
    35523552            'platform/graphics/chromium/cc/CCRenderSurface.h',
    35533553            'platform/graphics/chromium/cc/CCThread.h',
     3554            'platform/graphics/chromium/cc/CCThreadProxy.h',
     3555            'platform/graphics/chromium/cc/CCThreadProxy.cpp',
    35543556            'platform/graphics/chromium/cc/CCThreadTask.h',
    35553557            'platform/graphics/chromium/cc/CCTiledLayerImpl.cpp',
  • trunk/Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp

    r94329 r94353  
    121121void ContentLayerChromium::createTextureUpdater(const CCLayerTreeHost* host)
    122122{
    123 #if !USE(THREADED_COMPOSITING)
    124123#if USE(SKIA)
     124    // Note that host->skiaContext() will crash if called while in threaded
     125    // mode. This thus depends on CCLayerTreeHost::initialize turning off
     126    // acceleratePainting to prevent this from crashing.
    125127    if (host->settings().acceleratePainting) {
    126128        m_textureUpdater = LayerTextureUpdaterSkPicture::create(ContentLayerPainter::create(m_owner));
     
    128130    }
    129131#endif // SKIA
    130 #endif // !THREADED_COMPOSITING
    131132
    132     m_textureUpdater = LayerTextureUpdaterBitmap::create(ContentLayerPainter::create(m_owner), host->contextSupportsMapSub());
     133    m_textureUpdater = LayerTextureUpdaterBitmap::create(ContentLayerPainter::create(m_owner), host->layerRendererCapabilities().usingMapSub);
    133134}
    134135
  • trunk/Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp

    r93615 r94353  
    182182void ImageLayerChromium::createTextureUpdater(const CCLayerTreeHost* host)
    183183{
    184     m_textureUpdater = ImageLayerTextureUpdater::create(host->contextSupportsMapSub());
     184    m_textureUpdater = ImageLayerTextureUpdater::create(host->layerRendererCapabilities().usingMapSub);
    185185}
    186186
  • trunk/Source/WebCore/platform/graphics/chromium/LayerChromium.cpp

    r93679 r94353  
    9797}
    9898
     99void LayerChromium::setLayerRendererRecursive(LayerRendererChromium* renderer)
     100{
     101    for (size_t i = 0; i < children().size(); ++i)
     102        children()[i]->setLayerRendererRecursive(renderer);
     103
     104    if (maskLayer())
     105        maskLayer()->setLayerRendererRecursive(renderer);
     106    if (replicaLayer())
     107        replicaLayer()->setLayerRendererRecursive(renderer);
     108
     109    setLayerRenderer(renderer);
     110}
     111
    99112void LayerChromium::setLayerRenderer(LayerRendererChromium* renderer)
    100113{
  • trunk/Source/WebCore/platform/graphics/chromium/LayerChromium.h

    r93679 r94353  
    154154    bool isRootLayer() const { return m_isRootLayer; }
    155155
     156    void setLayerRendererRecursive(LayerRendererChromium*);
     157
    156158    // Derived types must override this method if they need to react to a change
    157159    // in the LayerRendererChromium.
  • trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp

    r94329 r94353  
    4646#include "NonCompositedContentHost.h"
    4747#include "NotImplemented.h"
     48#include "PlatformColor.h"
    4849#include "RenderSurfaceChromium.h"
    4950#include "TextStream.h"
     
    452453#endif
    453454
    454 PassRefPtr<LayerRendererChromium> LayerRendererChromium::create(CCLayerTreeHost* owner, PassRefPtr<GraphicsContext3D> context)
     455PassRefPtr<LayerRendererChromium> LayerRendererChromium::create(CCLayerTreeHost* owner, CCLayerTreeHostImpl* ownerImpl, PassRefPtr<GraphicsContext3D> context)
    455456{
    456457#if USE(SKIA)
     
    458459        return 0;
    459460#endif
    460     RefPtr<LayerRendererChromium> layerRenderer(adoptRef(new LayerRendererChromium(owner, context)));
     461    RefPtr<LayerRendererChromium> layerRenderer(adoptRef(new LayerRendererChromium(owner, ownerImpl, context)));
    461462    if (!layerRenderer->initialize())
    462463        return 0;
     
    466467
    467468LayerRendererChromium::LayerRendererChromium(CCLayerTreeHost* owner,
     469                                             CCLayerTreeHostImpl* ownerImpl,
    468470                                             PassRefPtr<GraphicsContext3D> context)
    469471    : m_owner(owner)
     472    , m_ownerImpl(ownerImpl)
    470473    , m_currentRenderSurface(0)
    471474    , m_offscreenFramebufferId(0)
     
    478481{
    479482    m_context->makeContextCurrent();
     483    if (settings().acceleratePainting) {
     484        m_capabilities.usingAcceleratedPainting = true;
     485    }
    480486
    481487    WebCore::Extensions3D* extensions = m_context->getExtensions();
    482     m_contextSupportsMapSub = extensions->supports("GL_CHROMIUM_map_sub");
    483     if (m_contextSupportsMapSub)
     488    m_capabilities.usingMapSub = extensions->supports("GL_CHROMIUM_map_sub");
     489    if (m_capabilities.usingMapSub)
    484490        extensions->ensureEnabled("GL_CHROMIUM_map_sub");
     491
     492    GLC(m_context.get(), m_context->getIntegerv(GraphicsContext3D::MAX_TEXTURE_SIZE, &m_capabilities.maxTextureSize));
     493    m_capabilities.bestTextureFormat = PlatformColor::bestTextureFormat(m_context.get());
    485494
    486495    if (!initializeSharedObjects())
     
    507516}
    508517
    509 void LayerRendererChromium::clearRootCCLayerImpl()
    510 {
    511     if (m_rootCCLayerImpl)
    512         clearRenderSurfacesOnCCLayerImplRecursive(m_rootCCLayerImpl.get());
    513     m_rootCCLayerImpl.clear();
     518void LayerRendererChromium::close()
     519{
     520    if (rootLayerImpl())
     521        clearRenderSurfacesOnCCLayerImplRecursive(rootLayerImpl());
    514522}
    515523
     
    552560void LayerRendererChromium::updateLayers()
    553561{
     562    if (!rootLayer())
     563        return;
     564
    554565    if (m_owner->viewportSize().isEmpty())
    555566        return;
     
    560571    m_headsUpDisplay->onFrameBegin(currentTime());
    561572
    562     // Recheck that we still have a root layer. This may become null if
    563     // compositing gets turned off during a paint operation.
    564     if (!rootLayer()) {
    565         m_rootCCLayerImpl.clear();
    566         return;
    567     }
    568 
    569573    updateLayers(rootLayer()->platformLayer());
    570574}
     
    574578    if (!rootLayer())
    575579        return;
    576 
    577     {
    578         TRACE_EVENT("LayerRendererChromium::synchronizeTrees", this, 0);
    579         m_rootCCLayerImpl = TreeSynchronizer::synchronizeTrees(rootLayer()->platformLayer(), m_rootCCLayerImpl.get());
    580     }
    581 
    582580
    583581    m_renderSurfaceTextureManager->setMemoryLimitBytes(textureMemoryHighLimitBytes - m_contentsTextureManager->currentMemoryUseBytes());
     
    617615    {
    618616        TRACE_EVENT("LayerRendererChromium::updateLayers::calcDrawEtc", this, 0);
    619         calculateDrawTransformsAndVisibility<LayerChromium, RenderSurfaceChromium, void*>(rootLayer, rootLayer, identityMatrix, identityMatrix, renderSurfaceLayerList, rootRenderSurface->layerList(), 0, m_maxTextureSize);
     617        calculateDrawTransformsAndVisibility<LayerChromium, RenderSurfaceChromium, void*>(rootLayer, rootLayer, identityMatrix, identityMatrix, renderSurfaceLayerList, rootRenderSurface->layerList(), 0, m_capabilities.maxTextureSize);
    620618    }
    621619
     
    725723
    726724    TRACE_EVENT("LayerRendererChromium::drawLayers", this, 0);
    727     CCLayerImpl* rootDrawLayer = m_rootCCLayerImpl.get();
     725    CCLayerImpl* rootDrawLayer = rootLayerImpl();
    728726    makeContextCurrent();
    729727
     
    743741    {
    744742        TRACE_EVENT("LayerRendererChromium::drawLayersInternal::calcDrawEtc", this, 0);
    745         calculateDrawTransformsAndVisibility<CCLayerImpl, CCRenderSurface, CCLayerSorter>(rootDrawLayer, rootDrawLayer, identityMatrix, identityMatrix, renderSurfaceLayerList, m_defaultRenderSurface->layerList(), &m_layerSorter, m_maxTextureSize);
     743        calculateDrawTransformsAndVisibility<CCLayerImpl, CCRenderSurface, CCLayerSorter>(rootDrawLayer, rootDrawLayer, identityMatrix, identityMatrix, renderSurfaceLayerList, m_defaultRenderSurface->layerList(), &m_layerSorter, m_capabilities.maxTextureSize);
    746744    }
    747745
     
    831829
    832830    m_headsUpDisplay->onPresent();
    833 }
    834 
    835 void LayerRendererChromium::setLayerRendererRecursive(LayerChromium* layer)
    836 {
    837     const Vector<RefPtr<LayerChromium> >& children = layer->children();
    838     for (size_t i = 0; i < children.size(); ++i)
    839         setLayerRendererRecursive(children[i].get());
    840 
    841     if (layer->maskLayer())
    842         setLayerRendererRecursive(layer->maskLayer());
    843     if (layer->replicaLayer())
    844         setLayerRendererRecursive(layer->replicaLayer());
    845 
    846     layer->setLayerRenderer(this);
    847831}
    848832
     
    941925ManagedTexture* LayerRendererChromium::getOffscreenLayerTexture()
    942926{
    943     return settings().compositeOffscreen && m_rootCCLayerImpl ? m_rootCCLayerImpl->renderSurface()->contentsTexture() : 0;
     927    return settings().compositeOffscreen && rootLayerImpl() ? rootLayerImpl()->renderSurface()->contentsTexture() : 0;
    944928}
    945929
     
    10861070    makeContextCurrent();
    10871071
    1088     // Get the max texture size supported by the system.
    1089     m_maxTextureSize = 0;
    1090     GLC(m_context.get(), m_context->getIntegerv(GraphicsContext3D::MAX_TEXTURE_SIZE, &m_maxTextureSize));
    1091 
    10921072    // Create an FBO for doing offscreen rendering.
    10931073    GLC(m_context.get(), m_offscreenFramebufferId = m_context->createFramebuffer());
     
    11011081    GLC(m_context.get(), m_context->flush());
    11021082
    1103     m_contentsTextureManager = TextureManager::create(textureMemoryHighLimitBytes, m_maxTextureSize);
    1104     m_renderSurfaceTextureManager = TextureManager::create(textureMemoryHighLimitBytes, m_maxTextureSize);
     1083    m_contentsTextureManager = TextureManager::create(textureMemoryHighLimitBytes, m_capabilities.maxTextureSize);
     1084    m_renderSurfaceTextureManager = TextureManager::create(textureMemoryHighLimitBytes, m_capabilities.maxTextureSize);
    11051085#ifndef NDEBUG
    11061086    m_contentsTextureManager->setAssociatedContextDebugOnly(m_context.get());
     
    12921272}
    12931273
    1294 bool LayerRendererChromium::isCompositorContextLost()
     1274bool LayerRendererChromium::isContextLost()
    12951275{
    12961276    return (m_context.get()->getExtensions()->getGraphicsResetStatusARB() != GraphicsContext3D::NO_ERROR);
  • trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h

    r94329 r94353  
    4343#include "cc/CCLayerSorter.h"
    4444#include "cc/CCLayerTreeHost.h"
     45#include "cc/CCLayerTreeHostImpl.h"
    4546#include "cc/CCPluginLayerImpl.h"
    4647#include "cc/CCVideoLayerImpl.h"
     
    6465class CCHeadsUpDisplay;
    6566class CCLayerImpl;
    66 class CCLayerTreeHostCommitter;
     67class CCLayerTreeHost; // FIXME: remove pointers to this.
    6768class CCLayerTreeHostImpl;
    6869class GeometryBinding;
     
    7374class LayerRendererChromium : public RefCounted<LayerRendererChromium> {
    7475public:
    75     static PassRefPtr<LayerRendererChromium> create(CCLayerTreeHost*, PassRefPtr<GraphicsContext3D>);
     76    static PassRefPtr<LayerRendererChromium> create(CCLayerTreeHost*, CCLayerTreeHostImpl*, PassRefPtr<GraphicsContext3D>);
     77
     78    // Must be called in order to allow the LayerRendererChromium to destruct
     79    void close();
    7680
    7781    virtual ~LayerRendererChromium();
    7882
    7983    const CCSettings& settings() const { return m_owner->settings(); }
     84    const LayerRendererCapabilities& capabilities() const { return m_capabilities; }
    8085
    8186    CCLayerTreeHost* owner() { return m_owner; }
     
    8590    const GraphicsLayer* rootLayer() const { return m_owner->rootLayer(); }
    8691
     92    CCLayerImpl* rootLayerImpl() { return m_ownerImpl->rootLayer(); }
     93    const CCLayerImpl* rootLayerImpl() const { return m_ownerImpl->rootLayer(); }
     94
    8795    GraphicsContext3D* context();
    88     bool contextSupportsMapSub() const { return m_contextSupportsMapSub; }
    89 
    90     const IntSize& viewportSize() { return m_owner->viewportSize(); }
     96    bool contextSupportsMapSub() const { return m_capabilities.usingMapSub; }
     97
     98    const IntSize& viewportSize() { return m_ownerImpl->viewportSize(); }
    9199    int viewportWidth() { return viewportSize().width(); }
    92100    int viewportHeight() { return viewportSize().height(); }
     
    111119    const TransformationMatrix& projectionMatrix() const { return m_projectionMatrix; }
    112120    const TransformationMatrix& windowMatrix() const { return m_windowMatrix; }
    113 
    114     int maxTextureSize() const { return m_maxTextureSize; }
    115121
    116122    const GeometryBinding* sharedGeometry() const { return m_sharedGeometry.get(); }
     
    139145    String layerTreeAsText() const;
    140146
    141     // Return true if the compositor context has an error.
    142     bool isCompositorContextLost();
     147    bool isContextLost();
    143148
    144149    void releaseTextures();
    145 
    146     void setLayerRendererRecursive(LayerChromium*);
    147150
    148151    GC3Denum bestTextureFormat();
     
    151154    typedef Vector<RefPtr<CCLayerImpl> > CCLayerList;
    152155
    153     void clearRootCCLayerImpl();
    154156private:
    155     // FIXME: This needs to be moved to the CCLayerTreeHostImpl when that class exists.
    156     RefPtr<CCLayerImpl> m_rootCCLayerImpl;
    157 
    158     LayerRendererChromium(CCLayerTreeHost*, PassRefPtr<GraphicsContext3D>);
     157    LayerRendererChromium(CCLayerTreeHost*, CCLayerTreeHostImpl*, PassRefPtr<GraphicsContext3D>);
    159158    bool initialize();
    160159
     
    189188    void clearRenderSurfacesOnCCLayerImplRecursive(CCLayerImpl*);
    190189
    191     // FIXME: Change this to CCLayerTreeHostImpl
     190    // FIXME: Remove CCLayerTreeHost field
    192191    CCLayerTreeHost* m_owner;
     192
     193    CCLayerTreeHostImpl* m_ownerImpl;
     194
     195    LayerRendererCapabilities m_capabilities;
    193196
    194197    TransformationMatrix m_projectionMatrix;
     
    199202    CCRenderSurface* m_currentRenderSurface;
    200203    unsigned m_offscreenFramebufferId;
    201 
    202     // Maximum texture dimensions supported.
    203     int m_maxTextureSize;
    204204
    205205    // Store values that are shared between instances of each layer type
     
    228228    RefPtr<GraphicsContext3D> m_context;
    229229
    230     bool m_contextSupportsMapSub;
    231 
    232230    CCRenderSurface* m_defaultRenderSurface;
    233231
  • trunk/Source/WebCore/platform/graphics/chromium/LayerTextureUpdaterCanvas.h

    r94329 r94353  
    8181};
    8282
    83 #if !USE(THREADED_COMPOSITING)
    8483#if USE(SKIA)
    8584class LayerTextureUpdaterSkPicture : public LayerTextureUpdaterCanvas {
     
    110109};
    111110#endif // SKIA
    112 #endif // !THREADED_COMPOSITING
    113111
    114112} // namespace WebCore
  • trunk/Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp

    r93640 r94353  
    6666TiledLayerChromium::TiledLayerChromium(GraphicsLayerChromium* owner)
    6767    : LayerChromium(owner)
     68    , m_layerTreeHost(0)
    6869    , m_tilingOption(AutoTile)
    6970    , m_textureFormat(GraphicsContext3D::INVALID_ENUM)
     
    116117
    117118    IntSize requestedSize = isTiled ? tileSize : contentBounds();
    118     const int maxSize = layerRenderer()->maxTextureSize();
     119    const int maxSize = m_layerTreeHost->layerRendererCapabilities().maxTextureSize;
    119120    IntSize clampedSize = requestedSize.shrunkTo(IntSize(maxSize, maxSize));
    120121    m_tiler->setTileSize(clampedSize);
     
    137138void TiledLayerChromium::setLayerTreeHost(CCLayerTreeHost* host)
    138139{
     140    LayerChromium::setLayerTreeHost(host);
     141    m_layerTreeHost = host;
    139142    if (m_tiler)
    140143        return;
     
    142145    createTextureUpdater(host);
    143146
    144     m_textureFormat = host->bestTextureFormat();
     147    m_textureFormat = host->layerRendererCapabilities().bestTextureFormat;
    145148    m_textureOrientation = textureUpdater()->orientation();
    146149    m_sampledTexelFormat = textureUpdater()->sampledTexelFormat(m_textureFormat);
  • trunk/Source/WebCore/platform/graphics/chromium/TiledLayerChromium.h

    r93615 r94353  
    8989    TextureManager* textureManager() const;
    9090
     91    CCLayerTreeHost* m_layerTreeHost;
     92
    9193    // State held between update and upload.
    9294    IntRect m_paintRect;
  • trunk/Source/WebCore/platform/graphics/chromium/VideoLayerChromium.cpp

    r93796 r94353  
    148148void VideoLayerChromium::setLayerTreeHost(CCLayerTreeHost* layerTreeHost)
    149149{
     150    LayerChromium::setLayerTreeHost(layerTreeHost);
    150151    if (m_layerTreeHost == layerTreeHost)
    151152        return;
     
    179180    ASSERT(textureFormat != GraphicsContext3D::INVALID_VALUE);
    180181
    181     int maxTextureSize = m_layerTreeHost->maxTextureSize();
     182    int maxTextureSize = m_layerTreeHost->layerRendererCapabilities().maxTextureSize;
    182183
    183184    for (unsigned plane = 0; plane < frame->planes(); plane++) {
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCCanvasLayerImpl.cpp

    r93346 r94353  
    3232#include "GraphicsContext3D.h"
    3333#include "LayerRendererChromium.h"
    34 #include "cc/CCLayerTreeHostImplProxy.h"
     34#include "cc/CCProxy.h"
    3535#include <wtf/text/WTFString.h>
    3636
     
    5151void CCCanvasLayerImpl::draw()
    5252{
    53     ASSERT(CCLayerTreeHostImplProxy::isImplThread());
     53    ASSERT(CCProxy::isImplThread());
    5454    ASSERT(layerRenderer());
    5555    const CCCanvasLayerImpl::Program* program = layerRenderer()->canvasLayerProgram();
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp

    r93927 r94353  
    3131#include "LayerRendererChromium.h"
    3232#include "NonCompositedContentHost.h"
    33 #include "PlatformColor.h"
    3433#include "TraceEvent.h"
    35 #include "cc/CCLayerTreeHostCommitter.h"
     34#include "TreeSynchronizer.h"
    3635#include "cc/CCLayerTreeHostImpl.h"
     36#include "cc/CCSingleThreadProxy.h"
     37#include "cc/CCThread.h"
     38#include "cc/CCThreadProxy.h"
    3739
    3840namespace WebCore {
     
    4749
    4850CCLayerTreeHost::CCLayerTreeHost(CCLayerTreeHostClient* client, const CCSettings& settings)
    49     : m_recreatingGraphicsContext(false)
    50     , m_maxTextureSize(0)
    51     , m_contextSupportsMapSub(false)
    52     , m_animating(false)
     51    : m_animating(false)
    5352    , m_client(client)
    5453    , m_frameNumber(0)
    5554    , m_nonCompositedContentHost(NonCompositedContentHost::create(m_client->createRootLayerPainter()))
    5655    , m_settings(settings)
     56    , m_visible(true)
    5757{
    5858}
     
    6060bool CCLayerTreeHost::initialize()
    6161{
    62     m_layerRenderer = createLayerRenderer();
    63     if (!m_layerRenderer)
     62    if (m_settings.enableCompositorThread) {
     63        // Accelerated Painting is not supported in threaded mode. Turn it off.
     64        m_settings.acceleratePainting = false;
     65        m_proxy = CCThreadProxy::create(this);
     66    } else
     67        m_proxy = CCSingleThreadProxy::create(this);
     68    m_proxy->start();
     69
     70    if (!m_proxy->initializeLayerRenderer(this))
    6471        return false;
    6572
    66     // FIXME: In the threaded case, these values will need to be initialized
    67     // by something other than m_layerRenderer.
    68     m_maxTextureSize = m_layerRenderer->maxTextureSize();
    69     m_bestTextureFormat = PlatformColor::bestTextureFormat(m_layerRenderer->context());
    70     m_contextSupportsMapSub = m_layerRenderer->contextSupportsMapSub();
     73    // Update m_settings based on capabilities that we got back from the renderer.
     74    m_settings.acceleratePainting = m_proxy->layerRendererCapabilities().usingAcceleratedPainting;
    7175
    7276    m_rootLayer = GraphicsLayer::create(0);
     
    7882    m_rootLayer->addChild(m_nonCompositedContentHost->graphicsLayer());
    7983
    80 
    81 #if USE(THREADED_COMPOSITING)
    82     m_proxy = CCLayerTreeHostImplProxy::create(this);
    83     ASSERT(m_proxy->isStarted());
     84    // We changed the root layer. Tell the proxy a commit is needed.
    8485    m_proxy->setNeedsCommitAndRedraw();
    85 #endif
    8686
    8787    return true;
     
    9191{
    9292    TRACE_EVENT("CCLayerTreeHost::~CCLayerTreeHost", this, 0);
    93 #if USE(THREADED_COMPOSITING)
    9493    m_proxy->stop();
    9594    m_proxy.clear();
    96 #endif
    97 }
    98 
    99 void CCLayerTreeHost::beginCommit()
    100 {
    101 }
    102 
    103 void CCLayerTreeHost::commitComplete()
    104 {
    105     m_frameNumber++;
    10695}
    10796
     
    113102}
    114103
    115 PassOwnPtr<CCLayerTreeHostCommitter> CCLayerTreeHost::createLayerTreeHostCommitter()
    116 {
    117     // FIXME: only called in threading case, fix when possible.
    118     return nullptr;
    119 }
    120 
    121 PassOwnPtr<CCLayerTreeHostImpl> CCLayerTreeHost::createLayerTreeHostImpl(CCLayerTreeHostImplClient* client)
    122 {
    123     RefPtr<LayerRendererChromium> renderer(m_layerRenderer);
    124     return CCLayerTreeHostImpl::create(client, renderer);
    125 }
    126 
     104void CCLayerTreeHost::preCommit(CCLayerTreeHostImpl* hostImpl)
     105{
     106    hostImpl->setVisible(m_visible);
     107    hostImpl->setViewport(viewportSize());
     108}
     109
     110void CCLayerTreeHost::commitTo(CCLayerTreeHostImpl* hostImpl)
     111{
     112    ASSERT(CCProxy::isImplThread());
     113    TRACE_EVENT("CCLayerTreeHost::commitTo", this, 0);
     114    hostImpl->setSourceFrameNumber(frameNumber());
     115
     116    // Synchronize trees, if one exists at all...
     117    if (rootLayer()) {
     118        // The layerRenderer needs to be set so that child layers pick up the layerRenderer
     119        // as well during the synchronize step.
     120        if (rootLayer()->platformLayer()->layerRenderer() != hostImpl->layerRenderer())
     121            rootLayer()->platformLayer()->setLayerRendererRecursive(hostImpl->layerRenderer());
     122
     123        hostImpl->setRootLayer(TreeSynchronizer::synchronizeTrees(rootLayer()->platformLayer(), hostImpl->rootLayer()));
     124    } else
     125        hostImpl->setRootLayer(0);
     126
     127    m_frameNumber++;
     128}
     129
     130PassOwnPtr<CCThread> CCLayerTreeHost::createCompositorThread()
     131{
     132    return m_client->createCompositorThread();
     133}
     134
     135PassRefPtr<GraphicsContext3D> CCLayerTreeHost::createLayerTreeHostContext3D()
     136{
     137    return m_client->createLayerTreeHostContext3D();
     138}
     139
     140PassOwnPtr<CCLayerTreeHostImpl> CCLayerTreeHost::createLayerTreeHostImpl()
     141{
     142    return CCLayerTreeHostImpl::create(m_settings);
     143}
     144
     145void CCLayerTreeHost::didRecreateGraphicsContext(bool success)
     146{
     147    m_client->didRecreateGraphicsContext(success);
     148}
     149
     150#if !USE(THREADED_COMPOSITING)
     151void CCLayerTreeHost::scheduleComposite()
     152{
     153    m_client->scheduleComposite();
     154}
     155#endif
     156
     157// Temporary hack until WebViewImpl context creation gets simplified
    127158GraphicsContext3D* CCLayerTreeHost::context()
    128159{
    129     return m_layerRenderer->context();
    130 }
    131 
    132 void CCLayerTreeHost::compositeAndReadback(void *pixels, const IntRect& rect)
    133 {
    134 #if USE(THREADED_COMPOSITING)
    135     // FIXME: need to implement this.
    136 #else
    137     composite(false);
    138     m_layerRenderer->getFramebufferPixels(pixels, rect);
    139 #endif
     160    ASSERT(!m_settings.enableCompositorThread);
     161    return m_proxy->context();
     162}
     163
     164bool CCLayerTreeHost::compositeAndReadback(void *pixels, const IntRect& rect)
     165{
     166    return m_proxy->compositeAndReadback(pixels, rect);
    140167}
    141168
    142169void CCLayerTreeHost::finishAllRendering()
    143170{
    144 #if USE(THREADED_COMPOSITING)
    145     // FIXME: need to implement this.
    146 #else
    147     m_layerRenderer->finish();
    148 #endif
     171    m_proxy->finishAllRendering();
    149172}
    150173
     
    152175{
    153176    m_nonCompositedContentHost->invalidateRect(dirtyRect);
     177}
     178
     179const LayerRendererCapabilities& CCLayerTreeHost::layerRendererCapabilities() const
     180{
     181    return m_proxy->layerRendererCapabilities();
    154182}
    155183
     
    178206    m_nonCompositedContentHost->graphicsLayer()->removeAllChildren();
    179207    m_nonCompositedContentHost->invalidateEntireLayer();
    180     if (layer) {
     208    if (layer)
    181209        m_nonCompositedContentHost->graphicsLayer()->addChild(layer);
    182         layer->platformLayer()->setLayerRenderer(m_layerRenderer.get());
    183     } else
    184         layerRenderer()->clearRootCCLayerImpl();
    185 
    186210}
    187211
     
    194218    m_nonCompositedContentHost->graphicsLayer()->setSize(contentsSize);
    195219
    196     if (visibleRectChanged) {
     220    if (visibleRectChanged)
    197221        m_nonCompositedContentHost->invalidateEntireLayer();
    198         if (m_layerRenderer)
    199             m_layerRenderer->viewportChanged();
    200     }
    201222
    202223    setNeedsCommitAndRedraw();
     
    205226void CCLayerTreeHost::setVisible(bool visible)
    206227{
     228    m_visible = visible;
     229    m_proxy->setNeedsCommitAndRedraw();
     230}
     231
     232void CCLayerTreeHost::loseCompositorContext()
     233{
     234    m_proxy->loseCompositorContext();
     235}
     236
     237TextureManager* CCLayerTreeHost::contentsTextureManager() const
     238{
     239    return m_proxy->contentsTextureManager();
     240}
     241
    207242#if !USE(THREADED_COMPOSITING)
    208     if (!visible)
    209         m_layerRenderer->releaseTextures();
    210 #endif
    211 }
    212 
    213 PassRefPtr<LayerRendererChromium> CCLayerTreeHost::createLayerRenderer()
    214 {
    215     // GraphicsContext3D::create might fail and return 0, in that case fall back to software.
    216     RefPtr<GraphicsContext3D> context = m_client->createLayerTreeHostContext3D();
    217     if (!context)
    218         return 0;
    219 
    220     // Actually create the renderer.
    221     RefPtr<LayerRendererChromium> layerRenderer = LayerRendererChromium::create(this, context);
    222 
    223     // If creation failed, and we had asked for accelerated painting, disable accelerated painting
    224     // and try creating the renderer again.
    225     if (m_settings.acceleratePainting && !layerRenderer) {
    226         m_settings.acceleratePainting = false;
    227         layerRenderer = LayerRendererChromium::create(this, context);
    228     }
    229 
    230     return layerRenderer;
    231 }
    232 
    233 TextureManager* CCLayerTreeHost::contentsTextureManager() const
    234 {
    235     // FIXME: this class should own the contents texture manager
    236     if (!m_layerRenderer)
    237         return 0;
    238     return m_layerRenderer->contentsTextureManager();
    239 }
    240 
    241 #if !USE(THREADED_COMPOSITING)
    242 void CCLayerTreeHost::doComposite()
    243 {
    244 #ifndef NDEBUG
    245     CCLayerTreeHostImplProxy::setImplThread(true);
    246 #endif
    247     ASSERT(m_layerRenderer);
    248     m_layerRenderer->updateLayers();
    249     m_layerRenderer->drawLayers();
    250 #ifndef NDEBUG
    251     CCLayerTreeHostImplProxy::setImplThread(false);
    252 #endif
    253 }
    254 
    255 void CCLayerTreeHost::composite(bool finish)
    256 {
    257     TRACE_EVENT("CCLayerTreeHost::composite", this, 0);
    258 
    259     if (m_recreatingGraphicsContext) {
    260         // reallocateRenderer will request a repaint whether or not it succeeded
    261         // in creating a new context.
    262         reallocateRenderer();
    263         m_recreatingGraphicsContext = false;
    264         return;
    265     }
    266 
    267     // Do not composite if the compositor context is already lost.
    268     if (!m_layerRenderer->isCompositorContextLost()) {
    269         doComposite();
    270 
    271         // Put result onscreen.
    272         m_layerRenderer->present();
    273     }
    274 
    275     if (m_layerRenderer->isCompositorContextLost()) {
    276         // Trying to recover the context right here will not work if GPU process
    277         // died. This is because GpuChannelHost::OnErrorMessage will only be
    278         // called at the next iteration of the message loop, reverting our
    279         // recovery attempts here. Instead, we detach the root layer from the
    280         // renderer, recreate the renderer at the next message loop iteration
    281         // and request a repaint yet again.
    282         m_recreatingGraphicsContext = true;
    283         setNeedsCommitAndRedraw();
    284     }
    285 }
    286 
    287 void CCLayerTreeHost::loseCompositorContext()
    288 {
    289     m_recreatingGraphicsContext = true;
    290 }
    291 
    292 void CCLayerTreeHost::reallocateRenderer()
    293 {
    294     RefPtr<LayerRendererChromium> layerRenderer = createLayerRenderer();
    295     if (!layerRenderer) {
    296         m_client->didRecreateGraphicsContext(false);
    297         return;
    298     }
    299 
    300     layerRenderer->setLayerRendererRecursive(m_rootLayer->platformLayer());
    301     m_layerRenderer = layerRenderer;
    302 
    303     m_client->didRecreateGraphicsContext(true);
     243void CCLayerTreeHost::composite()
     244{
     245    ASSERT(!m_settings.enableCompositorThread);
     246    static_cast<CCSingleThreadProxy*>(m_proxy.get())->compositeImmediately();
    304247}
    305248#endif // !USE(THREADED_COMPOSITING)
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h

    r93796 r94353  
    2828#include "GraphicsTypes3D.h"
    2929#include "IntRect.h"
    30 #include "cc/CCLayerTreeHostCommitter.h"
    31 #include "cc/CCLayerTreeHostImplProxy.h"
     30#include "cc/CCProxy.h"
    3231
    3332#include <wtf/PassOwnPtr.h>
     
    3534#include <wtf/RefCounted.h>
    3635
     36#if USE(SKIA)
     37class GrContext;
     38#endif
     39
    3740namespace WebCore {
    3841
    3942class CCLayerTreeHostImpl;
    40 class CCLayerTreeHostImplClient;
    4143class CCThread;
    4244class GraphicsContext3D;
     
    6668            : acceleratePainting(false)
    6769            , compositeOffscreen(false)
     70            , enableCompositorThread(false)
    6871            , showFPSCounter(false)
    6972            , showPlatformLayerTree(false) { }
     
    7174    bool acceleratePainting;
    7275    bool compositeOffscreen;
     76    bool enableCompositorThread;
    7377    bool showFPSCounter;
    7478    bool showPlatformLayerTree;
     79};
     80
     81// Provides information on an Impl's rendering capabilities back to the CCLayerTreeHost
     82struct LayerRendererCapabilities {
     83    LayerRendererCapabilities()
     84        : bestTextureFormat(0)
     85        , usingMapSub(false)
     86        , usingAcceleratedPainting(false)
     87        , maxTextureSize(0) { }
     88
     89    GC3Denum bestTextureFormat;
     90    bool usingMapSub;
     91    bool usingAcceleratedPainting;
     92    int maxTextureSize;
    7593};
    7694
     
    8098    virtual ~CCLayerTreeHost();
    8199
    82     virtual void animateAndLayout(double frameBeginTime);
    83     virtual void beginCommit();
    84     virtual void commitComplete();
     100    // CCLayerTreeHost interface to CCProxy.
     101    void animateAndLayout(double frameBeginTime);
     102    void preCommit(CCLayerTreeHostImpl*); // Temporary hack until CCLayerTreeHostImpl::updateLayers is split apart.
     103    void commitTo(CCLayerTreeHostImpl*);
     104    PassOwnPtr<CCThread> createCompositorThread();
     105    PassRefPtr<GraphicsContext3D> createLayerTreeHostContext3D();
     106    PassOwnPtr<CCLayerTreeHostImpl> createLayerTreeHostImpl();
     107    void didRecreateGraphicsContext(bool success);
     108#if !USE(THREADED_COMPOSITING)
     109    void scheduleComposite();
     110#endif
    85111
    86     virtual PassOwnPtr<CCLayerTreeHostImpl> createLayerTreeHostImpl(CCLayerTreeHostImplClient*);
    87     virtual PassOwnPtr<CCLayerTreeHostCommitter> createLayerTreeHostCommitter();
    88 
     112    // CCLayerTreeHost interface to WebView.
    89113    bool animating() const { return m_animating; }
    90114    void setAnimating(bool animating) { m_animating = animating; } // Can be removed when non-threaded scheduling moves inside.
     
    92116    CCLayerTreeHostClient* client() { return m_client; }
    93117
     118#if !USE(THREADED_COMPOSITING)
     119    void composite();
     120#endif
     121
    94122    GraphicsContext3D* context();
    95123
    96     void compositeAndReadback(void *pixels, const IntRect&);
     124    // Composites and attempts to read back the result into the provided
     125    // buffer. If it wasn't possible, e.g. due to context lost, will return
     126    // false.
     127    bool compositeAndReadback(void *pixels, const IntRect&);
    97128
    98129    void finishAllRendering();
     
    101132
    102133    void invalidateRootLayerRect(const IntRect& dirtyRect);
     134
     135    const LayerRendererCapabilities& layerRendererCapabilities() const;
     136
     137    // Test-only hook
     138    void loseCompositorContext();
    103139
    104140    void setNeedsCommitAndRedraw();
     
    118154    void setVisible(bool);
    119155
    120     // Temporary home for the non-threaded rendering path.
    121 #if !USE(THREADED_COMPOSITING)
    122     void composite(bool finish);
    123 
    124     void loseCompositorContext();
    125 
    126     LayerRendererChromium* layerRenderer() const { return m_layerRenderer.get(); }
    127 #endif
    128 
    129156    NonCompositedContentHost* nonCompositedContentHost() const { return m_nonCompositedContentHost.get(); }
    130 
    131     bool contextSupportsMapSub() const { return m_contextSupportsMapSub; }
    132     int maxTextureSize() const { return m_maxTextureSize; }
    133     GC3Denum bestTextureFormat() { return m_bestTextureFormat; }
    134157
    135158protected:
     
    141164    PassRefPtr<LayerRendererChromium> createLayerRenderer();
    142165
    143     // Temporary home for the non-threaded rendering path.
    144 #if !USE(THREADED_COMPOSITING)
    145     void doComposite();
    146     void reallocateRenderer();
    147 
    148     bool m_recreatingGraphicsContext;
    149     RefPtr<LayerRendererChromium> m_layerRenderer;
    150 #endif
    151 
    152     int m_maxTextureSize;
    153     GC3Denum m_bestTextureFormat;
    154     bool m_contextSupportsMapSub;
    155 
    156166    bool m_animating;
    157167
     
    160170    int m_frameNumber;
    161171
    162     OwnPtr<CCLayerTreeHostImplProxy> m_proxy;
     172    OwnPtr<CCProxy> m_proxy;
    163173
    164174    OwnPtr<GraphicsLayer> m_rootLayer;
     
    168178
    169179    IntSize m_viewportSize;
     180    bool m_visible;
    170181};
    171182
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp

    r92895 r94353  
    3939namespace WebCore {
    4040
    41 PassOwnPtr<CCLayerTreeHostImpl> CCLayerTreeHostImpl::create(CCLayerTreeHostImplClient* client, PassRefPtr<LayerRendererChromium> renderer)
     41PassOwnPtr<CCLayerTreeHostImpl> CCLayerTreeHostImpl::create(const CCSettings& settings)
    4242{
    43     return adoptPtr(new CCLayerTreeHostImpl(client, renderer));
     43    return adoptPtr(new CCLayerTreeHostImpl(settings));
    4444}
    4545
    46 CCLayerTreeHostImpl::CCLayerTreeHostImpl(CCLayerTreeHostImplClient* client, PassRefPtr<LayerRendererChromium> renderer)
     46CCLayerTreeHostImpl::CCLayerTreeHostImpl(const CCSettings& settings)
    4747    : m_sourceFrameNumber(-1)
    4848    , m_frameNumber(0)
    49     , m_client(client)
    50     , m_commitPending(false)
    51     , m_layerRenderer(renderer)
    52     , m_redrawPending(false)
     49    , m_settings(settings)
    5350{
    5451}
     
    5754{
    5855    TRACE_EVENT("CCLayerTreeHostImpl::~CCLayerTreeHostImpl()", this, 0);
     56    if (m_layerRenderer)
     57        m_layerRenderer->close();
    5958}
    6059
     
    6564void CCLayerTreeHostImpl::commitComplete()
    6665{
    67     m_commitPending = false;
    68     setNeedsRedraw();
     66}
     67
     68GraphicsContext3D* CCLayerTreeHostImpl::context()
     69{
     70    return m_layerRenderer ? m_layerRenderer->context() : 0;
    6971}
    7072
    7173void CCLayerTreeHostImpl::drawLayers()
    7274{
    73     // If a commit is pending, do not draw. This is a temporary restriction that
    74     // is necessary because drawLayers is currently a blocking operation on the main thread.
    75     if (m_commitPending)
    76         return;
    77 
    7875    TRACE_EVENT("CCLayerTreeHostImpl::drawLayers", this, 0);
    79     ASSERT(m_redrawPending);
    80     m_redrawPending = false;
    81 
    82     {
    83         TRACE_EVENT("CCLayerTreeHostImpl::drawLayersAndPresent", this, 0);
    84         CCCompletionEvent completion;
    85         bool contextLost;
    86         CCMainThread::postTask(createMainThreadTask(this, &CCLayerTreeHostImpl::drawLayersOnMainThread, AllowCrossThreadAccess(&completion), AllowCrossThreadAccess(&contextLost)));
    87         completion.wait();
    88 
    89         // FIXME: Send the "UpdateRect" message up to the RenderWidget [or moveplugin equivalents...]
    90 
    91         // FIXME: handle context lost
    92         if (contextLost)
    93             FATAL("LayerRendererChromiumImpl does not handle context lost yet.");
    94     }
     76    ASSERT(m_layerRenderer);
     77    if (m_layerRenderer->owner()->rootLayer())
     78        m_layerRenderer->drawLayers();
    9579
    9680    ++m_frameNumber;
    9781}
    9882
    99 void CCLayerTreeHostImpl::setNeedsCommitAndRedraw()
     83void CCLayerTreeHostImpl::finishAllRendering()
    10084{
    101     TRACE_EVENT("CCLayerTreeHostImpl::setNeedsCommitAndRedraw", this, 0);
    102 
    103     // FIXME: move the requestFrameAndCommit out from here once we add framerate throttling/animation
    104     double frameBeginTime = currentTime();
    105     m_commitPending = true;
    106     m_client->requestFrameAndCommitOnCCThread(frameBeginTime);
     85    m_layerRenderer->finish();
    10786}
    10887
    109 void CCLayerTreeHostImpl::setNeedsRedraw()
     88bool CCLayerTreeHostImpl::isContextLost()
    11089{
    111     if (m_redrawPending || m_commitPending)
    112         return;
    113 
    114     TRACE_EVENT("CCLayerTreeHostImpl::setNeedsRedraw", this, 0);
    115     m_redrawPending = true;
    116     m_client->postDrawLayersTaskOnCCThread();
     90    ASSERT(m_layerRenderer);
     91    return m_layerRenderer->isContextLost();
    11792}
    11893
    119 void CCLayerTreeHostImpl::drawLayersOnMainThread(CCCompletionEvent* completion, bool* contextLost)
     94const LayerRendererCapabilities& CCLayerTreeHostImpl::layerRendererCapabilities() const
    12095{
    121     ASSERT(isMainThread());
     96    return m_layerRenderer->capabilities();
     97}
    12298
    123     if (m_layerRenderer->owner()->rootLayer()) {
    124         m_layerRenderer->drawLayers();
    125         m_layerRenderer->present();
     99void CCLayerTreeHostImpl::present()
     100{
     101    ASSERT(m_layerRenderer && !isContextLost());
     102    m_layerRenderer->present();
     103}
    126104
    127         GraphicsContext3D* context = m_layerRenderer->context();
    128         *contextLost = context->getExtensions()->getGraphicsResetStatusARB() != GraphicsContext3D::NO_ERROR;
    129     } else
    130         *contextLost = false;
    131     completion->signal();
     105void CCLayerTreeHostImpl::readback(void* pixels, const IntRect& rect)
     106{
     107    ASSERT(m_layerRenderer && !isContextLost());
     108    m_layerRenderer->getFramebufferPixels(pixels, rect);
     109}
     110
     111void CCLayerTreeHostImpl::setRootLayer(PassRefPtr<CCLayerImpl> layer)
     112{
     113    m_rootLayerImpl = layer;
     114}
     115
     116void CCLayerTreeHostImpl::setVisible(bool visible)
     117{
     118    if (m_layerRenderer && !visible)
     119        m_layerRenderer->releaseTextures();
     120}
     121
     122bool CCLayerTreeHostImpl::initializeLayerRenderer(CCLayerTreeHost* implHack, PassRefPtr<GraphicsContext3D> context)
     123{
     124    // If m_layerRenderer exists, then we are recovering from a lost context
     125    bool recreatingRenderer = m_layerRenderer;
     126
     127    // First time layerRenderer creation
     128    RefPtr<LayerRendererChromium> layerRenderer;
     129    if (!recreatingRenderer)
     130        layerRenderer = LayerRendererChromium::create(implHack, this, context);
     131    else
     132        layerRenderer = LayerRendererChromium::create(m_layerRenderer->owner(), this, context);
     133
     134
     135    // If creation failed, and we had asked for accelerated painting, disable accelerated painting
     136    // and try creating the renderer again.
     137    if (!layerRenderer && m_settings.acceleratePainting) {
     138        m_settings.acceleratePainting = false;
     139
     140        if (!recreatingRenderer)
     141            layerRenderer = LayerRendererChromium::create(implHack, this, context);
     142        else
     143            layerRenderer = LayerRendererChromium::create(m_layerRenderer->owner(), this, context);
     144    }
     145
     146    // If recreating renderer, update the layers to point at the new renderer
     147    if (m_layerRenderer)
     148        m_layerRenderer->rootLayer()->platformLayer()->setLayerRendererRecursive(layerRenderer.get());
     149
     150    m_layerRenderer = layerRenderer;
     151    return m_layerRenderer;
     152}
     153
     154// FIXME: move all this code to CCLayerTreeHost
     155void CCLayerTreeHostImpl::updateLayers()
     156{
     157    if (m_layerRenderer)
     158        m_layerRenderer->updateLayers();
     159}
     160
     161void CCLayerTreeHostImpl::setViewport(const IntSize& viewportSize)
     162{
     163    bool changed = viewportSize != m_viewportSize;
     164    m_viewportSize = viewportSize;
     165    if (changed)
     166        m_layerRenderer->viewportChanged();
    132167}
    133168
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h

    r92895 r94353  
    2626#define CCLayerTreeHostImpl_h
    2727
    28 #include "cc/CCThread.h"
     28#include "cc/CCLayerTreeHost.h"
    2929#include <wtf/RefPtr.h>
    30 #include <wtf/ThreadSafeRefCounted.h>
     30
     31#if USE(SKIA)
     32class GrContext;
     33#endif
    3134
    3235namespace WebCore {
    3336
    3437class CCCompletionEvent;
     38class CCLayerImpl;
    3539class LayerRendererChromium;
    36 
    37 // Provides scheduling infrastructure for a CCLayerTreeHostImpl
    38 class CCLayerTreeHostImplClient  {
    39 public:
    40     virtual void postDrawLayersTaskOnCCThread() = 0;
    41     virtual void requestFrameAndCommitOnCCThread(double frameBeginTime) = 0;
    42 
    43 protected:
    44     virtual ~CCLayerTreeHostImplClient() { }
    45 };
     40struct LayerRendererCapabilities;
    4641
    4742// CCLayerTreeHostImpl owns the CCLayerImpl tree as well as associated rendering state
     
    4944    WTF_MAKE_NONCOPYABLE(CCLayerTreeHostImpl);
    5045public:
    51     static PassOwnPtr<CCLayerTreeHostImpl> create(CCLayerTreeHostImplClient*, PassRefPtr<LayerRendererChromium>);
     46    static PassOwnPtr<CCLayerTreeHostImpl> create(const CCSettings&);
    5247    virtual ~CCLayerTreeHostImpl();
    5348
     
    5550    virtual void commitComplete();
    5651
     52    GraphicsContext3D* context();
     53
    5754    void drawLayers();
    5855
     56    void finishAllRendering();
    5957    int frameNumber() const { return m_frameNumber; }
    6058
    61     void setNeedsRedraw();
    62     void setNeedsCommitAndRedraw();
     59    bool initializeLayerRenderer(CCLayerTreeHost* ownerHack, PassRefPtr<GraphicsContext3D>);
     60    bool isContextLost();
     61    LayerRendererChromium* layerRenderer() { return m_layerRenderer.get(); }
     62    const LayerRendererCapabilities& layerRendererCapabilities() const;
     63
     64    void present();
     65
     66    void readback(void* pixels, const IntRect&);
     67
     68    CCLayerImpl* rootLayer() const { return m_rootLayerImpl.get(); }
     69    void setRootLayer(PassRefPtr<CCLayerImpl>);
     70
     71    void setVisible(bool);
    6372
    6473    int sourceFrameNumber() const { return m_sourceFrameNumber; }
    6574    void setSourceFrameNumber(int frameNumber) { m_sourceFrameNumber = frameNumber; }
    6675
     76    void updateLayers();
     77
     78    void setViewport(const IntSize& viewportSize);
     79    const IntSize& viewportSize() const { return m_viewportSize; }
     80
    6781protected:
    68     CCLayerTreeHostImpl(CCLayerTreeHostImplClient*, PassRefPtr<LayerRendererChromium>);
    69     void drawLayersOnMainThread(CCCompletionEvent*, bool* contextLost);
     82    explicit CCLayerTreeHostImpl(const CCSettings&);
    7083    int m_sourceFrameNumber;
    7184    int m_frameNumber;
    7285
    7386private:
    74     CCLayerTreeHostImplClient* m_client;
    75     bool m_commitPending;
    7687    RefPtr<LayerRendererChromium> m_layerRenderer;
    77     bool m_redrawPending;
     88    RefPtr<CCLayerImpl> m_rootLayerImpl;
     89    CCSettings m_settings;
     90    IntSize m_viewportSize;
    7891};
    7992
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCMainThreadTask.h

    r89837 r94353  
    159159};
    160160
     161
     162template<typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4>
     163class MainThreadTask4 : public CCMainThread::Task {
     164public:
     165    typedef void (T::*Method)(MP1, MP2, MP3, MP4);
     166    typedef MainThreadTask4<T, P1, MP1, P2, MP2, P3, MP3, P4, MP4> MainThreadTaskImpl;
     167    typedef typename CrossThreadTaskTraits<P1>::ParamType Param1;
     168    typedef typename CrossThreadTaskTraits<P2>::ParamType Param2;
     169    typedef typename CrossThreadTaskTraits<P3>::ParamType Param3;
     170    typedef typename CrossThreadTaskTraits<P4>::ParamType Param4;
     171
     172    static PassOwnPtr<MainThreadTaskImpl> create(T* instance, Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4)
     173    {
     174        return adoptPtr(new MainThreadTaskImpl(instance, method, parameter1, parameter2, parameter3, parameter4));
     175    }
     176
     177private:
     178    MainThreadTask4(T* instance, Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4)
     179        : CCMainThread::Task(instance)
     180        , m_method(method)
     181        , m_parameter1(parameter1)
     182        , m_parameter2(parameter2)
     183        , m_parameter3(parameter3)
     184        , m_parameter4(parameter4)
     185    {
     186    }
     187
     188    virtual void performTask()
     189    {
     190        (*static_cast<T*>(instance()).*m_method)(m_parameter1, m_parameter2, m_parameter3, m_parameter4);
     191    }
     192
     193private:
     194    Method m_method;
     195    P1 m_parameter1;
     196    P2 m_parameter2;
     197    P3 m_parameter3;
     198    P4 m_parameter4;
     199};
     200
     201template<typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5>
     202class MainThreadTask5 : public CCMainThread::Task {
     203public:
     204    typedef void (T::*Method)(MP1, MP2, MP3, MP4, MP5);
     205    typedef MainThreadTask5<T, P1, MP1, P2, MP2, P3, MP3, P4, MP4, P5, MP5> MainThreadTaskImpl;
     206    typedef typename CrossThreadTaskTraits<P1>::ParamType Param1;
     207    typedef typename CrossThreadTaskTraits<P2>::ParamType Param2;
     208    typedef typename CrossThreadTaskTraits<P3>::ParamType Param3;
     209    typedef typename CrossThreadTaskTraits<P4>::ParamType Param4;
     210    typedef typename CrossThreadTaskTraits<P5>::ParamType Param5;
     211
     212    static PassOwnPtr<MainThreadTaskImpl> create(T* instance, Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5)
     213    {
     214        return adoptPtr(new MainThreadTaskImpl(instance, method, parameter1, parameter2, parameter3, parameter4, parameter5));
     215    }
     216
     217private:
     218    MainThreadTask5(T* instance, Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5)
     219        : CCMainThread::Task(instance)
     220        , m_method(method)
     221        , m_parameter1(parameter1)
     222        , m_parameter2(parameter2)
     223        , m_parameter3(parameter3)
     224        , m_parameter4(parameter4)
     225        , m_parameter5(parameter5)
     226    {
     227    }
     228
     229    virtual void performTask()
     230    {
     231        (*static_cast<T*>(instance()).*m_method)(m_parameter1, m_parameter2, m_parameter3, m_parameter4, m_parameter5);
     232    }
     233
     234private:
     235    Method m_method;
     236    P1 m_parameter1;
     237    P2 m_parameter2;
     238    P3 m_parameter3;
     239    P4 m_parameter4;
     240    P5 m_parameter5;
     241};
     242
    161243template<typename T>
    162244PassOwnPtr<CCMainThread::Task> createMainThreadTask(
     
    216298}
    217299
     300template<typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4>
     301PassOwnPtr<CCMainThread::Task> createMainThreadTask(
     302    T* const callee,
     303    void (T::*method)(MP1, MP2, MP3, MP4),
     304    const P1& parameter1,
     305    const P2& parameter2,
     306    const P3& parameter3,
     307    const P4& parameter4)
     308{
     309    return MainThreadTask4<T, typename CrossThreadCopier<P1>::Type, MP1, typename CrossThreadCopier<P2>::Type, MP2, typename CrossThreadCopier<P3>::Type, MP3, typename CrossThreadCopier<P4>::Type, MP4>::create(
     310        callee,
     311        method,
     312        CrossThreadCopier<P1>::copy(parameter1),
     313        CrossThreadCopier<P2>::copy(parameter2),
     314        CrossThreadCopier<P3>::copy(parameter3),
     315        CrossThreadCopier<P4>::copy(parameter4));
     316
     317}
     318
     319template<typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5>
     320PassOwnPtr<CCMainThread::Task> createMainThreadTask(
     321    T* const callee,
     322    void (T::*method)(MP1, MP2, MP3, MP4, MP5),
     323    const P1& parameter1,
     324    const P2& parameter2,
     325    const P3& parameter3,
     326    const P4& parameter4,
     327    const P5& parameter5)
     328{
     329    return MainThreadTask5<T, typename CrossThreadCopier<P1>::Type, MP1, typename CrossThreadCopier<P2>::Type, MP2, typename CrossThreadCopier<P3>::Type, MP3, typename CrossThreadCopier<P4>::Type, MP4, typename CrossThreadCopier<P5>::Type, MP5>::create(
     330        callee,
     331        method,
     332        CrossThreadCopier<P1>::copy(parameter1),
     333        CrossThreadCopier<P2>::copy(parameter2),
     334        CrossThreadCopier<P3>::copy(parameter3),
     335        CrossThreadCopier<P4>::copy(parameter4),
     336        CrossThreadCopier<P5>::copy(parameter5));
     337
     338}
     339
    218340} // namespace WebCore
    219341
    220 #endif // CCMainThreadTask_h
     342#endif // MainThreadTask_h
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCPluginLayerImpl.cpp

    r93346 r94353  
    3232#include "GraphicsContext3D.h"
    3333#include "LayerRendererChromium.h"
    34 #include "cc/CCLayerTreeHostImplProxy.h"
     34#include "cc/CCProxy.h"
    3535#include <wtf/text/WTFString.h>
    3636
     
    4949void CCPluginLayerImpl::draw()
    5050{
    51     ASSERT(CCLayerTreeHostImplProxy::isImplThread());
     51    ASSERT(CCProxy::isImplThread());
    5252    ASSERT(layerRenderer());
    5353    const CCPluginLayerImpl::Program* program = layerRenderer()->pluginLayerProgram();
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCProxy.cpp

    • Property svn:eol-style set to LF
    r94352 r94353  
    2525#include "config.h"
    2626
    27 #include "cc/CCLayerTreeHostCommitter.h"
     27#include "cc/CCProxy.h"
    2828
     29#include "TraceEvent.h"
    2930#include "cc/CCLayerTreeHost.h"
    30 #include "cc/CCLayerTreeHostImpl.h"
     31#include "cc/CCMainThreadTask.h"
     32#include "cc/CCThreadTask.h"
     33#include <wtf/MainThread.h>
     34
     35using namespace WTF;
    3136
    3237namespace WebCore {
    3338
    34 PassOwnPtr<CCLayerTreeHostCommitter> CCLayerTreeHostCommitter::create()
     39#ifndef NDEBUG
     40bool CCProxy::isMainThread()
    3541{
    36     return adoptPtr(new CCLayerTreeHostCommitter());
     42    return ::isMainThread();
    3743}
    3844
    39 void CCLayerTreeHostCommitter::commit(CCLayerTreeHost* host, CCLayerTreeHostImpl* hostImpl)
    40 {
    41     hostImpl->setSourceFrameNumber(host->frameNumber());
     45namespace {
     46bool fakeImplThread = false;
     47static WTF::ThreadIdentifier implThreadID;
    4248}
    4349
     50bool CCProxy::isImplThread()
     51{
     52    return fakeImplThread || currentThread() == implThreadID;
    4453}
     54
     55void CCProxy::setImplThread(bool isImplThread)
     56{
     57    fakeImplThread = isImplThread;
     58}
     59
     60void CCProxy::setImplThread(WTF::ThreadIdentifier id)
     61{
     62    implThreadID = id;
     63}
     64
     65#endif // !NDEBUG
     66
     67}
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.h

    r94352 r94353  
    2323 */
    2424
    25 #ifndef CCLayerTreeHostImplProxy_h
    26 #define CCLayerTreeHostImplProxy_h
     25#ifndef CCSingleThreadProxy_h
     26#define CCSingleThreadProxy_h
    2727
    2828#include "cc/CCCompletionEvent.h"
    2929#include "cc/CCLayerTreeHostImpl.h"
     30#include "cc/CCProxy.h"
    3031#include <wtf/OwnPtr.h>
    3132
     
    3334
    3435class CCLayerTreeHost;
    35 class CCLayerTreeHostCommitter;
    3636
    37 class CCLayerTreeHostImplProxy : public CCLayerTreeHostImplClient {
    38     WTF_MAKE_NONCOPYABLE(CCLayerTreeHostImplProxy);
     37class CCSingleThreadProxy : public CCProxy {
    3938public:
    40     virtual ~CCLayerTreeHostImplProxy();
     39    static PassOwnPtr<CCProxy> create(CCLayerTreeHost*);
     40    virtual ~CCSingleThreadProxy();
    4141
    42     bool isStarted() const;
     42    // CCProxy implementation
     43    virtual bool compositeAndReadback(void *pixels, const IntRect&);
     44    virtual GraphicsContext3D* context();
     45    virtual void finishAllRendering();
     46    virtual bool isStarted() const;
     47    virtual bool initializeLayerRenderer(CCLayerTreeHost* ownerHack);
     48    virtual const LayerRendererCapabilities& layerRendererCapabilities() const;
     49    virtual void loseCompositorContext();
     50    virtual void setNeedsCommitAndRedraw();
     51    virtual void setNeedsRedraw();
     52    virtual void start();
     53    virtual void stop();
    4354
    44     void setNeedsCommitAndRedraw();
    45     void setNeedsRedraw();
     55    // Temporary hack while LayerChromiums hold references to LayerRendererChromiums
     56    virtual TextureManager* contentsTextureManager();
    4657
    47     void start(); // Must be called before using the proxy.
    48     void stop(); // Must be called before deleting the proxy.
    49 
    50     // CCLayerTreeHostImplCient -- called on CCThread
    51     virtual void postDrawLayersTaskOnCCThread();
    52     virtual void requestFrameAndCommitOnCCThread(double frameBeginTime);
    53 
    54 #ifndef NDEBUG
    55     static bool isMainThread();
    56     static bool isImplThread();
     58    // Special case functions.
    5759#if !USE(THREADED_COMPOSITING)
    58     // Fake threaded compositing so we can catch incorrect usage.
    59     static void setImplThread(bool);
    60 #endif
     60    void compositeImmediately();
    6161#endif
    6262
    63 protected:
    64     explicit CCLayerTreeHostImplProxy(CCLayerTreeHost*);
    65     virtual PassOwnPtr<CCLayerTreeHostImpl> createLayerTreeHostImpl() = 0;
    66     CCLayerTreeHost* host() const { return m_layerTreeHost; }
    67 
    6863private:
    69     // Called on CCMainThread
    70     void requestFrameAndCommit(double frameBeginTime);
    71 
    72     // Called on CCThread
    73     void commitOnCCThread(CCLayerTreeHostCommitter*, CCCompletionEvent*);
    74     void drawLayersOnCCThread();
    75     void initImplOnCCThread(CCCompletionEvent*);
    76     void setNeedsCommitAndRedrawOnCCThread();
    77     void setNeedsRedrawOnCCThread();
    78     void layerTreeHostClosedOnCCThread(CCCompletionEvent*);
    79 
    80     // Used on main-thread only.
    81     bool m_commitPending;
     64    explicit CCSingleThreadProxy(CCLayerTreeHost*);
     65    bool recreateContextIfNeeded();
     66    void commitIfNeeded();
     67    bool doComposite();
    8268
    8369    // Accessed on main thread only.
     
    8672    // Used on the CCThread, but checked on main thread during initialization/shutdown.
    8773    OwnPtr<CCLayerTreeHostImpl> m_layerTreeHostImpl;
     74
     75    int m_numFailedRecreateAttempts;
     76    bool m_graphicsContextLost;
    8877};
    8978
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.h

    r94352 r94353  
    2323 */
    2424
    25 #ifndef CCLayerTreeHostImplProxy_h
    26 #define CCLayerTreeHostImplProxy_h
     25#ifndef CCThreadProxy_h
     26#define CCThreadProxy_h
    2727
    2828#include "cc/CCCompletionEvent.h"
    2929#include "cc/CCLayerTreeHostImpl.h"
     30#include "cc/CCProxy.h"
    3031#include <wtf/OwnPtr.h>
    3132
     
    3334
    3435class CCLayerTreeHost;
    35 class CCLayerTreeHostCommitter;
    3636
    37 class CCLayerTreeHostImplProxy : public CCLayerTreeHostImplClient {
    38     WTF_MAKE_NONCOPYABLE(CCLayerTreeHostImplProxy);
     37class CCThreadProxy : public CCProxy {
    3938public:
    40     virtual ~CCLayerTreeHostImplProxy();
     39    static PassOwnPtr<CCProxy> create(CCLayerTreeHost*);
    4140
    42     bool isStarted() const;
     41    virtual ~CCThreadProxy();
    4342
    44     void setNeedsCommitAndRedraw();
    45     void setNeedsRedraw();
     43    // CCProxy implementation
     44    virtual bool compositeAndReadback(void *pixels, const IntRect&);
     45    virtual GraphicsContext3D* context();
     46    virtual void finishAllRendering();
     47    virtual bool isStarted() const;
     48    virtual bool initializeLayerRenderer(CCLayerTreeHost* ownerHack);
     49    virtual const LayerRendererCapabilities& layerRendererCapabilities() const;
     50    virtual void loseCompositorContext();
     51    virtual void setNeedsCommitAndRedraw();
     52    virtual void setNeedsRedraw();
     53    virtual void start();
     54    virtual void stop();
    4655
    47     void start(); // Must be called before using the proxy.
    48     void stop(); // Must be called before deleting the proxy.
    49 
    50     // CCLayerTreeHostImplCient -- called on CCThread
    51     virtual void postDrawLayersTaskOnCCThread();
    52     virtual void requestFrameAndCommitOnCCThread(double frameBeginTime);
    53 
    54 #ifndef NDEBUG
    55     static bool isMainThread();
    56     static bool isImplThread();
    57 #if !USE(THREADED_COMPOSITING)
    58     // Fake threaded compositing so we can catch incorrect usage.
    59     static void setImplThread(bool);
    60 #endif
    61 #endif
    62 
    63 protected:
    64     explicit CCLayerTreeHostImplProxy(CCLayerTreeHost*);
    65     virtual PassOwnPtr<CCLayerTreeHostImpl> createLayerTreeHostImpl() = 0;
    66     CCLayerTreeHost* host() const { return m_layerTreeHost; }
     56    // Temporary hack while LayerChromiums hold references to LayerRendererChromiums
     57    virtual TextureManager* contentsTextureManager();
    6758
    6859private:
     60    explicit CCThreadProxy(CCLayerTreeHost*);
     61
    6962    // Called on CCMainThread
    70     void requestFrameAndCommit(double frameBeginTime);
     63    void beginFrameAndCommit(double frameBeginTime);
    7164
    7265    // Called on CCThread
    73     void commitOnCCThread(CCLayerTreeHostCommitter*, CCCompletionEvent*);
     66    void beginFrameAndCommitOnCCThread();
     67    void commitOnCCThread(CCCompletionEvent*);
    7468    void drawLayersOnCCThread();
    75     void initImplOnCCThread(CCCompletionEvent*);
     69    void initializeImplOnCCThread(CCCompletionEvent*);
     70    void initializeLayerRendererOnCCThread(CCLayerTreeHost*, GraphicsContext3D*, CCCompletionEvent*, bool* initializeSucceeded, LayerRendererCapabilities*);
    7671    void setNeedsCommitAndRedrawOnCCThread();
    7772    void setNeedsRedrawOnCCThread();
     
    8378    // Accessed on main thread only.
    8479    CCLayerTreeHost* m_layerTreeHost;
     80    LayerRendererCapabilities m_layerRendererCapabilitiesMainThreadCopy;
    8581
    8682    // Used on the CCThread, but checked on main thread during initialization/shutdown.
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCThreadTask.h

    r89837 r94353  
    199199};
    200200
     201template<typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5>
     202class CCThreadTask5 : public CCThread::Task {
     203public:
     204    typedef void (T::*Method)(MP1, MP2, MP3, MP4, MP5);
     205    typedef CCThreadTask5<T, P1, MP1, P2, MP2, P3, MP3, P4, MP4, P5, MP5> CCThreadTaskImpl;
     206    typedef typename CrossThreadTaskTraits<P1>::ParamType Param1;
     207    typedef typename CrossThreadTaskTraits<P2>::ParamType Param2;
     208    typedef typename CrossThreadTaskTraits<P3>::ParamType Param3;
     209    typedef typename CrossThreadTaskTraits<P4>::ParamType Param4;
     210    typedef typename CrossThreadTaskTraits<P5>::ParamType Param5;
     211
     212    static PassOwnPtr<CCThreadTaskImpl> create(T* instance, Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5)
     213    {
     214        return adoptPtr(new CCThreadTaskImpl(instance, method, parameter1, parameter2, parameter3, parameter4, parameter5));
     215    }
     216
     217private:
     218    CCThreadTask5(T* instance, Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5)
     219        : CCThread::Task(instance)
     220        , m_method(method)
     221        , m_parameter1(parameter1)
     222        , m_parameter2(parameter2)
     223        , m_parameter3(parameter3)
     224        , m_parameter4(parameter4)
     225        , m_parameter5(parameter5)
     226    {
     227    }
     228
     229    virtual void performTask()
     230    {
     231        (*static_cast<T*>(instance()).*m_method)(m_parameter1, m_parameter2, m_parameter3, m_parameter4, m_parameter5);
     232    }
     233
     234private:
     235    Method m_method;
     236    P1 m_parameter1;
     237    P2 m_parameter2;
     238    P3 m_parameter3;
     239    P4 m_parameter4;
     240    P5 m_parameter5;
     241};
     242
    201243template<typename T>
    202244PassOwnPtr<CCThread::Task> createCCThreadTask(
     
    275317}
    276318
     319template<typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5>
     320PassOwnPtr<CCThread::Task> createCCThreadTask(
     321    T* const callee,
     322    void (T::*method)(MP1, MP2, MP3, MP4, MP5),
     323    const P1& parameter1,
     324    const P2& parameter2,
     325    const P3& parameter3,
     326    const P4& parameter4,
     327    const P5& parameter5)
     328{
     329    return CCThreadTask5<T, typename CrossThreadCopier<P1>::Type, MP1, typename CrossThreadCopier<P2>::Type, MP2, typename CrossThreadCopier<P3>::Type, MP3, typename CrossThreadCopier<P4>::Type, MP4, typename CrossThreadCopier<P5>::Type, MP5>::create(
     330        callee,
     331        method,
     332        CrossThreadCopier<P1>::copy(parameter1),
     333        CrossThreadCopier<P2>::copy(parameter2),
     334        CrossThreadCopier<P3>::copy(parameter3),
     335        CrossThreadCopier<P4>::copy(parameter4),
     336        CrossThreadCopier<P5>::copy(parameter5));
     337
     338}
     339
    277340} // namespace WebCore
    278341
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp

    r93740 r94353  
    3232#include "FloatQuad.h"
    3333#include "LayerRendererChromium.h"
    34 #include "cc/CCLayerTreeHostImplProxy.h"
    3534#include <wtf/text/WTFString.h>
    3635
  • trunk/Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp

    r93796 r94353  
    3333#include "LayerRendererChromium.h"
    3434#include "NotImplemented.h"
    35 #include "cc/CCLayerTreeHostImplProxy.h"
     35#include "cc/CCProxy.h"
    3636#include <wtf/text/WTFString.h>
    3737
     
    8080void CCVideoLayerImpl::draw()
    8181{
    82     ASSERT(CCLayerTreeHostImplProxy::isImplThread());
     82    ASSERT(CCProxy::isImplThread());
    8383
    8484    if (m_skipsDraw)
  • trunk/Source/WebKit/chromium/ChangeLog

    r94343 r94353  
     12011-08-29  Nat Duca  <nduca@chromium.org>
     2
     3        [chromium] Introduce CCSingleThreadProxy in order to move LayerRenderer to CCLayerTreeHostImpl
     4        https://bugs.webkit.org/show_bug.cgi?id=66807
     5
     6        Reviewed by James Robinson.
     7
     8        * src/WebViewImpl.cpp:
     9        (WebKit::WebViewImpl::composite):
     10        (WebKit::WebViewImpl::setRootGraphicsLayer):
     11        (WebKit::WebViewImpl::setIsAcceleratedCompositingActive):
     12        (WebKit::WebViewImpl::didRecreateGraphicsContext):
     13        * tests/CCThreadTaskTest.cpp:
     14        (WebCore::TEST):
     15
    1162011-09-01  Dominic Mazzoni  <dmazzoni@google.com>
    217
  • trunk/Source/WebKit/chromium/src/WebViewImpl.cpp

    r94275 r94353  
    11581158}
    11591159
    1160 void WebViewImpl::composite(bool finish)
     1160void WebViewImpl::composite(bool)
    11611161{
    11621162#if USE(ACCELERATED_COMPOSITING)
     
    11711171        m_pageOverlay->update();
    11721172
    1173     m_layerTreeHost->composite(finish);
     1173    m_layerTreeHost->composite();
    11741174#endif
    11751175#endif
     
    25282528
    25292529    IntRect damagedRect(0, 0, m_size.width, m_size.height);
    2530     if (m_isAcceleratedCompositingActive)
    2531         invalidateRootLayerRect(damagedRect);
    2532     else
     2530    if (!m_isAcceleratedCompositingActive)
    25332531        m_client->didInvalidateRect(damagedRect);
    25342532}
     
    26212619        ccSettings.acceleratePainting = page()->settings()->acceleratedDrawingEnabled();
    26222620        ccSettings.compositeOffscreen = settings()->compositeToTextureEnabled();
     2621#if USE(THREADED_COMPOSITING)
     2622        ccSettings.enableCompositorThread = true;
     2623#else
     2624        ccSettings.enableCompositorThread = false;
     2625#endif
    26232626        ccSettings.showFPSCounter = settings()->showFPSCounter();
    26242627        ccSettings.showPlatformLayerTree = settings()->showPlatformLayerTree();
     
    26262629        m_layerTreeHost = CCLayerTreeHost::create(this, ccSettings);
    26272630        if (m_layerTreeHost) {
     2631            updateLayerTreeViewport();
    26282632            m_client->didActivateAcceleratedCompositing(true);
    26292633            m_isAcceleratedCompositingActive = true;
     
    26702674void WebViewImpl::didRecreateGraphicsContext(bool success)
    26712675{
    2672     // Force ViewHostMsg_DidActivateAcceleratedCompositing to be sent so
    2673     // that the browser process can reacquire surfaces.
    2674     m_isAcceleratedCompositingActive = false;
    2675     setIsAcceleratedCompositingActive(success);
    2676     if (success && m_pageOverlay)
     2676
     2677    // Switch back to software rendering mode, if necessary
     2678    if (!success) {
     2679        ASSERT(m_isAcceleratedCompositingActive);
     2680        setIsAcceleratedCompositingActive(false);
     2681        m_compositorCreationFailed = true;
     2682        m_client->didInvalidateRect(IntRect(0, 0, m_size.width, m_size.height));
     2683
     2684        // Force a style recalc to remove all the composited layers.
     2685        m_page->mainFrame()->document()->scheduleForcedStyleRecalc();
     2686        return;
     2687    }
     2688
     2689    if (m_pageOverlay)
    26772690        m_pageOverlay->update();
    26782691}
  • trunk/Source/WebKit/chromium/tests/CCThreadTaskTest.cpp

    r83249 r94353  
    4242    MOCK_METHOD3(method3, void(int a1, int a2, int a3));
    4343    MOCK_METHOD4(method4, void(int a1, int a2, int a3, int a4));
     44    MOCK_METHOD5(method5, void(int a1, int a2, int a3, int a4, int a5));
    4445};
    4546
     
    5253    EXPECT_CALL(mock, method3(9, 8, 7)).Times(1);
    5354    EXPECT_CALL(mock, method4(9, 8, 7, 6)).Times(1);
     55    EXPECT_CALL(mock, method5(9, 8, 7, 6, 5)).Times(1);
    5456
    5557    createCCThreadTask(&mock, &Mock::method0)->performTask();
     
    5860    createCCThreadTask(&mock, &Mock::method3, 9, 8, 7)->performTask();
    5961    createCCThreadTask(&mock, &Mock::method4, 9, 8, 7, 6)->performTask();
     62    createCCThreadTask(&mock, &Mock::method5, 9, 8, 7, 6, 5)->performTask();
    6063}
    6164
Note: See TracChangeset for help on using the changeset viewer.