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

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
« no previous file with comments | « cc/CCLayerTreeHostImpl.cpp ('k') | cc/CCRenderPass.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 2512 matching lines...) Expand 10 before | Expand all | Expand 10 after
2523 setThumbResourceId(provider->createResource(pool, size, format, hint)); 2523 setThumbResourceId(provider->createResource(pool, size, format, hint));
2524 } 2524 }
2525 2525
2526 protected: 2526 protected:
2527 explicit FakeScrollbarLayerImpl(int id) 2527 explicit FakeScrollbarLayerImpl(int id)
2528 : CCScrollbarLayerImpl(id) 2528 : CCScrollbarLayerImpl(id)
2529 { 2529 {
2530 } 2530 }
2531 }; 2531 };
2532 2532
2533 static inline PassOwnPtr<CCRenderPass> createRenderPassWithResource(CCResourcePr ovider* provider) 2533 static inline scoped_ptr<CCRenderPass> createRenderPassWithResource(CCResourcePr ovider* provider)
2534 { 2534 {
2535 CCResourceProvider::ResourceId resourceId = provider->createResource(0, IntS ize(1, 1), GraphicsContext3D::RGBA, CCResourceProvider::TextureUsageAny); 2535 CCResourceProvider::ResourceId resourceId = provider->createResource(0, IntS ize(1, 1), GraphicsContext3D::RGBA, CCResourceProvider::TextureUsageAny);
2536 2536
2537 OwnPtr<CCRenderPass> pass = CCRenderPass::create(CCRenderPass::Id(1, 1), Int Rect(0, 0, 1, 1), WebTransformationMatrix()); 2537 scoped_ptr<CCRenderPass> pass = CCRenderPass::create(CCRenderPass::Id(1, 1), IntRect(0, 0, 1, 1), WebTransformationMatrix());
2538 OwnPtr<CCSharedQuadState> sharedState = CCSharedQuadState::create(WebTransfo rmationMatrix(), IntRect(0, 0, 1, 1), IntRect(0, 0, 1, 1), 1, false); 2538 OwnPtr<CCSharedQuadState> sharedState = CCSharedQuadState::create(WebTransfo rmationMatrix(), IntRect(0, 0, 1, 1), IntRect(0, 0, 1, 1), 1, false);
2539 OwnPtr<CCTextureDrawQuad> quad = CCTextureDrawQuad::create(sharedState.get() , IntRect(0, 0, 1, 1), resourceId, false, FloatRect(0, 0, 1, 1), false); 2539 OwnPtr<CCTextureDrawQuad> quad = CCTextureDrawQuad::create(sharedState.get() , IntRect(0, 0, 1, 1), resourceId, false, FloatRect(0, 0, 1, 1), false);
2540 2540
2541 static_cast<CCTestRenderPass*>(pass.get())->appendSharedQuadState(sharedStat e.release()); 2541 static_cast<CCTestRenderPass*>(pass.get())->appendSharedQuadState(sharedStat e.release());
2542 static_cast<CCTestRenderPass*>(pass.get())->appendQuad(quad.release()); 2542 static_cast<CCTestRenderPass*>(pass.get())->appendQuad(quad.release());
2543 2543
2544 return pass.release(); 2544 return pass.Pass();
2545 } 2545 }
2546 2546
2547 TEST_F(CCLayerTreeHostImplTest, dontUseOldResourcesAfterLostContext) 2547 TEST_F(CCLayerTreeHostImplTest, dontUseOldResourcesAfterLostContext)
2548 { 2548 {
2549 int layerId = 1; 2549 int layerId = 1;
2550 2550
2551 OwnPtr<CCLayerImpl> rootLayer(CCLayerImpl::create(layerId++)); 2551 OwnPtr<CCLayerImpl> rootLayer(CCLayerImpl::create(layerId++));
2552 rootLayer->setBounds(IntSize(10, 10)); 2552 rootLayer->setBounds(IntSize(10, 10));
2553 rootLayer->setAnchorPoint(FloatPoint(0, 0)); 2553 rootLayer->setAnchorPoint(FloatPoint(0, 0));
2554 2554
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
2635 scrollbarLayer->setDrawsContent(true); 2635 scrollbarLayer->setDrawsContent(true);
2636 scrollbarLayer->setLayerTreeHostImpl(m_hostImpl.get()); 2636 scrollbarLayer->setLayerTreeHostImpl(m_hostImpl.get());
2637 scrollbarLayer->createResources(m_hostImpl->resourceProvider()); 2637 scrollbarLayer->createResources(m_hostImpl->resourceProvider());
2638 rootLayer->addChild(scrollbarLayer.release()); 2638 rootLayer->addChild(scrollbarLayer.release());
2639 2639
2640 OwnPtr<CCDelegatedRendererLayerImpl> delegatedRendererLayer(CCDelegatedRende rerLayerImpl::create(layerId++)); 2640 OwnPtr<CCDelegatedRendererLayerImpl> delegatedRendererLayer(CCDelegatedRende rerLayerImpl::create(layerId++));
2641 delegatedRendererLayer->setBounds(IntSize(10, 10)); 2641 delegatedRendererLayer->setBounds(IntSize(10, 10));
2642 delegatedRendererLayer->setContentBounds(IntSize(10, 10)); 2642 delegatedRendererLayer->setContentBounds(IntSize(10, 10));
2643 delegatedRendererLayer->setDrawsContent(true); 2643 delegatedRendererLayer->setDrawsContent(true);
2644 delegatedRendererLayer->setLayerTreeHostImpl(m_hostImpl.get()); 2644 delegatedRendererLayer->setLayerTreeHostImpl(m_hostImpl.get());
2645 OwnPtrVector<CCRenderPass> passList; 2645 ScopedPtrVector<CCRenderPass> passList;
2646 passList.append(createRenderPassWithResource(m_hostImpl->resourceProvider()) ); 2646 passList.append(createRenderPassWithResource(m_hostImpl->resourceProvider()) );
2647 delegatedRendererLayer->setRenderPasses(passList); 2647 delegatedRendererLayer->setRenderPasses(passList);
2648 EXPECT_TRUE(passList.isEmpty()); 2648 EXPECT_TRUE(passList.isEmpty());
2649 rootLayer->addChild(delegatedRendererLayer.release()); 2649 rootLayer->addChild(delegatedRendererLayer.release());
2650 2650
2651 // Use a context that supports IOSurfaces 2651 // Use a context that supports IOSurfaces
2652 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(adoptP tr(new FakeWebGraphicsContext3DWithIOSurface))); 2652 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(adoptP tr(new FakeWebGraphicsContext3DWithIOSurface)));
2653 2653
2654 hwVideoFrame.setTextureId(m_hostImpl->resourceProvider()->graphicsContext3D( )->createTexture()); 2654 hwVideoFrame.setTextureId(m_hostImpl->resourceProvider()->graphicsContext3D( )->createTexture());
2655 2655
(...skipping 1260 matching lines...) Expand 10 before | Expand all | Expand 10 after
3916 myHostImpl->didDrawAllLayers(frame); 3916 myHostImpl->didDrawAllLayers(frame);
3917 } 3917 }
3918 } 3918 }
3919 3919
3920 TEST_F(CCLayerTreeHostImplTest, releaseContentsTextureShouldTriggerCommit) 3920 TEST_F(CCLayerTreeHostImplTest, releaseContentsTextureShouldTriggerCommit)
3921 { 3921 {
3922 m_hostImpl->releaseContentsTextures(); 3922 m_hostImpl->releaseContentsTextures();
3923 EXPECT_TRUE(m_didRequestCommit); 3923 EXPECT_TRUE(m_didRequestCommit);
3924 } 3924 }
3925 3925
3926 struct RenderPassCacheEntry {
3927 mutable OwnPtr<CCRenderPass> renderPassPtr;
3928 CCRenderPass* renderPass;
3929
3930 RenderPassCacheEntry(PassOwnPtr<CCRenderPass> r)
3931 : renderPassPtr(r),
3932 renderPass(renderPassPtr.get())
3933 {
3934 }
3935
3936 RenderPassCacheEntry()
3937 {
3938 }
3939
3940 RenderPassCacheEntry(const RenderPassCacheEntry& entry)
3941 : renderPassPtr(entry.renderPassPtr.release()),
3942 renderPass(entry.renderPass)
3943 {
3944 }
3945
3946 RenderPassCacheEntry& operator=(const RenderPassCacheEntry& entry)
3947 {
3948 renderPassPtr = entry.renderPassPtr.release();
3949 renderPass = entry.renderPass;
3950 return *this;
3951 }
3952 };
3953
3954 struct RenderPassRemovalTestData : public CCLayerTreeHostImpl::FrameData { 3926 struct RenderPassRemovalTestData : public CCLayerTreeHostImpl::FrameData {
3955 std::map<CCRenderPass::Id, RenderPassCacheEntry> renderPassCache; 3927 ScopedPtrHashMap<CCRenderPass::Id, CCRenderPass> renderPassCache;
3956 OwnPtr<CCSharedQuadState> sharedQuadState; 3928 OwnPtr<CCSharedQuadState> sharedQuadState;
3957 }; 3929 };
3958 3930
3959 class CCTestRenderer : public CCRendererGL, public CCRendererClient { 3931 class CCTestRenderer : public CCRendererGL, public CCRendererClient {
3960 public: 3932 public:
3961 static PassOwnPtr<CCTestRenderer> create(CCResourceProvider* resourceProvide r) 3933 static PassOwnPtr<CCTestRenderer> create(CCResourceProvider* resourceProvide r)
3962 { 3934 {
3963 OwnPtr<CCTestRenderer> renderer(adoptPtr(new CCTestRenderer(resourceProv ider))); 3935 OwnPtr<CCTestRenderer> renderer(adoptPtr(new CCTestRenderer(resourceProv ider)));
3964 if (!renderer->initialize()) 3936 if (!renderer->initialize())
3965 return nullptr; 3937 return nullptr;
3966 3938
3967 return renderer.release(); 3939 return renderer.release();
3968 } 3940 }
3969 3941
3970 void clearCachedTextures() { m_textures.clear(); } 3942 void clearCachedTextures() { m_textures.clear(); }
3971 void setHaveCachedResourcesForRenderPassId(CCRenderPass::Id id) { m_textures .add(id); } 3943 void setHaveCachedResourcesForRenderPassId(CCRenderPass::Id id) { m_textures .insert(id); }
3972 3944
3973 virtual bool haveCachedResourcesForRenderPassId(CCRenderPass::Id id) const O VERRIDE { return m_textures.contains(id); } 3945 virtual bool haveCachedResourcesForRenderPassId(CCRenderPass::Id id) const O VERRIDE { return m_textures.count(id); }
3974 3946
3975 // CCRendererClient implementation. 3947 // CCRendererClient implementation.
3976 virtual const IntSize& deviceViewportSize() const OVERRIDE { return m_viewpo rtSize; } 3948 virtual const IntSize& deviceViewportSize() const OVERRIDE { return m_viewpo rtSize; }
3977 virtual const CCLayerTreeSettings& settings() const OVERRIDE { return m_sett ings; } 3949 virtual const CCLayerTreeSettings& settings() const OVERRIDE { return m_sett ings; }
3978 virtual void didLoseContext() OVERRIDE { } 3950 virtual void didLoseContext() OVERRIDE { }
3979 virtual void onSwapBuffersComplete() OVERRIDE { } 3951 virtual void onSwapBuffersComplete() OVERRIDE { }
3980 virtual void setFullRootLayerDamage() OVERRIDE { } 3952 virtual void setFullRootLayerDamage() OVERRIDE { }
3981 virtual void releaseContentsTextures() OVERRIDE { } 3953 virtual void releaseContentsTextures() OVERRIDE { }
3982 virtual void setMemoryAllocationLimitBytes(size_t) OVERRIDE { } 3954 virtual void setMemoryAllocationLimitBytes(size_t) OVERRIDE { }
3983 3955
3984 protected: 3956 protected:
3985 CCTestRenderer(CCResourceProvider* resourceProvider) : CCRendererGL(this, re sourceProvider) { } 3957 CCTestRenderer(CCResourceProvider* resourceProvider) : CCRendererGL(this, re sourceProvider) { }
3986 3958
3987 private: 3959 private:
3988 CCLayerTreeSettings m_settings; 3960 CCLayerTreeSettings m_settings;
3989 IntSize m_viewportSize; 3961 IntSize m_viewportSize;
3990 HashSet<CCRenderPass::Id> m_textures; 3962 base::hash_set<CCRenderPass::Id> m_textures;
3991 }; 3963 };
3992 3964
3993 static void configureRenderPassTestData(const char* testScript, RenderPassRemova lTestData& testData, CCTestRenderer* renderer) 3965 static void configureRenderPassTestData(const char* testScript, RenderPassRemova lTestData& testData, CCTestRenderer* renderer)
3994 { 3966 {
3995 renderer->clearCachedTextures(); 3967 renderer->clearCachedTextures();
3996 3968
3997 // One shared state for all quads - we don't need the correct details 3969 // One shared state for all quads - we don't need the correct details
3998 testData.sharedQuadState = CCSharedQuadState::create(WebTransformationMatrix (), IntRect(), IntRect(), 1.0, true); 3970 testData.sharedQuadState = CCSharedQuadState::create(WebTransformationMatrix (), IntRect(), IntRect(), 1.0, true);
3999 3971
4000 const char* currentChar = testScript; 3972 const char* currentChar = testScript;
4001 3973
4002 // Pre-create root pass 3974 // Pre-create root pass
4003 CCRenderPass::Id rootRenderPassId = CCRenderPass::Id(testScript[0], testScri pt[1]); 3975 CCRenderPass::Id rootRenderPassId = CCRenderPass::Id(testScript[0], testScri pt[1]);
4004 OwnPtr<CCRenderPass> rootRenderPass = CCRenderPass::create(rootRenderPassId, IntRect(), WebTransformationMatrix()); 3976 testData.renderPassCache.add(rootRenderPassId, CCRenderPass::create(rootRend erPassId, IntRect(), WebTransformationMatrix()));
4005 testData.renderPassCache.insert(std::pair<CCRenderPass::Id, RenderPassCacheE ntry>(rootRenderPassId, RenderPassCacheEntry(rootRenderPass.release())));
4006 while (*currentChar) { 3977 while (*currentChar) {
4007 int layerId = *currentChar; 3978 int layerId = *currentChar;
4008 currentChar++; 3979 currentChar++;
4009 ASSERT_TRUE(currentChar); 3980 ASSERT_TRUE(currentChar);
4010 int index = *currentChar; 3981 int index = *currentChar;
4011 currentChar++; 3982 currentChar++;
4012 3983
4013 CCRenderPass::Id renderPassId = CCRenderPass::Id(layerId, index); 3984 CCRenderPass::Id renderPassId = CCRenderPass::Id(layerId, index);
4014 3985
4015 OwnPtr<CCRenderPass> renderPass;
4016
4017 bool isReplica = false; 3986 bool isReplica = false;
4018 if (!testData.renderPassCache[renderPassId].renderPassPtr.get()) 3987 if (!testData.renderPassCache.contains(renderPassId))
4019 isReplica = true; 3988 isReplica = true;
4020 3989
4021 renderPass = testData.renderPassCache[renderPassId].renderPassPtr.releas e(); 3990 scoped_ptr<CCRenderPass> renderPass = testData.renderPassCache.take(rend erPassId);
4022 3991
4023 // Cycle through quad data and create all quads 3992 // Cycle through quad data and create all quads
4024 while (*currentChar && *currentChar != '\n') { 3993 while (*currentChar && *currentChar != '\n') {
4025 if (*currentChar == 's') { 3994 if (*currentChar == 's') {
4026 // Solid color draw quad 3995 // Solid color draw quad
4027 OwnPtr<CCDrawQuad> quad = CCSolidColorDrawQuad::create(testData. sharedQuadState.get(), IntRect(0, 0, 10, 10), SK_ColorWHITE); 3996 OwnPtr<CCDrawQuad> quad = CCSolidColorDrawQuad::create(testData. sharedQuadState.get(), IntRect(0, 0, 10, 10), SK_ColorWHITE);
4028 3997
4029 static_cast<CCTestRenderPass*>(renderPass.get())->appendQuad(qua d.release()); 3998 static_cast<CCTestRenderPass*>(renderPass.get())->appendQuad(qua d.release());
4030 currentChar++; 3999 currentChar++;
4031 } else if ((*currentChar >= 'A') && (*currentChar <= 'Z')) { 4000 } else if ((*currentChar >= 'A') && (*currentChar <= 'Z')) {
(...skipping 22 matching lines...) Expand all
4054 currentChar++; 4023 currentChar++;
4055 } 4024 }
4056 if (*currentChar == ']') 4025 if (*currentChar == ']')
4057 currentChar++; 4026 currentChar++;
4058 } 4027 }
4059 4028
4060 if (testData.renderPassCache.find(newRenderPassId) == testData.r enderPassCache.end()) { 4029 if (testData.renderPassCache.find(newRenderPassId) == testData.r enderPassCache.end()) {
4061 if (hasTexture) 4030 if (hasTexture)
4062 renderer->setHaveCachedResourcesForRenderPassId(newRende rPassId); 4031 renderer->setHaveCachedResourcesForRenderPassId(newRende rPassId);
4063 4032
4064 OwnPtr<CCRenderPass> renderPass = CCTestRenderPass::create(n ewRenderPassId, IntRect(), WebTransformationMatrix()); 4033 testData.renderPassCache.add(newRenderPassId, CCTestRenderPa ss::create(newRenderPassId, IntRect(), WebTransformationMatrix()));
4065 testData.renderPassCache.insert(std::pair<CCRenderPass::Id, RenderPassCacheEntry>(newRenderPassId, RenderPassCacheEntry(renderPass.release() )));
4066 } 4034 }
4067 4035
4068 IntRect quadRect = IntRect(0, 0, 1, 1); 4036 IntRect quadRect = IntRect(0, 0, 1, 1);
4069 IntRect contentsChangedRect = contentsChanged ? quadRect : IntRe ct(); 4037 IntRect contentsChangedRect = contentsChanged ? quadRect : IntRe ct();
4070 OwnPtr<CCRenderPassDrawQuad> quad = CCRenderPassDrawQuad::create (testData.sharedQuadState.get(), quadRect, newRenderPassId, isReplica, 1, conten tsChangedRect, 1, 1, 0, 0); 4038 OwnPtr<CCRenderPassDrawQuad> quad = CCRenderPassDrawQuad::create (testData.sharedQuadState.get(), quadRect, newRenderPassId, isReplica, 1, conten tsChangedRect, 1, 1, 0, 0);
4071 static_cast<CCTestRenderPass*>(renderPass.get())->appendQuad(qua d.release()); 4039 static_cast<CCTestRenderPass*>(renderPass.get())->appendQuad(qua d.release());
4072 } 4040 }
4073 } 4041 }
4074 testData.renderPasses.insert(0, renderPass.get()); 4042 testData.renderPasses.insert(0, renderPass.get());
4075 testData.renderPassesById.add(renderPassId, renderPass.release()); 4043 testData.renderPassesById.add(renderPassId, renderPass.Pass());
4076 if (*currentChar) 4044 if (*currentChar)
4077 currentChar++; 4045 currentChar++;
4078 } 4046 }
4079 } 4047 }
4080 4048
4081 void dumpRenderPassTestData(const RenderPassRemovalTestData& testData, char* buf fer) 4049 void dumpRenderPassTestData(const RenderPassRemovalTestData& testData, char* buf fer)
4082 { 4050 {
4083 char* pos = buffer; 4051 char* pos = buffer;
4084 for (CCRenderPassList::const_reverse_iterator it = testData.renderPasses.rbe gin(); it != testData.renderPasses.rend(); ++it) { 4052 for (CCRenderPassList::const_reverse_iterator it = testData.renderPasses.rbe gin(); it != testData.renderPasses.rend(); ++it) {
4085 const CCRenderPass* currentPass = *it; 4053 const CCRenderPass* currentPass = *it;
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
4276 while (removeRenderPassesCases[testCaseIndex].name) { 4244 while (removeRenderPassesCases[testCaseIndex].name) {
4277 RenderPassRemovalTestData testData; 4245 RenderPassRemovalTestData testData;
4278 configureRenderPassTestData(removeRenderPassesCases[testCaseIndex].initS cript, testData, renderer.get()); 4246 configureRenderPassTestData(removeRenderPassesCases[testCaseIndex].initS cript, testData, renderer.get());
4279 CCLayerTreeHostImpl::removeRenderPasses(CCLayerTreeHostImpl::CullRenderP assesWithCachedTextures(*renderer), testData); 4247 CCLayerTreeHostImpl::removeRenderPasses(CCLayerTreeHostImpl::CullRenderP assesWithCachedTextures(*renderer), testData);
4280 verifyRenderPassTestData(removeRenderPassesCases[testCaseIndex], testDat a); 4248 verifyRenderPassTestData(removeRenderPassesCases[testCaseIndex], testDat a);
4281 testCaseIndex++; 4249 testCaseIndex++;
4282 } 4250 }
4283 } 4251 }
4284 4252
4285 } // namespace 4253 } // namespace
OLDNEW
« no previous file with comments | « cc/CCLayerTreeHostImpl.cpp ('k') | cc/CCRenderPass.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698