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 "CCDelegatedRendererLayerImpl.h" |
10 #include "CCGeometryTestUtils.h" | 11 #include "CCGeometryTestUtils.h" |
11 #include "CCHeadsUpDisplayLayerImpl.h" | 12 #include "CCHeadsUpDisplayLayerImpl.h" |
12 #include "CCIOSurfaceLayerImpl.h" | 13 #include "CCIOSurfaceLayerImpl.h" |
13 #include "CCLayerImpl.h" | 14 #include "CCLayerImpl.h" |
14 #include "CCLayerTestCommon.h" | 15 #include "CCLayerTestCommon.h" |
15 #include "CCLayerTilingData.h" | 16 #include "CCLayerTilingData.h" |
16 #include "CCQuadSink.h" | 17 #include "CCQuadSink.h" |
17 #include "CCRenderPassDrawQuad.h" | 18 #include "CCRenderPassDrawQuad.h" |
| 19 #include "CCRenderPassTestCommon.h" |
18 #include "CCRendererGL.h" | 20 #include "CCRendererGL.h" |
19 #include "CCScrollbarGeometryFixedThumb.h" | 21 #include "CCScrollbarGeometryFixedThumb.h" |
20 #include "CCScrollbarLayerImpl.h" | 22 #include "CCScrollbarLayerImpl.h" |
21 #include "CCSettings.h" | 23 #include "CCSettings.h" |
22 #include "CCSingleThreadProxy.h" | 24 #include "CCSingleThreadProxy.h" |
23 #include "CCSolidColorDrawQuad.h" | 25 #include "CCSolidColorDrawQuad.h" |
24 #include "CCTestCommon.h" | 26 #include "CCTestCommon.h" |
| 27 #include "CCTextureDrawQuad.h" |
25 #include "CCTextureLayerImpl.h" | 28 #include "CCTextureLayerImpl.h" |
26 #include "CCTileDrawQuad.h" | 29 #include "CCTileDrawQuad.h" |
27 #include "CCTiledLayerImpl.h" | 30 #include "CCTiledLayerImpl.h" |
28 #include "CCVideoLayerImpl.h" | 31 #include "CCVideoLayerImpl.h" |
29 #include "FakeWebCompositorOutputSurface.h" | 32 #include "FakeWebCompositorOutputSurface.h" |
30 #include "FakeWebGraphicsContext3D.h" | 33 #include "FakeWebGraphicsContext3D.h" |
31 #include "FakeWebScrollbarThemeGeometry.h" | 34 #include "FakeWebScrollbarThemeGeometry.h" |
32 #include <gmock/gmock.h> | 35 #include <gmock/gmock.h> |
33 #include <gtest/gtest.h> | 36 #include <gtest/gtest.h> |
34 #include <public/WebVideoFrame.h> | 37 #include <public/WebVideoFrame.h> |
(...skipping 2438 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2473 setThumbResourceId(provider->createResource(pool, size, format, hint)); | 2476 setThumbResourceId(provider->createResource(pool, size, format, hint)); |
2474 } | 2477 } |
2475 | 2478 |
2476 protected: | 2479 protected: |
2477 explicit FakeScrollbarLayerImpl(int id) | 2480 explicit FakeScrollbarLayerImpl(int id) |
2478 : CCScrollbarLayerImpl(id) | 2481 : CCScrollbarLayerImpl(id) |
2479 { | 2482 { |
2480 } | 2483 } |
2481 }; | 2484 }; |
2482 | 2485 |
| 2486 static inline PassOwnPtr<CCRenderPass> createRenderPassWithResource(CCResourcePr
ovider* provider) |
| 2487 { |
| 2488 CCResourceProvider::ResourceId resourceId = provider->createResource(0, IntS
ize(1, 1), GraphicsContext3D::RGBA, CCResourceProvider::TextureUsageAny); |
| 2489 |
| 2490 OwnPtr<CCRenderPass> pass = CCRenderPass::create(CCRenderPass::Id(1, 1), Int
Rect(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); |
| 2492 OwnPtr<CCTextureDrawQuad> quad = CCTextureDrawQuad::create(sharedState.get()
, IntRect(0, 0, 1, 1), resourceId, false, FloatRect(0, 0, 1, 1), false); |
| 2493 |
| 2494 static_cast<CCTestRenderPass*>(pass.get())->appendSharedQuadState(sharedStat
e.release()); |
| 2495 static_cast<CCTestRenderPass*>(pass.get())->appendQuad(quad.release()); |
| 2496 |
| 2497 return pass.release(); |
| 2498 } |
| 2499 |
2483 TEST_F(CCLayerTreeHostImplTest, dontUseOldResourcesAfterLostContext) | 2500 TEST_F(CCLayerTreeHostImplTest, dontUseOldResourcesAfterLostContext) |
2484 { | 2501 { |
2485 OwnPtr<CCLayerImpl> rootLayer(CCLayerImpl::create(1)); | 2502 OwnPtr<CCLayerImpl> rootLayer(CCLayerImpl::create(1)); |
2486 rootLayer->setBounds(IntSize(10, 10)); | 2503 rootLayer->setBounds(IntSize(10, 10)); |
2487 rootLayer->setAnchorPoint(FloatPoint(0, 0)); | 2504 rootLayer->setAnchorPoint(FloatPoint(0, 0)); |
2488 | 2505 |
2489 OwnPtr<CCTiledLayerImpl> tileLayer = CCTiledLayerImpl::create(2); | 2506 OwnPtr<CCTiledLayerImpl> tileLayer = CCTiledLayerImpl::create(2); |
2490 tileLayer->setBounds(IntSize(10, 10)); | 2507 tileLayer->setBounds(IntSize(10, 10)); |
2491 tileLayer->setAnchorPoint(FloatPoint(0, 0)); | 2508 tileLayer->setAnchorPoint(FloatPoint(0, 0)); |
2492 tileLayer->setContentBounds(IntSize(10, 10)); | 2509 tileLayer->setContentBounds(IntSize(10, 10)); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2539 | 2556 |
2540 OwnPtr<CCHeadsUpDisplayLayerImpl> hudLayer = CCHeadsUpDisplayLayerImpl::crea
te(7); | 2557 OwnPtr<CCHeadsUpDisplayLayerImpl> hudLayer = CCHeadsUpDisplayLayerImpl::crea
te(7); |
2541 hudLayer->setBounds(IntSize(10, 10)); | 2558 hudLayer->setBounds(IntSize(10, 10)); |
2542 hudLayer->setAnchorPoint(FloatPoint(0, 0)); | 2559 hudLayer->setAnchorPoint(FloatPoint(0, 0)); |
2543 hudLayer->setContentBounds(IntSize(10, 10)); | 2560 hudLayer->setContentBounds(IntSize(10, 10)); |
2544 hudLayer->setDrawsContent(true); | 2561 hudLayer->setDrawsContent(true); |
2545 hudLayer->setLayerTreeHostImpl(m_hostImpl.get()); | 2562 hudLayer->setLayerTreeHostImpl(m_hostImpl.get()); |
2546 rootLayer->addChild(hudLayer.release()); | 2563 rootLayer->addChild(hudLayer.release()); |
2547 | 2564 |
2548 OwnPtr<FakeScrollbarLayerImpl> scrollbarLayer(FakeScrollbarLayerImpl::create
(8)); | 2565 OwnPtr<FakeScrollbarLayerImpl> scrollbarLayer(FakeScrollbarLayerImpl::create
(8)); |
2549 scrollbarLayer->setLayerTreeHostImpl(m_hostImpl.get()); | |
2550 scrollbarLayer->setBounds(IntSize(10, 10)); | 2566 scrollbarLayer->setBounds(IntSize(10, 10)); |
2551 scrollbarLayer->setContentBounds(IntSize(10, 10)); | 2567 scrollbarLayer->setContentBounds(IntSize(10, 10)); |
2552 scrollbarLayer->setDrawsContent(true); | 2568 scrollbarLayer->setDrawsContent(true); |
2553 scrollbarLayer->setLayerTreeHostImpl(m_hostImpl.get()); | 2569 scrollbarLayer->setLayerTreeHostImpl(m_hostImpl.get()); |
2554 scrollbarLayer->createResources(m_hostImpl->resourceProvider()); | 2570 scrollbarLayer->createResources(m_hostImpl->resourceProvider()); |
2555 rootLayer->addChild(scrollbarLayer.release()); | 2571 rootLayer->addChild(scrollbarLayer.release()); |
2556 | 2572 |
| 2573 OwnPtr<CCDelegatedRendererLayerImpl> delegatedRendererLayer(CCDelegatedRende
rerLayerImpl::create(9)); |
| 2574 delegatedRendererLayer->setBounds(IntSize(10, 10)); |
| 2575 delegatedRendererLayer->setContentBounds(IntSize(10, 10)); |
| 2576 delegatedRendererLayer->setDrawsContent(true); |
| 2577 delegatedRendererLayer->setLayerTreeHostImpl(m_hostImpl.get()); |
| 2578 OwnPtrVector<CCRenderPass> passList; |
| 2579 passList.append(createRenderPassWithResource(m_hostImpl->resourceProvider())
); |
| 2580 delegatedRendererLayer->setRenderPasses(passList); |
| 2581 EXPECT_TRUE(passList.isEmpty()); |
| 2582 rootLayer->addChild(delegatedRendererLayer.release()); |
| 2583 |
2557 // Use a context that supports IOSurfaces | 2584 // Use a context that supports IOSurfaces |
2558 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(adoptP
tr(new FakeWebGraphicsContext3DWithIOSurface)), UnthrottledUploader); | 2585 m_hostImpl->initializeRenderer(FakeWebCompositorOutputSurface::create(adoptP
tr(new FakeWebGraphicsContext3DWithIOSurface)), UnthrottledUploader); |
2559 | 2586 |
2560 hwVideoFrame.setTextureId(m_hostImpl->resourceProvider()->graphicsContext3D(
)->createTexture()); | 2587 hwVideoFrame.setTextureId(m_hostImpl->resourceProvider()->graphicsContext3D(
)->createTexture()); |
2561 | 2588 |
2562 m_hostImpl->setRootLayer(rootLayer.release()); | 2589 m_hostImpl->setRootLayer(rootLayer.release()); |
2563 | 2590 |
2564 CCLayerTreeHostImpl::FrameData frame; | 2591 CCLayerTreeHostImpl::FrameData frame; |
2565 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 2592 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
2566 m_hostImpl->drawLayers(frame); | 2593 m_hostImpl->drawLayers(frame); |
(...skipping 1288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3855 renderPass = entry.renderPass; | 3882 renderPass = entry.renderPass; |
3856 return *this; | 3883 return *this; |
3857 } | 3884 } |
3858 }; | 3885 }; |
3859 | 3886 |
3860 struct RenderPassRemovalTestData : public CCLayerTreeHostImpl::FrameData { | 3887 struct RenderPassRemovalTestData : public CCLayerTreeHostImpl::FrameData { |
3861 std::map<CCRenderPass::Id, RenderPassCacheEntry> renderPassCache; | 3888 std::map<CCRenderPass::Id, RenderPassCacheEntry> renderPassCache; |
3862 OwnPtr<CCSharedQuadState> sharedQuadState; | 3889 OwnPtr<CCSharedQuadState> sharedQuadState; |
3863 }; | 3890 }; |
3864 | 3891 |
3865 class CCTestRenderPass: public CCRenderPass { | |
3866 public: | |
3867 static PassOwnPtr<CCRenderPass> create(CCRenderPass::Id id, IntRect outputRe
ct, const WebTransformationMatrix& rootTransform) { return adoptPtr(new CCTestRe
nderPass(id, outputRect, rootTransform)); } | |
3868 | |
3869 void appendQuad(PassOwnPtr<CCDrawQuad> quad) { m_quadList.append(quad); } | |
3870 | |
3871 protected: | |
3872 CCTestRenderPass(CCRenderPass::Id id, IntRect outputRect, const WebTransform
ationMatrix& rootTransform) : CCRenderPass(id, outputRect, rootTransform) { } | |
3873 }; | |
3874 | |
3875 class CCTestRenderer : public CCRendererGL, public CCRendererClient { | 3892 class CCTestRenderer : public CCRendererGL, public CCRendererClient { |
3876 public: | 3893 public: |
3877 static PassOwnPtr<CCTestRenderer> create(CCResourceProvider* resourceProvide
r) | 3894 static PassOwnPtr<CCTestRenderer> create(CCResourceProvider* resourceProvide
r) |
3878 { | 3895 { |
3879 OwnPtr<CCTestRenderer> renderer(adoptPtr(new CCTestRenderer(resourceProv
ider))); | 3896 OwnPtr<CCTestRenderer> renderer(adoptPtr(new CCTestRenderer(resourceProv
ider))); |
3880 if (!renderer->initialize()) | 3897 if (!renderer->initialize()) |
3881 return nullptr; | 3898 return nullptr; |
3882 | 3899 |
3883 return renderer.release(); | 3900 return renderer.release(); |
3884 } | 3901 } |
(...skipping 25 matching lines...) Expand all Loading... |
3910 { | 3927 { |
3911 renderer->clearCachedTextures(); | 3928 renderer->clearCachedTextures(); |
3912 | 3929 |
3913 // One shared state for all quads - we don't need the correct details | 3930 // One shared state for all quads - we don't need the correct details |
3914 testData.sharedQuadState = CCSharedQuadState::create(WebTransformationMatrix
(), IntRect(), IntRect(), 1.0, true); | 3931 testData.sharedQuadState = CCSharedQuadState::create(WebTransformationMatrix
(), IntRect(), IntRect(), 1.0, true); |
3915 | 3932 |
3916 const char* currentChar = testScript; | 3933 const char* currentChar = testScript; |
3917 | 3934 |
3918 // Pre-create root pass | 3935 // Pre-create root pass |
3919 CCRenderPass::Id rootRenderPassId = CCRenderPass::Id(testScript[0], testScri
pt[1]); | 3936 CCRenderPass::Id rootRenderPassId = CCRenderPass::Id(testScript[0], testScri
pt[1]); |
3920 OwnPtr<CCRenderPass> rootRenderPass = CCTestRenderPass::create(rootRenderPas
sId, IntRect(), WebTransformationMatrix()); | 3937 OwnPtr<CCRenderPass> rootRenderPass = CCRenderPass::create(rootRenderPassId,
IntRect(), WebTransformationMatrix()); |
3921 testData.renderPassCache.insert(std::pair<CCRenderPass::Id, RenderPassCacheE
ntry>(rootRenderPassId, RenderPassCacheEntry(rootRenderPass.release()))); | 3938 testData.renderPassCache.insert(std::pair<CCRenderPass::Id, RenderPassCacheE
ntry>(rootRenderPassId, RenderPassCacheEntry(rootRenderPass.release()))); |
3922 while (*currentChar) { | 3939 while (*currentChar) { |
3923 int layerId = *currentChar; | 3940 int layerId = *currentChar; |
3924 currentChar++; | 3941 currentChar++; |
3925 ASSERT_TRUE(currentChar); | 3942 ASSERT_TRUE(currentChar); |
3926 int index = *currentChar; | 3943 int index = *currentChar; |
3927 currentChar++; | 3944 currentChar++; |
3928 | 3945 |
3929 CCRenderPass::Id renderPassId = CCRenderPass::Id(layerId, index); | 3946 CCRenderPass::Id renderPassId = CCRenderPass::Id(layerId, index); |
3930 | 3947 |
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4192 while (removeRenderPassesCases[testCaseIndex].name) { | 4209 while (removeRenderPassesCases[testCaseIndex].name) { |
4193 RenderPassRemovalTestData testData; | 4210 RenderPassRemovalTestData testData; |
4194 configureRenderPassTestData(removeRenderPassesCases[testCaseIndex].initS
cript, testData, renderer.get()); | 4211 configureRenderPassTestData(removeRenderPassesCases[testCaseIndex].initS
cript, testData, renderer.get()); |
4195 CCLayerTreeHostImpl::removeRenderPasses(CCLayerTreeHostImpl::CullRenderP
assesWithCachedTextures(*renderer), testData); | 4212 CCLayerTreeHostImpl::removeRenderPasses(CCLayerTreeHostImpl::CullRenderP
assesWithCachedTextures(*renderer), testData); |
4196 verifyRenderPassTestData(removeRenderPassesCases[testCaseIndex], testDat
a); | 4213 verifyRenderPassTestData(removeRenderPassesCases[testCaseIndex], testDat
a); |
4197 testCaseIndex++; | 4214 testCaseIndex++; |
4198 } | 4215 } |
4199 } | 4216 } |
4200 | 4217 |
4201 } // namespace | 4218 } // namespace |
OLD | NEW |