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" |
11 #include "base/hash_tables.h" | 11 #include "base/hash_tables.h" |
12 #include "cc/delegated_renderer_layer_impl.h" | 12 #include "cc/delegated_renderer_layer_impl.h" |
13 #include "cc/geometry.h" | 13 #include "cc/geometry.h" |
14 #include "cc/gl_renderer.h" | 14 #include "cc/gl_renderer.h" |
15 #include "cc/heads_up_display_layer_impl.h" | 15 #include "cc/heads_up_display_layer_impl.h" |
16 #include "cc/io_surface_layer_impl.h" | 16 #include "cc/io_surface_layer_impl.h" |
17 #include "cc/layer_impl.h" | 17 #include "cc/layer_impl.h" |
18 #include "cc/layer_tiling_data.h" | 18 #include "cc/layer_tiling_data.h" |
19 #include "cc/math_util.h" | 19 #include "cc/math_util.h" |
20 #include "cc/quad_sink.h" | 20 #include "cc/quad_sink.h" |
21 #include "cc/render_pass_draw_quad.h" | 21 #include "cc/render_pass_draw_quad.h" |
22 #include "cc/scrollbar_geometry_fixed_thumb.h" | 22 #include "cc/scrollbar_geometry_fixed_thumb.h" |
23 #include "cc/scrollbar_layer_impl.h" | 23 #include "cc/scrollbar_layer_impl.h" |
24 #include "cc/settings.h" | |
25 #include "cc/single_thread_proxy.h" | 24 #include "cc/single_thread_proxy.h" |
26 #include "cc/solid_color_draw_quad.h" | 25 #include "cc/solid_color_draw_quad.h" |
27 #include "cc/test/animation_test_common.h" | 26 #include "cc/test/animation_test_common.h" |
28 #include "cc/test/fake_proxy.h" | 27 #include "cc/test/fake_proxy.h" |
29 #include "cc/test/fake_web_compositor_output_surface.h" | 28 #include "cc/test/fake_web_compositor_output_surface.h" |
30 #include "cc/test/fake_web_graphics_context_3d.h" | 29 #include "cc/test/fake_web_graphics_context_3d.h" |
31 #include "cc/test/fake_web_scrollbar_theme_geometry.h" | 30 #include "cc/test/fake_web_scrollbar_theme_geometry.h" |
32 #include "cc/test/geometry_test_utils.h" | 31 #include "cc/test/geometry_test_utils.h" |
33 #include "cc/test/layer_test_common.h" | 32 #include "cc/test/layer_test_common.h" |
34 #include "cc/test/render_pass_test_common.h" | 33 #include "cc/test/render_pass_test_common.h" |
35 #include "cc/test/test_common.h" | |
36 #include "cc/texture_draw_quad.h" | 34 #include "cc/texture_draw_quad.h" |
37 #include "cc/texture_layer_impl.h" | 35 #include "cc/texture_layer_impl.h" |
38 #include "cc/tile_draw_quad.h" | 36 #include "cc/tile_draw_quad.h" |
39 #include "cc/tiled_layer_impl.h" | 37 #include "cc/tiled_layer_impl.h" |
40 #include "cc/video_layer_impl.h" | 38 #include "cc/video_layer_impl.h" |
41 #include "media/base/media.h" | 39 #include "media/base/media.h" |
42 #include "media/base/video_frame.h" | 40 #include "media/base/video_frame.h" |
43 #include "testing/gmock/include/gmock/gmock.h" | 41 #include "testing/gmock/include/gmock/gmock.h" |
44 #include "testing/gtest/include/gtest/gtest.h" | 42 #include "testing/gtest/include/gtest/gtest.h" |
45 #include "ui/gfx/size_conversions.h" | 43 #include "ui/gfx/size_conversions.h" |
46 #include "ui/gfx/vector2d_conversions.h" | 44 #include "ui/gfx/vector2d_conversions.h" |
47 #include <public/WebVideoFrame.h> | 45 #include <public/WebVideoFrame.h> |
48 #include <public/WebVideoFrameProvider.h> | 46 #include <public/WebVideoFrameProvider.h> |
49 | 47 |
50 using namespace LayerTestCommon; | 48 using namespace LayerTestCommon; |
51 using namespace WebKit; | 49 using namespace WebKit; |
52 using namespace WebKitTests; | 50 using namespace WebKitTests; |
53 | 51 |
54 using media::VideoFrame; | 52 using media::VideoFrame; |
55 using ::testing::Mock; | 53 using ::testing::Mock; |
56 using ::testing::Return; | 54 using ::testing::Return; |
57 using ::testing::AnyNumber; | 55 using ::testing::AnyNumber; |
58 using ::testing::AtLeast; | 56 using ::testing::AtLeast; |
59 using ::testing::_; | 57 using ::testing::_; |
60 | 58 |
61 namespace cc { | 59 namespace cc { |
62 namespace { | 60 namespace { |
63 | 61 |
64 // This test is parametrized to run all tests with the | 62 // This test is parametrized to run all tests with the |
65 // Settings::pageScalePinchZoomEnabled field enabled and disabled. | 63 // m_settings.pageScalePinchZoomEnabled field enabled and disabled. |
66 class LayerTreeHostImplTest : public testing::TestWithParam<bool>, | 64 class LayerTreeHostImplTest : public testing::TestWithParam<bool>, |
67 public LayerTreeHostImplClient { | 65 public LayerTreeHostImplClient { |
68 public: | 66 public: |
69 LayerTreeHostImplTest() | 67 LayerTreeHostImplTest() |
70 : m_proxy(scoped_ptr<Thread>(NULL)) | 68 : m_proxy(scoped_ptr<Thread>(NULL)) |
71 , m_alwaysImplThread(&m_proxy) | 69 , m_alwaysImplThread(&m_proxy) |
72 , m_alwaysMainThreadBlocked(&m_proxy) | 70 , m_alwaysMainThreadBlocked(&m_proxy) |
73 , m_onCanDrawStateChangedCalled(false) | 71 , m_onCanDrawStateChangedCalled(false) |
74 , m_didRequestCommit(false) | 72 , m_didRequestCommit(false) |
75 , m_didRequestRedraw(false) | 73 , m_didRequestRedraw(false) |
76 , m_reduceMemoryResult(true) | 74 , m_reduceMemoryResult(true) |
77 { | 75 { |
78 media::InitializeMediaLibraryForTesting(); | 76 media::InitializeMediaLibraryForTesting(); |
79 } | 77 } |
80 | 78 |
81 virtual void SetUp() | 79 virtual void SetUp() |
82 { | 80 { |
83 Settings::setPageScalePinchZoomEnabled(GetParam()); | |
84 LayerTreeSettings settings; | 81 LayerTreeSettings settings; |
85 settings.minimumOcclusionTrackingSize = gfx::Size(); | 82 settings.minimumOcclusionTrackingSize = gfx::Size(); |
| 83 settings.pageScalePinchZoomEnabled = GetParam(); |
86 | 84 |
87 m_hostImpl = LayerTreeHostImpl::create(settings, this, &m_proxy); | 85 m_hostImpl = LayerTreeHostImpl::create(settings, this, &m_proxy); |
88 m_hostImpl->initializeRenderer(createContext()); | 86 m_hostImpl->initializeRenderer(createContext()); |
89 m_hostImpl->setViewportSize(gfx::Size(10, 10), gfx::Size(10, 10)); | 87 m_hostImpl->setViewportSize(gfx::Size(10, 10), gfx::Size(10, 10)); |
90 } | 88 } |
91 | 89 |
92 virtual void TearDown() | 90 virtual void TearDown() |
93 { | 91 { |
94 } | 92 } |
95 | 93 |
96 virtual void didLoseContextOnImplThread() OVERRIDE { } | 94 virtual void didLoseContextOnImplThread() OVERRIDE { } |
97 virtual void onSwapBuffersCompleteOnImplThread() OVERRIDE { } | 95 virtual void onSwapBuffersCompleteOnImplThread() OVERRIDE { } |
98 virtual void onVSyncParametersChanged(base::TimeTicks, base::TimeDelta) OVER
RIDE { } | 96 virtual void onVSyncParametersChanged(base::TimeTicks, base::TimeDelta) OVER
RIDE { } |
99 virtual void onCanDrawStateChanged(bool canDraw) OVERRIDE { m_onCanDrawState
ChangedCalled = true; } | 97 virtual void onCanDrawStateChanged(bool canDraw) OVERRIDE { m_onCanDrawState
ChangedCalled = true; } |
100 virtual void setNeedsRedrawOnImplThread() OVERRIDE { m_didRequestRedraw = tr
ue; } | 98 virtual void setNeedsRedrawOnImplThread() OVERRIDE { m_didRequestRedraw = tr
ue; } |
101 virtual void setNeedsCommitOnImplThread() OVERRIDE { m_didRequestCommit = tr
ue; } | 99 virtual void setNeedsCommitOnImplThread() OVERRIDE { m_didRequestCommit = tr
ue; } |
102 virtual void postAnimationEventsToMainThreadOnImplThread(scoped_ptr<Animatio
nEventsVector>, base::Time wallClockTime) OVERRIDE { } | 100 virtual void postAnimationEventsToMainThreadOnImplThread(scoped_ptr<Animatio
nEventsVector>, base::Time wallClockTime) OVERRIDE { } |
103 virtual bool reduceContentsTextureMemoryOnImplThread(size_t limitBytes, int
priorityCutoff) OVERRIDE { return m_reduceMemoryResult; } | 101 virtual bool reduceContentsTextureMemoryOnImplThread(size_t limitBytes, int
priorityCutoff) OVERRIDE { return m_reduceMemoryResult; } |
104 virtual void sendManagedMemoryStats() OVERRIDE { } | 102 virtual void sendManagedMemoryStats() OVERRIDE { } |
105 | 103 |
106 void setReduceMemoryResult(bool reduceMemoryResult) { m_reduceMemoryResult =
reduceMemoryResult; } | 104 void setReduceMemoryResult(bool reduceMemoryResult) { m_reduceMemoryResult =
reduceMemoryResult; } |
107 | 105 |
108 scoped_ptr<LayerTreeHostImpl> createLayerTreeHost(bool partialSwap, scoped_p
tr<GraphicsContext> graphicsContext, scoped_ptr<LayerImpl> root) | 106 scoped_ptr<LayerTreeHostImpl> createLayerTreeHost(bool partialSwap, scoped_p
tr<GraphicsContext> graphicsContext, scoped_ptr<LayerImpl> root) |
109 { | 107 { |
110 Settings::setPartialSwapEnabled(partialSwap); | |
111 | |
112 LayerTreeSettings settings; | 108 LayerTreeSettings settings; |
113 settings.minimumOcclusionTrackingSize = gfx::Size(); | 109 settings.minimumOcclusionTrackingSize = gfx::Size(); |
| 110 settings.partialSwapEnabled = partialSwap; |
114 | 111 |
115 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(set
tings, this, &m_proxy); | 112 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(set
tings, this, &m_proxy); |
116 | 113 |
117 myHostImpl->initializeRenderer(graphicsContext.Pass()); | 114 myHostImpl->initializeRenderer(graphicsContext.Pass()); |
118 myHostImpl->setViewportSize(gfx::Size(10, 10), gfx::Size(10, 10)); | 115 myHostImpl->setViewportSize(gfx::Size(10, 10), gfx::Size(10, 10)); |
119 | 116 |
120 root->setAnchorPoint(gfx::PointF(0, 0)); | 117 root->setAnchorPoint(gfx::PointF(0, 0)); |
121 root->setPosition(gfx::PointF(0, 0)); | 118 root->setPosition(gfx::PointF(0, 0)); |
122 root->setBounds(gfx::Size(10, 10)); | 119 root->setBounds(gfx::Size(10, 10)); |
123 root->setContentBounds(gfx::Size(10, 10)); | 120 root->setContentBounds(gfx::Size(10, 10)); |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 | 194 |
198 FakeProxy m_proxy; | 195 FakeProxy m_proxy; |
199 DebugScopedSetImplThread m_alwaysImplThread; | 196 DebugScopedSetImplThread m_alwaysImplThread; |
200 DebugScopedSetMainThreadBlocked m_alwaysMainThreadBlocked; | 197 DebugScopedSetMainThreadBlocked m_alwaysMainThreadBlocked; |
201 | 198 |
202 scoped_ptr<LayerTreeHostImpl> m_hostImpl; | 199 scoped_ptr<LayerTreeHostImpl> m_hostImpl; |
203 bool m_onCanDrawStateChangedCalled; | 200 bool m_onCanDrawStateChangedCalled; |
204 bool m_didRequestCommit; | 201 bool m_didRequestCommit; |
205 bool m_didRequestRedraw; | 202 bool m_didRequestRedraw; |
206 bool m_reduceMemoryResult; | 203 bool m_reduceMemoryResult; |
207 ScopedSettings m_scopedSettings; | |
208 }; | 204 }; |
209 | 205 |
210 class FakeWebGraphicsContext3DMakeCurrentFails : public FakeWebGraphicsContext3D
{ | 206 class FakeWebGraphicsContext3DMakeCurrentFails : public FakeWebGraphicsContext3D
{ |
211 public: | 207 public: |
212 virtual bool makeContextCurrent() { return false; } | 208 virtual bool makeContextCurrent() { return false; } |
213 }; | 209 }; |
214 | 210 |
215 TEST_P(LayerTreeHostImplTest, notifyIfCanDrawChanged) | 211 TEST_P(LayerTreeHostImplTest, notifyIfCanDrawChanged) |
216 { | 212 { |
217 // Note: It is not possible to disable the renderer once it has been set, | 213 // Note: It is not possible to disable the renderer once it has been set, |
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
492 | 488 |
493 deviceScaleFactor = 1; | 489 deviceScaleFactor = 1; |
494 m_hostImpl->setViewportSize(layoutViewport, layoutViewport); | 490 m_hostImpl->setViewportSize(layoutViewport, layoutViewport); |
495 m_hostImpl->setDeviceScaleFactor(deviceScaleFactor); | 491 m_hostImpl->setDeviceScaleFactor(deviceScaleFactor); |
496 EXPECT_EQ(m_hostImpl->rootLayer()->maxScrollOffset(), gfx::Vector2d(75, 75))
; | 492 EXPECT_EQ(m_hostImpl->rootLayer()->maxScrollOffset(), gfx::Vector2d(75, 75))
; |
497 } | 493 } |
498 | 494 |
499 TEST_P(LayerTreeHostImplTest, implPinchZoom) | 495 TEST_P(LayerTreeHostImplTest, implPinchZoom) |
500 { | 496 { |
501 // This test is specific to the page-scale based pinch zoom. | 497 // This test is specific to the page-scale based pinch zoom. |
502 if (!Settings::pageScalePinchZoomEnabled()) | 498 if (!m_hostImpl->settings().pageScalePinchZoomEnabled) |
503 return; | 499 return; |
504 | 500 |
505 setupScrollAndContentsLayers(gfx::Size(100, 100)); | 501 setupScrollAndContentsLayers(gfx::Size(100, 100)); |
506 m_hostImpl->setViewportSize(gfx::Size(50, 50), gfx::Size(50, 50)); | 502 m_hostImpl->setViewportSize(gfx::Size(50, 50), gfx::Size(50, 50)); |
507 initializeRendererAndDrawFrame(); | 503 initializeRendererAndDrawFrame(); |
508 | 504 |
509 LayerImpl* scrollLayer = m_hostImpl->rootScrollLayer(); | 505 LayerImpl* scrollLayer = m_hostImpl->rootScrollLayer(); |
510 DCHECK(scrollLayer); | 506 DCHECK(scrollLayer); |
511 | 507 |
512 const float minPageScale = 1, maxPageScale = 4; | 508 const float minPageScale = 1, maxPageScale = 4; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
555 | 551 |
556 TEST_P(LayerTreeHostImplTest, pinchGesture) | 552 TEST_P(LayerTreeHostImplTest, pinchGesture) |
557 { | 553 { |
558 setupScrollAndContentsLayers(gfx::Size(100, 100)); | 554 setupScrollAndContentsLayers(gfx::Size(100, 100)); |
559 m_hostImpl->setViewportSize(gfx::Size(50, 50), gfx::Size(50, 50)); | 555 m_hostImpl->setViewportSize(gfx::Size(50, 50), gfx::Size(50, 50)); |
560 initializeRendererAndDrawFrame(); | 556 initializeRendererAndDrawFrame(); |
561 | 557 |
562 LayerImpl* scrollLayer = m_hostImpl->rootScrollLayer(); | 558 LayerImpl* scrollLayer = m_hostImpl->rootScrollLayer(); |
563 DCHECK(scrollLayer); | 559 DCHECK(scrollLayer); |
564 | 560 |
565 const float minPageScale = Settings::pageScalePinchZoomEnabled() ? 1 : 0.5; | 561 const float minPageScale = m_hostImpl->settings().pageScalePinchZoomEnabled
? 1 : 0.5; |
566 const float maxPageScale = 4; | 562 const float maxPageScale = 4; |
567 const WebTransformationMatrix identityScaleTransform; | 563 const WebTransformationMatrix identityScaleTransform; |
568 | 564 |
569 // Basic pinch zoom in gesture | 565 // Basic pinch zoom in gesture |
570 { | 566 { |
571 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); | 567 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); |
572 scrollLayer->setImplTransform(identityScaleTransform); | 568 scrollLayer->setImplTransform(identityScaleTransform); |
573 scrollLayer->setScrollDelta(gfx::Vector2d()); | 569 scrollLayer->setScrollDelta(gfx::Vector2d()); |
574 | 570 |
575 float pageScaleDelta = 2; | 571 float pageScaleDelta = 2; |
(...skipping 30 matching lines...) Expand all Loading... |
606 scrollLayer->setScrollOffset(gfx::Vector2d(50, 50)); | 602 scrollLayer->setScrollOffset(gfx::Vector2d(50, 50)); |
607 | 603 |
608 float pageScaleDelta = 0.1f; | 604 float pageScaleDelta = 0.1f; |
609 m_hostImpl->pinchGestureBegin(); | 605 m_hostImpl->pinchGestureBegin(); |
610 m_hostImpl->pinchGestureUpdate(pageScaleDelta, gfx::Point(0, 0)); | 606 m_hostImpl->pinchGestureUpdate(pageScaleDelta, gfx::Point(0, 0)); |
611 m_hostImpl->pinchGestureEnd(); | 607 m_hostImpl->pinchGestureEnd(); |
612 | 608 |
613 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDelt
as(); | 609 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDelt
as(); |
614 EXPECT_EQ(scrollInfo->pageScaleDelta, minPageScale); | 610 EXPECT_EQ(scrollInfo->pageScaleDelta, minPageScale); |
615 | 611 |
616 if (!Settings::pageScalePinchZoomEnabled()) { | 612 if (!m_hostImpl->settings().pageScalePinchZoomEnabled) { |
617 // Pushed to (0,0) via clamping against contents layer size. | 613 // Pushed to (0,0) via clamping against contents layer size. |
618 expectContains(*scrollInfo, scrollLayer->id(), gfx::Vector2d(-50, -5
0)); | 614 expectContains(*scrollInfo, scrollLayer->id(), gfx::Vector2d(-50, -5
0)); |
619 } else { | 615 } else { |
620 EXPECT_TRUE(scrollInfo->scrolls.empty()); | 616 EXPECT_TRUE(scrollInfo->scrolls.empty()); |
621 } | 617 } |
622 } | 618 } |
623 | 619 |
624 // Two-finger panning | 620 // Two-finger panning |
625 { | 621 { |
626 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); | 622 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
694 | 690 |
695 TEST_P(LayerTreeHostImplTest, inhibitScrollAndPageScaleUpdatesWhilePinchZooming) | 691 TEST_P(LayerTreeHostImplTest, inhibitScrollAndPageScaleUpdatesWhilePinchZooming) |
696 { | 692 { |
697 setupScrollAndContentsLayers(gfx::Size(100, 100)); | 693 setupScrollAndContentsLayers(gfx::Size(100, 100)); |
698 m_hostImpl->setViewportSize(gfx::Size(50, 50), gfx::Size(50, 50)); | 694 m_hostImpl->setViewportSize(gfx::Size(50, 50), gfx::Size(50, 50)); |
699 initializeRendererAndDrawFrame(); | 695 initializeRendererAndDrawFrame(); |
700 | 696 |
701 LayerImpl* scrollLayer = m_hostImpl->rootScrollLayer(); | 697 LayerImpl* scrollLayer = m_hostImpl->rootScrollLayer(); |
702 DCHECK(scrollLayer); | 698 DCHECK(scrollLayer); |
703 | 699 |
704 const float minPageScale = Settings::pageScalePinchZoomEnabled() ? 1 : 0.5; | 700 const float minPageScale = m_hostImpl->settings().pageScalePinchZoomEnabled
? 1 : 0.5; |
705 const float maxPageScale = 4; | 701 const float maxPageScale = 4; |
706 | 702 |
707 // Pinch zoom in. | 703 // Pinch zoom in. |
708 { | 704 { |
709 // Start a pinch in gesture at the bottom right corner of the viewport. | 705 // Start a pinch in gesture at the bottom right corner of the viewport. |
710 const float zoomInDelta = 2; | 706 const float zoomInDelta = 2; |
711 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); | 707 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); |
712 m_hostImpl->pinchGestureBegin(); | 708 m_hostImpl->pinchGestureBegin(); |
713 m_hostImpl->pinchGestureUpdate(zoomInDelta, gfx::Point(50, 50)); | 709 m_hostImpl->pinchGestureUpdate(zoomInDelta, gfx::Point(50, 50)); |
714 | 710 |
715 // Because we are pinch zooming in, we shouldn't get any scroll or page | 711 // Because we are pinch zooming in, we shouldn't get any scroll or page |
716 // scale deltas. | 712 // scale deltas. |
717 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDelt
as(); | 713 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDelt
as(); |
718 EXPECT_EQ(scrollInfo->pageScaleDelta, 1); | 714 EXPECT_EQ(scrollInfo->pageScaleDelta, 1); |
719 EXPECT_EQ(scrollInfo->scrolls.size(), 0u); | 715 EXPECT_EQ(scrollInfo->scrolls.size(), 0u); |
720 | 716 |
721 // Once the gesture ends, we get the final scroll and page scale values. | 717 // Once the gesture ends, we get the final scroll and page scale values. |
722 m_hostImpl->pinchGestureEnd(); | 718 m_hostImpl->pinchGestureEnd(); |
723 scrollInfo = m_hostImpl->processScrollDeltas(); | 719 scrollInfo = m_hostImpl->processScrollDeltas(); |
724 EXPECT_EQ(scrollInfo->pageScaleDelta, zoomInDelta); | 720 EXPECT_EQ(scrollInfo->pageScaleDelta, zoomInDelta); |
725 if (!Settings::pageScalePinchZoomEnabled()) { | 721 if (!m_hostImpl->settings().pageScalePinchZoomEnabled) { |
726 expectContains(*scrollInfo, scrollLayer->id(), gfx::Vector2d(25, 25)
); | 722 expectContains(*scrollInfo, scrollLayer->id(), gfx::Vector2d(25, 25)
); |
727 } else { | 723 } else { |
728 EXPECT_TRUE(scrollInfo->scrolls.empty()); | 724 EXPECT_TRUE(scrollInfo->scrolls.empty()); |
729 } | 725 } |
730 } | 726 } |
731 | 727 |
732 // Pinch zoom out. | 728 // Pinch zoom out. |
733 { | 729 { |
734 // Start a pinch out gesture at the bottom right corner of the viewport. | 730 // Start a pinch out gesture at the bottom right corner of the viewport. |
735 const float zoomOutDelta = 0.75; | 731 const float zoomOutDelta = 0.75; |
736 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); | 732 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); |
737 m_hostImpl->pinchGestureBegin(); | 733 m_hostImpl->pinchGestureBegin(); |
738 m_hostImpl->pinchGestureUpdate(zoomOutDelta, gfx::Point(50, 50)); | 734 m_hostImpl->pinchGestureUpdate(zoomOutDelta, gfx::Point(50, 50)); |
739 | 735 |
740 // Since we are pinch zooming out, we should get an update to zoom all | 736 // Since we are pinch zooming out, we should get an update to zoom all |
741 // the way out to the minimum page scale. | 737 // the way out to the minimum page scale. |
742 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDelt
as(); | 738 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDelt
as(); |
743 if (!Settings::pageScalePinchZoomEnabled()) { | 739 if (!m_hostImpl->settings().pageScalePinchZoomEnabled) { |
744 EXPECT_EQ(scrollInfo->pageScaleDelta, minPageScale); | 740 EXPECT_EQ(scrollInfo->pageScaleDelta, minPageScale); |
745 expectContains(*scrollInfo, scrollLayer->id(), gfx::Vector2d(0, 0)); | 741 expectContains(*scrollInfo, scrollLayer->id(), gfx::Vector2d(0, 0)); |
746 } else { | 742 } else { |
747 EXPECT_EQ(scrollInfo->pageScaleDelta, 1); | 743 EXPECT_EQ(scrollInfo->pageScaleDelta, 1); |
748 EXPECT_TRUE(scrollInfo->scrolls.empty()); | 744 EXPECT_TRUE(scrollInfo->scrolls.empty()); |
749 } | 745 } |
750 | 746 |
751 // Once the gesture ends, we get the final scroll and page scale values. | 747 // Once the gesture ends, we get the final scroll and page scale values. |
752 m_hostImpl->pinchGestureEnd(); | 748 m_hostImpl->pinchGestureEnd(); |
753 scrollInfo = m_hostImpl->processScrollDeltas(); | 749 scrollInfo = m_hostImpl->processScrollDeltas(); |
754 if (Settings::pageScalePinchZoomEnabled()) { | 750 if (m_hostImpl->settings().pageScalePinchZoomEnabled) { |
755 EXPECT_EQ(scrollInfo->pageScaleDelta, minPageScale); | 751 EXPECT_EQ(scrollInfo->pageScaleDelta, minPageScale); |
756 expectContains(*scrollInfo, scrollLayer->id(), gfx::Vector2d(25, 25)
); | 752 expectContains(*scrollInfo, scrollLayer->id(), gfx::Vector2d(25, 25)
); |
757 } else { | 753 } else { |
758 EXPECT_EQ(scrollInfo->pageScaleDelta, zoomOutDelta); | 754 EXPECT_EQ(scrollInfo->pageScaleDelta, zoomOutDelta); |
759 expectContains(*scrollInfo, scrollLayer->id(), gfx::Vector2d(8, 8)); | 755 expectContains(*scrollInfo, scrollLayer->id(), gfx::Vector2d(8, 8)); |
760 } | 756 } |
761 } | 757 } |
762 } | 758 } |
763 | 759 |
764 TEST_P(LayerTreeHostImplTest, inhibitScrollAndPageScaleUpdatesWhileAnimatingPage
Scale) | 760 TEST_P(LayerTreeHostImplTest, inhibitScrollAndPageScaleUpdatesWhileAnimatingPage
Scale) |
765 { | 761 { |
766 setupScrollAndContentsLayers(gfx::Size(100, 100)); | 762 setupScrollAndContentsLayers(gfx::Size(100, 100)); |
767 m_hostImpl->setViewportSize(gfx::Size(50, 50), gfx::Size(50, 50)); | 763 m_hostImpl->setViewportSize(gfx::Size(50, 50), gfx::Size(50, 50)); |
768 initializeRendererAndDrawFrame(); | 764 initializeRendererAndDrawFrame(); |
769 | 765 |
770 LayerImpl* scrollLayer = m_hostImpl->rootScrollLayer(); | 766 LayerImpl* scrollLayer = m_hostImpl->rootScrollLayer(); |
771 DCHECK(scrollLayer); | 767 DCHECK(scrollLayer); |
772 | 768 |
773 const float minPageScale = 0.5; | 769 const float minPageScale = 0.5; |
774 const float maxPageScale = 4; | 770 const float maxPageScale = 4; |
775 const base::TimeTicks startTime = base::TimeTicks() + base::TimeDelta::FromS
econds(1); | 771 const base::TimeTicks startTime = base::TimeTicks() + base::TimeDelta::FromS
econds(1); |
776 const base::TimeDelta duration = base::TimeDelta::FromMilliseconds(100); | 772 const base::TimeDelta duration = base::TimeDelta::FromMilliseconds(100); |
777 const base::TimeTicks halfwayThroughAnimation = startTime + duration / 2; | 773 const base::TimeTicks halfwayThroughAnimation = startTime + duration / 2; |
778 const base::TimeTicks endTime = startTime + duration; | 774 const base::TimeTicks endTime = startTime + duration; |
779 | 775 |
780 const float pageScaleDelta = 2; | 776 const float pageScaleDelta = 2; |
781 gfx::Vector2d target(25, 25); | 777 gfx::Vector2d target(25, 25); |
782 gfx::Vector2d scaledTarget = target; | 778 gfx::Vector2d scaledTarget = target; |
783 if (!Settings::pageScalePinchZoomEnabled()) | 779 if (!m_hostImpl->settings().pageScalePinchZoomEnabled) |
784 scaledTarget = gfx::Vector2d(12, 12); | 780 scaledTarget = gfx::Vector2d(12, 12); |
785 | 781 |
786 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); | 782 m_hostImpl->setPageScaleFactorAndLimits(1, minPageScale, maxPageScale); |
787 m_hostImpl->startPageScaleAnimation(target, false, pageScaleDelta, startTime
, duration); | 783 m_hostImpl->startPageScaleAnimation(target, false, pageScaleDelta, startTime
, duration); |
788 | 784 |
789 // We should immediately get the final zoom and scroll values for the | 785 // We should immediately get the final zoom and scroll values for the |
790 // animation. | 786 // animation. |
791 m_hostImpl->animate(halfwayThroughAnimation, base::Time()); | 787 m_hostImpl->animate(halfwayThroughAnimation, base::Time()); |
792 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas()
; | 788 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas()
; |
793 EXPECT_EQ(scrollInfo->pageScaleDelta, pageScaleDelta); | 789 EXPECT_EQ(scrollInfo->pageScaleDelta, pageScaleDelta); |
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1163 gfx::Vector2d scrollDelta(0, 10); | 1159 gfx::Vector2d scrollDelta(0, 10); |
1164 gfx::Vector2d expectedScrollDelta(scrollDelta); | 1160 gfx::Vector2d expectedScrollDelta(scrollDelta); |
1165 gfx::Vector2d expectedMaxScroll(m_hostImpl->rootLayer()->maxScrollOffset()); | 1161 gfx::Vector2d expectedMaxScroll(m_hostImpl->rootLayer()->maxScrollOffset()); |
1166 EXPECT_EQ(m_hostImpl->scrollBegin(gfx::Point(5, 5), InputHandlerClient::Whee
l), InputHandlerClient::ScrollStarted); | 1162 EXPECT_EQ(m_hostImpl->scrollBegin(gfx::Point(5, 5), InputHandlerClient::Whee
l), InputHandlerClient::ScrollStarted); |
1167 m_hostImpl->scrollBy(gfx::Point(), scrollDelta); | 1163 m_hostImpl->scrollBy(gfx::Point(), scrollDelta); |
1168 m_hostImpl->scrollEnd(); | 1164 m_hostImpl->scrollEnd(); |
1169 | 1165 |
1170 // Set new page scale from main thread. | 1166 // Set new page scale from main thread. |
1171 m_hostImpl->setPageScaleFactorAndLimits(pageScale, pageScale, pageScale); | 1167 m_hostImpl->setPageScaleFactorAndLimits(pageScale, pageScale, pageScale); |
1172 | 1168 |
1173 if (!Settings::pageScalePinchZoomEnabled()) { | 1169 if (!m_hostImpl->settings().pageScalePinchZoomEnabled) { |
1174 // The scale should apply to the scroll delta. | 1170 // The scale should apply to the scroll delta. |
1175 expectedScrollDelta = gfx::ToFlooredVector2d(gfx::ScaleVector2d(expected
ScrollDelta, pageScale)); | 1171 expectedScrollDelta = gfx::ToFlooredVector2d(gfx::ScaleVector2d(expected
ScrollDelta, pageScale)); |
1176 } | 1172 } |
1177 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas()
; | 1173 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas()
; |
1178 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expectedScr
ollDelta); | 1174 expectContains(*scrollInfo.get(), m_hostImpl->rootLayer()->id(), expectedScr
ollDelta); |
1179 | 1175 |
1180 // The scroll range should also have been updated. | 1176 // The scroll range should also have been updated. |
1181 EXPECT_EQ(m_hostImpl->rootLayer()->maxScrollOffset(), expectedMaxScroll); | 1177 EXPECT_EQ(m_hostImpl->rootLayer()->maxScrollOffset(), expectedMaxScroll); |
1182 | 1178 |
1183 // The page scale delta remains constant because the impl thread did not sca
le. | 1179 // The page scale delta remains constant because the impl thread did not sca
le. |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1286 gfx::Vector2d expectedMaxScroll(child->maxScrollOffset()); | 1282 gfx::Vector2d expectedMaxScroll(child->maxScrollOffset()); |
1287 EXPECT_EQ(m_hostImpl->scrollBegin(gfx::Point(5, 5), InputHandlerClient::Whee
l), InputHandlerClient::ScrollStarted); | 1283 EXPECT_EQ(m_hostImpl->scrollBegin(gfx::Point(5, 5), InputHandlerClient::Whee
l), InputHandlerClient::ScrollStarted); |
1288 m_hostImpl->scrollBy(gfx::Point(), scrollDelta); | 1284 m_hostImpl->scrollBy(gfx::Point(), scrollDelta); |
1289 m_hostImpl->scrollEnd(); | 1285 m_hostImpl->scrollEnd(); |
1290 | 1286 |
1291 float pageScale = 2; | 1287 float pageScale = 2; |
1292 m_hostImpl->setPageScaleFactorAndLimits(pageScale, 1, pageScale); | 1288 m_hostImpl->setPageScaleFactorAndLimits(pageScale, 1, pageScale); |
1293 | 1289 |
1294 m_hostImpl->updateRootScrollLayerImplTransform(); | 1290 m_hostImpl->updateRootScrollLayerImplTransform(); |
1295 | 1291 |
1296 if (!Settings::pageScalePinchZoomEnabled()) { | 1292 if (!m_hostImpl->settings().pageScalePinchZoomEnabled) { |
1297 // The scale should apply to the scroll delta. | 1293 // The scale should apply to the scroll delta. |
1298 expectedScrollDelta = gfx::ToFlooredVector2d(gfx::ScaleVector2d(expected
ScrollDelta, pageScale)); | 1294 expectedScrollDelta = gfx::ToFlooredVector2d(gfx::ScaleVector2d(expected
ScrollDelta, pageScale)); |
1299 } | 1295 } |
1300 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas()
; | 1296 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas()
; |
1301 expectContains(*scrollInfo.get(), scrollLayerId, expectedScrollDelta); | 1297 expectContains(*scrollInfo.get(), scrollLayerId, expectedScrollDelta); |
1302 | 1298 |
1303 // The scroll range should not have changed. | 1299 // The scroll range should not have changed. |
1304 EXPECT_EQ(child->maxScrollOffset(), expectedMaxScroll); | 1300 EXPECT_EQ(child->maxScrollOffset(), expectedMaxScroll); |
1305 | 1301 |
1306 // The page scale delta remains constant because the impl thread did not sca
le. | 1302 // The page scale delta remains constant because the impl thread did not sca
le. |
(...skipping 643 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1950 // Make sure damage tracking propagates all the way to the graphics context, | 1946 // Make sure damage tracking propagates all the way to the graphics context, |
1951 // where it should request to swap only the subBuffer that is damaged. | 1947 // where it should request to swap only the subBuffer that is damaged. |
1952 TEST_P(LayerTreeHostImplTest, partialSwapReceivesDamageRect) | 1948 TEST_P(LayerTreeHostImplTest, partialSwapReceivesDamageRect) |
1953 { | 1949 { |
1954 scoped_ptr<GraphicsContext> outputSurface = FakeWebCompositorOutputSurface::
create(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapTrackerContext)).
PassAs<GraphicsContext>(); | 1950 scoped_ptr<GraphicsContext> outputSurface = FakeWebCompositorOutputSurface::
create(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapTrackerContext)).
PassAs<GraphicsContext>(); |
1955 PartialSwapTrackerContext* partialSwapTracker = static_cast<PartialSwapTrack
erContext*>(outputSurface->context3D()); | 1951 PartialSwapTrackerContext* partialSwapTracker = static_cast<PartialSwapTrack
erContext*>(outputSurface->context3D()); |
1956 | 1952 |
1957 // This test creates its own LayerTreeHostImpl, so | 1953 // This test creates its own LayerTreeHostImpl, so |
1958 // that we can force partial swap enabled. | 1954 // that we can force partial swap enabled. |
1959 LayerTreeSettings settings; | 1955 LayerTreeSettings settings; |
1960 Settings::setPartialSwapEnabled(true); | 1956 settings.partialSwapEnabled = true; |
1961 scoped_ptr<LayerTreeHostImpl> layerTreeHostImpl = LayerTreeHostImpl::create(
settings, this, &m_proxy); | 1957 scoped_ptr<LayerTreeHostImpl> layerTreeHostImpl = LayerTreeHostImpl::create(
settings, this, &m_proxy); |
1962 layerTreeHostImpl->initializeRenderer(outputSurface.Pass()); | 1958 layerTreeHostImpl->initializeRenderer(outputSurface.Pass()); |
1963 layerTreeHostImpl->setViewportSize(gfx::Size(500, 500), gfx::Size(500, 500))
; | 1959 layerTreeHostImpl->setViewportSize(gfx::Size(500, 500), gfx::Size(500, 500))
; |
1964 | 1960 |
1965 scoped_ptr<LayerImpl> root = FakeDrawableLayerImpl::create(1); | 1961 scoped_ptr<LayerImpl> root = FakeDrawableLayerImpl::create(1); |
1966 scoped_ptr<LayerImpl> child = FakeDrawableLayerImpl::create(2); | 1962 scoped_ptr<LayerImpl> child = FakeDrawableLayerImpl::create(2); |
1967 child->setPosition(gfx::PointF(12, 13)); | 1963 child->setPosition(gfx::PointF(12, 13)); |
1968 child->setAnchorPoint(gfx::PointF(0, 0)); | 1964 child->setAnchorPoint(gfx::PointF(0, 0)); |
1969 child->setBounds(gfx::Size(14, 15)); | 1965 child->setBounds(gfx::Size(14, 15)); |
1970 child->setContentBounds(gfx::Size(14, 15)); | 1966 child->setContentBounds(gfx::Size(14, 15)); |
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2233 // Unlimited texture size. | 2229 // Unlimited texture size. |
2234 virtual void getIntegerv(WGC3Denum pname, WGC3Dint* value) | 2230 virtual void getIntegerv(WGC3Denum pname, WGC3Dint* value) |
2235 { | 2231 { |
2236 if (pname == GL_MAX_TEXTURE_SIZE) | 2232 if (pname == GL_MAX_TEXTURE_SIZE) |
2237 *value = 8192; | 2233 *value = 8192; |
2238 } | 2234 } |
2239 }; | 2235 }; |
2240 | 2236 |
2241 static scoped_ptr<LayerTreeHostImpl> setupLayersForOpacity(bool partialSwap, Lay
erTreeHostImplClient* client, Proxy* proxy) | 2237 static scoped_ptr<LayerTreeHostImpl> setupLayersForOpacity(bool partialSwap, Lay
erTreeHostImplClient* client, Proxy* proxy) |
2242 { | 2238 { |
2243 Settings::setPartialSwapEnabled(partialSwap); | |
2244 | |
2245 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); | 2239 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); |
2246 | 2240 |
2247 LayerTreeSettings settings; | 2241 LayerTreeSettings settings; |
| 2242 settings.partialSwapEnabled = partialSwap; |
2248 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, client, proxy); | 2243 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, client, proxy); |
2249 myHostImpl->initializeRenderer(context.Pass()); | 2244 myHostImpl->initializeRenderer(context.Pass()); |
2250 myHostImpl->setViewportSize(gfx::Size(100, 100), gfx::Size(100, 100)); | 2245 myHostImpl->setViewportSize(gfx::Size(100, 100), gfx::Size(100, 100)); |
2251 | 2246 |
2252 /* | 2247 /* |
2253 Layers are created as follows: | 2248 Layers are created as follows: |
2254 | 2249 |
2255 +--------------------+ | 2250 +--------------------+ |
2256 | 1 | | 2251 | 1 | |
2257 | +-----------+ | | 2252 | +-----------+ | |
(...skipping 781 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3039 addDrawingLayerTo(surfaceLayerPtr, 4, gfx::Rect(5, 5, rootSize.width() - 25,
rootSize.height() - 25), &childPtr); | 3034 addDrawingLayerTo(surfaceLayerPtr, 4, gfx::Rect(5, 5, rootSize.width() - 25,
rootSize.height() - 25), &childPtr); |
3040 } | 3035 } |
3041 | 3036 |
3042 class GLRendererWithReleaseTextures : public GLRenderer { | 3037 class GLRendererWithReleaseTextures : public GLRenderer { |
3043 public: | 3038 public: |
3044 using GLRenderer::releaseRenderPassTextures; | 3039 using GLRenderer::releaseRenderPassTextures; |
3045 }; | 3040 }; |
3046 | 3041 |
3047 TEST_P(LayerTreeHostImplTest, textureCachingWithClipping) | 3042 TEST_P(LayerTreeHostImplTest, textureCachingWithClipping) |
3048 { | 3043 { |
3049 Settings::setPartialSwapEnabled(true); | |
3050 | |
3051 LayerTreeSettings settings; | 3044 LayerTreeSettings settings; |
3052 settings.minimumOcclusionTrackingSize = gfx::Size(); | 3045 settings.minimumOcclusionTrackingSize = gfx::Size(); |
| 3046 settings.partialSwapEnabled = true; |
3053 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); | 3047 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); |
3054 | 3048 |
3055 LayerImpl* rootPtr; | 3049 LayerImpl* rootPtr; |
3056 LayerImpl* surfaceLayerPtr; | 3050 LayerImpl* surfaceLayerPtr; |
3057 | 3051 |
3058 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); | 3052 scoped_ptr<GraphicsContext> context = FakeWebCompositorOutputSurface::create
(scoped_ptr<WebKit::WebGraphicsContext3D>(new PartialSwapContext)).PassAs<Graphi
csContext>(); |
3059 | 3053 |
3060 gfx::Size rootSize(100, 100); | 3054 gfx::Size rootSize(100, 100); |
3061 | 3055 |
3062 myHostImpl->initializeRenderer(context.Pass()); | 3056 myHostImpl->initializeRenderer(context.Pass()); |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3136 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); | 3130 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); |
3137 ASSERT_EQ(1U, frame.renderPasses[1]->quadList().size()); | 3131 ASSERT_EQ(1U, frame.renderPasses[1]->quadList().size()); |
3138 | 3132 |
3139 myHostImpl->drawLayers(frame); | 3133 myHostImpl->drawLayers(frame); |
3140 myHostImpl->didDrawAllLayers(frame); | 3134 myHostImpl->didDrawAllLayers(frame); |
3141 } | 3135 } |
3142 } | 3136 } |
3143 | 3137 |
3144 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusion) | 3138 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusion) |
3145 { | 3139 { |
3146 Settings::setPartialSwapEnabled(false); | |
3147 | |
3148 LayerTreeSettings settings; | 3140 LayerTreeSettings settings; |
3149 settings.minimumOcclusionTrackingSize = gfx::Size(); | 3141 settings.minimumOcclusionTrackingSize = gfx::Size(); |
3150 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); | 3142 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); |
3151 | 3143 |
3152 // Layers are structure as follows: | 3144 // Layers are structure as follows: |
3153 // | 3145 // |
3154 // R +-- S1 +- L10 (owning) | 3146 // R +-- S1 +- L10 (owning) |
3155 // | +- L11 | 3147 // | +- L11 |
3156 // | +- L12 | 3148 // | +- L12 |
3157 // | | 3149 // | |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3252 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); | 3244 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); |
3253 | 3245 |
3254 myHostImpl->drawLayers(frame); | 3246 myHostImpl->drawLayers(frame); |
3255 myHostImpl->didDrawAllLayers(frame); | 3247 myHostImpl->didDrawAllLayers(frame); |
3256 } | 3248 } |
3257 | 3249 |
3258 } | 3250 } |
3259 | 3251 |
3260 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionEarlyOut) | 3252 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionEarlyOut) |
3261 { | 3253 { |
3262 Settings::setPartialSwapEnabled(false); | |
3263 | |
3264 LayerTreeSettings settings; | 3254 LayerTreeSettings settings; |
3265 settings.minimumOcclusionTrackingSize = gfx::Size(); | 3255 settings.minimumOcclusionTrackingSize = gfx::Size(); |
3266 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); | 3256 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); |
3267 | 3257 |
3268 // Layers are structure as follows: | 3258 // Layers are structure as follows: |
3269 // | 3259 // |
3270 // R +-- S1 +- L10 (owning, non drawing) | 3260 // R +-- S1 +- L10 (owning, non drawing) |
3271 // | +- L11 (corner, unoccluded) | 3261 // | +- L11 (corner, unoccluded) |
3272 // | +- L12 (corner, unoccluded) | 3262 // | +- L12 (corner, unoccluded) |
3273 // | +- L13 (corner, unoccluded) | 3263 // | +- L13 (corner, unoccluded) |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3368 | 3358 |
3369 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); | 3359 EXPECT_EQ(2U, frame.renderPasses[0]->quadList().size()); |
3370 | 3360 |
3371 myHostImpl->drawLayers(frame); | 3361 myHostImpl->drawLayers(frame); |
3372 myHostImpl->didDrawAllLayers(frame); | 3362 myHostImpl->didDrawAllLayers(frame); |
3373 } | 3363 } |
3374 } | 3364 } |
3375 | 3365 |
3376 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionExternalOverInternal) | 3366 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionExternalOverInternal) |
3377 { | 3367 { |
3378 Settings::setPartialSwapEnabled(false); | |
3379 | |
3380 LayerTreeSettings settings; | 3368 LayerTreeSettings settings; |
3381 settings.minimumOcclusionTrackingSize = gfx::Size(); | 3369 settings.minimumOcclusionTrackingSize = gfx::Size(); |
3382 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); | 3370 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); |
3383 | 3371 |
3384 // Layers are structured as follows: | 3372 // Layers are structured as follows: |
3385 // | 3373 // |
3386 // R +-- S1 +- L10 (owning, drawing) | 3374 // R +-- S1 +- L10 (owning, drawing) |
3387 // | +- L11 (corner, occluded by L12) | 3375 // | +- L11 (corner, occluded by L12) |
3388 // | +- L12 (opposite corner) | 3376 // | +- L12 (opposite corner) |
3389 // | | 3377 // | |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3457 EXPECT_GT(frame.renderPasses[0]->quadList().size(), 0U); | 3445 EXPECT_GT(frame.renderPasses[0]->quadList().size(), 0U); |
3458 EXPECT_EQ(2U, frame.renderPasses[1]->quadList().size()); | 3446 EXPECT_EQ(2U, frame.renderPasses[1]->quadList().size()); |
3459 | 3447 |
3460 myHostImpl->drawLayers(frame); | 3448 myHostImpl->drawLayers(frame); |
3461 myHostImpl->didDrawAllLayers(frame); | 3449 myHostImpl->didDrawAllLayers(frame); |
3462 } | 3450 } |
3463 } | 3451 } |
3464 | 3452 |
3465 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionExternalNotAligned) | 3453 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionExternalNotAligned) |
3466 { | 3454 { |
3467 Settings::setPartialSwapEnabled(false); | |
3468 | |
3469 LayerTreeSettings settings; | 3455 LayerTreeSettings settings; |
3470 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); | 3456 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); |
3471 | 3457 |
3472 // Layers are structured as follows: | 3458 // Layers are structured as follows: |
3473 // | 3459 // |
3474 // R +-- S1 +- L10 (rotated, drawing) | 3460 // R +-- S1 +- L10 (rotated, drawing) |
3475 // +- L11 (occupies half surface) | 3461 // +- L11 (occupies half surface) |
3476 | 3462 |
3477 LayerImpl* rootPtr; | 3463 LayerImpl* rootPtr; |
3478 LayerImpl* layerS1Ptr; | 3464 LayerImpl* layerS1Ptr; |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3531 | 3517 |
3532 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); | 3518 EXPECT_EQ(1U, frame.renderPasses[0]->quadList().size()); |
3533 | 3519 |
3534 myHostImpl->drawLayers(frame); | 3520 myHostImpl->drawLayers(frame); |
3535 myHostImpl->didDrawAllLayers(frame); | 3521 myHostImpl->didDrawAllLayers(frame); |
3536 } | 3522 } |
3537 } | 3523 } |
3538 | 3524 |
3539 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionPartialSwap) | 3525 TEST_P(LayerTreeHostImplTest, textureCachingWithOcclusionPartialSwap) |
3540 { | 3526 { |
3541 Settings::setPartialSwapEnabled(true); | |
3542 | |
3543 LayerTreeSettings settings; | 3527 LayerTreeSettings settings; |
3544 settings.minimumOcclusionTrackingSize = gfx::Size(); | 3528 settings.minimumOcclusionTrackingSize = gfx::Size(); |
| 3529 settings.partialSwapEnabled = true; |
3545 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); | 3530 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); |
3546 | 3531 |
3547 // Layers are structure as follows: | 3532 // Layers are structure as follows: |
3548 // | 3533 // |
3549 // R +-- S1 +- L10 (owning) | 3534 // R +-- S1 +- L10 (owning) |
3550 // | +- L11 | 3535 // | +- L11 |
3551 // | +- L12 | 3536 // | +- L12 |
3552 // | | 3537 // | |
3553 // +-- S2 +- L20 (owning) | 3538 // +-- S2 +- L20 (owning) |
3554 // +- L21 | 3539 // +- L21 |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3644 // Root render pass only. | 3629 // Root render pass only. |
3645 ASSERT_EQ(1U, frame.renderPasses.size()); | 3630 ASSERT_EQ(1U, frame.renderPasses.size()); |
3646 | 3631 |
3647 myHostImpl->drawLayers(frame); | 3632 myHostImpl->drawLayers(frame); |
3648 myHostImpl->didDrawAllLayers(frame); | 3633 myHostImpl->didDrawAllLayers(frame); |
3649 } | 3634 } |
3650 } | 3635 } |
3651 | 3636 |
3652 TEST_P(LayerTreeHostImplTest, textureCachingWithScissor) | 3637 TEST_P(LayerTreeHostImplTest, textureCachingWithScissor) |
3653 { | 3638 { |
3654 Settings::setPartialSwapEnabled(false); | |
3655 | |
3656 LayerTreeSettings settings; | 3639 LayerTreeSettings settings; |
3657 settings.minimumOcclusionTrackingSize = gfx::Size(); | 3640 settings.minimumOcclusionTrackingSize = gfx::Size(); |
3658 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); | 3641 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); |
3659 | 3642 |
3660 /* | 3643 /* |
3661 Layers are created as follows: | 3644 Layers are created as follows: |
3662 | 3645 |
3663 +--------------------+ | 3646 +--------------------+ |
3664 | 1 | | 3647 | 1 | |
3665 | +-----------+ | | 3648 | +-----------+ | |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3751 myHostImpl->drawLayers(frame); | 3734 myHostImpl->drawLayers(frame); |
3752 myHostImpl->didDrawAllLayers(frame); | 3735 myHostImpl->didDrawAllLayers(frame); |
3753 } | 3736 } |
3754 | 3737 |
3755 // We should have a cached texture for surface 2 again even though it was da
maged. | 3738 // We should have a cached texture for surface 2 again even though it was da
maged. |
3756 EXPECT_TRUE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(child
PassId)); | 3739 EXPECT_TRUE(myHostImpl->renderer()->haveCachedResourcesForRenderPassId(child
PassId)); |
3757 } | 3740 } |
3758 | 3741 |
3759 TEST_P(LayerTreeHostImplTest, surfaceTextureCaching) | 3742 TEST_P(LayerTreeHostImplTest, surfaceTextureCaching) |
3760 { | 3743 { |
3761 Settings::setPartialSwapEnabled(true); | |
3762 | |
3763 LayerTreeSettings settings; | 3744 LayerTreeSettings settings; |
3764 settings.minimumOcclusionTrackingSize = gfx::Size(); | 3745 settings.minimumOcclusionTrackingSize = gfx::Size(); |
| 3746 settings.partialSwapEnabled = true; |
3765 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); | 3747 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); |
3766 | 3748 |
3767 LayerImpl* rootPtr; | 3749 LayerImpl* rootPtr; |
3768 LayerImpl* intermediateLayerPtr; | 3750 LayerImpl* intermediateLayerPtr; |
3769 LayerImpl* surfaceLayerPtr; | 3751 LayerImpl* surfaceLayerPtr; |
3770 LayerImpl* childPtr; | 3752 LayerImpl* childPtr; |
3771 | 3753 |
3772 setupLayersForTextureCaching(myHostImpl.get(), rootPtr, intermediateLayerPtr
, surfaceLayerPtr, childPtr, gfx::Size(100, 100)); | 3754 setupLayersForTextureCaching(myHostImpl.get(), rootPtr, intermediateLayerPtr
, surfaceLayerPtr, childPtr, gfx::Size(100, 100)); |
3773 | 3755 |
3774 { | 3756 { |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3912 RenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId()
); | 3894 RenderPass* targetPass = frame.renderPassesById.get(quad->renderPassId()
); |
3913 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); | 3895 EXPECT_TRUE(targetPass->damageRect().IsEmpty()); |
3914 | 3896 |
3915 myHostImpl->drawLayers(frame); | 3897 myHostImpl->drawLayers(frame); |
3916 myHostImpl->didDrawAllLayers(frame); | 3898 myHostImpl->didDrawAllLayers(frame); |
3917 } | 3899 } |
3918 } | 3900 } |
3919 | 3901 |
3920 TEST_P(LayerTreeHostImplTest, surfaceTextureCachingNoPartialSwap) | 3902 TEST_P(LayerTreeHostImplTest, surfaceTextureCachingNoPartialSwap) |
3921 { | 3903 { |
3922 Settings::setPartialSwapEnabled(false); | |
3923 | |
3924 LayerTreeSettings settings; | 3904 LayerTreeSettings settings; |
3925 settings.minimumOcclusionTrackingSize = gfx::Size(); | 3905 settings.minimumOcclusionTrackingSize = gfx::Size(); |
3926 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); | 3906 scoped_ptr<LayerTreeHostImpl> myHostImpl = LayerTreeHostImpl::create(setting
s, this, &m_proxy); |
3927 | 3907 |
3928 LayerImpl* rootPtr; | 3908 LayerImpl* rootPtr; |
3929 LayerImpl* intermediateLayerPtr; | 3909 LayerImpl* intermediateLayerPtr; |
3930 LayerImpl* surfaceLayerPtr; | 3910 LayerImpl* surfaceLayerPtr; |
3931 LayerImpl* childPtr; | 3911 LayerImpl* childPtr; |
3932 | 3912 |
3933 setupLayersForTextureCaching(myHostImpl.get(), rootPtr, intermediateLayerPtr
, surfaceLayerPtr, childPtr, gfx::Size(100, 100)); | 3913 setupLayersForTextureCaching(myHostImpl.get(), rootPtr, intermediateLayerPtr
, surfaceLayerPtr, childPtr, gfx::Size(100, 100)); |
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4435 testCaseIndex++; | 4415 testCaseIndex++; |
4436 } | 4416 } |
4437 } | 4417 } |
4438 | 4418 |
4439 INSTANTIATE_TEST_CASE_P(LayerTreeHostImplTests, | 4419 INSTANTIATE_TEST_CASE_P(LayerTreeHostImplTests, |
4440 LayerTreeHostImplTest, | 4420 LayerTreeHostImplTest, |
4441 ::testing::Values(false, true)); | 4421 ::testing::Values(false, true)); |
4442 | 4422 |
4443 } // namespace | 4423 } // namespace |
4444 } // namespace cc | 4424 } // namespace cc |
OLD | NEW |