Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Side by Side Diff: cc/CCLayerTreeHostImplTest.cpp

Issue 10979010: Remove WTF HashMap and PassOwnPtr dependencies for CCRenderPass (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 6
7 #include "CCLayerTreeHostImpl.h" 7 #include "CCLayerTreeHostImpl.h"
8 8
9 #include "CCAnimationTestCommon.h" 9 #include "CCAnimationTestCommon.h"
10 #include "CCDelegatedRendererLayerImpl.h" 10 #include "CCDelegatedRendererLayerImpl.h"
(...skipping 2465 matching lines...) Expand 10 before | Expand all | Expand 10 after
2476 setThumbResourceId(provider->createResource(pool, size, format, hint)); 2476 setThumbResourceId(provider->createResource(pool, size, format, hint));
2477 } 2477 }
2478 2478
2479 protected: 2479 protected:
2480 explicit FakeScrollbarLayerImpl(int id) 2480 explicit FakeScrollbarLayerImpl(int id)
2481 : CCScrollbarLayerImpl(id) 2481 : CCScrollbarLayerImpl(id)
2482 { 2482 {
2483 } 2483 }
2484 }; 2484 };
2485 2485
2486 static inline PassOwnPtr<CCRenderPass> createRenderPassWithResource(CCResourcePr ovider* provider) 2486 static inline scoped_ptr<CCRenderPass> createRenderPassWithResource(CCResourcePr ovider* provider)
2487 { 2487 {
2488 CCResourceProvider::ResourceId resourceId = provider->createResource(0, IntS ize(1, 1), GraphicsContext3D::RGBA, CCResourceProvider::TextureUsageAny); 2488 CCResourceProvider::ResourceId resourceId = provider->createResource(0, IntS ize(1, 1), GraphicsContext3D::RGBA, CCResourceProvider::TextureUsageAny);
2489 2489
2490 OwnPtr<CCRenderPass> pass = CCRenderPass::create(CCRenderPass::Id(1, 1), Int Rect(0, 0, 1, 1), WebTransformationMatrix()); 2490 scoped_ptr<CCRenderPass> pass = CCRenderPass::create(CCRenderPass::Id(1, 1), IntRect(0, 0, 1, 1), WebTransformationMatrix());
2491 OwnPtr<CCSharedQuadState> sharedState = CCSharedQuadState::create(WebTransfo rmationMatrix(), IntRect(0, 0, 1, 1), IntRect(0, 0, 1, 1), 1, false); 2491 OwnPtr<CCSharedQuadState> sharedState = CCSharedQuadState::create(WebTransfo rmationMatrix(), IntRect(0, 0, 1, 1), IntRect(0, 0, 1, 1), 1, false);
2492 OwnPtr<CCTextureDrawQuad> quad = CCTextureDrawQuad::create(sharedState.get() , IntRect(0, 0, 1, 1), resourceId, false, FloatRect(0, 0, 1, 1), false); 2492 OwnPtr<CCTextureDrawQuad> quad = CCTextureDrawQuad::create(sharedState.get() , IntRect(0, 0, 1, 1), resourceId, false, FloatRect(0, 0, 1, 1), false);
2493 2493
2494 static_cast<CCTestRenderPass*>(pass.get())->appendSharedQuadState(sharedStat e.release()); 2494 static_cast<CCTestRenderPass*>(pass.get())->appendSharedQuadState(sharedStat e.release());
2495 static_cast<CCTestRenderPass*>(pass.get())->appendQuad(quad.release()); 2495 static_cast<CCTestRenderPass*>(pass.get())->appendQuad(quad.release());
2496 2496
2497 return pass.release(); 2497 return pass.Pass();
2498 } 2498 }
2499 2499
2500 TEST_F(CCLayerTreeHostImplTest, dontUseOldResourcesAfterLostContext) 2500 TEST_F(CCLayerTreeHostImplTest, dontUseOldResourcesAfterLostContext)
2501 { 2501 {
2502 int layerId = 1; 2502 int layerId = 1;
2503 2503
2504 OwnPtr<CCLayerImpl> rootLayer(CCLayerImpl::create(layerId++)); 2504 OwnPtr<CCLayerImpl> rootLayer(CCLayerImpl::create(layerId++));
2505 rootLayer->setBounds(IntSize(10, 10)); 2505 rootLayer->setBounds(IntSize(10, 10));
2506 rootLayer->setAnchorPoint(FloatPoint(0, 0)); 2506 rootLayer->setAnchorPoint(FloatPoint(0, 0));
2507 2507
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
2588 scrollbarLayer->setDrawsContent(true); 2588 scrollbarLayer->setDrawsContent(true);
2589 scrollbarLayer->setLayerTreeHostImpl(m_hostImpl.get()); 2589 scrollbarLayer->setLayerTreeHostImpl(m_hostImpl.get());
2590 scrollbarLayer->createResources(m_hostImpl->resourceProvider()); 2590 scrollbarLayer->createResources(m_hostImpl->resourceProvider());
2591 rootLayer->addChild(scrollbarLayer.release()); 2591 rootLayer->addChild(scrollbarLayer.release());
2592 2592
2593 OwnPtr<CCDelegatedRendererLayerImpl> delegatedRendererLayer(CCDelegatedRende rerLayerImpl::create(layerId++)); 2593 OwnPtr<CCDelegatedRendererLayerImpl> delegatedRendererLayer(CCDelegatedRende rerLayerImpl::create(layerId++));
2594 delegatedRendererLayer->setBounds(IntSize(10, 10)); 2594 delegatedRendererLayer->setBounds(IntSize(10, 10));
2595 delegatedRendererLayer->setContentBounds(IntSize(10, 10)); 2595 delegatedRendererLayer->setContentBounds(IntSize(10, 10));
2596 delegatedRendererLayer->setDrawsContent(true); 2596 delegatedRendererLayer->setDrawsContent(true);
2597 delegatedRendererLayer->setLayerTreeHostImpl(m_hostImpl.get()); 2597 delegatedRendererLayer->setLayerTreeHostImpl(m_hostImpl.get());
2598 OwnPtrVector<CCRenderPass> passList; 2598 ScopedPtrVector<CCRenderPass> passList;
2599 passList.append(createRenderPassWithResource(m_hostImpl->resourceProvider()) ); 2599 passList.append(createRenderPassWithResource(m_hostImpl->resourceProvider()) );
2600 delegatedRendererLayer->setRenderPasses(passList); 2600 delegatedRendererLayer->setRenderPasses(passList);
2601 EXPECT_TRUE(passList.isEmpty()); 2601 EXPECT_TRUE(passList.isEmpty());
2602 rootLayer->addChild(delegatedRendererLayer.release()); 2602 rootLayer->addChild(delegatedRendererLayer.release());
2603 2603
2604 // Use a context that supports IOSurfaces 2604 // Use a context that supports IOSurfaces
2605 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(adoptP tr(new FakeWebGraphicsContext3DWithIOSurface))); 2605 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(adoptP tr(new FakeWebGraphicsContext3DWithIOSurface)));
2606 2606
2607 hwVideoFrame.setTextureId(m_hostImpl->resourceProvider()->graphicsContext3D( )->createTexture()); 2607 hwVideoFrame.setTextureId(m_hostImpl->resourceProvider()->graphicsContext3D( )->createTexture());
2608 2608
(...skipping 1260 matching lines...) Expand 10 before | Expand all | Expand 10 after
3869 myHostImpl->didDrawAllLayers(frame); 3869 myHostImpl->didDrawAllLayers(frame);
3870 } 3870 }
3871 } 3871 }
3872 3872
3873 TEST_F(CCLayerTreeHostImplTest, releaseContentsTextureShouldTriggerCommit) 3873 TEST_F(CCLayerTreeHostImplTest, releaseContentsTextureShouldTriggerCommit)
3874 { 3874 {
3875 m_hostImpl->releaseContentsTextures(); 3875 m_hostImpl->releaseContentsTextures();
3876 EXPECT_TRUE(m_didRequestCommit); 3876 EXPECT_TRUE(m_didRequestCommit);
3877 } 3877 }
3878 3878
3879 struct RenderPassCacheEntry {
3880 mutable OwnPtr<CCRenderPass> renderPassPtr;
3881 CCRenderPass* renderPass;
3882
3883 RenderPassCacheEntry(PassOwnPtr<CCRenderPass> r)
3884 : renderPassPtr(r),
3885 renderPass(renderPassPtr.get())
3886 {
3887 }
3888
3889 RenderPassCacheEntry()
3890 {
3891 }
3892
3893 RenderPassCacheEntry(const RenderPassCacheEntry& entry)
3894 : renderPassPtr(entry.renderPassPtr.release()),
3895 renderPass(entry.renderPass)
3896 {
3897 }
3898
3899 RenderPassCacheEntry& operator=(const RenderPassCacheEntry& entry)
3900 {
3901 renderPassPtr = entry.renderPassPtr.release();
3902 renderPass = entry.renderPass;
3903 return *this;
3904 }
3905 };
3906
3907 struct RenderPassRemovalTestData : public CCLayerTreeHostImpl::FrameData { 3879 struct RenderPassRemovalTestData : public CCLayerTreeHostImpl::FrameData {
3908 std::map<CCRenderPass::Id, RenderPassCacheEntry> renderPassCache; 3880 ScopedPtrHashMap<CCRenderPass::Id, CCRenderPass> renderPassCache;
3909 OwnPtr<CCSharedQuadState> sharedQuadState; 3881 OwnPtr<CCSharedQuadState> sharedQuadState;
3910 }; 3882 };
3911 3883
3912 class CCTestRenderer : public CCRendererGL, public CCRendererClient { 3884 class CCTestRenderer : public CCRendererGL, public CCRendererClient {
3913 public: 3885 public:
3914 static PassOwnPtr<CCTestRenderer> create(CCResourceProvider* resourceProvide r) 3886 static PassOwnPtr<CCTestRenderer> create(CCResourceProvider* resourceProvide r)
3915 { 3887 {
3916 OwnPtr<CCTestRenderer> renderer(adoptPtr(new CCTestRenderer(resourceProv ider))); 3888 OwnPtr<CCTestRenderer> renderer(adoptPtr(new CCTestRenderer(resourceProv ider)));
3917 if (!renderer->initialize()) 3889 if (!renderer->initialize())
3918 return nullptr; 3890 return nullptr;
3919 3891
3920 return renderer.release(); 3892 return renderer.release();
3921 } 3893 }
3922 3894
3923 void clearCachedTextures() { m_textures.clear(); } 3895 void clearCachedTextures() { m_textures.clear(); }
3924 void setHaveCachedResourcesForRenderPassId(CCRenderPass::Id id) { m_textures .add(id); } 3896 void setHaveCachedResourcesForRenderPassId(CCRenderPass::Id id) { m_textures .insert(id); }
3925 3897
3926 virtual bool haveCachedResourcesForRenderPassId(CCRenderPass::Id id) const O VERRIDE { return m_textures.contains(id); } 3898 virtual bool haveCachedResourcesForRenderPassId(CCRenderPass::Id id) const O VERRIDE { return m_textures.count(id); }
3927 3899
3928 // CCRendererClient implementation. 3900 // CCRendererClient implementation.
3929 virtual const IntSize& deviceViewportSize() const OVERRIDE { return m_viewpo rtSize; } 3901 virtual const IntSize& deviceViewportSize() const OVERRIDE { return m_viewpo rtSize; }
3930 virtual const CCLayerTreeSettings& settings() const OVERRIDE { return m_sett ings; } 3902 virtual const CCLayerTreeSettings& settings() const OVERRIDE { return m_sett ings; }
3931 virtual void didLoseContext() OVERRIDE { } 3903 virtual void didLoseContext() OVERRIDE { }
3932 virtual void onSwapBuffersComplete() OVERRIDE { } 3904 virtual void onSwapBuffersComplete() OVERRIDE { }
3933 virtual void setFullRootLayerDamage() OVERRIDE { } 3905 virtual void setFullRootLayerDamage() OVERRIDE { }
3934 virtual void releaseContentsTextures() OVERRIDE { } 3906 virtual void releaseContentsTextures() OVERRIDE { }
3935 virtual void setMemoryAllocationLimitBytes(size_t) OVERRIDE { } 3907 virtual void setMemoryAllocationLimitBytes(size_t) OVERRIDE { }
3936 3908
3937 protected: 3909 protected:
3938 CCTestRenderer(CCResourceProvider* resourceProvider) : CCRendererGL(this, re sourceProvider) { } 3910 CCTestRenderer(CCResourceProvider* resourceProvider) : CCRendererGL(this, re sourceProvider) { }
3939 3911
3940 private: 3912 private:
3941 CCLayerTreeSettings m_settings; 3913 CCLayerTreeSettings m_settings;
3942 IntSize m_viewportSize; 3914 IntSize m_viewportSize;
3943 HashSet<CCRenderPass::Id> m_textures; 3915 base::hash_set<CCRenderPass::Id> m_textures;
3944 }; 3916 };
3945 3917
3946 static void configureRenderPassTestData(const char* testScript, RenderPassRemova lTestData& testData, CCTestRenderer* renderer) 3918 static void configureRenderPassTestData(const char* testScript, RenderPassRemova lTestData& testData, CCTestRenderer* renderer)
3947 { 3919 {
3948 renderer->clearCachedTextures(); 3920 renderer->clearCachedTextures();
3949 3921
3950 // One shared state for all quads - we don't need the correct details 3922 // One shared state for all quads - we don't need the correct details
3951 testData.sharedQuadState = CCSharedQuadState::create(WebTransformationMatrix (), IntRect(), IntRect(), 1.0, true); 3923 testData.sharedQuadState = CCSharedQuadState::create(WebTransformationMatrix (), IntRect(), IntRect(), 1.0, true);
3952 3924
3953 const char* currentChar = testScript; 3925 const char* currentChar = testScript;
3954 3926
3955 // Pre-create root pass 3927 // Pre-create root pass
3956 CCRenderPass::Id rootRenderPassId = CCRenderPass::Id(testScript[0], testScri pt[1]); 3928 CCRenderPass::Id rootRenderPassId = CCRenderPass::Id(testScript[0], testScri pt[1]);
3957 OwnPtr<CCRenderPass> rootRenderPass = CCRenderPass::create(rootRenderPassId, IntRect(), WebTransformationMatrix()); 3929 testData.renderPassCache.add(rootRenderPassId, CCRenderPass::create(rootRend erPassId, IntRect(), WebTransformationMatrix()));
3958 testData.renderPassCache.insert(std::pair<CCRenderPass::Id, RenderPassCacheE ntry>(rootRenderPassId, RenderPassCacheEntry(rootRenderPass.release())));
3959 while (*currentChar) { 3930 while (*currentChar) {
3960 int layerId = *currentChar; 3931 int layerId = *currentChar;
3961 currentChar++; 3932 currentChar++;
3962 ASSERT_TRUE(currentChar); 3933 ASSERT_TRUE(currentChar);
3963 int index = *currentChar; 3934 int index = *currentChar;
3964 currentChar++; 3935 currentChar++;
3965 3936
3966 CCRenderPass::Id renderPassId = CCRenderPass::Id(layerId, index); 3937 CCRenderPass::Id renderPassId = CCRenderPass::Id(layerId, index);
3967 3938
3968 OwnPtr<CCRenderPass> renderPass;
3969
3970 bool isReplica = false; 3939 bool isReplica = false;
3971 if (!testData.renderPassCache[renderPassId].renderPassPtr.get()) 3940 if (!testData.renderPassCache.get(renderPassId))
jamesr 2012/09/25 03:53:50 .contains(renderPassId) ?
danakj 2012/09/25 16:13:51 oh absolutely.
3972 isReplica = true; 3941 isReplica = true;
3973 3942
3974 renderPass = testData.renderPassCache[renderPassId].renderPassPtr.releas e(); 3943 scoped_ptr<CCRenderPass> renderPass = testData.renderPassCache.take(rend erPassId);
jamesr 2012/09/25 03:53:50 the old code would leave a null entry in place in
danakj 2012/09/25 16:13:51 i think it doesn't really matter which one we do,
3975 3944
3976 // Cycle through quad data and create all quads 3945 // Cycle through quad data and create all quads
3977 while (*currentChar && *currentChar != '\n') { 3946 while (*currentChar && *currentChar != '\n') {
3978 if (*currentChar == 's') { 3947 if (*currentChar == 's') {
3979 // Solid color draw quad 3948 // Solid color draw quad
3980 OwnPtr<CCDrawQuad> quad = CCSolidColorDrawQuad::create(testData. sharedQuadState.get(), IntRect(0, 0, 10, 10), SK_ColorWHITE); 3949 OwnPtr<CCDrawQuad> quad = CCSolidColorDrawQuad::create(testData. sharedQuadState.get(), IntRect(0, 0, 10, 10), SK_ColorWHITE);
3981 3950
3982 static_cast<CCTestRenderPass*>(renderPass.get())->appendQuad(qua d.release()); 3951 static_cast<CCTestRenderPass*>(renderPass.get())->appendQuad(qua d.release());
3983 currentChar++; 3952 currentChar++;
3984 } else if ((*currentChar >= 'A') && (*currentChar <= 'Z')) { 3953 } else if ((*currentChar >= 'A') && (*currentChar <= 'Z')) {
(...skipping 22 matching lines...) Expand all
4007 currentChar++; 3976 currentChar++;
4008 } 3977 }
4009 if (*currentChar == ']') 3978 if (*currentChar == ']')
4010 currentChar++; 3979 currentChar++;
4011 } 3980 }
4012 3981
4013 if (testData.renderPassCache.find(newRenderPassId) == testData.r enderPassCache.end()) { 3982 if (testData.renderPassCache.find(newRenderPassId) == testData.r enderPassCache.end()) {
4014 if (hasTexture) 3983 if (hasTexture)
4015 renderer->setHaveCachedResourcesForRenderPassId(newRende rPassId); 3984 renderer->setHaveCachedResourcesForRenderPassId(newRende rPassId);
4016 3985
4017 OwnPtr<CCRenderPass> renderPass = CCTestRenderPass::create(n ewRenderPassId, IntRect(), WebTransformationMatrix()); 3986 testData.renderPassCache.add(newRenderPassId, CCTestRenderPa ss::create(newRenderPassId, IntRect(), WebTransformationMatrix()));
4018 testData.renderPassCache.insert(std::pair<CCRenderPass::Id, RenderPassCacheEntry>(newRenderPassId, RenderPassCacheEntry(renderPass.release() )));
4019 } 3987 }
4020 3988
4021 IntRect quadRect = IntRect(0, 0, 1, 1); 3989 IntRect quadRect = IntRect(0, 0, 1, 1);
4022 IntRect contentsChangedRect = contentsChanged ? quadRect : IntRe ct(); 3990 IntRect contentsChangedRect = contentsChanged ? quadRect : IntRe ct();
4023 OwnPtr<CCRenderPassDrawQuad> quad = CCRenderPassDrawQuad::create (testData.sharedQuadState.get(), quadRect, newRenderPassId, isReplica, 1, conten tsChangedRect, 1, 1, 0, 0); 3991 OwnPtr<CCRenderPassDrawQuad> quad = CCRenderPassDrawQuad::create (testData.sharedQuadState.get(), quadRect, newRenderPassId, isReplica, 1, conten tsChangedRect, 1, 1, 0, 0);
4024 static_cast<CCTestRenderPass*>(renderPass.get())->appendQuad(qua d.release()); 3992 static_cast<CCTestRenderPass*>(renderPass.get())->appendQuad(qua d.release());
4025 } 3993 }
4026 } 3994 }
4027 testData.renderPasses.insert(0, renderPass.get()); 3995 testData.renderPasses.insert(0, renderPass.get());
4028 testData.renderPassesById.add(renderPassId, renderPass.release()); 3996 testData.renderPassesById.add(renderPassId, renderPass.Pass());
4029 if (*currentChar) 3997 if (*currentChar)
4030 currentChar++; 3998 currentChar++;
4031 } 3999 }
4032 } 4000 }
4033 4001
4034 void dumpRenderPassTestData(const RenderPassRemovalTestData& testData, char* buf fer) 4002 void dumpRenderPassTestData(const RenderPassRemovalTestData& testData, char* buf fer)
4035 { 4003 {
4036 char* pos = buffer; 4004 char* pos = buffer;
4037 for (CCRenderPassList::const_reverse_iterator it = testData.renderPasses.rbe gin(); it != testData.renderPasses.rend(); ++it) { 4005 for (CCRenderPassList::const_reverse_iterator it = testData.renderPasses.rbe gin(); it != testData.renderPasses.rend(); ++it) {
4038 const CCRenderPass* currentPass = *it; 4006 const CCRenderPass* currentPass = *it;
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
4229 while (removeRenderPassesCases[testCaseIndex].name) { 4197 while (removeRenderPassesCases[testCaseIndex].name) {
4230 RenderPassRemovalTestData testData; 4198 RenderPassRemovalTestData testData;
4231 configureRenderPassTestData(removeRenderPassesCases[testCaseIndex].initS cript, testData, renderer.get()); 4199 configureRenderPassTestData(removeRenderPassesCases[testCaseIndex].initS cript, testData, renderer.get());
4232 CCLayerTreeHostImpl::removeRenderPasses(CCLayerTreeHostImpl::CullRenderP assesWithCachedTextures(*renderer), testData); 4200 CCLayerTreeHostImpl::removeRenderPasses(CCLayerTreeHostImpl::CullRenderP assesWithCachedTextures(*renderer), testData);
4233 verifyRenderPassTestData(removeRenderPassesCases[testCaseIndex], testDat a); 4201 verifyRenderPassTestData(removeRenderPassesCases[testCaseIndex], testDat a);
4234 testCaseIndex++; 4202 testCaseIndex++;
4235 } 4203 }
4236 } 4204 }
4237 4205
4238 } // namespace 4206 } // namespace
OLDNEW
« no previous file with comments | « cc/CCLayerTreeHostImpl.cpp ('k') | cc/CCRenderPass.h » ('j') | cc/scoped_ptr_hash_map.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698