Changeset 94353 in webkit
- Timestamp:
- Sep 1, 2011 3:40:08 PM (13 years ago)
- Location:
- trunk/Source
- Files:
-
- 3 added
- 2 deleted
- 25 edited
- 1 copied
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r94352 r94353 1 2011-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 1 163 2011-09-01 Dan Bernstein <mitz@apple.com> 2 164 -
trunk/Source/WebCore/WebCore.gypi
r94299 r94353 3538 3538 'platform/graphics/chromium/cc/CCLayerTreeHost.cpp', 3539 3539 'platform/graphics/chromium/cc/CCLayerTreeHost.h', 3540 'platform/graphics/chromium/cc/CCLayerTreeHostCommitter.cpp',3541 'platform/graphics/chromium/cc/CCLayerTreeHostCommitter.h',3542 3540 'platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp', 3543 3541 'platform/graphics/chromium/cc/CCLayerTreeHostImpl.h', 3544 'platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.cpp',3545 'platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.h',3546 3542 'platform/graphics/chromium/cc/CCMainThread.cpp', 3547 3543 'platform/graphics/chromium/cc/CCMainThread.h', … … 3549 3545 'platform/graphics/chromium/cc/CCPluginLayerImpl.cpp', 3550 3546 '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', 3551 3551 'platform/graphics/chromium/cc/CCRenderSurface.cpp', 3552 3552 'platform/graphics/chromium/cc/CCRenderSurface.h', 3553 3553 'platform/graphics/chromium/cc/CCThread.h', 3554 'platform/graphics/chromium/cc/CCThreadProxy.h', 3555 'platform/graphics/chromium/cc/CCThreadProxy.cpp', 3554 3556 'platform/graphics/chromium/cc/CCThreadTask.h', 3555 3557 'platform/graphics/chromium/cc/CCTiledLayerImpl.cpp', -
trunk/Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp
r94329 r94353 121 121 void ContentLayerChromium::createTextureUpdater(const CCLayerTreeHost* host) 122 122 { 123 #if !USE(THREADED_COMPOSITING)124 123 #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. 125 127 if (host->settings().acceleratePainting) { 126 128 m_textureUpdater = LayerTextureUpdaterSkPicture::create(ContentLayerPainter::create(m_owner)); … … 128 130 } 129 131 #endif // SKIA 130 #endif // !THREADED_COMPOSITING131 132 132 m_textureUpdater = LayerTextureUpdaterBitmap::create(ContentLayerPainter::create(m_owner), host-> contextSupportsMapSub());133 m_textureUpdater = LayerTextureUpdaterBitmap::create(ContentLayerPainter::create(m_owner), host->layerRendererCapabilities().usingMapSub); 133 134 } 134 135 -
trunk/Source/WebCore/platform/graphics/chromium/ImageLayerChromium.cpp
r93615 r94353 182 182 void ImageLayerChromium::createTextureUpdater(const CCLayerTreeHost* host) 183 183 { 184 m_textureUpdater = ImageLayerTextureUpdater::create(host-> contextSupportsMapSub());184 m_textureUpdater = ImageLayerTextureUpdater::create(host->layerRendererCapabilities().usingMapSub); 185 185 } 186 186 -
trunk/Source/WebCore/platform/graphics/chromium/LayerChromium.cpp
r93679 r94353 97 97 } 98 98 99 void 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 99 112 void LayerChromium::setLayerRenderer(LayerRendererChromium* renderer) 100 113 { -
trunk/Source/WebCore/platform/graphics/chromium/LayerChromium.h
r93679 r94353 154 154 bool isRootLayer() const { return m_isRootLayer; } 155 155 156 void setLayerRendererRecursive(LayerRendererChromium*); 157 156 158 // Derived types must override this method if they need to react to a change 157 159 // in the LayerRendererChromium. -
trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
r94329 r94353 46 46 #include "NonCompositedContentHost.h" 47 47 #include "NotImplemented.h" 48 #include "PlatformColor.h" 48 49 #include "RenderSurfaceChromium.h" 49 50 #include "TextStream.h" … … 452 453 #endif 453 454 454 PassRefPtr<LayerRendererChromium> LayerRendererChromium::create(CCLayerTreeHost* owner, PassRefPtr<GraphicsContext3D> context)455 PassRefPtr<LayerRendererChromium> LayerRendererChromium::create(CCLayerTreeHost* owner, CCLayerTreeHostImpl* ownerImpl, PassRefPtr<GraphicsContext3D> context) 455 456 { 456 457 #if USE(SKIA) … … 458 459 return 0; 459 460 #endif 460 RefPtr<LayerRendererChromium> layerRenderer(adoptRef(new LayerRendererChromium(owner, context)));461 RefPtr<LayerRendererChromium> layerRenderer(adoptRef(new LayerRendererChromium(owner, ownerImpl, context))); 461 462 if (!layerRenderer->initialize()) 462 463 return 0; … … 466 467 467 468 LayerRendererChromium::LayerRendererChromium(CCLayerTreeHost* owner, 469 CCLayerTreeHostImpl* ownerImpl, 468 470 PassRefPtr<GraphicsContext3D> context) 469 471 : m_owner(owner) 472 , m_ownerImpl(ownerImpl) 470 473 , m_currentRenderSurface(0) 471 474 , m_offscreenFramebufferId(0) … … 478 481 { 479 482 m_context->makeContextCurrent(); 483 if (settings().acceleratePainting) { 484 m_capabilities.usingAcceleratedPainting = true; 485 } 480 486 481 487 WebCore::Extensions3D* extensions = m_context->getExtensions(); 482 m_c ontextSupportsMapSub = extensions->supports("GL_CHROMIUM_map_sub");483 if (m_c ontextSupportsMapSub)488 m_capabilities.usingMapSub = extensions->supports("GL_CHROMIUM_map_sub"); 489 if (m_capabilities.usingMapSub) 484 490 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()); 485 494 486 495 if (!initializeSharedObjects()) … … 507 516 } 508 517 509 void LayerRendererChromium::clearRootCCLayerImpl() 510 { 511 if (m_rootCCLayerImpl) 512 clearRenderSurfacesOnCCLayerImplRecursive(m_rootCCLayerImpl.get()); 513 m_rootCCLayerImpl.clear(); 518 void LayerRendererChromium::close() 519 { 520 if (rootLayerImpl()) 521 clearRenderSurfacesOnCCLayerImplRecursive(rootLayerImpl()); 514 522 } 515 523 … … 552 560 void LayerRendererChromium::updateLayers() 553 561 { 562 if (!rootLayer()) 563 return; 564 554 565 if (m_owner->viewportSize().isEmpty()) 555 566 return; … … 560 571 m_headsUpDisplay->onFrameBegin(currentTime()); 561 572 562 // Recheck that we still have a root layer. This may become null if563 // compositing gets turned off during a paint operation.564 if (!rootLayer()) {565 m_rootCCLayerImpl.clear();566 return;567 }568 569 573 updateLayers(rootLayer()->platformLayer()); 570 574 } … … 574 578 if (!rootLayer()) 575 579 return; 576 577 {578 TRACE_EVENT("LayerRendererChromium::synchronizeTrees", this, 0);579 m_rootCCLayerImpl = TreeSynchronizer::synchronizeTrees(rootLayer()->platformLayer(), m_rootCCLayerImpl.get());580 }581 582 580 583 581 m_renderSurfaceTextureManager->setMemoryLimitBytes(textureMemoryHighLimitBytes - m_contentsTextureManager->currentMemoryUseBytes()); … … 617 615 { 618 616 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); 620 618 } 621 619 … … 725 723 726 724 TRACE_EVENT("LayerRendererChromium::drawLayers", this, 0); 727 CCLayerImpl* rootDrawLayer = m_rootCCLayerImpl.get();725 CCLayerImpl* rootDrawLayer = rootLayerImpl(); 728 726 makeContextCurrent(); 729 727 … … 743 741 { 744 742 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); 746 744 } 747 745 … … 831 829 832 830 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);847 831 } 848 832 … … 941 925 ManagedTexture* LayerRendererChromium::getOffscreenLayerTexture() 942 926 { 943 return settings().compositeOffscreen && m_rootCCLayerImpl ? m_rootCCLayerImpl->renderSurface()->contentsTexture() : 0;927 return settings().compositeOffscreen && rootLayerImpl() ? rootLayerImpl()->renderSurface()->contentsTexture() : 0; 944 928 } 945 929 … … 1086 1070 makeContextCurrent(); 1087 1071 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 1092 1072 // Create an FBO for doing offscreen rendering. 1093 1073 GLC(m_context.get(), m_offscreenFramebufferId = m_context->createFramebuffer()); … … 1101 1081 GLC(m_context.get(), m_context->flush()); 1102 1082 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); 1105 1085 #ifndef NDEBUG 1106 1086 m_contentsTextureManager->setAssociatedContextDebugOnly(m_context.get()); … … 1292 1272 } 1293 1273 1294 bool LayerRendererChromium::isCo mpositorContextLost()1274 bool LayerRendererChromium::isContextLost() 1295 1275 { 1296 1276 return (m_context.get()->getExtensions()->getGraphicsResetStatusARB() != GraphicsContext3D::NO_ERROR); -
trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h
r94329 r94353 43 43 #include "cc/CCLayerSorter.h" 44 44 #include "cc/CCLayerTreeHost.h" 45 #include "cc/CCLayerTreeHostImpl.h" 45 46 #include "cc/CCPluginLayerImpl.h" 46 47 #include "cc/CCVideoLayerImpl.h" … … 64 65 class CCHeadsUpDisplay; 65 66 class CCLayerImpl; 66 class CCLayerTreeHost Committer;67 class CCLayerTreeHost; // FIXME: remove pointers to this. 67 68 class CCLayerTreeHostImpl; 68 69 class GeometryBinding; … … 73 74 class LayerRendererChromium : public RefCounted<LayerRendererChromium> { 74 75 public: 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(); 76 80 77 81 virtual ~LayerRendererChromium(); 78 82 79 83 const CCSettings& settings() const { return m_owner->settings(); } 84 const LayerRendererCapabilities& capabilities() const { return m_capabilities; } 80 85 81 86 CCLayerTreeHost* owner() { return m_owner; } … … 85 90 const GraphicsLayer* rootLayer() const { return m_owner->rootLayer(); } 86 91 92 CCLayerImpl* rootLayerImpl() { return m_ownerImpl->rootLayer(); } 93 const CCLayerImpl* rootLayerImpl() const { return m_ownerImpl->rootLayer(); } 94 87 95 GraphicsContext3D* context(); 88 bool contextSupportsMapSub() const { return m_c ontextSupportsMapSub; }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(); } 91 99 int viewportWidth() { return viewportSize().width(); } 92 100 int viewportHeight() { return viewportSize().height(); } … … 111 119 const TransformationMatrix& projectionMatrix() const { return m_projectionMatrix; } 112 120 const TransformationMatrix& windowMatrix() const { return m_windowMatrix; } 113 114 int maxTextureSize() const { return m_maxTextureSize; }115 121 116 122 const GeometryBinding* sharedGeometry() const { return m_sharedGeometry.get(); } … … 139 145 String layerTreeAsText() const; 140 146 141 // Return true if the compositor context has an error. 142 bool isCompositorContextLost(); 147 bool isContextLost(); 143 148 144 149 void releaseTextures(); 145 146 void setLayerRendererRecursive(LayerChromium*);147 150 148 151 GC3Denum bestTextureFormat(); … … 151 154 typedef Vector<RefPtr<CCLayerImpl> > CCLayerList; 152 155 153 void clearRootCCLayerImpl();154 156 private: 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>); 159 158 bool initialize(); 160 159 … … 189 188 void clearRenderSurfacesOnCCLayerImplRecursive(CCLayerImpl*); 190 189 191 // FIXME: Change this to CCLayerTreeHostImpl190 // FIXME: Remove CCLayerTreeHost field 192 191 CCLayerTreeHost* m_owner; 192 193 CCLayerTreeHostImpl* m_ownerImpl; 194 195 LayerRendererCapabilities m_capabilities; 193 196 194 197 TransformationMatrix m_projectionMatrix; … … 199 202 CCRenderSurface* m_currentRenderSurface; 200 203 unsigned m_offscreenFramebufferId; 201 202 // Maximum texture dimensions supported.203 int m_maxTextureSize;204 204 205 205 // Store values that are shared between instances of each layer type … … 228 228 RefPtr<GraphicsContext3D> m_context; 229 229 230 bool m_contextSupportsMapSub;231 232 230 CCRenderSurface* m_defaultRenderSurface; 233 231 -
trunk/Source/WebCore/platform/graphics/chromium/LayerTextureUpdaterCanvas.h
r94329 r94353 81 81 }; 82 82 83 #if !USE(THREADED_COMPOSITING)84 83 #if USE(SKIA) 85 84 class LayerTextureUpdaterSkPicture : public LayerTextureUpdaterCanvas { … … 110 109 }; 111 110 #endif // SKIA 112 #endif // !THREADED_COMPOSITING113 111 114 112 } // namespace WebCore -
trunk/Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp
r93640 r94353 66 66 TiledLayerChromium::TiledLayerChromium(GraphicsLayerChromium* owner) 67 67 : LayerChromium(owner) 68 , m_layerTreeHost(0) 68 69 , m_tilingOption(AutoTile) 69 70 , m_textureFormat(GraphicsContext3D::INVALID_ENUM) … … 116 117 117 118 IntSize requestedSize = isTiled ? tileSize : contentBounds(); 118 const int maxSize = layerRenderer()->maxTextureSize();119 const int maxSize = m_layerTreeHost->layerRendererCapabilities().maxTextureSize; 119 120 IntSize clampedSize = requestedSize.shrunkTo(IntSize(maxSize, maxSize)); 120 121 m_tiler->setTileSize(clampedSize); … … 137 138 void TiledLayerChromium::setLayerTreeHost(CCLayerTreeHost* host) 138 139 { 140 LayerChromium::setLayerTreeHost(host); 141 m_layerTreeHost = host; 139 142 if (m_tiler) 140 143 return; … … 142 145 createTextureUpdater(host); 143 146 144 m_textureFormat = host-> bestTextureFormat();147 m_textureFormat = host->layerRendererCapabilities().bestTextureFormat; 145 148 m_textureOrientation = textureUpdater()->orientation(); 146 149 m_sampledTexelFormat = textureUpdater()->sampledTexelFormat(m_textureFormat); -
trunk/Source/WebCore/platform/graphics/chromium/TiledLayerChromium.h
r93615 r94353 89 89 TextureManager* textureManager() const; 90 90 91 CCLayerTreeHost* m_layerTreeHost; 92 91 93 // State held between update and upload. 92 94 IntRect m_paintRect; -
trunk/Source/WebCore/platform/graphics/chromium/VideoLayerChromium.cpp
r93796 r94353 148 148 void VideoLayerChromium::setLayerTreeHost(CCLayerTreeHost* layerTreeHost) 149 149 { 150 LayerChromium::setLayerTreeHost(layerTreeHost); 150 151 if (m_layerTreeHost == layerTreeHost) 151 152 return; … … 179 180 ASSERT(textureFormat != GraphicsContext3D::INVALID_VALUE); 180 181 181 int maxTextureSize = m_layerTreeHost-> maxTextureSize();182 int maxTextureSize = m_layerTreeHost->layerRendererCapabilities().maxTextureSize; 182 183 183 184 for (unsigned plane = 0; plane < frame->planes(); plane++) { -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCCanvasLayerImpl.cpp
r93346 r94353 32 32 #include "GraphicsContext3D.h" 33 33 #include "LayerRendererChromium.h" 34 #include "cc/CC LayerTreeHostImplProxy.h"34 #include "cc/CCProxy.h" 35 35 #include <wtf/text/WTFString.h> 36 36 … … 51 51 void CCCanvasLayerImpl::draw() 52 52 { 53 ASSERT(CC LayerTreeHostImplProxy::isImplThread());53 ASSERT(CCProxy::isImplThread()); 54 54 ASSERT(layerRenderer()); 55 55 const CCCanvasLayerImpl::Program* program = layerRenderer()->canvasLayerProgram(); -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp
r93927 r94353 31 31 #include "LayerRendererChromium.h" 32 32 #include "NonCompositedContentHost.h" 33 #include "PlatformColor.h"34 33 #include "TraceEvent.h" 35 #include " cc/CCLayerTreeHostCommitter.h"34 #include "TreeSynchronizer.h" 36 35 #include "cc/CCLayerTreeHostImpl.h" 36 #include "cc/CCSingleThreadProxy.h" 37 #include "cc/CCThread.h" 38 #include "cc/CCThreadProxy.h" 37 39 38 40 namespace WebCore { … … 47 49 48 50 CCLayerTreeHost::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) 53 52 , m_client(client) 54 53 , m_frameNumber(0) 55 54 , m_nonCompositedContentHost(NonCompositedContentHost::create(m_client->createRootLayerPainter())) 56 55 , m_settings(settings) 56 , m_visible(true) 57 57 { 58 58 } … … 60 60 bool CCLayerTreeHost::initialize() 61 61 { 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)) 64 71 return false; 65 72 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; 71 75 72 76 m_rootLayer = GraphicsLayer::create(0); … … 78 82 m_rootLayer->addChild(m_nonCompositedContentHost->graphicsLayer()); 79 83 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. 84 85 m_proxy->setNeedsCommitAndRedraw(); 85 #endif86 86 87 87 return true; … … 91 91 { 92 92 TRACE_EVENT("CCLayerTreeHost::~CCLayerTreeHost", this, 0); 93 #if USE(THREADED_COMPOSITING)94 93 m_proxy->stop(); 95 94 m_proxy.clear(); 96 #endif97 }98 99 void CCLayerTreeHost::beginCommit()100 {101 }102 103 void CCLayerTreeHost::commitComplete()104 {105 m_frameNumber++;106 95 } 107 96 … … 113 102 } 114 103 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 104 void CCLayerTreeHost::preCommit(CCLayerTreeHostImpl* hostImpl) 105 { 106 hostImpl->setVisible(m_visible); 107 hostImpl->setViewport(viewportSize()); 108 } 109 110 void 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 130 PassOwnPtr<CCThread> CCLayerTreeHost::createCompositorThread() 131 { 132 return m_client->createCompositorThread(); 133 } 134 135 PassRefPtr<GraphicsContext3D> CCLayerTreeHost::createLayerTreeHostContext3D() 136 { 137 return m_client->createLayerTreeHostContext3D(); 138 } 139 140 PassOwnPtr<CCLayerTreeHostImpl> CCLayerTreeHost::createLayerTreeHostImpl() 141 { 142 return CCLayerTreeHostImpl::create(m_settings); 143 } 144 145 void CCLayerTreeHost::didRecreateGraphicsContext(bool success) 146 { 147 m_client->didRecreateGraphicsContext(success); 148 } 149 150 #if !USE(THREADED_COMPOSITING) 151 void CCLayerTreeHost::scheduleComposite() 152 { 153 m_client->scheduleComposite(); 154 } 155 #endif 156 157 // Temporary hack until WebViewImpl context creation gets simplified 127 158 GraphicsContext3D* CCLayerTreeHost::context() 128 159 { 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 164 bool CCLayerTreeHost::compositeAndReadback(void *pixels, const IntRect& rect) 165 { 166 return m_proxy->compositeAndReadback(pixels, rect); 140 167 } 141 168 142 169 void CCLayerTreeHost::finishAllRendering() 143 170 { 144 #if USE(THREADED_COMPOSITING) 145 // FIXME: need to implement this. 146 #else 147 m_layerRenderer->finish(); 148 #endif 171 m_proxy->finishAllRendering(); 149 172 } 150 173 … … 152 175 { 153 176 m_nonCompositedContentHost->invalidateRect(dirtyRect); 177 } 178 179 const LayerRendererCapabilities& CCLayerTreeHost::layerRendererCapabilities() const 180 { 181 return m_proxy->layerRendererCapabilities(); 154 182 } 155 183 … … 178 206 m_nonCompositedContentHost->graphicsLayer()->removeAllChildren(); 179 207 m_nonCompositedContentHost->invalidateEntireLayer(); 180 if (layer) {208 if (layer) 181 209 m_nonCompositedContentHost->graphicsLayer()->addChild(layer); 182 layer->platformLayer()->setLayerRenderer(m_layerRenderer.get());183 } else184 layerRenderer()->clearRootCCLayerImpl();185 186 210 } 187 211 … … 194 218 m_nonCompositedContentHost->graphicsLayer()->setSize(contentsSize); 195 219 196 if (visibleRectChanged) {220 if (visibleRectChanged) 197 221 m_nonCompositedContentHost->invalidateEntireLayer(); 198 if (m_layerRenderer)199 m_layerRenderer->viewportChanged();200 }201 222 202 223 setNeedsCommitAndRedraw(); … … 205 226 void CCLayerTreeHost::setVisible(bool visible) 206 227 { 228 m_visible = visible; 229 m_proxy->setNeedsCommitAndRedraw(); 230 } 231 232 void CCLayerTreeHost::loseCompositorContext() 233 { 234 m_proxy->loseCompositorContext(); 235 } 236 237 TextureManager* CCLayerTreeHost::contentsTextureManager() const 238 { 239 return m_proxy->contentsTextureManager(); 240 } 241 207 242 #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); 243 void CCLayerTreeHost::composite() 244 { 245 ASSERT(!m_settings.enableCompositorThread); 246 static_cast<CCSingleThreadProxy*>(m_proxy.get())->compositeImmediately(); 304 247 } 305 248 #endif // !USE(THREADED_COMPOSITING) -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h
r93796 r94353 28 28 #include "GraphicsTypes3D.h" 29 29 #include "IntRect.h" 30 #include "cc/CCLayerTreeHostCommitter.h" 31 #include "cc/CCLayerTreeHostImplProxy.h" 30 #include "cc/CCProxy.h" 32 31 33 32 #include <wtf/PassOwnPtr.h> … … 35 34 #include <wtf/RefCounted.h> 36 35 36 #if USE(SKIA) 37 class GrContext; 38 #endif 39 37 40 namespace WebCore { 38 41 39 42 class CCLayerTreeHostImpl; 40 class CCLayerTreeHostImplClient;41 43 class CCThread; 42 44 class GraphicsContext3D; … … 66 68 : acceleratePainting(false) 67 69 , compositeOffscreen(false) 70 , enableCompositorThread(false) 68 71 , showFPSCounter(false) 69 72 , showPlatformLayerTree(false) { } … … 71 74 bool acceleratePainting; 72 75 bool compositeOffscreen; 76 bool enableCompositorThread; 73 77 bool showFPSCounter; 74 78 bool showPlatformLayerTree; 79 }; 80 81 // Provides information on an Impl's rendering capabilities back to the CCLayerTreeHost 82 struct 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; 75 93 }; 76 94 … … 80 98 virtual ~CCLayerTreeHost(); 81 99 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 85 111 86 virtual PassOwnPtr<CCLayerTreeHostImpl> createLayerTreeHostImpl(CCLayerTreeHostImplClient*); 87 virtual PassOwnPtr<CCLayerTreeHostCommitter> createLayerTreeHostCommitter(); 88 112 // CCLayerTreeHost interface to WebView. 89 113 bool animating() const { return m_animating; } 90 114 void setAnimating(bool animating) { m_animating = animating; } // Can be removed when non-threaded scheduling moves inside. … … 92 116 CCLayerTreeHostClient* client() { return m_client; } 93 117 118 #if !USE(THREADED_COMPOSITING) 119 void composite(); 120 #endif 121 94 122 GraphicsContext3D* context(); 95 123 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&); 97 128 98 129 void finishAllRendering(); … … 101 132 102 133 void invalidateRootLayerRect(const IntRect& dirtyRect); 134 135 const LayerRendererCapabilities& layerRendererCapabilities() const; 136 137 // Test-only hook 138 void loseCompositorContext(); 103 139 104 140 void setNeedsCommitAndRedraw(); … … 118 154 void setVisible(bool); 119 155 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 #endif128 129 156 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; }134 157 135 158 protected: … … 141 164 PassRefPtr<LayerRendererChromium> createLayerRenderer(); 142 165 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 #endif151 152 int m_maxTextureSize;153 GC3Denum m_bestTextureFormat;154 bool m_contextSupportsMapSub;155 156 166 bool m_animating; 157 167 … … 160 170 int m_frameNumber; 161 171 162 OwnPtr<CC LayerTreeHostImplProxy> m_proxy;172 OwnPtr<CCProxy> m_proxy; 163 173 164 174 OwnPtr<GraphicsLayer> m_rootLayer; … … 168 178 169 179 IntSize m_viewportSize; 180 bool m_visible; 170 181 }; 171 182 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp
r92895 r94353 39 39 namespace WebCore { 40 40 41 PassOwnPtr<CCLayerTreeHostImpl> CCLayerTreeHostImpl::create( CCLayerTreeHostImplClient* client, PassRefPtr<LayerRendererChromium> renderer)41 PassOwnPtr<CCLayerTreeHostImpl> CCLayerTreeHostImpl::create(const CCSettings& settings) 42 42 { 43 return adoptPtr(new CCLayerTreeHostImpl( client, renderer));43 return adoptPtr(new CCLayerTreeHostImpl(settings)); 44 44 } 45 45 46 CCLayerTreeHostImpl::CCLayerTreeHostImpl( CCLayerTreeHostImplClient* client, PassRefPtr<LayerRendererChromium> renderer)46 CCLayerTreeHostImpl::CCLayerTreeHostImpl(const CCSettings& settings) 47 47 : m_sourceFrameNumber(-1) 48 48 , m_frameNumber(0) 49 , m_client(client) 50 , m_commitPending(false) 51 , m_layerRenderer(renderer) 52 , m_redrawPending(false) 49 , m_settings(settings) 53 50 { 54 51 } … … 57 54 { 58 55 TRACE_EVENT("CCLayerTreeHostImpl::~CCLayerTreeHostImpl()", this, 0); 56 if (m_layerRenderer) 57 m_layerRenderer->close(); 59 58 } 60 59 … … 65 64 void CCLayerTreeHostImpl::commitComplete() 66 65 { 67 m_commitPending = false; 68 setNeedsRedraw(); 66 } 67 68 GraphicsContext3D* CCLayerTreeHostImpl::context() 69 { 70 return m_layerRenderer ? m_layerRenderer->context() : 0; 69 71 } 70 72 71 73 void CCLayerTreeHostImpl::drawLayers() 72 74 { 73 // If a commit is pending, do not draw. This is a temporary restriction that74 // is necessary because drawLayers is currently a blocking operation on the main thread.75 if (m_commitPending)76 return;77 78 75 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(); 95 79 96 80 ++m_frameNumber; 97 81 } 98 82 99 void CCLayerTreeHostImpl:: setNeedsCommitAndRedraw()83 void CCLayerTreeHostImpl::finishAllRendering() 100 84 { 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(); 107 86 } 108 87 109 void CCLayerTreeHostImpl::setNeedsRedraw()88 bool CCLayerTreeHostImpl::isContextLost() 110 89 { 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(); 117 92 } 118 93 119 void CCLayerTreeHostImpl::drawLayersOnMainThread(CCCompletionEvent* completion, bool* contextLost) 94 const LayerRendererCapabilities& CCLayerTreeHostImpl::layerRendererCapabilities() const 120 95 { 121 ASSERT(isMainThread()); 96 return m_layerRenderer->capabilities(); 97 } 122 98 123 if (m_layerRenderer->owner()->rootLayer()) { 124 m_layerRenderer->drawLayers(); 125 m_layerRenderer->present(); 99 void CCLayerTreeHostImpl::present() 100 { 101 ASSERT(m_layerRenderer && !isContextLost()); 102 m_layerRenderer->present(); 103 } 126 104 127 GraphicsContext3D* context = m_layerRenderer->context(); 128 *contextLost = context->getExtensions()->getGraphicsResetStatusARB() != GraphicsContext3D::NO_ERROR; 129 } else 130 *contextLost = false; 131 completion->signal(); 105 void CCLayerTreeHostImpl::readback(void* pixels, const IntRect& rect) 106 { 107 ASSERT(m_layerRenderer && !isContextLost()); 108 m_layerRenderer->getFramebufferPixels(pixels, rect); 109 } 110 111 void CCLayerTreeHostImpl::setRootLayer(PassRefPtr<CCLayerImpl> layer) 112 { 113 m_rootLayerImpl = layer; 114 } 115 116 void CCLayerTreeHostImpl::setVisible(bool visible) 117 { 118 if (m_layerRenderer && !visible) 119 m_layerRenderer->releaseTextures(); 120 } 121 122 bool 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 155 void CCLayerTreeHostImpl::updateLayers() 156 { 157 if (m_layerRenderer) 158 m_layerRenderer->updateLayers(); 159 } 160 161 void CCLayerTreeHostImpl::setViewport(const IntSize& viewportSize) 162 { 163 bool changed = viewportSize != m_viewportSize; 164 m_viewportSize = viewportSize; 165 if (changed) 166 m_layerRenderer->viewportChanged(); 132 167 } 133 168 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h
r92895 r94353 26 26 #define CCLayerTreeHostImpl_h 27 27 28 #include "cc/CC Thread.h"28 #include "cc/CCLayerTreeHost.h" 29 29 #include <wtf/RefPtr.h> 30 #include <wtf/ThreadSafeRefCounted.h> 30 31 #if USE(SKIA) 32 class GrContext; 33 #endif 31 34 32 35 namespace WebCore { 33 36 34 37 class CCCompletionEvent; 38 class CCLayerImpl; 35 39 class 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 }; 40 struct LayerRendererCapabilities; 46 41 47 42 // CCLayerTreeHostImpl owns the CCLayerImpl tree as well as associated rendering state … … 49 44 WTF_MAKE_NONCOPYABLE(CCLayerTreeHostImpl); 50 45 public: 51 static PassOwnPtr<CCLayerTreeHostImpl> create( CCLayerTreeHostImplClient*, PassRefPtr<LayerRendererChromium>);46 static PassOwnPtr<CCLayerTreeHostImpl> create(const CCSettings&); 52 47 virtual ~CCLayerTreeHostImpl(); 53 48 … … 55 50 virtual void commitComplete(); 56 51 52 GraphicsContext3D* context(); 53 57 54 void drawLayers(); 58 55 56 void finishAllRendering(); 59 57 int frameNumber() const { return m_frameNumber; } 60 58 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); 63 72 64 73 int sourceFrameNumber() const { return m_sourceFrameNumber; } 65 74 void setSourceFrameNumber(int frameNumber) { m_sourceFrameNumber = frameNumber; } 66 75 76 void updateLayers(); 77 78 void setViewport(const IntSize& viewportSize); 79 const IntSize& viewportSize() const { return m_viewportSize; } 80 67 81 protected: 68 CCLayerTreeHostImpl(CCLayerTreeHostImplClient*, PassRefPtr<LayerRendererChromium>); 69 void drawLayersOnMainThread(CCCompletionEvent*, bool* contextLost); 82 explicit CCLayerTreeHostImpl(const CCSettings&); 70 83 int m_sourceFrameNumber; 71 84 int m_frameNumber; 72 85 73 86 private: 74 CCLayerTreeHostImplClient* m_client;75 bool m_commitPending;76 87 RefPtr<LayerRendererChromium> m_layerRenderer; 77 bool m_redrawPending; 88 RefPtr<CCLayerImpl> m_rootLayerImpl; 89 CCSettings m_settings; 90 IntSize m_viewportSize; 78 91 }; 79 92 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCMainThreadTask.h
r89837 r94353 159 159 }; 160 160 161 162 template<typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4> 163 class MainThreadTask4 : public CCMainThread::Task { 164 public: 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 177 private: 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 193 private: 194 Method m_method; 195 P1 m_parameter1; 196 P2 m_parameter2; 197 P3 m_parameter3; 198 P4 m_parameter4; 199 }; 200 201 template<typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5> 202 class MainThreadTask5 : public CCMainThread::Task { 203 public: 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 217 private: 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 234 private: 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 161 243 template<typename T> 162 244 PassOwnPtr<CCMainThread::Task> createMainThreadTask( … … 216 298 } 217 299 300 template<typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4> 301 PassOwnPtr<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 319 template<typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5> 320 PassOwnPtr<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 218 340 } // namespace WebCore 219 341 220 #endif // CCMainThreadTask_h342 #endif // MainThreadTask_h -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCPluginLayerImpl.cpp
r93346 r94353 32 32 #include "GraphicsContext3D.h" 33 33 #include "LayerRendererChromium.h" 34 #include "cc/CC LayerTreeHostImplProxy.h"34 #include "cc/CCProxy.h" 35 35 #include <wtf/text/WTFString.h> 36 36 … … 49 49 void CCPluginLayerImpl::draw() 50 50 { 51 ASSERT(CC LayerTreeHostImplProxy::isImplThread());51 ASSERT(CCProxy::isImplThread()); 52 52 ASSERT(layerRenderer()); 53 53 const CCPluginLayerImpl::Program* program = layerRenderer()->pluginLayerProgram(); -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCProxy.cpp
-
Property
svn:eol-style
set to
LF
r94352 r94353 25 25 #include "config.h" 26 26 27 #include "cc/CC LayerTreeHostCommitter.h"27 #include "cc/CCProxy.h" 28 28 29 #include "TraceEvent.h" 29 30 #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 35 using namespace WTF; 31 36 32 37 namespace WebCore { 33 38 34 PassOwnPtr<CCLayerTreeHostCommitter> CCLayerTreeHostCommitter::create() 39 #ifndef NDEBUG 40 bool CCProxy::isMainThread() 35 41 { 36 return adoptPtr(new CCLayerTreeHostCommitter());42 return ::isMainThread(); 37 43 } 38 44 39 void CCLayerTreeHostCommitter::commit(CCLayerTreeHost* host, CCLayerTreeHostImpl* hostImpl) 40 { 41 hostImpl->setSourceFrameNumber(host->frameNumber());45 namespace { 46 bool fakeImplThread = false; 47 static WTF::ThreadIdentifier implThreadID; 42 48 } 43 49 50 bool CCProxy::isImplThread() 51 { 52 return fakeImplThread || currentThread() == implThreadID; 44 53 } 54 55 void CCProxy::setImplThread(bool isImplThread) 56 { 57 fakeImplThread = isImplThread; 58 } 59 60 void CCProxy::setImplThread(WTF::ThreadIdentifier id) 61 { 62 implThreadID = id; 63 } 64 65 #endif // !NDEBUG 66 67 } -
Property
svn:eol-style
set to
-
trunk/Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.h
r94352 r94353 23 23 */ 24 24 25 #ifndef CC LayerTreeHostImplProxy_h26 #define CC LayerTreeHostImplProxy_h25 #ifndef CCSingleThreadProxy_h 26 #define CCSingleThreadProxy_h 27 27 28 28 #include "cc/CCCompletionEvent.h" 29 29 #include "cc/CCLayerTreeHostImpl.h" 30 #include "cc/CCProxy.h" 30 31 #include <wtf/OwnPtr.h> 31 32 … … 33 34 34 35 class CCLayerTreeHost; 35 class CCLayerTreeHostCommitter;36 36 37 class CCLayerTreeHostImplProxy : public CCLayerTreeHostImplClient { 38 WTF_MAKE_NONCOPYABLE(CCLayerTreeHostImplProxy); 37 class CCSingleThreadProxy : public CCProxy { 39 38 public: 40 virtual ~CCLayerTreeHostImplProxy(); 39 static PassOwnPtr<CCProxy> create(CCLayerTreeHost*); 40 virtual ~CCSingleThreadProxy(); 41 41 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(); 43 54 44 void setNeedsCommitAndRedraw();45 v oid setNeedsRedraw();55 // Temporary hack while LayerChromiums hold references to LayerRendererChromiums 56 virtual TextureManager* contentsTextureManager(); 46 57 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. 57 59 #if !USE(THREADED_COMPOSITING) 58 // Fake threaded compositing so we can catch incorrect usage. 59 static void setImplThread(bool); 60 #endif 60 void compositeImmediately(); 61 61 #endif 62 62 63 protected:64 explicit CCLayerTreeHostImplProxy(CCLayerTreeHost*);65 virtual PassOwnPtr<CCLayerTreeHostImpl> createLayerTreeHostImpl() = 0;66 CCLayerTreeHost* host() const { return m_layerTreeHost; }67 68 63 private: 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(); 82 68 83 69 // Accessed on main thread only. … … 86 72 // Used on the CCThread, but checked on main thread during initialization/shutdown. 87 73 OwnPtr<CCLayerTreeHostImpl> m_layerTreeHostImpl; 74 75 int m_numFailedRecreateAttempts; 76 bool m_graphicsContextLost; 88 77 }; 89 78 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.h
r94352 r94353 23 23 */ 24 24 25 #ifndef CC LayerTreeHostImplProxy_h26 #define CC LayerTreeHostImplProxy_h25 #ifndef CCThreadProxy_h 26 #define CCThreadProxy_h 27 27 28 28 #include "cc/CCCompletionEvent.h" 29 29 #include "cc/CCLayerTreeHostImpl.h" 30 #include "cc/CCProxy.h" 30 31 #include <wtf/OwnPtr.h> 31 32 … … 33 34 34 35 class CCLayerTreeHost; 35 class CCLayerTreeHostCommitter;36 36 37 class CCLayerTreeHostImplProxy : public CCLayerTreeHostImplClient { 38 WTF_MAKE_NONCOPYABLE(CCLayerTreeHostImplProxy); 37 class CCThreadProxy : public CCProxy { 39 38 public: 40 virtual ~CCLayerTreeHostImplProxy();39 static PassOwnPtr<CCProxy> create(CCLayerTreeHost*); 41 40 42 bool isStarted() const;41 virtual ~CCThreadProxy(); 43 42 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(); 46 55 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(); 67 58 68 59 private: 60 explicit CCThreadProxy(CCLayerTreeHost*); 61 69 62 // Called on CCMainThread 70 void requestFrameAndCommit(double frameBeginTime);63 void beginFrameAndCommit(double frameBeginTime); 71 64 72 65 // Called on CCThread 73 void commitOnCCThread(CCLayerTreeHostCommitter*, CCCompletionEvent*); 66 void beginFrameAndCommitOnCCThread(); 67 void commitOnCCThread(CCCompletionEvent*); 74 68 void drawLayersOnCCThread(); 75 void initImplOnCCThread(CCCompletionEvent*); 69 void initializeImplOnCCThread(CCCompletionEvent*); 70 void initializeLayerRendererOnCCThread(CCLayerTreeHost*, GraphicsContext3D*, CCCompletionEvent*, bool* initializeSucceeded, LayerRendererCapabilities*); 76 71 void setNeedsCommitAndRedrawOnCCThread(); 77 72 void setNeedsRedrawOnCCThread(); … … 83 78 // Accessed on main thread only. 84 79 CCLayerTreeHost* m_layerTreeHost; 80 LayerRendererCapabilities m_layerRendererCapabilitiesMainThreadCopy; 85 81 86 82 // Used on the CCThread, but checked on main thread during initialization/shutdown. -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCThreadTask.h
r89837 r94353 199 199 }; 200 200 201 template<typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5> 202 class CCThreadTask5 : public CCThread::Task { 203 public: 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 217 private: 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 234 private: 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 201 243 template<typename T> 202 244 PassOwnPtr<CCThread::Task> createCCThreadTask( … … 275 317 } 276 318 319 template<typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5> 320 PassOwnPtr<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 277 340 } // namespace WebCore 278 341 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp
r93740 r94353 32 32 #include "FloatQuad.h" 33 33 #include "LayerRendererChromium.h" 34 #include "cc/CCLayerTreeHostImplProxy.h"35 34 #include <wtf/text/WTFString.h> 36 35 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp
r93796 r94353 33 33 #include "LayerRendererChromium.h" 34 34 #include "NotImplemented.h" 35 #include "cc/CC LayerTreeHostImplProxy.h"35 #include "cc/CCProxy.h" 36 36 #include <wtf/text/WTFString.h> 37 37 … … 80 80 void CCVideoLayerImpl::draw() 81 81 { 82 ASSERT(CC LayerTreeHostImplProxy::isImplThread());82 ASSERT(CCProxy::isImplThread()); 83 83 84 84 if (m_skipsDraw) -
trunk/Source/WebKit/chromium/ChangeLog
r94343 r94353 1 2011-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 1 16 2011-09-01 Dominic Mazzoni <dmazzoni@google.com> 2 17 -
trunk/Source/WebKit/chromium/src/WebViewImpl.cpp
r94275 r94353 1158 1158 } 1159 1159 1160 void WebViewImpl::composite(bool finish)1160 void WebViewImpl::composite(bool) 1161 1161 { 1162 1162 #if USE(ACCELERATED_COMPOSITING) … … 1171 1171 m_pageOverlay->update(); 1172 1172 1173 m_layerTreeHost->composite( finish);1173 m_layerTreeHost->composite(); 1174 1174 #endif 1175 1175 #endif … … 2528 2528 2529 2529 IntRect damagedRect(0, 0, m_size.width, m_size.height); 2530 if (m_isAcceleratedCompositingActive) 2531 invalidateRootLayerRect(damagedRect); 2532 else 2530 if (!m_isAcceleratedCompositingActive) 2533 2531 m_client->didInvalidateRect(damagedRect); 2534 2532 } … … 2621 2619 ccSettings.acceleratePainting = page()->settings()->acceleratedDrawingEnabled(); 2622 2620 ccSettings.compositeOffscreen = settings()->compositeToTextureEnabled(); 2621 #if USE(THREADED_COMPOSITING) 2622 ccSettings.enableCompositorThread = true; 2623 #else 2624 ccSettings.enableCompositorThread = false; 2625 #endif 2623 2626 ccSettings.showFPSCounter = settings()->showFPSCounter(); 2624 2627 ccSettings.showPlatformLayerTree = settings()->showPlatformLayerTree(); … … 2626 2629 m_layerTreeHost = CCLayerTreeHost::create(this, ccSettings); 2627 2630 if (m_layerTreeHost) { 2631 updateLayerTreeViewport(); 2628 2632 m_client->didActivateAcceleratedCompositing(true); 2629 2633 m_isAcceleratedCompositingActive = true; … … 2670 2674 void WebViewImpl::didRecreateGraphicsContext(bool success) 2671 2675 { 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) 2677 2690 m_pageOverlay->update(); 2678 2691 } -
trunk/Source/WebKit/chromium/tests/CCThreadTaskTest.cpp
r83249 r94353 42 42 MOCK_METHOD3(method3, void(int a1, int a2, int a3)); 43 43 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)); 44 45 }; 45 46 … … 52 53 EXPECT_CALL(mock, method3(9, 8, 7)).Times(1); 53 54 EXPECT_CALL(mock, method4(9, 8, 7, 6)).Times(1); 55 EXPECT_CALL(mock, method5(9, 8, 7, 6, 5)).Times(1); 54 56 55 57 createCCThreadTask(&mock, &Mock::method0)->performTask(); … … 58 60 createCCThreadTask(&mock, &Mock::method3, 9, 8, 7)->performTask(); 59 61 createCCThreadTask(&mock, &Mock::method4, 9, 8, 7, 6)->performTask(); 62 createCCThreadTask(&mock, &Mock::method5, 9, 8, 7, 6, 5)->performTask(); 60 63 } 61 64
Note: See TracChangeset
for help on using the changeset viewer.