| 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 "cc/layer_tree_host_impl.h" | 5 #include "cc/layer_tree_host_impl.h" |
| 6 | 6 |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 2758 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2769 }; | 2769 }; |
| 2770 | 2770 |
| 2771 static inline scoped_ptr<RenderPass> createRenderPassWithResource(ResourceProvid
er* provider) | 2771 static inline scoped_ptr<RenderPass> createRenderPassWithResource(ResourceProvid
er* provider) |
| 2772 { | 2772 { |
| 2773 ResourceProvider::ResourceId resourceId = provider->createResource(0, gfx::S
ize(1, 1), GL_RGBA, ResourceProvider::TextureUsageAny); | 2773 ResourceProvider::ResourceId resourceId = provider->createResource(0, gfx::S
ize(1, 1), GL_RGBA, ResourceProvider::TextureUsageAny); |
| 2774 | 2774 |
| 2775 scoped_ptr<TestRenderPass> pass = TestRenderPass::Create(); | 2775 scoped_ptr<TestRenderPass> pass = TestRenderPass::Create(); |
| 2776 pass->SetNew(RenderPass::Id(1, 1), gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1,
1), gfx::Transform()); | 2776 pass->SetNew(RenderPass::Id(1, 1), gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1,
1), gfx::Transform()); |
| 2777 scoped_ptr<SharedQuadState> sharedState = SharedQuadState::Create(); | 2777 scoped_ptr<SharedQuadState> sharedState = SharedQuadState::Create(); |
| 2778 sharedState->SetAll(gfx::Transform(), gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0,
1, 1), gfx::Rect(0, 0, 1, 1), false, 1); | 2778 sharedState->SetAll(gfx::Transform(), gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0,
1, 1), gfx::Rect(0, 0, 1, 1), false, 1); |
| 2779 const float vertex_opacity[] = {1, 1, 1, 1}; |
| 2779 scoped_ptr<TextureDrawQuad> quad = TextureDrawQuad::Create(); | 2780 scoped_ptr<TextureDrawQuad> quad = TextureDrawQuad::Create(); |
| 2780 quad->SetNew(sharedState.get(), gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)
, resourceId, false, gfx::RectF(0, 0, 1, 1), false); | 2781 quad->SetNew(sharedState.get(), gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)
, resourceId, false, gfx::RectF(0, 0, 1, 1), vertex_opacity, false); |
| 2781 | 2782 |
| 2782 pass->AppendSharedQuadState(sharedState.Pass()); | 2783 pass->AppendSharedQuadState(sharedState.Pass()); |
| 2783 pass->AppendQuad(quad.PassAs<DrawQuad>()); | 2784 pass->AppendQuad(quad.PassAs<DrawQuad>()); |
| 2784 | 2785 |
| 2785 return pass.PassAs<RenderPass>(); | 2786 return pass.PassAs<RenderPass>(); |
| 2786 } | 2787 } |
| 2787 | 2788 |
| 2788 TEST_P(LayerTreeHostImplTest, dontUseOldResourcesAfterLostOutputSurface) | 2789 TEST_P(LayerTreeHostImplTest, dontUseOldResourcesAfterLostOutputSurface) |
| 2789 { | 2790 { |
| 2790 int layerId = 1; | 2791 int layerId = 1; |
| (...skipping 1476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4267 isReplica = true; | 4268 isReplica = true; |
| 4268 | 4269 |
| 4269 scoped_ptr<TestRenderPass> renderPass = testData.renderPassCache.take(re
nderPassId); | 4270 scoped_ptr<TestRenderPass> renderPass = testData.renderPassCache.take(re
nderPassId); |
| 4270 | 4271 |
| 4271 // Cycle through quad data and create all quads | 4272 // Cycle through quad data and create all quads |
| 4272 while (*currentChar && *currentChar != '\n') { | 4273 while (*currentChar && *currentChar != '\n') { |
| 4273 if (*currentChar == 's') { | 4274 if (*currentChar == 's') { |
| 4274 // Solid color draw quad | 4275 // Solid color draw quad |
| 4275 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create
(); | 4276 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create
(); |
| 4276 quad->SetNew(testData.sharedQuadState.get(), gfx::Rect(0, 0, 10,
10), SK_ColorWHITE); | 4277 quad->SetNew(testData.sharedQuadState.get(), gfx::Rect(0, 0, 10,
10), SK_ColorWHITE); |
| 4277 | 4278 |
| 4278 renderPass->AppendQuad(quad.PassAs<DrawQuad>()); | 4279 renderPass->AppendQuad(quad.PassAs<DrawQuad>()); |
| 4279 currentChar++; | 4280 currentChar++; |
| 4280 } else if ((*currentChar >= 'A') && (*currentChar <= 'Z')) { | 4281 } else if ((*currentChar >= 'A') && (*currentChar <= 'Z')) { |
| 4281 // RenderPass draw quad | 4282 // RenderPass draw quad |
| 4282 int layerId = *currentChar; | 4283 int layerId = *currentChar; |
| 4283 currentChar++; | 4284 currentChar++; |
| 4284 ASSERT_TRUE(currentChar); | 4285 ASSERT_TRUE(currentChar); |
| 4285 int index = *currentChar; | 4286 int index = *currentChar; |
| 4286 currentChar++; | 4287 currentChar++; |
| 4287 RenderPass::Id newRenderPassId = RenderPass::Id(layerId, index); | 4288 RenderPass::Id newRenderPassId = RenderPass::Id(layerId, index); |
| 4288 ASSERT_NE(rootRenderPassId, newRenderPassId); | 4289 ASSERT_NE(rootRenderPassId, newRenderPassId); |
| 4289 bool hasTexture = false; | 4290 bool hasTexture = false; |
| 4290 bool contentsChanged = true; | 4291 bool contentsChanged = true; |
| 4291 | 4292 |
| 4292 if (*currentChar == '[') { | 4293 if (*currentChar == '[') { |
| 4293 currentChar++; | 4294 currentChar++; |
| 4294 while (*currentChar && *currentChar != ']') { | 4295 while (*currentChar && *currentChar != ']') { |
| 4295 switch (*currentChar) { | 4296 switch (*currentChar) { |
| 4296 case 'c': | 4297 case 'c': |
| 4297 contentsChanged = false; | 4298 contentsChanged = false; |
| 4298 break; | 4299 break; |
| 4299 case 't': | 4300 case 't': |
| 4300 hasTexture = true; | 4301 hasTexture = true; |
| 4301 break; | 4302 break; |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4351 *pos = RenderPassDrawQuad::MaterialCast(currentQuad)->render_pas
s_id.layer_id; | 4352 *pos = RenderPassDrawQuad::MaterialCast(currentQuad)->render_pas
s_id.layer_id; |
| 4352 pos++; | 4353 pos++; |
| 4353 *pos = RenderPassDrawQuad::MaterialCast(currentQuad)->render_pas
s_id.index; | 4354 *pos = RenderPassDrawQuad::MaterialCast(currentQuad)->render_pas
s_id.index; |
| 4354 pos++; | 4355 pos++; |
| 4355 break; | 4356 break; |
| 4356 default: | 4357 default: |
| 4357 *pos = 'x'; | 4358 *pos = 'x'; |
| 4358 pos++; | 4359 pos++; |
| 4359 break; | 4360 break; |
| 4360 } | 4361 } |
| 4361 | 4362 |
| 4362 quadListIterator++; | 4363 quadListIterator++; |
| 4363 } | 4364 } |
| 4364 *pos = '\n'; | 4365 *pos = '\n'; |
| 4365 pos++; | 4366 pos++; |
| 4366 } | 4367 } |
| 4367 *pos = '\0'; | 4368 *pos = '\0'; |
| 4368 } | 4369 } |
| 4369 | 4370 |
| 4370 // Each RenderPassList is represented by a string which describes the configurat
ion. | 4371 // Each RenderPassList is represented by a string which describes the configurat
ion. |
| 4371 // The syntax of the string is as follows: | 4372 // The syntax of the string is as follows: |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4453 "A0ssssB0sss\n" | 4454 "A0ssssB0sss\n" |
| 4454 "B0C0\n" | 4455 "B0C0\n" |
| 4455 "C0D0\n" | 4456 "C0D0\n" |
| 4456 "D0E0\n" | 4457 "D0E0\n" |
| 4457 "E0F0\n" | 4458 "E0F0\n" |
| 4458 "F0G0\n" | 4459 "F0G0\n" |
| 4459 "G0H0\n" | 4460 "G0H0\n" |
| 4460 "H0sssI0sss\n" | 4461 "H0sssI0sss\n" |
| 4461 "I0J0\n" | 4462 "I0J0\n" |
| 4462 "J0ssss\n", | 4463 "J0ssss\n", |
| 4463 | 4464 |
| 4464 "R0sssssA0ssss\n" | 4465 "R0sssssA0ssss\n" |
| 4465 }, { | 4466 }, { |
| 4466 "Wide recursion, remove all", | 4467 "Wide recursion, remove all", |
| 4467 "R0A0[ct]B0[ct]C0[ct]D0[ct]E0[ct]F0[ct]G0[ct]H0[ct]I0[ct]J0[ct]\n" | 4468 "R0A0[ct]B0[ct]C0[ct]D0[ct]E0[ct]F0[ct]G0[ct]H0[ct]I0[ct]J0[ct]\n" |
| 4468 "A0s\n" | 4469 "A0s\n" |
| 4469 "B0s\n" | 4470 "B0s\n" |
| 4470 "C0ssss\n" | 4471 "C0ssss\n" |
| 4471 "D0ssss\n" | 4472 "D0ssss\n" |
| 4472 "E0s\n" | 4473 "E0s\n" |
| 4473 "F0\n" | 4474 "F0\n" |
| 4474 "G0s\n" | 4475 "G0s\n" |
| 4475 "H0s\n" | 4476 "H0s\n" |
| 4476 "I0s\n" | 4477 "I0s\n" |
| 4477 "J0ssss\n", | 4478 "J0ssss\n", |
| 4478 | 4479 |
| 4479 "R0A0B0C0D0E0F0G0H0I0J0\n" | 4480 "R0A0B0C0D0E0F0G0H0I0J0\n" |
| 4480 }, { | 4481 }, { |
| 4481 "Remove passes regardless of cache state", | 4482 "Remove passes regardless of cache state", |
| 4482 "R0ssssA0[ct]sss\n" | 4483 "R0ssssA0[ct]sss\n" |
| 4483 "A0sssB0C0s\n" | 4484 "A0sssB0C0s\n" |
| 4484 "B0sssD0[c]ssE0[t]F0\n" | 4485 "B0sssD0[c]ssE0[t]F0\n" |
| 4485 "E0ssssss\n" | 4486 "E0ssssss\n" |
| 4486 "C0G0\n" | 4487 "C0G0\n" |
| 4487 "D0sssssss\n" | 4488 "D0sssssss\n" |
| 4488 "F0sssssss\n" | 4489 "F0sssssss\n" |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4689 // scrolling model, in both x- and y-directions. | 4690 // scrolling model, in both x- and y-directions. |
| 4690 void LayerTreeHostImplTest::pinchZoomPanViewportAndScrollTest(const float device
ScaleFactor) | 4691 void LayerTreeHostImplTest::pinchZoomPanViewportAndScrollTest(const float device
ScaleFactor) |
| 4691 { | 4692 { |
| 4692 m_hostImpl->setDeviceScaleFactor(deviceScaleFactor); | 4693 m_hostImpl->setDeviceScaleFactor(deviceScaleFactor); |
| 4693 | 4694 |
| 4694 gfx::Size layoutSurfaceSize(10, 20); | 4695 gfx::Size layoutSurfaceSize(10, 20); |
| 4695 gfx::Size deviceSurfaceSize(layoutSurfaceSize.width() * static_cast<int>(dev
iceScaleFactor), | 4696 gfx::Size deviceSurfaceSize(layoutSurfaceSize.width() * static_cast<int>(dev
iceScaleFactor), |
| 4696 layoutSurfaceSize.height() * static_cast<int>(de
viceScaleFactor)); | 4697 layoutSurfaceSize.height() * static_cast<int>(de
viceScaleFactor)); |
| 4697 float pageScale = 2; | 4698 float pageScale = 2; |
| 4698 scoped_ptr<LayerImpl> root = createScrollableLayer(1, layoutSurfaceSize); | 4699 scoped_ptr<LayerImpl> root = createScrollableLayer(1, layoutSurfaceSize); |
| 4699 // For this test we want to scrolls to move both the document and the | 4700 // For this test we want to scrolls to move both the document and the |
| 4700 // pinchZoomViewport so we can see some scroll component on the implTransfor
m. | 4701 // pinchZoomViewport so we can see some scroll component on the implTransfor
m. |
| 4701 root->setMaxScrollOffset(gfx::Vector2d(3, 4)); | 4702 root->setMaxScrollOffset(gfx::Vector2d(3, 4)); |
| 4702 m_hostImpl->setRootLayer(root.Pass()); | 4703 m_hostImpl->setRootLayer(root.Pass()); |
| 4703 m_hostImpl->setViewportSize(layoutSurfaceSize, deviceSurfaceSize); | 4704 m_hostImpl->setViewportSize(layoutSurfaceSize, deviceSurfaceSize); |
| 4704 m_hostImpl->setPageScaleFactorAndLimits(1, 1, pageScale); | 4705 m_hostImpl->setPageScaleFactorAndLimits(1, 1, pageScale); |
| 4705 initializeRendererAndDrawFrame(); | 4706 initializeRendererAndDrawFrame(); |
| 4706 | 4707 |
| 4707 // Set new page scale on impl thread by pinching. | 4708 // Set new page scale on impl thread by pinching. |
| 4708 m_hostImpl->pinchGestureBegin(); | 4709 m_hostImpl->pinchGestureBegin(); |
| 4709 m_hostImpl->pinchGestureUpdate(pageScale, gfx::Point()); | 4710 m_hostImpl->pinchGestureUpdate(pageScale, gfx::Point()); |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4808 // cause both document-scroll and zoomViewport panning. | 4809 // cause both document-scroll and zoomViewport panning. |
| 4809 void LayerTreeHostImplTest::pinchZoomPanViewportAndScrollBoundaryTest(const floa
t deviceScaleFactor) | 4810 void LayerTreeHostImplTest::pinchZoomPanViewportAndScrollBoundaryTest(const floa
t deviceScaleFactor) |
| 4810 { | 4811 { |
| 4811 m_hostImpl->setDeviceScaleFactor(deviceScaleFactor); | 4812 m_hostImpl->setDeviceScaleFactor(deviceScaleFactor); |
| 4812 | 4813 |
| 4813 gfx::Size layoutSurfaceSize(10, 20); | 4814 gfx::Size layoutSurfaceSize(10, 20); |
| 4814 gfx::Size deviceSurfaceSize(layoutSurfaceSize.width() * static_cast<int>(dev
iceScaleFactor), | 4815 gfx::Size deviceSurfaceSize(layoutSurfaceSize.width() * static_cast<int>(dev
iceScaleFactor), |
| 4815 layoutSurfaceSize.height() * static_cast<int>(de
viceScaleFactor)); | 4816 layoutSurfaceSize.height() * static_cast<int>(de
viceScaleFactor)); |
| 4816 float pageScale = 2; | 4817 float pageScale = 2; |
| 4817 scoped_ptr<LayerImpl> root = createScrollableLayer(1, layoutSurfaceSize); | 4818 scoped_ptr<LayerImpl> root = createScrollableLayer(1, layoutSurfaceSize); |
| 4818 // For this test we want to scrolls to move both the document and the | 4819 // For this test we want to scrolls to move both the document and the |
| 4819 // pinchZoomViewport so we can see some scroll component on the implTransfor
m. | 4820 // pinchZoomViewport so we can see some scroll component on the implTransfor
m. |
| 4820 root->setMaxScrollOffset(gfx::Vector2d(3, 4)); | 4821 root->setMaxScrollOffset(gfx::Vector2d(3, 4)); |
| 4821 m_hostImpl->setRootLayer(root.Pass()); | 4822 m_hostImpl->setRootLayer(root.Pass()); |
| 4822 m_hostImpl->setViewportSize(layoutSurfaceSize, deviceSurfaceSize); | 4823 m_hostImpl->setViewportSize(layoutSurfaceSize, deviceSurfaceSize); |
| 4823 m_hostImpl->setPageScaleFactorAndLimits(1, 1, pageScale); | 4824 m_hostImpl->setPageScaleFactorAndLimits(1, 1, pageScale); |
| 4824 initializeRendererAndDrawFrame(); | 4825 initializeRendererAndDrawFrame(); |
| 4825 | 4826 |
| 4826 // Set new page scale on impl thread by pinching. | 4827 // Set new page scale on impl thread by pinching. |
| 4827 m_hostImpl->pinchGestureBegin(); | 4828 m_hostImpl->pinchGestureBegin(); |
| 4828 m_hostImpl->pinchGestureUpdate(pageScale, gfx::Point()); | 4829 m_hostImpl->pinchGestureUpdate(pageScale, gfx::Point()); |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4928 gfx::Rect noDamage = gfx::Rect(m_hostImpl->deviceViewportSize()); | 4929 gfx::Rect noDamage = gfx::Rect(m_hostImpl->deviceViewportSize()); |
| 4929 drawFrameAndTestDamage(noDamage); | 4930 drawFrameAndTestDamage(noDamage); |
| 4930 } | 4931 } |
| 4931 | 4932 |
| 4932 INSTANTIATE_TEST_CASE_P(LayerTreeHostImplTests, | 4933 INSTANTIATE_TEST_CASE_P(LayerTreeHostImplTests, |
| 4933 LayerTreeHostImplTest, | 4934 LayerTreeHostImplTest, |
| 4934 ::testing::Values(false, true)); | 4935 ::testing::Values(false, true)); |
| 4935 | 4936 |
| 4936 } // namespace | 4937 } // namespace |
| 4937 } // namespace cc | 4938 } // namespace cc |
| OLD | NEW |