Changeset 116351 in webkit
- Timestamp:
- May 7, 2012 1:40:51 PM (12 years ago)
- Location:
- trunk/Source
- Files:
-
- 2 added
- 1 deleted
- 18 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r116343 r116351 1 2012-05-07 David Reveman <reveman@chromium.org> 2 3 [Chromium] Use GL_CHROMIUM_command_buffer_query to throttle texture uploads. 4 https://bugs.webkit.org/show_bug.cgi?id=81004 5 6 Reviewed by Adrienne Walker. 7 8 Add ThrottledTextureUploader class that uses GL_CHROMIUM_command_buffer_query 9 to throttle texture uploads based on number of currently pending queries. 10 11 Unit test: ThrottledTextureUploaderTest.IsBusy 12 13 * WebCore.gypi: 14 * platform/graphics/chromium/LayerRendererChromium.cpp: 15 (WebCore::LayerRendererChromium::create): 16 (WebCore::LayerRendererChromium::LayerRendererChromium): 17 (WebCore::LayerRendererChromium::initializeSharedObjects): 18 * platform/graphics/chromium/LayerRendererChromium.h: 19 (LayerRendererChromium): 20 * platform/graphics/chromium/TextureUploader.cpp: Removed. 21 * platform/graphics/chromium/TextureUploader.h: 22 (TextureUploader): 23 * platform/graphics/chromium/ThrottledTextureUploader.cpp: Added. 24 (WebCore): 25 (WebCore::ThrottledTextureUploader::Query::Query): 26 (WebCore::ThrottledTextureUploader::Query::~Query): 27 (WebCore::ThrottledTextureUploader::Query::begin): 28 (WebCore::ThrottledTextureUploader::Query::end): 29 (WebCore::ThrottledTextureUploader::Query::isPending): 30 (WebCore::ThrottledTextureUploader::Query::wait): 31 (WebCore::ThrottledTextureUploader::ThrottledTextureUploader): 32 (WebCore::ThrottledTextureUploader::~ThrottledTextureUploader): 33 (WebCore::ThrottledTextureUploader::isBusy): 34 (WebCore::ThrottledTextureUploader::beginUploads): 35 (WebCore::ThrottledTextureUploader::endUploads): 36 (WebCore::ThrottledTextureUploader::uploadTexture): 37 (WebCore::ThrottledTextureUploader::processQueries): 38 * platform/graphics/chromium/ThrottledTextureUploader.h: Copied from Source/WebCore/platform/graphics/chromium/TextureUploader.h. 39 (WebCore): 40 (ThrottledTextureUploader): 41 (WebCore::ThrottledTextureUploader::create): 42 (Query): 43 (WebCore::ThrottledTextureUploader::Query::create): 44 * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp: 45 (WebCore::CCLayerTreeHostImpl::initializeLayerRenderer): 46 * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h: 47 (CCLayerTreeHostImpl): 48 * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp: 49 (UnthrottledTextureUploader): 50 (WebCore::UnthrottledTextureUploader::create): 51 (WebCore::UnthrottledTextureUploader::~UnthrottledTextureUploader): 52 (WebCore::UnthrottledTextureUploader::isBusy): 53 (WebCore::UnthrottledTextureUploader::beginUploads): 54 (WebCore::UnthrottledTextureUploader::endUploads): 55 (WebCore::UnthrottledTextureUploader::uploadTexture): 56 (WebCore::UnthrottledTextureUploader::UnthrottledTextureUploader): 57 (WebCore): 58 (WebCore::CCSingleThreadProxy::initializeLayerRenderer): 59 (WebCore::CCSingleThreadProxy::recreateContext): 60 (WebCore::CCSingleThreadProxy::doCommit): 61 * platform/graphics/chromium/cc/CCTextureUpdater.cpp: 62 (WebCore::CCTextureUpdater::update): 63 * platform/graphics/chromium/cc/CCTextureUpdater.h: 64 (CCTextureUpdater): 65 * platform/graphics/chromium/cc/CCThreadProxy.cpp: 66 (WebCore): 67 (UnthrottledTextureUploader): 68 (WebCore::UnthrottledTextureUploader::create): 69 (WebCore::UnthrottledTextureUploader::~UnthrottledTextureUploader): 70 (WebCore::UnthrottledTextureUploader::isBusy): 71 (WebCore::UnthrottledTextureUploader::beginUploads): 72 (WebCore::UnthrottledTextureUploader::endUploads): 73 (WebCore::UnthrottledTextureUploader::uploadTexture): 74 (WebCore::UnthrottledTextureUploader::UnthrottledTextureUploader): 75 (WebCore::CCThreadProxy::initializeLayerRendererOnImplThread): 76 (WebCore::CCThreadProxy::recreateContextOnImplThread): 77 1 78 2012-05-07 Rob Buis <rbuis@rim.com> 2 79 -
trunk/Source/WebCore/WebCore.gypi
r116342 r116351 3604 3604 'platform/graphics/chromium/TextureManager.cpp', 3605 3605 'platform/graphics/chromium/TextureManager.h', 3606 'platform/graphics/chromium/TextureUploader.cpp',3607 3606 'platform/graphics/chromium/TextureUploader.h', 3607 'platform/graphics/chromium/ThrottledTextureUploader.cpp', 3608 'platform/graphics/chromium/ThrottledTextureUploader.h', 3608 3609 'platform/graphics/chromium/TiledLayerChromium.cpp', 3609 3610 'platform/graphics/chromium/TiledLayerChromium.h', -
trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
r115881 r116351 49 49 #include "TextureCopier.h" 50 50 #include "TextureManager.h" 51 #include "ThrottledTextureUploader.h" 51 52 #include "TraceEvent.h" 52 53 #include "TrackingTextureAllocator.h" … … 194 195 195 196 196 PassOwnPtr<LayerRendererChromium> LayerRendererChromium::create(LayerRendererChromiumClient* client, PassRefPtr<GraphicsContext3D> context )197 { 198 OwnPtr<LayerRendererChromium> layerRenderer(adoptPtr(new LayerRendererChromium(client, context )));197 PassOwnPtr<LayerRendererChromium> LayerRendererChromium::create(LayerRendererChromiumClient* client, PassRefPtr<GraphicsContext3D> context, PassOwnPtr<TextureUploader> uploader) 198 { 199 OwnPtr<LayerRendererChromium> layerRenderer(adoptPtr(new LayerRendererChromium(client, context, uploader))); 199 200 if (!layerRenderer->initialize()) 200 201 return nullptr; … … 204 205 205 206 LayerRendererChromium::LayerRendererChromium(LayerRendererChromiumClient* client, 206 PassRefPtr<GraphicsContext3D> context) 207 PassRefPtr<GraphicsContext3D> context, 208 PassOwnPtr<TextureUploader> uploader) 207 209 : m_client(client) 208 210 , m_currentRenderSurface(0) 209 211 , m_currentManagedTexture(0) 210 212 , m_offscreenFramebufferId(0) 213 , m_textureUploader(uploader) 211 214 , m_context(context) 212 215 , m_defaultRenderSurface(0) … … 1380 1383 m_capabilities.maxTextureSize); 1381 1384 m_textureCopier = AcceleratedTextureCopier::create(m_context.get()); 1382 m_textureUploader = AcceleratedTextureUploader::create(m_context.get());1383 1385 m_contentsTextureAllocator = TrackingTextureAllocator::create(m_context.get()); 1384 1386 m_renderSurfaceTextureAllocator = TrackingTextureAllocator::create(m_context.get()); -
trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h
r115881 r116351 38 38 #include "IntRect.h" 39 39 #include "TextureCopier.h" 40 #include "T extureUploader.h"40 #include "ThrottledTextureUploader.h" 41 41 #include "TrackingTextureAllocator.h" 42 42 #include "cc/CCLayerTreeHost.h" … … 79 79 WTF_MAKE_NONCOPYABLE(LayerRendererChromium); 80 80 public: 81 static PassOwnPtr<LayerRendererChromium> create(LayerRendererChromiumClient*, PassRefPtr<GraphicsContext3D> );81 static PassOwnPtr<LayerRendererChromium> create(LayerRendererChromiumClient*, PassRefPtr<GraphicsContext3D>, PassOwnPtr<TextureUploader>); 82 82 83 83 ~LayerRendererChromium(); … … 145 145 bool isFramebufferDiscarded() const { return m_isFramebufferDiscarded; } 146 146 147 LayerRendererChromium(LayerRendererChromiumClient*, PassRefPtr<GraphicsContext3D> );147 LayerRendererChromium(LayerRendererChromiumClient*, PassRefPtr<GraphicsContext3D>, PassOwnPtr<TextureUploader>); 148 148 bool initialize(); 149 149 … … 287 287 OwnPtr<TextureManager> m_renderSurfaceTextureManager; 288 288 OwnPtr<AcceleratedTextureCopier> m_textureCopier; 289 OwnPtr< AcceleratedTextureUploader> m_textureUploader;289 OwnPtr<TextureUploader> m_textureUploader; 290 290 OwnPtr<TrackingTextureAllocator> m_contentsTextureAllocator; 291 291 OwnPtr<TrackingTextureAllocator> m_renderSurfaceTextureAllocator; -
trunk/Source/WebCore/platform/graphics/chromium/TextureUploader.h
r114450 r116351 32 32 class TextureUploader { 33 33 public: 34 virtual ~TextureUploader() { } 35 36 virtual bool isBusy() = 0; 37 virtual void beginUploads() = 0; 38 virtual void endUploads() = 0; 34 39 virtual void uploadTexture(GraphicsContext3D*, LayerTextureUpdater::Texture*, TextureAllocator*, const IntRect sourceRect, const IntRect destRect) = 0; 35 36 protected:37 virtual ~TextureUploader() { }38 };39 40 class AcceleratedTextureUploader : public TextureUploader {41 WTF_MAKE_NONCOPYABLE(AcceleratedTextureUploader);42 public:43 static PassOwnPtr<AcceleratedTextureUploader> create(PassRefPtr<GraphicsContext3D> context)44 {45 return adoptPtr(new AcceleratedTextureUploader(context));46 }47 virtual ~AcceleratedTextureUploader();48 49 virtual void uploadTexture(GraphicsContext3D*, LayerTextureUpdater::Texture*, TextureAllocator*, const IntRect sourceRect, const IntRect destRect);50 51 protected:52 explicit AcceleratedTextureUploader(PassRefPtr<GraphicsContext3D>);53 54 RefPtr<GraphicsContext3D> m_context;55 40 }; 56 41 -
trunk/Source/WebCore/platform/graphics/chromium/ThrottledTextureUploader.h
r116350 r116351 23 23 */ 24 24 25 #ifndef T extureUploader_h26 #define T extureUploader_h25 #ifndef ThrottledTextureUploader_h 26 #define ThrottledTextureUploader_h 27 27 28 #include "LayerTextureUpdater.h" 28 #include "TextureUploader.h" 29 30 #include <wtf/Deque.h> 29 31 30 32 namespace WebCore { 31 33 32 class TextureUploader { 34 class ThrottledTextureUploader : public TextureUploader { 35 WTF_MAKE_NONCOPYABLE(ThrottledTextureUploader); 33 36 public: 34 virtual void uploadTexture(GraphicsContext3D*, LayerTextureUpdater::Texture*, TextureAllocator*, const IntRect sourceRect, const IntRect destRect) = 0; 37 static PassOwnPtr<ThrottledTextureUploader> create(PassRefPtr<GraphicsContext3D> context) 38 { 39 return adoptPtr(new ThrottledTextureUploader(context)); 40 } 41 static PassOwnPtr<ThrottledTextureUploader> create(PassRefPtr<GraphicsContext3D> context, size_t pendingUploadLimit) 42 { 43 return adoptPtr(new ThrottledTextureUploader(context, pendingUploadLimit)); 44 } 45 virtual ~ThrottledTextureUploader(); 35 46 36 protected: 37 virtual ~TextureUploader() { } 38 }; 47 virtual bool isBusy() OVERRIDE; 48 virtual void beginUploads() OVERRIDE; 49 virtual void endUploads() OVERRIDE; 50 virtual void uploadTexture(GraphicsContext3D*, LayerTextureUpdater::Texture*, TextureAllocator*, const IntRect sourceRect, const IntRect destRect) OVERRIDE; 39 51 40 class AcceleratedTextureUploader : public TextureUploader { 41 WTF_MAKE_NONCOPYABLE(AcceleratedTextureUploader); 42 public: 43 static PassOwnPtr<AcceleratedTextureUploader> create(PassRefPtr<GraphicsContext3D> context) 44 { 45 return adoptPtr(new AcceleratedTextureUploader(context)); 46 } 47 virtual ~AcceleratedTextureUploader(); 52 private: 53 class Query { 54 public: 55 static PassOwnPtr<Query> create(PassRefPtr<GraphicsContext3D> context) { return adoptPtr(new Query(context)); } 48 56 49 virtual void uploadTexture(GraphicsContext3D*, LayerTextureUpdater::Texture*, TextureAllocator*, const IntRect sourceRect, const IntRect destRect);57 virtual ~Query(); 50 58 51 protected: 52 explicit AcceleratedTextureUploader(PassRefPtr<GraphicsContext3D>); 59 void begin(); 60 void end(); 61 bool isPending(); 62 void wait(); 63 64 private: 65 explicit Query(PassRefPtr<GraphicsContext3D>); 66 67 RefPtr<GraphicsContext3D> m_context; 68 unsigned m_queryId; 69 }; 70 71 ThrottledTextureUploader(PassRefPtr<GraphicsContext3D>); 72 ThrottledTextureUploader(PassRefPtr<GraphicsContext3D>, size_t pendingUploadLimit); 73 74 void processQueries(); 53 75 54 76 RefPtr<GraphicsContext3D> m_context; 77 size_t m_maxPendingQueries; 78 Deque<OwnPtr<Query> > m_pendingQueries; 79 Deque<OwnPtr<Query> > m_availableQueries; 55 80 }; 56 81 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp
r116152 r116351 532 532 } 533 533 534 bool CCLayerTreeHostImpl::initializeLayerRenderer(PassRefPtr<GraphicsContext3D> context )534 bool CCLayerTreeHostImpl::initializeLayerRenderer(PassRefPtr<GraphicsContext3D> context, PassOwnPtr<TextureUploader> uploader) 535 535 { 536 536 OwnPtr<LayerRendererChromium> layerRenderer; 537 layerRenderer = LayerRendererChromium::create(this, context );537 layerRenderer = LayerRendererChromium::create(this, context, uploader); 538 538 539 539 // Since we now have a new context/layerRenderer, we cannot continue to use the old -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h
r116142 r116351 123 123 int frameNumber() const { return m_frameNumber; } 124 124 125 bool initializeLayerRenderer(PassRefPtr<GraphicsContext3D> );125 bool initializeLayerRenderer(PassRefPtr<GraphicsContext3D>, PassOwnPtr<TextureUploader>); 126 126 bool isContextLost(); 127 127 LayerRendererChromium* layerRenderer() { return m_layerRenderer.get(); } -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.cpp
r115881 r116351 35 35 #include <wtf/CurrentTime.h> 36 36 37 using namespace std;38 37 using namespace WTF; 39 38 40 39 namespace WebCore { 40 41 class UnthrottledTextureUploader : public TextureUploader { 42 WTF_MAKE_NONCOPYABLE(UnthrottledTextureUploader); 43 public: 44 static PassOwnPtr<UnthrottledTextureUploader> create() 45 { 46 return adoptPtr(new UnthrottledTextureUploader()); 47 } 48 virtual ~UnthrottledTextureUploader() { } 49 50 virtual bool isBusy() { return false; } 51 virtual void beginUploads() { } 52 virtual void endUploads() { } 53 virtual void uploadTexture(GraphicsContext3D* context, LayerTextureUpdater::Texture* texture, TextureAllocator* allocator, const IntRect sourceRect, const IntRect destRect) { texture->updateRect(context, allocator, sourceRect, destRect); } 54 55 protected: 56 UnthrottledTextureUploader() { } 57 }; 41 58 42 59 PassOwnPtr<CCProxy> CCSingleThreadProxy::create(CCLayerTreeHost* layerTreeHost) … … 139 156 { 140 157 DebugScopedSetImplThread impl; 141 bool ok = m_layerTreeHostImpl->initializeLayerRenderer(m_contextBeforeInitialization.release() );158 bool ok = m_layerTreeHostImpl->initializeLayerRenderer(m_contextBeforeInitialization.release(), UnthrottledTextureUploader::create()); 142 159 if (ok) { 143 160 m_layerRendererInitialized = true; … … 163 180 DebugScopedSetImplThread impl; 164 181 m_layerTreeHost->deleteContentsTexturesOnImplThread(m_layerTreeHostImpl->contentsTextureAllocator()); 165 initialized = m_layerTreeHostImpl->initializeLayerRenderer(context );182 initialized = m_layerTreeHostImpl->initializeLayerRenderer(context, UnthrottledTextureUploader::create()); 166 183 if (initialized) { 167 184 m_layerRendererCapabilitiesForMainThread = m_layerTreeHostImpl->layerRendererCapabilities(); … … 204 221 205 222 m_layerTreeHost->beginCommitOnImplThread(m_layerTreeHostImpl.get()); 206 updater.update(m_layerTreeHostImpl->context(), m_layerTreeHostImpl->contentsTextureAllocator(), m_layerTreeHostImpl->layerRenderer()->textureCopier(), m_layerTreeHostImpl->layerRenderer()->textureUploader(), numeric_limits<size_t>::max()); 207 ASSERT(!updater.hasMoreUpdates()); 223 224 // CCTextureUpdater is non-blocking and will return without updating 225 // any textures if the uploader is busy. This shouldn't be a problem 226 // here as the throttled uploader isn't used in single thread mode. 227 // For correctness, loop until no more updates are pending. 228 while (updater.hasMoreUpdates()) 229 updater.update(m_layerTreeHostImpl->context(), m_layerTreeHostImpl->contentsTextureAllocator(), m_layerTreeHostImpl->layerRenderer()->textureCopier(), m_layerTreeHostImpl->layerRenderer()->textureUploader(), maxPartialTextureUpdates()); 230 208 231 m_layerTreeHostImpl->setVisible(m_layerTreeHost->visible()); 209 232 m_layerTreeHost->finishCommitOnImplThread(m_layerTreeHostImpl.get()); -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.cpp
r114450 r116351 93 93 } 94 94 95 boolCCTextureUpdater::update(GraphicsContext3D* context, TextureAllocator* allocator, TextureCopier* copier, TextureUploader* uploader, size_t count)95 void CCTextureUpdater::update(GraphicsContext3D* context, TextureAllocator* allocator, TextureCopier* copier, TextureUploader* uploader, size_t count) 96 96 { 97 97 size_t index; 98 size_t maxIndex = min(m_entryIndex + count, m_entries.size());99 for (index = m_entryIndex; index < maxIndex; ++index) {100 UpdateEntry& entry = m_entries[index];101 uploader->uploadTexture(context, entry.texture, allocator, entry.sourceRect, entry.destRect);102 }103 98 104 bool moreUpdates = maxIndex < m_entries.size(); 99 if (m_entries.size() || m_partialEntries.size()) { 100 if (uploader->isBusy()) 101 return; 105 102 106 ASSERT(m_partialEntries.size() <= count); 107 // Make sure the number of updates including partial updates are not more 108 // than |count|. 109 if ((count - (index - m_entryIndex)) < m_partialEntries.size()) 110 moreUpdates = true; 103 uploader->beginUploads(); 111 104 112 if (moreUpdates) { 113 m_entryIndex = index; 114 return true; 115 } 105 size_t maxIndex = min(m_entryIndex + count, m_entries.size()); 106 for (index = m_entryIndex; index < maxIndex; ++index) { 107 UpdateEntry& entry = m_entries[index]; 108 uploader->uploadTexture(context, entry.texture, allocator, entry.sourceRect, entry.destRect); 109 } 116 110 117 for (index = 0; index < m_partialEntries.size(); ++index) { 118 UpdateEntry& entry = m_partialEntries[index]; 119 uploader->uploadTexture(context, entry.texture, allocator, entry.sourceRect, entry.destRect); 111 bool moreUploads = maxIndex < m_entries.size(); 112 113 ASSERT(m_partialEntries.size() <= count); 114 // We need another update batch if the number of updates remaining 115 // in |count| is greater than the remaining partial entries. 116 if ((count - (index - m_entryIndex)) < m_partialEntries.size()) 117 moreUploads = true; 118 119 if (moreUploads) { 120 m_entryIndex = index; 121 uploader->endUploads(); 122 return; 123 } 124 125 for (index = 0; index < m_partialEntries.size(); ++index) { 126 UpdateEntry& entry = m_partialEntries[index]; 127 uploader->uploadTexture(context, entry.texture, allocator, entry.sourceRect, entry.destRect); 128 } 129 130 uploader->endUploads(); 120 131 } 121 132 … … 137 148 // If no entries left to process, auto-clear. 138 149 clear(); 139 return false;140 150 } 141 151 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCTextureUpdater.h
r114450 r116351 50 50 bool hasMoreUpdates() const; 51 51 52 // Update some textures. Returns true if more textures left to process.53 boolupdate(GraphicsContext3D*, TextureAllocator*, TextureCopier*, TextureUploader*, size_t count);52 // Update some textures. 53 void update(GraphicsContext3D*, TextureAllocator*, TextureCopier*, TextureUploader*, size_t count); 54 54 55 55 void clear(); -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp
r116152 r116351 58 58 namespace WebCore { 59 59 60 // FIXME: remove when ThrottledTextureUploader is ready to be used. 61 class UnthrottledTextureUploader : public TextureUploader { 62 WTF_MAKE_NONCOPYABLE(UnthrottledTextureUploader); 63 public: 64 static PassOwnPtr<UnthrottledTextureUploader> create(PassRefPtr<GraphicsContext3D> context) 65 { 66 return adoptPtr(new UnthrottledTextureUploader(context)); 67 } 68 virtual ~UnthrottledTextureUploader() { } 69 70 virtual bool isBusy() { return false; } 71 virtual void beginUploads() { } 72 virtual void endUploads() { } 73 virtual void uploadTexture(GraphicsContext3D* context, LayerTextureUpdater::Texture* texture, TextureAllocator* allocator, const IntRect sourceRect, const IntRect destRect) { texture->updateRect(context, allocator, sourceRect, destRect); } 74 75 protected: 76 explicit UnthrottledTextureUploader(PassRefPtr<GraphicsContext3D>) { } 77 }; 78 60 79 PassOwnPtr<CCProxy> CCThreadProxy::create(CCLayerTreeHost* layerTreeHost) 61 80 { … … 806 825 ASSERT(isImplThread()); 807 826 ASSERT(m_contextBeforeInitializationOnImplThread); 808 *initializeSucceeded = m_layerTreeHostImpl->initializeLayerRenderer(m_contextBeforeInitializationOnImplThread.release()); 827 OwnPtr<TextureUploader> uploader = UnthrottledTextureUploader::create(m_contextBeforeInitializationOnImplThread.get()); 828 *initializeSucceeded = m_layerTreeHostImpl->initializeLayerRenderer(m_contextBeforeInitializationOnImplThread.release(), uploader.release()); 809 829 if (*initializeSucceeded) { 810 830 *capabilities = m_layerTreeHostImpl->layerRendererCapabilities(); … … 856 876 ASSERT(isImplThread()); 857 877 m_layerTreeHost->deleteContentsTexturesOnImplThread(m_layerTreeHostImpl->contentsTextureAllocator()); 858 *recreateSucceeded = m_layerTreeHostImpl->initializeLayerRenderer(adoptRef(contextPtr)); 878 OwnPtr<TextureUploader> uploader = UnthrottledTextureUploader::create(contextPtr); 879 *recreateSucceeded = m_layerTreeHostImpl->initializeLayerRenderer(adoptRef(contextPtr), uploader.release()); 859 880 if (*recreateSucceeded) { 860 881 *capabilities = m_layerTreeHostImpl->layerRendererCapabilities(); -
trunk/Source/WebKit/chromium/ChangeLog
r116342 r116351 1 2012-05-07 David Reveman <reveman@chromium.org> 2 3 [Chromium] Use GL_CHROMIUM_command_buffer_query to throttle texture uploads. 4 https://bugs.webkit.org/show_bug.cgi?id=81004 5 6 Reviewed by Adrienne Walker. 7 8 * WebKit.gypi: 9 * tests/CCLayerTreeHostImplTest.cpp: 10 (WebKitTests::TEST_F): 11 * tests/CCTiledLayerTestCommon.h: 12 (WebKitTests::FakeTextureUploader::isBusy): 13 (WebKitTests::FakeTextureUploader::beginUploads): 14 (WebKitTests::FakeTextureUploader::endUploads): 15 * tests/Canvas2DLayerChromiumTest.cpp: 16 * tests/LayerRendererChromiumTest.cpp: 17 (FakeLayerRendererChromium::FakeLayerRendererChromium): 18 (LayerRendererChromiumTest::LayerRendererChromiumTest): 19 (TEST): 20 * tests/ThrottledTextureUploaderTest.cpp: Added. 21 (WebKit): 22 (FakeWebGraphicsContext3DWithQueryTesting): 23 (WebKit::FakeWebGraphicsContext3DWithQueryTesting::FakeWebGraphicsContext3DWithQueryTesting): 24 (WebKit::FakeWebGraphicsContext3DWithQueryTesting::getQueryObjectuivEXT): 25 (WebKit::FakeWebGraphicsContext3DWithQueryTesting::setResultAvailable): 26 (WebKit::TEST): 27 * tests/TiledLayerChromiumTest.cpp: 28 (WTF::TEST): 29 1 30 2012-05-07 Sheriff Bot <webkit.review.bot@gmail.com> 2 31 -
trunk/Source/WebKit/chromium/WebKit.gypi
r116342 r116351 128 128 'tests/TextureCopierTest.cpp', 129 129 'tests/TextureManagerTest.cpp', 130 'tests/ThrottledTextureUploaderTest.cpp', 130 131 'tests/TiledLayerChromiumTest.cpp', 131 132 'tests/TilingDataTest.cpp', -
trunk/Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp
r116142 r116351 29 29 #include "CCAnimationTestCommon.h" 30 30 #include "CCLayerTestCommon.h" 31 #include "CCTiledLayerTestCommon.h" 31 32 #include "FakeWebGraphicsContext3D.h" 32 33 #include "GraphicsContext3DPrivate.h" … … 255 256 TEST_F(CCLayerTreeHostImplTest, nonFastScrollableRegionWithOffset) 256 257 { 257 m_hostImpl->initializeLayerRenderer(createContext() );258 m_hostImpl->initializeLayerRenderer(createContext(), adoptPtr(new FakeTextureUploader)); 258 259 259 260 OwnPtr<CCLayerImpl> root = CCLayerImpl::create(0); … … 441 442 TEST_F(CCLayerTreeHostImplTest, didDrawNotCalledOnHiddenLayer) 442 443 { 443 m_hostImpl->initializeLayerRenderer(createContext() );444 m_hostImpl->initializeLayerRenderer(createContext(), adoptPtr(new FakeTextureUploader)); 444 445 445 446 // Ensure visibleLayerRect for root layer is empty … … 481 482 TEST_F(CCLayerTreeHostImplTest, didDrawCalledOnAllLayers) 482 483 { 483 m_hostImpl->initializeLayerRenderer(createContext() );484 m_hostImpl->initializeLayerRenderer(createContext(), adoptPtr(new FakeTextureUploader)); 484 485 m_hostImpl->setViewportSize(IntSize(10, 10)); 485 486 … … 534 535 TEST_F(CCLayerTreeHostImplTest, prepareToDrawFailsWhenAnimationUsesCheckerboard) 535 536 { 536 m_hostImpl->initializeLayerRenderer(createContext() );537 m_hostImpl->initializeLayerRenderer(createContext(), adoptPtr(new FakeTextureUploader)); 537 538 m_hostImpl->setViewportSize(IntSize(10, 10)); 538 539 … … 661 662 TEST_F(CCLayerTreeHostImplTest, blendingOffWhenDrawingOpaqueLayers) 662 663 { 663 m_hostImpl->initializeLayerRenderer(createContext() );664 m_hostImpl->initializeLayerRenderer(createContext(), adoptPtr(new FakeTextureUploader)); 664 665 m_hostImpl->setViewportSize(IntSize(10, 10)); 665 666 … … 879 880 TEST_F(CCLayerTreeHostImplTest, viewportCovered) 880 881 { 881 m_hostImpl->initializeLayerRenderer(createContext() );882 m_hostImpl->initializeLayerRenderer(createContext(), adoptPtr(new FakeTextureUploader)); 882 883 m_hostImpl->setBackgroundColor(Color::gray); 883 884 … … 990 991 ReshapeTrackerContext* reshapeTracker = new ReshapeTrackerContext(); 991 992 RefPtr<GraphicsContext3D> context = GraphicsContext3DPrivate::createGraphicsContextFromWebContext(adoptPtr(reshapeTracker), GraphicsContext3D::RenderDirectlyToHostWindow); 992 m_hostImpl->initializeLayerRenderer(context );993 m_hostImpl->initializeLayerRenderer(context, adoptPtr(new FakeTextureUploader)); 993 994 m_hostImpl->setViewportSize(IntSize(10, 10)); 994 995 … … 1040 1041 settings.partialSwapEnabled = true; 1041 1042 OwnPtr<CCLayerTreeHostImpl> layerTreeHostImpl = CCLayerTreeHostImpl::create(settings, this); 1042 layerTreeHostImpl->initializeLayerRenderer(context );1043 layerTreeHostImpl->initializeLayerRenderer(context, adoptPtr(new FakeTextureUploader())); 1043 1044 layerTreeHostImpl->setViewportSize(IntSize(500, 500)); 1044 1045 … … 1126 1127 TEST_F(CCLayerTreeHostImplTest, contextLostAndRestoredNotificationSentToAllLayers) 1127 1128 { 1128 m_hostImpl->initializeLayerRenderer(createContext() );1129 m_hostImpl->initializeLayerRenderer(createContext(), adoptPtr(new FakeTextureUploader)); 1129 1130 m_hostImpl->setViewportSize(IntSize(10, 10)); 1130 1131 … … 1142 1143 EXPECT_FALSE(layer2->didLoseContextCalled()); 1143 1144 1144 m_hostImpl->initializeLayerRenderer(createContext() );1145 m_hostImpl->initializeLayerRenderer(createContext(), adoptPtr(new FakeTextureUploader)); 1145 1146 1146 1147 EXPECT_TRUE(root->didLoseContextCalled()); … … 1157 1158 { 1158 1159 // The context initialization will fail, but we should still be able to call finishAllRendering() without any ill effects. 1159 m_hostImpl->initializeLayerRenderer(GraphicsContext3DPrivate::createGraphicsContextFromWebContext(adoptPtr(new FakeWebGraphicsContext3DMakeCurrentFails), GraphicsContext3D::RenderDirectlyToHostWindow) );1160 m_hostImpl->initializeLayerRenderer(GraphicsContext3DPrivate::createGraphicsContextFromWebContext(adoptPtr(new FakeWebGraphicsContext3DMakeCurrentFails), GraphicsContext3D::RenderDirectlyToHostWindow), adoptPtr(new FakeTextureUploader)); 1160 1161 m_hostImpl->finishAllRendering(); 1161 1162 } … … 1173 1174 TEST_F(CCLayerTreeHostImplTest, scrollbarLayerLostContext) 1174 1175 { 1175 m_hostImpl->initializeLayerRenderer(createContext() );1176 m_hostImpl->initializeLayerRenderer(createContext(), adoptPtr(new FakeTextureUploader)); 1176 1177 m_hostImpl->setViewportSize(IntSize(10, 10)); 1177 1178 … … 1190 1191 EXPECT_GT(renderPass->quadList().size(), 0u); 1191 1192 m_hostImpl->didDrawAllLayers(frame); 1192 m_hostImpl->initializeLayerRenderer(createContext() );1193 m_hostImpl->initializeLayerRenderer(createContext(), adoptPtr(new FakeTextureUploader)); 1193 1194 } 1194 1195 } … … 1323 1324 TEST_F(CCLayerTreeHostImplTest, dontUseOldResourcesAfterLostContext) 1324 1325 { 1325 m_hostImpl->initializeLayerRenderer(createContext() );1326 m_hostImpl->initializeLayerRenderer(createContext(), adoptPtr(new FakeTextureUploader)); 1326 1327 m_hostImpl->setViewportSize(IntSize(10, 10)); 1327 1328 … … 1368 1369 // Lose the context, replacing it with a StrictWebGraphicsContext3D, that 1369 1370 // will warn if any resource from the previous context gets used. 1370 m_hostImpl->initializeLayerRenderer(StrictWebGraphicsContext3D::createGraphicsContext() );1371 m_hostImpl->initializeLayerRenderer(StrictWebGraphicsContext3D::createGraphicsContext(), adoptPtr(new FakeTextureUploader)); 1371 1372 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); 1372 1373 m_hostImpl->drawLayers(frame); -
trunk/Source/WebKit/chromium/tests/CCTiledLayerTestCommon.h
r114827 r116351 162 162 class FakeTextureUploader : public WebCore::TextureUploader { 163 163 public: 164 virtual bool isBusy() { return false; } 165 virtual void beginUploads() { } 166 virtual void endUploads() { } 164 167 virtual void uploadTexture(WebCore::GraphicsContext3D* context, WebCore::LayerTextureUpdater::Texture* texture, WebCore::TextureAllocator* allocator, const WebCore::IntRect sourceRect, const WebCore::IntRect destRect) { texture->updateRect(context, allocator, sourceRect, destRect); } 165 168 }; -
trunk/Source/WebKit/chromium/tests/Canvas2DLayerChromiumTest.cpp
r115631 r116351 91 91 class MockTextureUploader : public TextureUploader { 92 92 public: 93 MOCK_METHOD0(isBusy, bool()); 94 MOCK_METHOD0(beginUploads, void()); 95 MOCK_METHOD0(endUploads, void()); 93 96 MOCK_METHOD5(uploadTexture, void(GraphicsContext3D*, LayerTextureUpdater::Texture*, TextureAllocator*, const IntRect, const IntRect)); 94 97 }; -
trunk/Source/WebKit/chromium/tests/LayerRendererChromiumTest.cpp
r115881 r116351 26 26 #include "LayerRendererChromium.h" 27 27 28 #include "CCTiledLayerTestCommon.h" 28 29 #include "FakeWebGraphicsContext3D.h" 29 30 #include "GraphicsContext3D.h" … … 36 37 using namespace WebCore; 37 38 using namespace WebKit; 39 using namespace WebKitTests; 38 40 39 41 class FrameCountingMemoryAllocationSettingContext : public FakeWebGraphicsContext3D { … … 92 94 class FakeLayerRendererChromium : public LayerRendererChromium { 93 95 public: 94 FakeLayerRendererChromium(LayerRendererChromiumClient* client, PassRefPtr<GraphicsContext3D> context ) : LayerRendererChromium(client, context) { }96 FakeLayerRendererChromium(LayerRendererChromiumClient* client, PassRefPtr<GraphicsContext3D> context, PassOwnPtr<TextureUploader> uploader) : LayerRendererChromium(client, context, uploader) { } 95 97 96 98 // LayerRendererChromium methods. … … 108 110 , m_context(GraphicsContext3DPrivate::createGraphicsContextFromWebContext(adoptPtr(new FrameCountingMemoryAllocationSettingContext()), GraphicsContext3D::RenderDirectlyToHostWindow)) 109 111 , m_mockContext(*static_cast<FrameCountingMemoryAllocationSettingContext*>(GraphicsContext3DPrivate::extractWebGraphicsContext3D(m_context.get()))) 110 , m_layerRendererChromium(&m_mockClient, m_context.release() )112 , m_layerRendererChromium(&m_mockClient, m_context.release(), adoptPtr(new FakeTextureUploader())) 111 113 { 112 114 } … … 272 274 { 273 275 FakeLayerRendererChromiumClient mockClient; 274 FakeLayerRendererChromium layerRendererChromium(&mockClient, GraphicsContext3DPrivate::createGraphicsContextFromWebContext(adoptPtr(new ForbidSynchronousCallContext), GraphicsContext3D::RenderDirectlyToHostWindow) );276 FakeLayerRendererChromium layerRendererChromium(&mockClient, GraphicsContext3DPrivate::createGraphicsContextFromWebContext(adoptPtr(new ForbidSynchronousCallContext), GraphicsContext3D::RenderDirectlyToHostWindow), adoptPtr(new FakeTextureUploader())); 275 277 276 278 EXPECT_TRUE(layerRendererChromium.initialize()); -
trunk/Source/WebKit/chromium/tests/TiledLayerChromiumTest.cpp
r114450 r116351 958 958 ccLayerTreeHost->commitComplete(); 959 959 960 // Part ail update of 6 checkerboard tiles.960 // Partial update of 6 checkerboard tiles. 961 961 layer->invalidateRect(IntRect(50, 50, 200, 100)); 962 962 { … … 976 976 ccLayerTreeHost->commitComplete(); 977 977 978 // Partial update of 4 tiles. 979 layer->invalidateRect(IntRect(50, 50, 100, 100)); 980 { 981 DebugScopedSetImplThread implThread; 982 OwnPtr<FakeCCTiledLayerImpl> layerImpl(adoptPtr(new FakeCCTiledLayerImpl(0))); 983 ccLayerTreeHost->updateLayers(updater); 984 updater.update(0, &allocator, &copier, &uploader, 4); 985 EXPECT_EQ(4, layer->fakeLayerTextureUpdater()->updateCount()); 986 EXPECT_FALSE(updater.hasMoreUpdates()); 987 layer->fakeLayerTextureUpdater()->clearUpdateCount(); 988 layer->pushPropertiesTo(layerImpl.get()); 989 } 990 ccLayerTreeHost->commitComplete(); 991 978 992 ccLayerTreeHost->setRootLayer(0); 979 993 ccLayerTreeHost.clear();
Note: See TracChangeset
for help on using the changeset viewer.