| OLD | NEW |
| 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 "CCGeometryTestUtils.h" | 10 #include "CCGeometryTestUtils.h" |
| (...skipping 3437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3448 tiler->setBounds(child->contentBounds()); | 3448 tiler->setBounds(child->contentBounds()); |
| 3449 child->setTilingData(*tiler.get()); | 3449 child->setTilingData(*tiler.get()); |
| 3450 | 3450 |
| 3451 grandChild->setAnchorPoint(FloatPoint(0, 0)); | 3451 grandChild->setAnchorPoint(FloatPoint(0, 0)); |
| 3452 grandChild->setPosition(IntPoint(grandChildRect.x(), grandChildRect.y())); | 3452 grandChild->setPosition(IntPoint(grandChildRect.x(), grandChildRect.y())); |
| 3453 grandChild->setBounds(IntSize(grandChildRect.width(), grandChildRect.height(
))); | 3453 grandChild->setBounds(IntSize(grandChildRect.width(), grandChildRect.height(
))); |
| 3454 grandChild->setContentBounds(grandChild->bounds()); | 3454 grandChild->setContentBounds(grandChild->bounds()); |
| 3455 grandChild->setDrawsContent(true); | 3455 grandChild->setDrawsContent(true); |
| 3456 | 3456 |
| 3457 CCTiledLayerImpl* childPtr = child.get(); | 3457 CCTiledLayerImpl* childPtr = child.get(); |
| 3458 CCRenderPass::Id childPassId(childPtr->id(), 0); |
| 3458 | 3459 |
| 3459 child->addChild(grandChild.release()); | 3460 child->addChild(grandChild.release()); |
| 3460 root->addChild(child.release()); | 3461 root->addChild(child.release()); |
| 3461 myHostImpl->setRootLayer(root.release()); | 3462 myHostImpl->setRootLayer(root.release()); |
| 3462 myHostImpl->setViewportSize(rootRect.size(), rootRect.size()); | 3463 myHostImpl->setViewportSize(rootRect.size(), rootRect.size()); |
| 3463 | 3464 |
| 3464 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(chil
dPtr->id())); | 3465 EXPECT_FALSE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(chil
dPassId)); |
| 3465 | 3466 |
| 3466 { | 3467 { |
| 3467 CCLayerTreeHostImpl::FrameData frame; | 3468 CCLayerTreeHostImpl::FrameData frame; |
| 3468 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3469 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3469 myHostImpl->drawLayers(frame); | 3470 myHostImpl->drawLayers(frame); |
| 3470 myHostImpl->didDrawAllLayers(frame); | 3471 myHostImpl->didDrawAllLayers(frame); |
| 3471 } | 3472 } |
| 3472 | 3473 |
| 3473 // We should have cached textures for surface 2. | 3474 // We should have cached textures for surface 2. |
| 3474 EXPECT_TRUE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(child
Ptr->id())); | 3475 EXPECT_TRUE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(child
PassId)); |
| 3475 | 3476 |
| 3476 { | 3477 { |
| 3477 CCLayerTreeHostImpl::FrameData frame; | 3478 CCLayerTreeHostImpl::FrameData frame; |
| 3478 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3479 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3479 myHostImpl->drawLayers(frame); | 3480 myHostImpl->drawLayers(frame); |
| 3480 myHostImpl->didDrawAllLayers(frame); | 3481 myHostImpl->didDrawAllLayers(frame); |
| 3481 } | 3482 } |
| 3482 | 3483 |
| 3483 // We should still have cached textures for surface 2 after drawing with no
damage. | 3484 // We should still have cached textures for surface 2 after drawing with no
damage. |
| 3484 EXPECT_TRUE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(child
Ptr->id())); | 3485 EXPECT_TRUE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(child
PassId)); |
| 3485 | 3486 |
| 3486 // Damage a single tile of surface 2. | 3487 // Damage a single tile of surface 2. |
| 3487 childPtr->setUpdateRect(IntRect(10, 10, 10, 10)); | 3488 childPtr->setUpdateRect(IntRect(10, 10, 10, 10)); |
| 3488 | 3489 |
| 3489 { | 3490 { |
| 3490 CCLayerTreeHostImpl::FrameData frame; | 3491 CCLayerTreeHostImpl::FrameData frame; |
| 3491 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); | 3492 EXPECT_TRUE(myHostImpl->prepareToDraw(frame)); |
| 3492 myHostImpl->drawLayers(frame); | 3493 myHostImpl->drawLayers(frame); |
| 3493 myHostImpl->didDrawAllLayers(frame); | 3494 myHostImpl->didDrawAllLayers(frame); |
| 3494 } | 3495 } |
| 3495 | 3496 |
| 3496 // We should have a cached texture for surface 2 again even though it was da
maged. | 3497 // We should have a cached texture for surface 2 again even though it was da
maged. |
| 3497 EXPECT_TRUE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(child
Ptr->id())); | 3498 EXPECT_TRUE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(child
PassId)); |
| 3498 } | 3499 } |
| 3499 | 3500 |
| 3500 TEST_F(CCLayerTreeHostImplTest, surfaceTextureCaching) | 3501 TEST_F(CCLayerTreeHostImplTest, surfaceTextureCaching) |
| 3501 { | 3502 { |
| 3502 CCSettings::setPartialSwapEnabled(true); | 3503 CCSettings::setPartialSwapEnabled(true); |
| 3503 | 3504 |
| 3504 CCLayerTreeSettings settings; | 3505 CCLayerTreeSettings settings; |
| 3505 settings.minimumOcclusionTrackingSize = IntSize(); | 3506 settings.minimumOcclusionTrackingSize = IntSize(); |
| 3506 OwnPtr<CCLayerTreeHostImpl> myHostImpl = CCLayerTreeHostImpl::create(setting
s, this); | 3507 OwnPtr<CCLayerTreeHostImpl> myHostImpl = CCLayerTreeHostImpl::create(setting
s, this); |
| 3507 | 3508 |
| (...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3849 | 3850 |
| 3850 RenderPassCacheEntry& operator=(const RenderPassCacheEntry& entry) | 3851 RenderPassCacheEntry& operator=(const RenderPassCacheEntry& entry) |
| 3851 { | 3852 { |
| 3852 renderPassPtr = entry.renderPassPtr.release(); | 3853 renderPassPtr = entry.renderPassPtr.release(); |
| 3853 renderPass = entry.renderPass; | 3854 renderPass = entry.renderPass; |
| 3854 return *this; | 3855 return *this; |
| 3855 } | 3856 } |
| 3856 }; | 3857 }; |
| 3857 | 3858 |
| 3858 struct RenderPassRemovalTestData : public CCLayerTreeHostImpl::FrameData { | 3859 struct RenderPassRemovalTestData : public CCLayerTreeHostImpl::FrameData { |
| 3859 std::map<char, RenderPassCacheEntry> renderPassCache; | 3860 std::map<CCRenderPass::Id, RenderPassCacheEntry> renderPassCache; |
| 3860 OwnPtr<CCSharedQuadState> sharedQuadState; | 3861 OwnPtr<CCSharedQuadState> sharedQuadState; |
| 3861 }; | 3862 }; |
| 3862 | 3863 |
| 3863 class CCTestRenderPass: public CCRenderPass { | 3864 class CCTestRenderPass: public CCRenderPass { |
| 3864 public: | 3865 public: |
| 3865 static PassOwnPtr<CCRenderPass> create(int id, IntRect outputRect, const Web
TransformationMatrix& rootTransform) { return adoptPtr(new CCTestRenderPass(id,
outputRect, rootTransform)); } | 3866 static PassOwnPtr<CCRenderPass> create(CCRenderPass::Id id, IntRect outputRe
ct, const WebTransformationMatrix& rootTransform) { return adoptPtr(new CCTestRe
nderPass(id, outputRect, rootTransform)); } |
| 3866 | 3867 |
| 3867 void appendQuad(PassOwnPtr<CCDrawQuad> quad) { m_quadList.append(quad); } | 3868 void appendQuad(PassOwnPtr<CCDrawQuad> quad) { m_quadList.append(quad); } |
| 3868 | 3869 |
| 3869 protected: | 3870 protected: |
| 3870 CCTestRenderPass(int id, IntRect outputRect, const WebTransformationMatrix&
rootTransform) : CCRenderPass(id, outputRect, rootTransform) { } | 3871 CCTestRenderPass(CCRenderPass::Id id, IntRect outputRect, const WebTransform
ationMatrix& rootTransform) : CCRenderPass(id, outputRect, rootTransform) { } |
| 3871 }; | 3872 }; |
| 3872 | 3873 |
| 3873 class CCTestRenderer : public CCRendererGL, public CCRendererClient { | 3874 class CCTestRenderer : public CCRendererGL, public CCRendererClient { |
| 3874 public: | 3875 public: |
| 3875 static PassOwnPtr<CCTestRenderer> create(CCResourceProvider* resourceProvide
r) | 3876 static PassOwnPtr<CCTestRenderer> create(CCResourceProvider* resourceProvide
r) |
| 3876 { | 3877 { |
| 3877 OwnPtr<CCTestRenderer> renderer(adoptPtr(new CCTestRenderer(resourceProv
ider))); | 3878 OwnPtr<CCTestRenderer> renderer(adoptPtr(new CCTestRenderer(resourceProv
ider))); |
| 3878 if (!renderer->initialize()) | 3879 if (!renderer->initialize()) |
| 3879 return nullptr; | 3880 return nullptr; |
| 3880 | 3881 |
| 3881 return renderer.release(); | 3882 return renderer.release(); |
| 3882 } | 3883 } |
| 3883 | 3884 |
| 3884 void clearCachedTextures() { m_textures.clear(); } | 3885 void clearCachedTextures() { m_textures.clear(); } |
| 3885 void setHaveCachedResourcesForRenderPassId(int id) { m_textures.add(id); } | 3886 void setHaveCachedResourcesForRenderPassId(CCRenderPass::Id id) { m_textures
.add(id); } |
| 3886 | 3887 |
| 3887 virtual bool haveCachedResourcesForRenderPassId(int id) const OVERRIDE { ret
urn m_textures.contains(id); } | 3888 virtual bool haveCachedResourcesForRenderPassId(CCRenderPass::Id id) const O
VERRIDE { return m_textures.contains(id); } |
| 3888 | 3889 |
| 3889 // CCRendererClient implementation. | 3890 // CCRendererClient implementation. |
| 3890 virtual const IntSize& deviceViewportSize() const OVERRIDE { return m_viewpo
rtSize; } | 3891 virtual const IntSize& deviceViewportSize() const OVERRIDE { return m_viewpo
rtSize; } |
| 3891 virtual const CCLayerTreeSettings& settings() const OVERRIDE { return m_sett
ings; } | 3892 virtual const CCLayerTreeSettings& settings() const OVERRIDE { return m_sett
ings; } |
| 3892 virtual void didLoseContext() OVERRIDE { } | 3893 virtual void didLoseContext() OVERRIDE { } |
| 3893 virtual void onSwapBuffersComplete() OVERRIDE { } | 3894 virtual void onSwapBuffersComplete() OVERRIDE { } |
| 3894 virtual void setFullRootLayerDamage() OVERRIDE { } | 3895 virtual void setFullRootLayerDamage() OVERRIDE { } |
| 3895 virtual void releaseContentsTextures() OVERRIDE { } | 3896 virtual void releaseContentsTextures() OVERRIDE { } |
| 3896 virtual void setMemoryAllocationLimitBytes(size_t) OVERRIDE { } | 3897 virtual void setMemoryAllocationLimitBytes(size_t) OVERRIDE { } |
| 3897 | 3898 |
| 3898 protected: | 3899 protected: |
| 3899 CCTestRenderer(CCResourceProvider* resourceProvider) : CCRendererGL(this, re
sourceProvider, UnthrottledUploader) { } | 3900 CCTestRenderer(CCResourceProvider* resourceProvider) : CCRendererGL(this, re
sourceProvider, UnthrottledUploader) { } |
| 3900 | 3901 |
| 3901 private: | 3902 private: |
| 3902 CCLayerTreeSettings m_settings; | 3903 CCLayerTreeSettings m_settings; |
| 3903 IntSize m_viewportSize; | 3904 IntSize m_viewportSize; |
| 3904 HashSet<int> m_textures; | 3905 HashSet<CCRenderPass::Id> m_textures; |
| 3905 }; | 3906 }; |
| 3906 | 3907 |
| 3907 static void configureRenderPassTestData(const char* testScript, RenderPassRemova
lTestData& testData, CCTestRenderer* renderer) | 3908 static void configureRenderPassTestData(const char* testScript, RenderPassRemova
lTestData& testData, CCTestRenderer* renderer) |
| 3908 { | 3909 { |
| 3909 renderer->clearCachedTextures(); | 3910 renderer->clearCachedTextures(); |
| 3910 | 3911 |
| 3911 // One shared state for all quads - we don't need the correct details | 3912 // One shared state for all quads - we don't need the correct details |
| 3912 testData.sharedQuadState = CCSharedQuadState::create(WebTransformationMatrix
(), IntRect(), IntRect(), 1.0, true); | 3913 testData.sharedQuadState = CCSharedQuadState::create(WebTransformationMatrix
(), IntRect(), IntRect(), 1.0, true); |
| 3913 | 3914 |
| 3914 const char* currentChar = testScript; | 3915 const char* currentChar = testScript; |
| 3915 | 3916 |
| 3916 // Pre-create root pass | 3917 // Pre-create root pass |
| 3917 char rootRenderPassId = testScript[0]; | 3918 CCRenderPass::Id rootRenderPassId = CCRenderPass::Id(testScript[0], testScri
pt[1]); |
| 3918 OwnPtr<CCRenderPass> rootRenderPass = CCTestRenderPass::create(rootRenderPas
sId, IntRect(), WebTransformationMatrix()); | 3919 OwnPtr<CCRenderPass> rootRenderPass = CCTestRenderPass::create(rootRenderPas
sId, IntRect(), WebTransformationMatrix()); |
| 3919 testData.renderPassCache.insert(std::pair<char, RenderPassCacheEntry>(rootRe
nderPassId, RenderPassCacheEntry(rootRenderPass.release()))); | 3920 testData.renderPassCache.insert(std::pair<CCRenderPass::Id, RenderPassCacheE
ntry>(rootRenderPassId, RenderPassCacheEntry(rootRenderPass.release()))); |
| 3920 while (*currentChar) { | 3921 while (*currentChar) { |
| 3921 char renderPassId = currentChar[0]; | 3922 int layerId = *currentChar; |
| 3922 currentChar++; | 3923 currentChar++; |
| 3924 ASSERT_TRUE(currentChar); |
| 3925 int index = *currentChar; |
| 3926 currentChar++; |
| 3927 |
| 3928 CCRenderPass::Id renderPassId = CCRenderPass::Id(layerId, index); |
| 3923 | 3929 |
| 3924 OwnPtr<CCRenderPass> renderPass; | 3930 OwnPtr<CCRenderPass> renderPass; |
| 3925 | 3931 |
| 3926 bool isReplica = false; | 3932 bool isReplica = false; |
| 3927 if (!testData.renderPassCache[renderPassId].renderPassPtr.get()) | 3933 if (!testData.renderPassCache[renderPassId].renderPassPtr.get()) |
| 3928 isReplica = true; | 3934 isReplica = true; |
| 3929 | 3935 |
| 3930 renderPass = testData.renderPassCache[renderPassId].renderPassPtr.releas
e(); | 3936 renderPass = testData.renderPassCache[renderPassId].renderPassPtr.releas
e(); |
| 3931 | 3937 |
| 3932 // Cycle through quad data and create all quads | 3938 // Cycle through quad data and create all quads |
| 3933 while (*currentChar && *currentChar != '\n') { | 3939 while (*currentChar && *currentChar != '\n') { |
| 3934 if (*currentChar == 's') { | 3940 if (*currentChar == 's') { |
| 3935 // Solid color draw quad | 3941 // Solid color draw quad |
| 3936 OwnPtr<CCDrawQuad> quad = CCSolidColorDrawQuad::create(testData.
sharedQuadState.get(), IntRect(0, 0, 10, 10), SK_ColorWHITE); | 3942 OwnPtr<CCDrawQuad> quad = CCSolidColorDrawQuad::create(testData.
sharedQuadState.get(), IntRect(0, 0, 10, 10), SK_ColorWHITE); |
| 3937 | 3943 |
| 3938 static_cast<CCTestRenderPass*>(renderPass.get())->appendQuad(qua
d.release()); | 3944 static_cast<CCTestRenderPass*>(renderPass.get())->appendQuad(qua
d.release()); |
| 3939 currentChar++; | 3945 currentChar++; |
| 3940 } else if ((*currentChar >= 'A') && (*currentChar <= 'Z')) { | 3946 } else if ((*currentChar >= 'A') && (*currentChar <= 'Z')) { |
| 3941 // RenderPass draw quad | 3947 // RenderPass draw quad |
| 3942 char newRenderPassId = *currentChar; | 3948 int layerId = *currentChar; |
| 3949 currentChar++; |
| 3950 ASSERT_TRUE(currentChar); |
| 3951 int index = *currentChar; |
| 3952 currentChar++; |
| 3953 CCRenderPass::Id newRenderPassId = CCRenderPass::Id(layerId, ind
ex); |
| 3943 ASSERT_NE(rootRenderPassId, newRenderPassId); | 3954 ASSERT_NE(rootRenderPassId, newRenderPassId); |
| 3944 currentChar++; | |
| 3945 bool hasTexture = false; | 3955 bool hasTexture = false; |
| 3946 bool contentsChanged = true; | 3956 bool contentsChanged = true; |
| 3947 | 3957 |
| 3948 if (*currentChar == '[') { | 3958 if (*currentChar == '[') { |
| 3949 currentChar++; | 3959 currentChar++; |
| 3950 while (*currentChar && *currentChar != ']') { | 3960 while (*currentChar && *currentChar != ']') { |
| 3951 switch (*currentChar) { | 3961 switch (*currentChar) { |
| 3952 case 'c': | 3962 case 'c': |
| 3953 contentsChanged = false; | 3963 contentsChanged = false; |
| 3954 break; | 3964 break; |
| 3955 case 't': | 3965 case 't': |
| 3956 hasTexture = true; | 3966 hasTexture = true; |
| 3957 break; | 3967 break; |
| 3958 } | 3968 } |
| 3959 currentChar++; | 3969 currentChar++; |
| 3960 } | 3970 } |
| 3961 if (*currentChar == ']') | 3971 if (*currentChar == ']') |
| 3962 currentChar++; | 3972 currentChar++; |
| 3963 } | 3973 } |
| 3964 | 3974 |
| 3965 if (testData.renderPassCache.find(newRenderPassId) == testData.r
enderPassCache.end()) { | 3975 if (testData.renderPassCache.find(newRenderPassId) == testData.r
enderPassCache.end()) { |
| 3966 if (hasTexture) | 3976 if (hasTexture) |
| 3967 renderer->setHaveCachedResourcesForRenderPassId(newRende
rPassId); | 3977 renderer->setHaveCachedResourcesForRenderPassId(newRende
rPassId); |
| 3968 | 3978 |
| 3969 OwnPtr<CCRenderPass> renderPass = CCTestRenderPass::create(n
ewRenderPassId, IntRect(), WebTransformationMatrix()); | 3979 OwnPtr<CCRenderPass> renderPass = CCTestRenderPass::create(n
ewRenderPassId, IntRect(), WebTransformationMatrix()); |
| 3970 testData.renderPassCache.insert(std::pair<char, RenderPassCa
cheEntry>(newRenderPassId, RenderPassCacheEntry(renderPass.release()))); | 3980 testData.renderPassCache.insert(std::pair<CCRenderPass::Id,
RenderPassCacheEntry>(newRenderPassId, RenderPassCacheEntry(renderPass.release()
))); |
| 3971 } | 3981 } |
| 3972 | 3982 |
| 3973 IntRect quadRect = IntRect(0, 0, 1, 1); | 3983 IntRect quadRect = IntRect(0, 0, 1, 1); |
| 3974 IntRect contentsChangedRect = contentsChanged ? quadRect : IntRe
ct(); | 3984 IntRect contentsChangedRect = contentsChanged ? quadRect : IntRe
ct(); |
| 3975 OwnPtr<CCRenderPassDrawQuad> quad = CCRenderPassDrawQuad::create
(testData.sharedQuadState.get(), quadRect, newRenderPassId, isReplica, 1, conten
tsChangedRect, 1, 1, 0, 0); | 3985 OwnPtr<CCRenderPassDrawQuad> quad = CCRenderPassDrawQuad::create
(testData.sharedQuadState.get(), quadRect, newRenderPassId, isReplica, 1, conten
tsChangedRect, 1, 1, 0, 0); |
| 3976 static_cast<CCTestRenderPass*>(renderPass.get())->appendQuad(qua
d.release()); | 3986 static_cast<CCTestRenderPass*>(renderPass.get())->appendQuad(qua
d.release()); |
| 3977 } | 3987 } |
| 3978 } | 3988 } |
| 3979 testData.renderPasses.insert(0, renderPass.get()); | 3989 testData.renderPasses.insert(0, renderPass.get()); |
| 3980 testData.renderPassesById.add(renderPassId, renderPass.release()); | 3990 testData.renderPassesById.add(renderPassId, renderPass.release()); |
| 3981 if (*currentChar) | 3991 if (*currentChar) |
| 3982 currentChar++; | 3992 currentChar++; |
| 3983 } | 3993 } |
| 3984 } | 3994 } |
| 3985 | 3995 |
| 3986 void dumpRenderPassTestData(const RenderPassRemovalTestData& testData, char* buf
fer) | 3996 void dumpRenderPassTestData(const RenderPassRemovalTestData& testData, char* buf
fer) |
| 3987 { | 3997 { |
| 3988 char* pos = buffer; | 3998 char* pos = buffer; |
| 3989 for (CCRenderPassList::const_reverse_iterator it = testData.renderPasses.rbe
gin(); it != testData.renderPasses.rend(); ++it) { | 3999 for (CCRenderPassList::const_reverse_iterator it = testData.renderPasses.rbe
gin(); it != testData.renderPasses.rend(); ++it) { |
| 3990 const CCRenderPass* currentPass = *it; | 4000 const CCRenderPass* currentPass = *it; |
| 3991 *pos = currentPass->id(); | 4001 *pos = currentPass->id().layerId; |
| 4002 pos++; |
| 4003 *pos = currentPass->id().index; |
| 3992 pos++; | 4004 pos++; |
| 3993 | 4005 |
| 3994 CCQuadList::const_iterator quadListIterator = currentPass->quadList().be
gin(); | 4006 CCQuadList::const_iterator quadListIterator = currentPass->quadList().be
gin(); |
| 3995 while (quadListIterator != currentPass->quadList().end()) { | 4007 while (quadListIterator != currentPass->quadList().end()) { |
| 3996 CCDrawQuad* currentQuad = (*quadListIterator).get(); | 4008 CCDrawQuad* currentQuad = (*quadListIterator).get(); |
| 3997 switch (currentQuad->material()) { | 4009 switch (currentQuad->material()) { |
| 3998 case CCDrawQuad::SolidColor: | 4010 case CCDrawQuad::SolidColor: |
| 3999 *pos = 's'; | 4011 *pos = 's'; |
| 4000 pos++; | 4012 pos++; |
| 4001 break; | 4013 break; |
| 4002 case CCDrawQuad::RenderPass: | 4014 case CCDrawQuad::RenderPass: |
| 4003 *pos = CCRenderPassDrawQuad::materialCast(currentQuad)->renderPa
ssId(); | 4015 *pos = CCRenderPassDrawQuad::materialCast(currentQuad)->renderPa
ssId().layerId; |
| 4016 pos++; |
| 4017 *pos = CCRenderPassDrawQuad::materialCast(currentQuad)->renderPa
ssId().index; |
| 4004 pos++; | 4018 pos++; |
| 4005 break; | 4019 break; |
| 4006 default: | 4020 default: |
| 4007 *pos = 'x'; | 4021 *pos = 'x'; |
| 4008 pos++; | 4022 pos++; |
| 4009 break; | 4023 break; |
| 4010 } | 4024 } |
| 4011 | 4025 |
| 4012 quadListIterator++; | 4026 quadListIterator++; |
| 4013 } | 4027 } |
| (...skipping 23 matching lines...) Expand all Loading... |
| 4037 struct TestCase { | 4051 struct TestCase { |
| 4038 const char* name; | 4052 const char* name; |
| 4039 const char* initScript; | 4053 const char* initScript; |
| 4040 const char* expectedResult; | 4054 const char* expectedResult; |
| 4041 }; | 4055 }; |
| 4042 | 4056 |
| 4043 TestCase removeRenderPassesCases[] = | 4057 TestCase removeRenderPassesCases[] = |
| 4044 { | 4058 { |
| 4045 { | 4059 { |
| 4046 "Single root pass", | 4060 "Single root pass", |
| 4047 "Rssss\n", | 4061 "R0ssss\n", |
| 4048 "Rssss\n" | 4062 "R0ssss\n" |
| 4049 }, { | 4063 }, { |
| 4050 "Single pass - no quads", | 4064 "Single pass - no quads", |
| 4051 "R\n", | 4065 "R0\n", |
| 4052 "R\n" | 4066 "R0\n" |
| 4053 }, { | 4067 }, { |
| 4054 "Two passes, no removal", | 4068 "Two passes, no removal", |
| 4055 "RssssAsss\n" | 4069 "R0ssssA0sss\n" |
| 4056 "Assss\n", | 4070 "A0ssss\n", |
| 4057 "RssssAsss\n" | 4071 "R0ssssA0sss\n" |
| 4058 "Assss\n" | 4072 "A0ssss\n" |
| 4059 }, { | 4073 }, { |
| 4060 "Two passes, remove last", | 4074 "Two passes, remove last", |
| 4061 "RssssA[ct]sss\n" | 4075 "R0ssssA0[ct]sss\n" |
| 4062 "Assss\n", | 4076 "A0ssss\n", |
| 4063 "RssssAsss\n" | 4077 "R0ssssA0sss\n" |
| 4064 }, { | 4078 }, { |
| 4065 "Have texture but contents changed - leave pass", | 4079 "Have texture but contents changed - leave pass", |
| 4066 "RssssA[t]sss\n" | 4080 "R0ssssA0[t]sss\n" |
| 4067 "Assss\n", | 4081 "A0ssss\n", |
| 4068 "RssssAsss\n" | 4082 "R0ssssA0sss\n" |
| 4069 "Assss\n" | 4083 "A0ssss\n" |
| 4070 }, { | 4084 }, { |
| 4071 "Contents didn't change but no texture - leave pass", | 4085 "Contents didn't change but no texture - leave pass", |
| 4072 "RssssA[c]sss\n" | 4086 "R0ssssA0[c]sss\n" |
| 4073 "Assss\n", | 4087 "A0ssss\n", |
| 4074 "RssssAsss\n" | 4088 "R0ssssA0sss\n" |
| 4075 "Assss\n" | 4089 "A0ssss\n" |
| 4076 }, { | 4090 }, { |
| 4077 "Replica: two quads reference the same pass; remove", | 4091 "Replica: two quads reference the same pass; remove", |
| 4078 "RssssA[ct]A[ct]sss\n" | 4092 "R0ssssA0[ct]A0[ct]sss\n" |
| 4079 "Assss\n", | 4093 "A0ssss\n", |
| 4080 "RssssAAsss\n" | 4094 "R0ssssA0A0sss\n" |
| 4081 }, { | 4095 }, { |
| 4082 "Replica: two quads reference the same pass; leave", | 4096 "Replica: two quads reference the same pass; leave", |
| 4083 "RssssA[c]A[c]sss\n" | 4097 "R0ssssA0[c]A0[c]sss\n" |
| 4084 "Assss\n", | 4098 "A0ssss\n", |
| 4085 "RssssAAsss\n" | 4099 "R0ssssA0A0sss\n" |
| 4086 "Assss\n", | 4100 "A0ssss\n", |
| 4087 }, { | 4101 }, { |
| 4088 "Many passes, remove all", | 4102 "Many passes, remove all", |
| 4089 "RssssA[ct]sss\n" | 4103 "R0ssssA0[ct]sss\n" |
| 4090 "AsssB[ct]C[ct]s\n" | 4104 "A0sssB0[ct]C0[ct]s\n" |
| 4091 "BsssD[ct]ssE[ct]F[ct]\n" | 4105 "B0sssD0[ct]ssE0[ct]F0[ct]\n" |
| 4092 "Essssss\n" | 4106 "E0ssssss\n" |
| 4093 "CG[ct]\n" | 4107 "C0G0[ct]\n" |
| 4094 "Dsssssss\n" | 4108 "D0sssssss\n" |
| 4095 "Fsssssss\n" | 4109 "F0sssssss\n" |
| 4096 "Gsss\n", | 4110 "G0sss\n", |
| 4097 | 4111 |
| 4098 "RssssAsss\n" | 4112 "R0ssssA0sss\n" |
| 4099 }, { | 4113 }, { |
| 4100 "Deep recursion, remove all", | 4114 "Deep recursion, remove all", |
| 4101 | 4115 |
| 4102 "RsssssA[ct]ssss\n" | 4116 "R0sssssA0[ct]ssss\n" |
| 4103 "AssssBsss\n" | 4117 "A0ssssB0sss\n" |
| 4104 "BC\n" | 4118 "B0C0\n" |
| 4105 "CD\n" | 4119 "C0D0\n" |
| 4106 "DE\n" | 4120 "D0E0\n" |
| 4107 "EF\n" | 4121 "E0F0\n" |
| 4108 "FG\n" | 4122 "F0G0\n" |
| 4109 "GH\n" | 4123 "G0H0\n" |
| 4110 "HsssIsss\n" | 4124 "H0sssI0sss\n" |
| 4111 "IJ\n" | 4125 "I0J0\n" |
| 4112 "Jssss\n", | 4126 "J0ssss\n", |
| 4113 | 4127 |
| 4114 "RsssssAssss\n" | 4128 "R0sssssA0ssss\n" |
| 4115 }, { | 4129 }, { |
| 4116 "Wide recursion, remove all", | 4130 "Wide recursion, remove all", |
| 4117 "RA[ct]B[ct]C[ct]D[ct]E[ct]F[ct]G[ct]H[ct]I[ct]J[ct]\n" | 4131 "R0A0[ct]B0[ct]C0[ct]D0[ct]E0[ct]F0[ct]G0[ct]H0[ct]I0[ct]J0[ct]\n" |
| 4118 "As\n" | 4132 "A0s\n" |
| 4119 "Bs\n" | 4133 "B0s\n" |
| 4120 "Cssss\n" | 4134 "C0ssss\n" |
| 4121 "Dssss\n" | 4135 "D0ssss\n" |
| 4122 "Es\n" | 4136 "E0s\n" |
| 4123 "F\n" | 4137 "F0\n" |
| 4124 "Gs\n" | 4138 "G0s\n" |
| 4125 "Hs\n" | 4139 "H0s\n" |
| 4126 "Is\n" | 4140 "I0s\n" |
| 4127 "Jssss\n", | 4141 "J0ssss\n", |
| 4128 | 4142 |
| 4129 "RABCDEFGHIJ\n" | 4143 "R0A0B0C0D0E0F0G0H0I0J0\n" |
| 4130 }, { | 4144 }, { |
| 4131 "Remove passes regardless of cache state", | 4145 "Remove passes regardless of cache state", |
| 4132 "RssssA[ct]sss\n" | 4146 "R0ssssA0[ct]sss\n" |
| 4133 "AsssBCs\n" | 4147 "A0sssB0C0s\n" |
| 4134 "BsssD[c]ssE[t]F\n" | 4148 "B0sssD0[c]ssE0[t]F0\n" |
| 4135 "Essssss\n" | 4149 "E0ssssss\n" |
| 4136 "CG\n" | 4150 "C0G0\n" |
| 4137 "Dsssssss\n" | 4151 "D0sssssss\n" |
| 4138 "Fsssssss\n" | 4152 "F0sssssss\n" |
| 4139 "Gsss\n", | 4153 "G0sss\n", |
| 4140 | 4154 |
| 4141 "RssssAsss\n" | 4155 "R0ssssA0sss\n" |
| 4142 }, { | 4156 }, { |
| 4143 "Leave some passes, remove others", | 4157 "Leave some passes, remove others", |
| 4144 | 4158 |
| 4145 "RssssA[c]sss\n" | 4159 "R0ssssA0[c]sss\n" |
| 4146 "AsssB[t]C[ct]s\n" | 4160 "A0sssB0[t]C0[ct]s\n" |
| 4147 "BsssD[c]ss\n" | 4161 "B0sssD0[c]ss\n" |
| 4148 "CG\n" | 4162 "C0G0\n" |
| 4149 "Dsssssss\n" | 4163 "D0sssssss\n" |
| 4150 "Gsss\n", | 4164 "G0sss\n", |
| 4151 | 4165 |
| 4152 "RssssAsss\n" | 4166 "R0ssssA0sss\n" |
| 4153 "AsssBCs\n" | 4167 "A0sssB0C0s\n" |
| 4154 "BsssDss\n" | 4168 "B0sssD0ss\n" |
| 4155 "Dsssssss\n" | 4169 "D0sssssss\n" |
| 4156 }, { | 4170 }, { |
| 4157 0, 0, 0 | 4171 0, 0, 0 |
| 4158 } | 4172 } |
| 4159 }; | 4173 }; |
| 4160 | 4174 |
| 4161 static void verifyRenderPassTestData(TestCase& testCase, RenderPassRemovalTestDa
ta& testData) | 4175 static void verifyRenderPassTestData(TestCase& testCase, RenderPassRemovalTestDa
ta& testData) |
| 4162 { | 4176 { |
| 4163 char actualResult[1024]; | 4177 char actualResult[1024]; |
| 4164 dumpRenderPassTestData(testData, actualResult); | 4178 dumpRenderPassTestData(testData, actualResult); |
| 4165 EXPECT_STREQ(testCase.expectedResult, actualResult) << "In test case: " << t
estCase.name; | 4179 EXPECT_STREQ(testCase.expectedResult, actualResult) << "In test case: " << t
estCase.name; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 4177 while (removeRenderPassesCases[testCaseIndex].name) { | 4191 while (removeRenderPassesCases[testCaseIndex].name) { |
| 4178 RenderPassRemovalTestData testData; | 4192 RenderPassRemovalTestData testData; |
| 4179 configureRenderPassTestData(removeRenderPassesCases[testCaseIndex].initS
cript, testData, renderer.get()); | 4193 configureRenderPassTestData(removeRenderPassesCases[testCaseIndex].initS
cript, testData, renderer.get()); |
| 4180 CCLayerTreeHostImpl::removeRenderPasses(CCLayerTreeHostImpl::CullRenderP
assesWithCachedTextures(*renderer), testData); | 4194 CCLayerTreeHostImpl::removeRenderPasses(CCLayerTreeHostImpl::CullRenderP
assesWithCachedTextures(*renderer), testData); |
| 4181 verifyRenderPassTestData(removeRenderPassesCases[testCaseIndex], testDat
a); | 4195 verifyRenderPassTestData(removeRenderPassesCases[testCaseIndex], testDat
a); |
| 4182 testCaseIndex++; | 4196 testCaseIndex++; |
| 4183 } | 4197 } |
| 4184 } | 4198 } |
| 4185 | 4199 |
| 4186 } // namespace | 4200 } // namespace |
| OLD | NEW |