OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <stddef.h> | 5 #include <stddef.h> |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
11 #include "cc/base/region.h" | 11 #include "cc/base/region.h" |
12 #include "cc/output/ca_layer_overlay.h" | 12 #include "cc/output/ca_layer_overlay.h" |
13 #include "cc/output/filter_operation.h" | 13 #include "cc/output/filter_operation.h" |
14 #include "cc/output/gl_renderer.h" | 14 #include "cc/output/gl_renderer.h" |
15 #include "cc/output/output_surface.h" | 15 #include "cc/output/output_surface.h" |
16 #include "cc/output/output_surface_client.h" | 16 #include "cc/output/output_surface_client.h" |
17 #include "cc/output/output_surface_frame.h" | 17 #include "cc/output/output_surface_frame.h" |
18 #include "cc/output/overlay_candidate_validator.h" | 18 #include "cc/output/overlay_candidate_validator.h" |
19 #include "cc/output/overlay_processor.h" | 19 #include "cc/output/overlay_processor.h" |
20 #include "cc/output/overlay_strategy_fullscreen.h" | 20 #include "cc/output/overlay_strategy_fullscreen.h" |
21 #include "cc/output/overlay_strategy_single_on_top.h" | 21 #include "cc/output/overlay_strategy_single_on_top.h" |
22 #include "cc/output/overlay_strategy_underlay.h" | 22 #include "cc/output/overlay_strategy_underlay.h" |
| 23 #include "cc/output/overlay_strategy_underlay_cast.h" |
23 #include "cc/quads/render_pass.h" | 24 #include "cc/quads/render_pass.h" |
24 #include "cc/quads/render_pass_draw_quad.h" | 25 #include "cc/quads/render_pass_draw_quad.h" |
25 #include "cc/quads/solid_color_draw_quad.h" | 26 #include "cc/quads/solid_color_draw_quad.h" |
26 #include "cc/quads/stream_video_draw_quad.h" | 27 #include "cc/quads/stream_video_draw_quad.h" |
27 #include "cc/quads/texture_draw_quad.h" | 28 #include "cc/quads/texture_draw_quad.h" |
28 #include "cc/resources/resource_provider.h" | 29 #include "cc/resources/resource_provider.h" |
29 #include "cc/resources/texture_mailbox.h" | 30 #include "cc/resources/texture_mailbox.h" |
30 #include "cc/test/fake_output_surface_client.h" | 31 #include "cc/test/fake_output_surface_client.h" |
31 #include "cc/test/fake_resource_provider.h" | 32 #include "cc/test/fake_resource_provider.h" |
32 #include "cc/test/geometry_test_utils.h" | 33 #include "cc/test/geometry_test_utils.h" |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
70 public: | 71 public: |
71 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { | 72 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { |
72 strategies->push_back(base::MakeUnique<OverlayStrategyFullscreen>(this)); | 73 strategies->push_back(base::MakeUnique<OverlayStrategyFullscreen>(this)); |
73 } | 74 } |
74 bool AllowCALayerOverlays() override { return false; } | 75 bool AllowCALayerOverlays() override { return false; } |
75 void CheckOverlaySupport(OverlayCandidateList* surfaces) override {} | 76 void CheckOverlaySupport(OverlayCandidateList* surfaces) override {} |
76 }; | 77 }; |
77 | 78 |
78 class SingleOverlayValidator : public OverlayCandidateValidator { | 79 class SingleOverlayValidator : public OverlayCandidateValidator { |
79 public: | 80 public: |
| 81 SingleOverlayValidator() : expected_rect_(kOverlayRect) {} |
| 82 |
80 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { | 83 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { |
81 strategies->push_back(base::MakeUnique<OverlayStrategySingleOnTop>(this)); | 84 strategies->push_back(base::MakeUnique<OverlayStrategySingleOnTop>(this)); |
82 strategies->push_back(base::MakeUnique<OverlayStrategyUnderlay>(this)); | 85 strategies->push_back(base::MakeUnique<OverlayStrategyUnderlay>(this)); |
83 } | 86 } |
84 bool AllowCALayerOverlays() override { return false; } | 87 bool AllowCALayerOverlays() override { return false; } |
85 void CheckOverlaySupport(OverlayCandidateList* surfaces) override { | 88 void CheckOverlaySupport(OverlayCandidateList* surfaces) override { |
86 // We may have 1 or 2 surfaces depending on whether this ran through the | 89 // We may have 1 or 2 surfaces depending on whether this ran through the |
87 // full renderer and picked up the output surface, or not. | 90 // full renderer and picked up the output surface, or not. |
88 ASSERT_LE(1U, surfaces->size()); | 91 ASSERT_LE(1U, surfaces->size()); |
89 ASSERT_GE(2U, surfaces->size()); | 92 ASSERT_GE(2U, surfaces->size()); |
90 | 93 |
91 OverlayCandidate& candidate = surfaces->back(); | 94 OverlayCandidate& candidate = surfaces->back(); |
92 EXPECT_TRUE(!candidate.use_output_surface_for_resource); | 95 EXPECT_TRUE(!candidate.use_output_surface_for_resource); |
93 if (candidate.display_rect.width() == kOverlayBottomRightRect.width()) { | 96 EXPECT_NEAR(expected_rect_.x(), candidate.display_rect.x(), 0.01f); |
94 EXPECT_EQ(gfx::RectF(kOverlayBottomRightRect), candidate.display_rect); | 97 EXPECT_NEAR(expected_rect_.y(), candidate.display_rect.y(), 0.01f); |
95 } else { | 98 EXPECT_NEAR(expected_rect_.width(), candidate.display_rect.width(), 0.01f); |
96 EXPECT_NEAR(kOverlayRect.x(), candidate.display_rect.x(), 0.01f); | 99 EXPECT_NEAR(expected_rect_.height(), candidate.display_rect.height(), |
97 EXPECT_NEAR(kOverlayRect.y(), candidate.display_rect.y(), 0.01f); | 100 0.01f); |
98 EXPECT_NEAR(kOverlayRect.width(), candidate.display_rect.width(), 0.01f); | 101 |
99 EXPECT_NEAR(kOverlayRect.height(), candidate.display_rect.height(), | |
100 0.01f); | |
101 } | |
102 EXPECT_FLOAT_RECT_EQ(BoundingRect(kUVTopLeft, kUVBottomRight), | 102 EXPECT_FLOAT_RECT_EQ(BoundingRect(kUVTopLeft, kUVBottomRight), |
103 candidate.uv_rect); | 103 candidate.uv_rect); |
104 if (!candidate.clip_rect.IsEmpty()) { | 104 if (!candidate.clip_rect.IsEmpty()) { |
105 EXPECT_EQ(true, candidate.is_clipped); | 105 EXPECT_EQ(true, candidate.is_clipped); |
106 EXPECT_EQ(kOverlayClipRect, candidate.clip_rect); | 106 EXPECT_EQ(kOverlayClipRect, candidate.clip_rect); |
107 } | 107 } |
108 candidate.overlay_handled = true; | 108 candidate.overlay_handled = true; |
109 } | 109 } |
| 110 |
| 111 void SetExpectedRect(const gfx::RectF& rect) { expected_rect_ = rect; } |
| 112 |
| 113 private: |
| 114 gfx::RectF expected_rect_; |
110 }; | 115 }; |
111 | 116 |
112 class CALayerValidator : public OverlayCandidateValidator { | 117 class CALayerValidator : public OverlayCandidateValidator { |
113 public: | 118 public: |
114 void GetStrategies(OverlayProcessor::StrategyList* strategies) override {} | 119 void GetStrategies(OverlayProcessor::StrategyList* strategies) override {} |
115 bool AllowCALayerOverlays() override { return true; } | 120 bool AllowCALayerOverlays() override { return true; } |
116 void CheckOverlaySupport(OverlayCandidateList* surfaces) override {} | 121 void CheckOverlaySupport(OverlayCandidateList* surfaces) override {} |
117 }; | 122 }; |
118 | 123 |
119 class SingleOnTopOverlayValidator : public SingleOverlayValidator { | 124 class SingleOnTopOverlayValidator : public SingleOverlayValidator { |
120 public: | 125 public: |
121 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { | 126 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { |
122 strategies->push_back(base::MakeUnique<OverlayStrategySingleOnTop>(this)); | 127 strategies->push_back(base::MakeUnique<OverlayStrategySingleOnTop>(this)); |
123 } | 128 } |
124 }; | 129 }; |
125 | 130 |
126 class UnderlayOverlayValidator : public SingleOverlayValidator { | 131 class UnderlayOverlayValidator : public SingleOverlayValidator { |
127 public: | 132 public: |
128 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { | 133 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { |
129 strategies->push_back(base::MakeUnique<OverlayStrategyUnderlay>(this)); | 134 strategies->push_back(base::MakeUnique<OverlayStrategyUnderlay>(this)); |
130 } | 135 } |
131 }; | 136 }; |
132 | 137 |
| 138 class UnderlayCastOverlayValidator : public SingleOverlayValidator { |
| 139 public: |
| 140 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { |
| 141 strategies->push_back(base::MakeUnique<OverlayStrategyUnderlayCast>(this)); |
| 142 } |
| 143 }; |
| 144 |
133 class DefaultOverlayProcessor : public OverlayProcessor { | 145 class DefaultOverlayProcessor : public OverlayProcessor { |
134 public: | 146 public: |
135 explicit DefaultOverlayProcessor(OutputSurface* surface); | 147 explicit DefaultOverlayProcessor(OutputSurface* surface); |
136 size_t GetStrategyCount(); | 148 size_t GetStrategyCount(); |
137 }; | 149 }; |
138 | 150 |
139 DefaultOverlayProcessor::DefaultOverlayProcessor(OutputSurface* surface) | 151 DefaultOverlayProcessor::DefaultOverlayProcessor(OutputSurface* surface) |
140 : OverlayProcessor(surface) { | 152 : OverlayProcessor(surface) { |
141 } | 153 } |
142 | 154 |
143 size_t DefaultOverlayProcessor::GetStrategyCount() { | 155 size_t DefaultOverlayProcessor::GetStrategyCount() { |
144 return strategies_.size(); | 156 return strategies_.size(); |
145 } | 157 } |
146 | 158 |
| 159 template <typename OverlayCandidateValidatorType> |
147 class OverlayOutputSurface : public OutputSurface { | 160 class OverlayOutputSurface : public OutputSurface { |
148 public: | 161 public: |
149 explicit OverlayOutputSurface( | 162 explicit OverlayOutputSurface( |
150 scoped_refptr<TestContextProvider> context_provider) | 163 scoped_refptr<TestContextProvider> context_provider) |
151 : OutputSurface(std::move(context_provider)) { | 164 : OutputSurface(std::move(context_provider)) { |
152 is_displayed_as_overlay_plane_ = true; | 165 is_displayed_as_overlay_plane_ = true; |
153 } | 166 } |
154 | 167 |
155 // OutputSurface implementation. | 168 // OutputSurface implementation. |
156 void BindToClient(OutputSurfaceClient* client) override {} | 169 void BindToClient(OutputSurfaceClient* client) override {} |
157 void EnsureBackbuffer() override {} | 170 void EnsureBackbuffer() override {} |
158 void DiscardBackbuffer() override {} | 171 void DiscardBackbuffer() override {} |
159 void BindFramebuffer() override { | 172 void BindFramebuffer() override { |
160 bind_framebuffer_count_ += 1; | 173 bind_framebuffer_count_ += 1; |
161 } | 174 } |
162 void Reshape(const gfx::Size& size, | 175 void Reshape(const gfx::Size& size, |
163 float device_scale_factor, | 176 float device_scale_factor, |
164 const gfx::ColorSpace& color_space, | 177 const gfx::ColorSpace& color_space, |
165 bool has_alpha, | 178 bool has_alpha, |
166 bool use_stencil) override {} | 179 bool use_stencil) override {} |
167 void SwapBuffers(OutputSurfaceFrame frame) override {} | 180 void SwapBuffers(OutputSurfaceFrame frame) override {} |
168 uint32_t GetFramebufferCopyTextureFormat() override { | 181 uint32_t GetFramebufferCopyTextureFormat() override { |
169 // TestContextProvider has no real framebuffer, just use RGB. | 182 // TestContextProvider has no real framebuffer, just use RGB. |
170 return GL_RGB; | 183 return GL_RGB; |
171 } | 184 } |
172 bool HasExternalStencilTest() const override { return false; } | 185 bool HasExternalStencilTest() const override { return false; } |
173 void ApplyExternalStencil() override {} | 186 void ApplyExternalStencil() override {} |
174 OverlayCandidateValidator* GetOverlayCandidateValidator() const override { | 187 OverlayCandidateValidatorType* GetOverlayCandidateValidator() const override { |
175 return overlay_candidate_validator_.get(); | 188 return overlay_candidate_validator_.get(); |
176 } | 189 } |
177 bool IsDisplayedAsOverlayPlane() const override { | 190 bool IsDisplayedAsOverlayPlane() const override { |
178 return is_displayed_as_overlay_plane_; | 191 return is_displayed_as_overlay_plane_; |
179 } | 192 } |
180 unsigned GetOverlayTextureId() const override { return 10000; } | 193 unsigned GetOverlayTextureId() const override { return 10000; } |
181 bool SurfaceIsSuspendForRecycle() const override { return false; } | 194 bool SurfaceIsSuspendForRecycle() const override { return false; } |
182 | 195 |
183 void set_is_displayed_as_overlay_plane(bool value) { | 196 void set_is_displayed_as_overlay_plane(bool value) { |
184 is_displayed_as_overlay_plane_ = value; | 197 is_displayed_as_overlay_plane_ = value; |
185 } | 198 } |
186 | 199 |
187 void SetOverlayCandidateValidator(OverlayCandidateValidator* validator) { | 200 void SetOverlayCandidateValidator(OverlayCandidateValidatorType* validator) { |
188 overlay_candidate_validator_.reset(validator); | 201 overlay_candidate_validator_.reset(validator); |
189 } | 202 } |
190 | 203 |
191 unsigned bind_framebuffer_count() const { return bind_framebuffer_count_; } | 204 unsigned bind_framebuffer_count() const { return bind_framebuffer_count_; } |
192 | 205 |
193 private: | 206 private: |
194 std::unique_ptr<OverlayCandidateValidator> overlay_candidate_validator_; | 207 std::unique_ptr<OverlayCandidateValidatorType> overlay_candidate_validator_; |
195 bool is_displayed_as_overlay_plane_; | 208 bool is_displayed_as_overlay_plane_; |
196 unsigned bind_framebuffer_count_ = 0; | 209 unsigned bind_framebuffer_count_ = 0; |
197 }; | 210 }; |
198 | 211 |
199 std::unique_ptr<RenderPass> CreateRenderPass() { | 212 std::unique_ptr<RenderPass> CreateRenderPass() { |
200 int render_pass_id = 1; | 213 int render_pass_id = 1; |
201 gfx::Rect output_rect(0, 0, 256, 256); | 214 gfx::Rect output_rect(0, 0, 256, 256); |
202 | 215 |
203 std::unique_ptr<RenderPass> pass = RenderPass::Create(); | 216 std::unique_ptr<RenderPass> pass = RenderPass::Create(); |
204 pass->SetNew(render_pass_id, output_rect, output_rect, gfx::Transform()); | 217 pass->SetNew(render_pass_id, output_rect, output_rect, gfx::Transform()); |
205 | 218 |
206 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 219 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
207 shared_state->opacity = 1.f; | 220 shared_state->opacity = 1.f; |
208 return pass; | 221 return pass; |
209 } | 222 } |
210 | 223 |
| 224 std::unique_ptr<RenderPass> CreateRenderPassWithTransform( |
| 225 const gfx::Transform& transform) { |
| 226 int render_pass_id = 1; |
| 227 gfx::Rect output_rect(0, 0, 256, 256); |
| 228 |
| 229 std::unique_ptr<RenderPass> pass = RenderPass::Create(); |
| 230 pass->SetNew(render_pass_id, output_rect, output_rect, gfx::Transform()); |
| 231 |
| 232 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
| 233 shared_state->opacity = 1.f; |
| 234 shared_state->quad_to_target_transform = transform; |
| 235 return pass; |
| 236 } |
| 237 |
211 ResourceId CreateResource(ResourceProvider* resource_provider, | 238 ResourceId CreateResource(ResourceProvider* resource_provider, |
212 const gfx::Size& size, | 239 const gfx::Size& size, |
213 bool is_overlay_candidate) { | 240 bool is_overlay_candidate) { |
214 TextureMailbox mailbox = | 241 TextureMailbox mailbox = |
215 TextureMailbox(gpu::Mailbox::Generate(), gpu::SyncToken(), GL_TEXTURE_2D, | 242 TextureMailbox(gpu::Mailbox::Generate(), gpu::SyncToken(), GL_TEXTURE_2D, |
216 size, is_overlay_candidate, false); | 243 size, is_overlay_candidate, false); |
217 std::unique_ptr<SingleReleaseCallbackImpl> release_callback = | 244 std::unique_ptr<SingleReleaseCallbackImpl> release_callback = |
218 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased)); | 245 SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased)); |
219 | 246 |
220 return resource_provider->CreateResourceFromTextureMailbox( | 247 return resource_provider->CreateResourceFromTextureMailbox( |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
295 | 322 |
296 void CreateOpaqueQuadAt(ResourceProvider* resource_provider, | 323 void CreateOpaqueQuadAt(ResourceProvider* resource_provider, |
297 const SharedQuadState* shared_quad_state, | 324 const SharedQuadState* shared_quad_state, |
298 RenderPass* render_pass, | 325 RenderPass* render_pass, |
299 const gfx::Rect& rect) { | 326 const gfx::Rect& rect) { |
300 SolidColorDrawQuad* color_quad = | 327 SolidColorDrawQuad* color_quad = |
301 render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); | 328 render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); |
302 color_quad->SetNew(shared_quad_state, rect, rect, SK_ColorBLACK, false); | 329 color_quad->SetNew(shared_quad_state, rect, rect, SK_ColorBLACK, false); |
303 } | 330 } |
304 | 331 |
| 332 void CreateOpaqueQuadAt(ResourceProvider* resource_provider, |
| 333 const SharedQuadState* shared_quad_state, |
| 334 RenderPass* render_pass, |
| 335 const gfx::Rect& rect, |
| 336 SkColor color) { |
| 337 DCHECK_EQ(255u, SkColorGetA(color)); |
| 338 SolidColorDrawQuad* color_quad = |
| 339 render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); |
| 340 color_quad->SetNew(shared_quad_state, rect, rect, color, false); |
| 341 } |
| 342 |
305 void CreateFullscreenOpaqueQuad(ResourceProvider* resource_provider, | 343 void CreateFullscreenOpaqueQuad(ResourceProvider* resource_provider, |
306 const SharedQuadState* shared_quad_state, | 344 const SharedQuadState* shared_quad_state, |
307 RenderPass* render_pass) { | 345 RenderPass* render_pass) { |
308 CreateOpaqueQuadAt(resource_provider, shared_quad_state, render_pass, | 346 CreateOpaqueQuadAt(resource_provider, shared_quad_state, render_pass, |
309 render_pass->output_rect); | 347 render_pass->output_rect); |
310 } | 348 } |
311 | 349 |
312 static void CompareRenderPassLists(const RenderPassList& expected_list, | 350 static void CompareRenderPassLists(const RenderPassList& expected_list, |
313 const RenderPassList& actual_list) { | 351 const RenderPassList& actual_list) { |
314 EXPECT_EQ(expected_list.size(), actual_list.size()); | 352 EXPECT_EQ(expected_list.size(), actual_list.size()); |
(...skipping 19 matching lines...) Expand all Loading... |
334 ++exp_iter, ++act_iter) { | 372 ++exp_iter, ++act_iter) { |
335 EXPECT_EQ(exp_iter->rect.ToString(), act_iter->rect.ToString()); | 373 EXPECT_EQ(exp_iter->rect.ToString(), act_iter->rect.ToString()); |
336 EXPECT_EQ(exp_iter->shared_quad_state->quad_layer_bounds.ToString(), | 374 EXPECT_EQ(exp_iter->shared_quad_state->quad_layer_bounds.ToString(), |
337 act_iter->shared_quad_state->quad_layer_bounds.ToString()); | 375 act_iter->shared_quad_state->quad_layer_bounds.ToString()); |
338 } | 376 } |
339 } | 377 } |
340 } | 378 } |
341 | 379 |
342 template <typename OverlayCandidateValidatorType> | 380 template <typename OverlayCandidateValidatorType> |
343 class OverlayTest : public testing::Test { | 381 class OverlayTest : public testing::Test { |
| 382 using OutputSurfaceType = OverlayOutputSurface<OverlayCandidateValidatorType>; |
| 383 |
344 protected: | 384 protected: |
345 void SetUp() override { | 385 void SetUp() override { |
346 provider_ = TestContextProvider::Create(); | 386 provider_ = TestContextProvider::Create(); |
347 provider_->BindToCurrentThread(); | 387 provider_->BindToCurrentThread(); |
348 output_surface_.reset(new OverlayOutputSurface(provider_)); | 388 output_surface_ = base::MakeUnique<OutputSurfaceType>(provider_); |
349 output_surface_->BindToClient(&client_); | 389 output_surface_->BindToClient(&client_); |
350 output_surface_->SetOverlayCandidateValidator( | 390 output_surface_->SetOverlayCandidateValidator( |
351 new OverlayCandidateValidatorType); | 391 new OverlayCandidateValidatorType); |
352 | 392 |
353 shared_bitmap_manager_.reset(new TestSharedBitmapManager()); | 393 shared_bitmap_manager_.reset(new TestSharedBitmapManager()); |
354 resource_provider_ = FakeResourceProvider::Create( | 394 resource_provider_ = FakeResourceProvider::Create( |
355 provider_.get(), shared_bitmap_manager_.get()); | 395 provider_.get(), shared_bitmap_manager_.get()); |
356 | 396 |
357 overlay_processor_.reset(new OverlayProcessor(output_surface_.get())); | 397 overlay_processor_.reset(new OverlayProcessor(output_surface_.get())); |
358 overlay_processor_->Initialize(); | 398 overlay_processor_->Initialize(); |
359 } | 399 } |
360 | 400 |
361 scoped_refptr<TestContextProvider> provider_; | 401 scoped_refptr<TestContextProvider> provider_; |
362 std::unique_ptr<OverlayOutputSurface> output_surface_; | 402 std::unique_ptr<OutputSurfaceType> output_surface_; |
363 FakeOutputSurfaceClient client_; | 403 FakeOutputSurfaceClient client_; |
364 std::unique_ptr<SharedBitmapManager> shared_bitmap_manager_; | 404 std::unique_ptr<SharedBitmapManager> shared_bitmap_manager_; |
365 std::unique_ptr<ResourceProvider> resource_provider_; | 405 std::unique_ptr<ResourceProvider> resource_provider_; |
366 std::unique_ptr<OverlayProcessor> overlay_processor_; | 406 std::unique_ptr<OverlayProcessor> overlay_processor_; |
367 gfx::Rect damage_rect_; | 407 gfx::Rect damage_rect_; |
| 408 std::vector<gfx::Rect> content_bounds_; |
368 }; | 409 }; |
369 | 410 |
370 typedef OverlayTest<FullscreenOverlayValidator> FullscreenOverlayTest; | 411 using FullscreenOverlayTest = OverlayTest<FullscreenOverlayValidator>; |
371 typedef OverlayTest<SingleOnTopOverlayValidator> SingleOverlayOnTopTest; | 412 using SingleOverlayOnTopTest = OverlayTest<SingleOnTopOverlayValidator>; |
372 typedef OverlayTest<UnderlayOverlayValidator> UnderlayTest; | 413 using UnderlayTest = OverlayTest<UnderlayOverlayValidator>; |
373 typedef OverlayTest<CALayerValidator> CALayerOverlayTest; | 414 using UnderlayCastTest = OverlayTest<UnderlayCastOverlayValidator>; |
| 415 using CALayerOverlayTest = OverlayTest<CALayerValidator>; |
374 | 416 |
375 TEST(OverlayTest, NoOverlaysByDefault) { | 417 TEST(OverlayTest, NoOverlaysByDefault) { |
376 scoped_refptr<TestContextProvider> provider = TestContextProvider::Create(); | 418 scoped_refptr<TestContextProvider> provider = TestContextProvider::Create(); |
377 OverlayOutputSurface output_surface(provider); | 419 OverlayOutputSurface<OverlayCandidateValidator> output_surface(provider); |
378 EXPECT_EQ(NULL, output_surface.GetOverlayCandidateValidator()); | 420 EXPECT_EQ(NULL, output_surface.GetOverlayCandidateValidator()); |
379 | 421 |
380 output_surface.SetOverlayCandidateValidator(new SingleOverlayValidator); | 422 output_surface.SetOverlayCandidateValidator(new SingleOverlayValidator); |
381 EXPECT_TRUE(output_surface.GetOverlayCandidateValidator() != NULL); | 423 EXPECT_TRUE(output_surface.GetOverlayCandidateValidator() != NULL); |
382 } | 424 } |
383 | 425 |
384 TEST(OverlayTest, OverlaysProcessorHasStrategy) { | 426 TEST(OverlayTest, OverlaysProcessorHasStrategy) { |
385 scoped_refptr<TestContextProvider> provider = TestContextProvider::Create(); | 427 scoped_refptr<TestContextProvider> provider = TestContextProvider::Create(); |
386 provider->BindToCurrentThread(); | 428 provider->BindToCurrentThread(); |
387 OverlayOutputSurface output_surface(provider); | 429 OverlayOutputSurface<OverlayCandidateValidator> output_surface(provider); |
388 FakeOutputSurfaceClient client; | 430 FakeOutputSurfaceClient client; |
389 output_surface.BindToClient(&client); | 431 output_surface.BindToClient(&client); |
390 output_surface.SetOverlayCandidateValidator(new SingleOverlayValidator); | 432 output_surface.SetOverlayCandidateValidator(new SingleOverlayValidator); |
391 | 433 |
392 std::unique_ptr<SharedBitmapManager> shared_bitmap_manager( | 434 std::unique_ptr<SharedBitmapManager> shared_bitmap_manager( |
393 new TestSharedBitmapManager()); | 435 new TestSharedBitmapManager()); |
394 std::unique_ptr<ResourceProvider> resource_provider = | 436 std::unique_ptr<ResourceProvider> resource_provider = |
395 FakeResourceProvider::Create(provider.get(), shared_bitmap_manager.get()); | 437 FakeResourceProvider::Create(provider.get(), shared_bitmap_manager.get()); |
396 | 438 |
397 std::unique_ptr<DefaultOverlayProcessor> overlay_processor( | 439 std::unique_ptr<DefaultOverlayProcessor> overlay_processor( |
(...skipping 12 matching lines...) Expand all Loading... |
410 // Add something behind it. | 452 // Add something behind it. |
411 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 453 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
412 pass->shared_quad_state_list.back(), pass.get()); | 454 pass->shared_quad_state_list.back(), pass.get()); |
413 | 455 |
414 // Check for potential candidates. | 456 // Check for potential candidates. |
415 OverlayCandidateList candidate_list; | 457 OverlayCandidateList candidate_list; |
416 RenderPassFilterList render_pass_filters; | 458 RenderPassFilterList render_pass_filters; |
417 RenderPassFilterList render_pass_background_filters; | 459 RenderPassFilterList render_pass_background_filters; |
418 overlay_processor_->ProcessForOverlays( | 460 overlay_processor_->ProcessForOverlays( |
419 resource_provider_.get(), pass.get(), render_pass_filters, | 461 resource_provider_.get(), pass.get(), render_pass_filters, |
420 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 462 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 463 &content_bounds_); |
421 ASSERT_EQ(1U, candidate_list.size()); | 464 ASSERT_EQ(1U, candidate_list.size()); |
422 | 465 |
423 RenderPass* main_pass = pass.get(); | 466 RenderPass* main_pass = pass.get(); |
424 // Check that all the quads are gone. | 467 // Check that all the quads are gone. |
425 EXPECT_EQ(0U, main_pass->quad_list.size()); | 468 EXPECT_EQ(0U, main_pass->quad_list.size()); |
426 // Check that we have only one overlay. | 469 // Check that we have only one overlay. |
427 EXPECT_EQ(1U, candidate_list.size()); | 470 EXPECT_EQ(1U, candidate_list.size()); |
428 // Check that the right resource id got extracted. | 471 // Check that the right resource id got extracted. |
429 EXPECT_EQ(original_resource_id, candidate_list.front().resource_id); | 472 EXPECT_EQ(original_resource_id, candidate_list.front().resource_id); |
430 } | 473 } |
431 | 474 |
432 TEST_F(FullscreenOverlayTest, ResourceSizeInPixelsFail) { | 475 TEST_F(FullscreenOverlayTest, ResourceSizeInPixelsFail) { |
433 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 476 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
434 TextureDrawQuad* original_quad = CreateFullscreenCandidateQuad( | 477 TextureDrawQuad* original_quad = CreateFullscreenCandidateQuad( |
435 resource_provider_.get(), pass->shared_quad_state_list.back(), | 478 resource_provider_.get(), pass->shared_quad_state_list.back(), |
436 pass.get()); | 479 pass.get()); |
437 original_quad->set_resource_size_in_pixels(gfx::Size(64, 64)); | 480 original_quad->set_resource_size_in_pixels(gfx::Size(64, 64)); |
438 | 481 |
439 // Check for potential candidates. | 482 // Check for potential candidates. |
440 OverlayCandidateList candidate_list; | 483 OverlayCandidateList candidate_list; |
441 RenderPassFilterList render_pass_filters; | 484 RenderPassFilterList render_pass_filters; |
442 RenderPassFilterList render_pass_background_filters; | 485 RenderPassFilterList render_pass_background_filters; |
443 overlay_processor_->ProcessForOverlays( | 486 overlay_processor_->ProcessForOverlays( |
444 resource_provider_.get(), pass.get(), render_pass_filters, | 487 resource_provider_.get(), pass.get(), render_pass_filters, |
445 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 488 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 489 &content_bounds_); |
446 ASSERT_EQ(0U, candidate_list.size()); | 490 ASSERT_EQ(0U, candidate_list.size()); |
447 | 491 |
448 RenderPass* main_pass = pass.get(); | 492 RenderPass* main_pass = pass.get(); |
449 // Check that the quad is not gone. | 493 // Check that the quad is not gone. |
450 EXPECT_EQ(1U, main_pass->quad_list.size()); | 494 EXPECT_EQ(1U, main_pass->quad_list.size()); |
451 } | 495 } |
452 | 496 |
453 TEST_F(FullscreenOverlayTest, OnTopFail) { | 497 TEST_F(FullscreenOverlayTest, OnTopFail) { |
454 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 498 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
455 | 499 |
456 // Add something in front of it. | 500 // Add something in front of it. |
457 CreateOpaqueQuadAt(resource_provider_.get(), | 501 CreateOpaqueQuadAt(resource_provider_.get(), |
458 pass->shared_quad_state_list.back(), pass.get(), | 502 pass->shared_quad_state_list.back(), pass.get(), |
459 kOverlayTopLeftRect); | 503 kOverlayTopLeftRect); |
460 | 504 |
461 CreateFullscreenCandidateQuad(resource_provider_.get(), | 505 CreateFullscreenCandidateQuad(resource_provider_.get(), |
462 pass->shared_quad_state_list.back(), | 506 pass->shared_quad_state_list.back(), |
463 pass.get()); | 507 pass.get()); |
464 | 508 |
465 // Check for potential candidates. | 509 // Check for potential candidates. |
466 OverlayCandidateList candidate_list; | 510 OverlayCandidateList candidate_list; |
467 RenderPassFilterList render_pass_filters; | 511 RenderPassFilterList render_pass_filters; |
468 RenderPassFilterList render_pass_background_filters; | 512 RenderPassFilterList render_pass_background_filters; |
469 overlay_processor_->ProcessForOverlays( | 513 overlay_processor_->ProcessForOverlays( |
470 resource_provider_.get(), pass.get(), render_pass_filters, | 514 resource_provider_.get(), pass.get(), render_pass_filters, |
471 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 515 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 516 &content_bounds_); |
472 ASSERT_EQ(0U, candidate_list.size()); | 517 ASSERT_EQ(0U, candidate_list.size()); |
473 | 518 |
474 RenderPass* main_pass = pass.get(); | 519 RenderPass* main_pass = pass.get(); |
475 // Check that the 2 quads are not gone. | 520 // Check that the 2 quads are not gone. |
476 EXPECT_EQ(2U, main_pass->quad_list.size()); | 521 EXPECT_EQ(2U, main_pass->quad_list.size()); |
477 } | 522 } |
478 | 523 |
479 TEST_F(FullscreenOverlayTest, NotCoveringFullscreenFail) { | 524 TEST_F(FullscreenOverlayTest, NotCoveringFullscreenFail) { |
480 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 525 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
481 gfx::Rect inset_rect = pass->output_rect; | 526 gfx::Rect inset_rect = pass->output_rect; |
482 inset_rect.Inset(0, 1, 0, 1); | 527 inset_rect.Inset(0, 1, 0, 1); |
483 CreateCandidateQuadAt(resource_provider_.get(), | 528 CreateCandidateQuadAt(resource_provider_.get(), |
484 pass->shared_quad_state_list.back(), pass.get(), | 529 pass->shared_quad_state_list.back(), pass.get(), |
485 inset_rect); | 530 inset_rect); |
486 | 531 |
487 // Check for potential candidates. | 532 // Check for potential candidates. |
488 OverlayCandidateList candidate_list; | 533 OverlayCandidateList candidate_list; |
489 RenderPassFilterList render_pass_filters; | 534 RenderPassFilterList render_pass_filters; |
490 RenderPassFilterList render_pass_background_filters; | 535 RenderPassFilterList render_pass_background_filters; |
491 overlay_processor_->ProcessForOverlays( | 536 overlay_processor_->ProcessForOverlays( |
492 resource_provider_.get(), pass.get(), render_pass_filters, | 537 resource_provider_.get(), pass.get(), render_pass_filters, |
493 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 538 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 539 &content_bounds_); |
494 ASSERT_EQ(0U, candidate_list.size()); | 540 ASSERT_EQ(0U, candidate_list.size()); |
495 | 541 |
496 RenderPass* main_pass = pass.get(); | 542 RenderPass* main_pass = pass.get(); |
497 // Check that the quad is not gone. | 543 // Check that the quad is not gone. |
498 EXPECT_EQ(1U, main_pass->quad_list.size()); | 544 EXPECT_EQ(1U, main_pass->quad_list.size()); |
499 } | 545 } |
500 | 546 |
501 TEST_F(FullscreenOverlayTest, RemoveFullscreenQuadFromQuadList) { | 547 TEST_F(FullscreenOverlayTest, RemoveFullscreenQuadFromQuadList) { |
502 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 548 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
503 | 549 |
504 // Add something in front of it that is fully transparent. | 550 // Add something in front of it that is fully transparent. |
505 pass->shared_quad_state_list.back()->opacity = 0.0f; | 551 pass->shared_quad_state_list.back()->opacity = 0.0f; |
506 CreateOpaqueQuadAt(resource_provider_.get(), | 552 CreateOpaqueQuadAt(resource_provider_.get(), |
507 pass->shared_quad_state_list.back(), pass.get(), | 553 pass->shared_quad_state_list.back(), pass.get(), |
508 kOverlayTopLeftRect); | 554 kOverlayTopLeftRect); |
509 | 555 |
510 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 556 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
511 shared_state->opacity = 1.f; | 557 shared_state->opacity = 1.f; |
512 CreateFullscreenCandidateQuad(resource_provider_.get(), | 558 CreateFullscreenCandidateQuad(resource_provider_.get(), |
513 pass->shared_quad_state_list.back(), | 559 pass->shared_quad_state_list.back(), |
514 pass.get()); | 560 pass.get()); |
515 | 561 |
516 // Check for potential candidates. | 562 // Check for potential candidates. |
517 OverlayCandidateList candidate_list; | 563 OverlayCandidateList candidate_list; |
518 RenderPassFilterList render_pass_filters; | 564 RenderPassFilterList render_pass_filters; |
519 RenderPassFilterList render_pass_background_filters; | 565 RenderPassFilterList render_pass_background_filters; |
520 overlay_processor_->ProcessForOverlays( | 566 overlay_processor_->ProcessForOverlays( |
521 resource_provider_.get(), pass.get(), render_pass_filters, | 567 resource_provider_.get(), pass.get(), render_pass_filters, |
522 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 568 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 569 &content_bounds_); |
523 ASSERT_EQ(1U, candidate_list.size()); | 570 ASSERT_EQ(1U, candidate_list.size()); |
524 | 571 |
525 // Check that the fullscreen quad is gone. | 572 // Check that the fullscreen quad is gone. |
526 for (const DrawQuad* quad : pass->quad_list) { | 573 for (const DrawQuad* quad : pass->quad_list) { |
527 EXPECT_NE(pass->output_rect, quad->rect); | 574 EXPECT_NE(pass->output_rect, quad->rect); |
528 } | 575 } |
529 } | 576 } |
530 | 577 |
531 TEST_F(SingleOverlayOnTopTest, SuccessfulOverlay) { | 578 TEST_F(SingleOverlayOnTopTest, SuccessfulOverlay) { |
532 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 579 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
533 TextureDrawQuad* original_quad = | 580 TextureDrawQuad* original_quad = |
534 CreateFullscreenCandidateQuad(resource_provider_.get(), | 581 CreateFullscreenCandidateQuad(resource_provider_.get(), |
535 pass->shared_quad_state_list.back(), | 582 pass->shared_quad_state_list.back(), |
536 pass.get()); | 583 pass.get()); |
537 unsigned original_resource_id = original_quad->resource_id(); | 584 unsigned original_resource_id = original_quad->resource_id(); |
538 | 585 |
539 // Add something behind it. | 586 // Add something behind it. |
540 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 587 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
541 pass->shared_quad_state_list.back(), pass.get()); | 588 pass->shared_quad_state_list.back(), pass.get()); |
542 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 589 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
543 pass->shared_quad_state_list.back(), pass.get()); | 590 pass->shared_quad_state_list.back(), pass.get()); |
544 | 591 |
545 // Check for potential candidates. | 592 // Check for potential candidates. |
546 OverlayCandidateList candidate_list; | 593 OverlayCandidateList candidate_list; |
547 RenderPassFilterList render_pass_filters; | 594 RenderPassFilterList render_pass_filters; |
548 RenderPassFilterList render_pass_background_filters; | 595 RenderPassFilterList render_pass_background_filters; |
549 overlay_processor_->ProcessForOverlays( | 596 overlay_processor_->ProcessForOverlays( |
550 resource_provider_.get(), pass.get(), render_pass_filters, | 597 resource_provider_.get(), pass.get(), render_pass_filters, |
551 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 598 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 599 &content_bounds_); |
552 ASSERT_EQ(1U, candidate_list.size()); | 600 ASSERT_EQ(1U, candidate_list.size()); |
553 | 601 |
554 RenderPass* main_pass = pass.get(); | 602 RenderPass* main_pass = pass.get(); |
555 // Check that the quad is gone. | 603 // Check that the quad is gone. |
556 EXPECT_EQ(2U, main_pass->quad_list.size()); | 604 EXPECT_EQ(2U, main_pass->quad_list.size()); |
557 const QuadList& quad_list = main_pass->quad_list; | 605 const QuadList& quad_list = main_pass->quad_list; |
558 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); | 606 for (QuadList::ConstBackToFrontIterator it = quad_list.BackToFrontBegin(); |
559 it != quad_list.BackToFrontEnd(); | 607 it != quad_list.BackToFrontEnd(); |
560 ++it) { | 608 ++it) { |
561 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); | 609 EXPECT_NE(DrawQuad::TEXTURE_CONTENT, it->material); |
(...skipping 24 matching lines...) Expand all Loading... |
586 output_surface_plane.display_rect = gfx::RectF(kOverlayRect); | 634 output_surface_plane.display_rect = gfx::RectF(kOverlayRect); |
587 output_surface_plane.quad_rect_in_target_space = kOverlayRect; | 635 output_surface_plane.quad_rect_in_target_space = kOverlayRect; |
588 output_surface_plane.use_output_surface_for_resource = true; | 636 output_surface_plane.use_output_surface_for_resource = true; |
589 output_surface_plane.overlay_handled = true; | 637 output_surface_plane.overlay_handled = true; |
590 candidate_list.push_back(output_surface_plane); | 638 candidate_list.push_back(output_surface_plane); |
591 | 639 |
592 RenderPassFilterList render_pass_filters; | 640 RenderPassFilterList render_pass_filters; |
593 RenderPassFilterList render_pass_background_filters; | 641 RenderPassFilterList render_pass_background_filters; |
594 overlay_processor_->ProcessForOverlays( | 642 overlay_processor_->ProcessForOverlays( |
595 resource_provider_.get(), pass.get(), render_pass_filters, | 643 resource_provider_.get(), pass.get(), render_pass_filters, |
596 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 644 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 645 &content_bounds_); |
597 DCHECK(damage_rect_.IsEmpty()); | 646 DCHECK(damage_rect_.IsEmpty()); |
598 } | 647 } |
599 | 648 |
600 TEST_F(SingleOverlayOnTopTest, NoCandidates) { | 649 TEST_F(SingleOverlayOnTopTest, NoCandidates) { |
601 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 650 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
602 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 651 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
603 pass->shared_quad_state_list.back(), pass.get()); | 652 pass->shared_quad_state_list.back(), pass.get()); |
604 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 653 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
605 pass->shared_quad_state_list.back(), pass.get()); | 654 pass->shared_quad_state_list.back(), pass.get()); |
606 | 655 |
607 RenderPassList pass_list; | 656 RenderPassList pass_list; |
608 pass_list.push_back(std::move(pass)); | 657 pass_list.push_back(std::move(pass)); |
609 | 658 |
610 RenderPassList original_pass_list; | 659 RenderPassList original_pass_list; |
611 RenderPass::CopyAll(pass_list, &original_pass_list); | 660 RenderPass::CopyAll(pass_list, &original_pass_list); |
612 | 661 |
613 OverlayCandidateList candidate_list; | 662 OverlayCandidateList candidate_list; |
614 RenderPassFilterList render_pass_filters; | 663 RenderPassFilterList render_pass_filters; |
615 RenderPassFilterList render_pass_background_filters; | 664 RenderPassFilterList render_pass_background_filters; |
616 overlay_processor_->ProcessForOverlays( | 665 overlay_processor_->ProcessForOverlays( |
617 resource_provider_.get(), pass_list.back().get(), render_pass_filters, | 666 resource_provider_.get(), pass_list.back().get(), render_pass_filters, |
618 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 667 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 668 &content_bounds_); |
619 EXPECT_EQ(0U, candidate_list.size()); | 669 EXPECT_EQ(0U, candidate_list.size()); |
620 // There should be nothing new here. | 670 // There should be nothing new here. |
621 CompareRenderPassLists(pass_list, original_pass_list); | 671 CompareRenderPassLists(pass_list, original_pass_list); |
622 } | 672 } |
623 | 673 |
624 TEST_F(SingleOverlayOnTopTest, OccludedCandidates) { | 674 TEST_F(SingleOverlayOnTopTest, OccludedCandidates) { |
625 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 675 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
626 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 676 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
627 pass->shared_quad_state_list.back(), pass.get()); | 677 pass->shared_quad_state_list.back(), pass.get()); |
628 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 678 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
629 pass->shared_quad_state_list.back(), pass.get()); | 679 pass->shared_quad_state_list.back(), pass.get()); |
630 | 680 |
631 CreateFullscreenCandidateQuad(resource_provider_.get(), | 681 CreateFullscreenCandidateQuad(resource_provider_.get(), |
632 pass->shared_quad_state_list.back(), | 682 pass->shared_quad_state_list.back(), |
633 pass.get()); | 683 pass.get()); |
634 | 684 |
635 RenderPassList pass_list; | 685 RenderPassList pass_list; |
636 pass_list.push_back(std::move(pass)); | 686 pass_list.push_back(std::move(pass)); |
637 | 687 |
638 RenderPassList original_pass_list; | 688 RenderPassList original_pass_list; |
639 RenderPass::CopyAll(pass_list, &original_pass_list); | 689 RenderPass::CopyAll(pass_list, &original_pass_list); |
640 | 690 |
641 OverlayCandidateList candidate_list; | 691 OverlayCandidateList candidate_list; |
642 RenderPassFilterList render_pass_filters; | 692 RenderPassFilterList render_pass_filters; |
643 RenderPassFilterList render_pass_background_filters; | 693 RenderPassFilterList render_pass_background_filters; |
644 overlay_processor_->ProcessForOverlays( | 694 overlay_processor_->ProcessForOverlays( |
645 resource_provider_.get(), pass_list.back().get(), render_pass_filters, | 695 resource_provider_.get(), pass_list.back().get(), render_pass_filters, |
646 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 696 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 697 &content_bounds_); |
647 EXPECT_EQ(0U, candidate_list.size()); | 698 EXPECT_EQ(0U, candidate_list.size()); |
648 // There should be nothing new here. | 699 // There should be nothing new here. |
649 CompareRenderPassLists(pass_list, original_pass_list); | 700 CompareRenderPassLists(pass_list, original_pass_list); |
650 } | 701 } |
651 | 702 |
652 // Test with multiple render passes. | 703 // Test with multiple render passes. |
653 TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) { | 704 TEST_F(SingleOverlayOnTopTest, MultipleRenderPasses) { |
654 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 705 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
655 CreateFullscreenCandidateQuad(resource_provider_.get(), | 706 CreateFullscreenCandidateQuad(resource_provider_.get(), |
656 pass->shared_quad_state_list.back(), | 707 pass->shared_quad_state_list.back(), |
657 pass.get()); | 708 pass.get()); |
658 | 709 |
659 // Add something behind it. | 710 // Add something behind it. |
660 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 711 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
661 pass->shared_quad_state_list.back(), pass.get()); | 712 pass->shared_quad_state_list.back(), pass.get()); |
662 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 713 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
663 pass->shared_quad_state_list.back(), pass.get()); | 714 pass->shared_quad_state_list.back(), pass.get()); |
664 | 715 |
665 // Check for potential candidates. | 716 // Check for potential candidates. |
666 OverlayCandidateList candidate_list; | 717 OverlayCandidateList candidate_list; |
667 RenderPassFilterList render_pass_filters; | 718 RenderPassFilterList render_pass_filters; |
668 RenderPassFilterList render_pass_background_filters; | 719 RenderPassFilterList render_pass_background_filters; |
669 overlay_processor_->ProcessForOverlays( | 720 overlay_processor_->ProcessForOverlays( |
670 resource_provider_.get(), pass.get(), render_pass_filters, | 721 resource_provider_.get(), pass.get(), render_pass_filters, |
671 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 722 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 723 &content_bounds_); |
672 EXPECT_EQ(1U, candidate_list.size()); | 724 EXPECT_EQ(1U, candidate_list.size()); |
673 } | 725 } |
674 | 726 |
675 TEST_F(SingleOverlayOnTopTest, RejectBlending) { | 727 TEST_F(SingleOverlayOnTopTest, RejectBlending) { |
676 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 728 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
677 TextureDrawQuad* quad = | 729 TextureDrawQuad* quad = |
678 CreateFullscreenCandidateQuad(resource_provider_.get(), | 730 CreateFullscreenCandidateQuad(resource_provider_.get(), |
679 pass->shared_quad_state_list.back(), | 731 pass->shared_quad_state_list.back(), |
680 pass.get()); | 732 pass.get()); |
681 quad->needs_blending = true; | 733 quad->needs_blending = true; |
682 | 734 |
683 OverlayCandidateList candidate_list; | 735 OverlayCandidateList candidate_list; |
684 RenderPassFilterList render_pass_filters; | 736 RenderPassFilterList render_pass_filters; |
685 RenderPassFilterList render_pass_background_filters; | 737 RenderPassFilterList render_pass_background_filters; |
686 overlay_processor_->ProcessForOverlays( | 738 overlay_processor_->ProcessForOverlays( |
687 resource_provider_.get(), pass.get(), render_pass_filters, | 739 resource_provider_.get(), pass.get(), render_pass_filters, |
688 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 740 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 741 &content_bounds_); |
689 EXPECT_EQ(0U, candidate_list.size()); | 742 EXPECT_EQ(0U, candidate_list.size()); |
690 } | 743 } |
691 | 744 |
692 TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) { | 745 TEST_F(SingleOverlayOnTopTest, RejectBackgroundColor) { |
693 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 746 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
694 TextureDrawQuad* quad = | 747 TextureDrawQuad* quad = |
695 CreateFullscreenCandidateQuad(resource_provider_.get(), | 748 CreateFullscreenCandidateQuad(resource_provider_.get(), |
696 pass->shared_quad_state_list.back(), | 749 pass->shared_quad_state_list.back(), |
697 pass.get()); | 750 pass.get()); |
698 quad->background_color = SK_ColorBLACK; | 751 quad->background_color = SK_ColorBLACK; |
699 | 752 |
700 OverlayCandidateList candidate_list; | 753 OverlayCandidateList candidate_list; |
701 RenderPassFilterList render_pass_filters; | 754 RenderPassFilterList render_pass_filters; |
702 RenderPassFilterList render_pass_background_filters; | 755 RenderPassFilterList render_pass_background_filters; |
703 overlay_processor_->ProcessForOverlays( | 756 overlay_processor_->ProcessForOverlays( |
704 resource_provider_.get(), pass.get(), render_pass_filters, | 757 resource_provider_.get(), pass.get(), render_pass_filters, |
705 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 758 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 759 &content_bounds_); |
706 EXPECT_EQ(0U, candidate_list.size()); | 760 EXPECT_EQ(0U, candidate_list.size()); |
707 } | 761 } |
708 | 762 |
709 TEST_F(SingleOverlayOnTopTest, RejectBlendMode) { | 763 TEST_F(SingleOverlayOnTopTest, RejectBlendMode) { |
710 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 764 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
711 CreateFullscreenCandidateQuad(resource_provider_.get(), | 765 CreateFullscreenCandidateQuad(resource_provider_.get(), |
712 pass->shared_quad_state_list.back(), | 766 pass->shared_quad_state_list.back(), |
713 pass.get()); | 767 pass.get()); |
714 pass->shared_quad_state_list.back()->blend_mode = SkBlendMode::kScreen; | 768 pass->shared_quad_state_list.back()->blend_mode = SkBlendMode::kScreen; |
715 | 769 |
716 OverlayCandidateList candidate_list; | 770 OverlayCandidateList candidate_list; |
717 RenderPassFilterList render_pass_filters; | 771 RenderPassFilterList render_pass_filters; |
718 RenderPassFilterList render_pass_background_filters; | 772 RenderPassFilterList render_pass_background_filters; |
719 overlay_processor_->ProcessForOverlays( | 773 overlay_processor_->ProcessForOverlays( |
720 resource_provider_.get(), pass.get(), render_pass_filters, | 774 resource_provider_.get(), pass.get(), render_pass_filters, |
721 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 775 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 776 &content_bounds_); |
722 EXPECT_EQ(0U, candidate_list.size()); | 777 EXPECT_EQ(0U, candidate_list.size()); |
723 } | 778 } |
724 | 779 |
725 TEST_F(SingleOverlayOnTopTest, RejectOpacity) { | 780 TEST_F(SingleOverlayOnTopTest, RejectOpacity) { |
726 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 781 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
727 CreateFullscreenCandidateQuad(resource_provider_.get(), | 782 CreateFullscreenCandidateQuad(resource_provider_.get(), |
728 pass->shared_quad_state_list.back(), | 783 pass->shared_quad_state_list.back(), |
729 pass.get()); | 784 pass.get()); |
730 pass->shared_quad_state_list.back()->opacity = 0.5f; | 785 pass->shared_quad_state_list.back()->opacity = 0.5f; |
731 | 786 |
732 OverlayCandidateList candidate_list; | 787 OverlayCandidateList candidate_list; |
733 RenderPassFilterList render_pass_filters; | 788 RenderPassFilterList render_pass_filters; |
734 RenderPassFilterList render_pass_background_filters; | 789 RenderPassFilterList render_pass_background_filters; |
735 overlay_processor_->ProcessForOverlays( | 790 overlay_processor_->ProcessForOverlays( |
736 resource_provider_.get(), pass.get(), render_pass_filters, | 791 resource_provider_.get(), pass.get(), render_pass_filters, |
737 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 792 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 793 &content_bounds_); |
738 EXPECT_EQ(0U, candidate_list.size()); | 794 EXPECT_EQ(0U, candidate_list.size()); |
739 } | 795 } |
740 | 796 |
741 TEST_F(SingleOverlayOnTopTest, RejectNonAxisAlignedTransform) { | 797 TEST_F(SingleOverlayOnTopTest, RejectNonAxisAlignedTransform) { |
742 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 798 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
743 CreateFullscreenCandidateQuad(resource_provider_.get(), | 799 CreateFullscreenCandidateQuad(resource_provider_.get(), |
744 pass->shared_quad_state_list.back(), | 800 pass->shared_quad_state_list.back(), |
745 pass.get()); | 801 pass.get()); |
746 pass->shared_quad_state_list.back() | 802 pass->shared_quad_state_list.back() |
747 ->quad_to_target_transform.RotateAboutXAxis(45.f); | 803 ->quad_to_target_transform.RotateAboutXAxis(45.f); |
748 | 804 |
749 OverlayCandidateList candidate_list; | 805 OverlayCandidateList candidate_list; |
750 RenderPassFilterList render_pass_filters; | 806 RenderPassFilterList render_pass_filters; |
751 RenderPassFilterList render_pass_background_filters; | 807 RenderPassFilterList render_pass_background_filters; |
752 overlay_processor_->ProcessForOverlays( | 808 overlay_processor_->ProcessForOverlays( |
753 resource_provider_.get(), pass.get(), render_pass_filters, | 809 resource_provider_.get(), pass.get(), render_pass_filters, |
754 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 810 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 811 &content_bounds_); |
755 EXPECT_EQ(0U, candidate_list.size()); | 812 EXPECT_EQ(0U, candidate_list.size()); |
756 } | 813 } |
757 | 814 |
758 TEST_F(SingleOverlayOnTopTest, AllowClipped) { | 815 TEST_F(SingleOverlayOnTopTest, AllowClipped) { |
759 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 816 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
760 CreateFullscreenCandidateQuad(resource_provider_.get(), | 817 CreateFullscreenCandidateQuad(resource_provider_.get(), |
761 pass->shared_quad_state_list.back(), | 818 pass->shared_quad_state_list.back(), |
762 pass.get()); | 819 pass.get()); |
763 pass->shared_quad_state_list.back()->is_clipped = true; | 820 pass->shared_quad_state_list.back()->is_clipped = true; |
764 pass->shared_quad_state_list.back()->clip_rect = kOverlayClipRect; | 821 pass->shared_quad_state_list.back()->clip_rect = kOverlayClipRect; |
765 | 822 |
766 OverlayCandidateList candidate_list; | 823 OverlayCandidateList candidate_list; |
767 RenderPassFilterList render_pass_filters; | 824 RenderPassFilterList render_pass_filters; |
768 RenderPassFilterList render_pass_background_filters; | 825 RenderPassFilterList render_pass_background_filters; |
769 overlay_processor_->ProcessForOverlays( | 826 overlay_processor_->ProcessForOverlays( |
770 resource_provider_.get(), pass.get(), render_pass_filters, | 827 resource_provider_.get(), pass.get(), render_pass_filters, |
771 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 828 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 829 &content_bounds_); |
772 EXPECT_EQ(1U, candidate_list.size()); | 830 EXPECT_EQ(1U, candidate_list.size()); |
773 } | 831 } |
774 | 832 |
775 TEST_F(UnderlayTest, AllowVerticalFlip) { | 833 TEST_F(UnderlayTest, AllowVerticalFlip) { |
776 gfx::Rect rect = kOverlayRect; | 834 gfx::Rect rect = kOverlayRect; |
777 rect.set_width(rect.width() / 2); | 835 rect.set_width(rect.width() / 2); |
778 rect.Offset(0, -rect.height()); | 836 rect.Offset(0, -rect.height()); |
779 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 837 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
780 CreateCandidateQuadAt(resource_provider_.get(), | 838 CreateCandidateQuadAt(resource_provider_.get(), |
781 pass->shared_quad_state_list.back(), pass.get(), rect); | 839 pass->shared_quad_state_list.back(), pass.get(), rect); |
782 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, | 840 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, |
783 -1.0f); | 841 -1.0f); |
784 OverlayCandidateList candidate_list; | 842 OverlayCandidateList candidate_list; |
785 RenderPassFilterList render_pass_filters; | 843 RenderPassFilterList render_pass_filters; |
786 RenderPassFilterList render_pass_background_filters; | 844 RenderPassFilterList render_pass_background_filters; |
787 overlay_processor_->ProcessForOverlays( | 845 overlay_processor_->ProcessForOverlays( |
788 resource_provider_.get(), pass.get(), render_pass_filters, | 846 resource_provider_.get(), pass.get(), render_pass_filters, |
789 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 847 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 848 &content_bounds_); |
790 ASSERT_EQ(1U, candidate_list.size()); | 849 ASSERT_EQ(1U, candidate_list.size()); |
791 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL, | 850 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL, |
792 candidate_list.back().transform); | 851 candidate_list.back().transform); |
793 } | 852 } |
794 | 853 |
795 TEST_F(UnderlayTest, AllowHorizontalFlip) { | 854 TEST_F(UnderlayTest, AllowHorizontalFlip) { |
796 gfx::Rect rect = kOverlayRect; | 855 gfx::Rect rect = kOverlayRect; |
797 rect.set_height(rect.height() / 2); | 856 rect.set_height(rect.height() / 2); |
798 rect.Offset(-rect.width(), 0); | 857 rect.Offset(-rect.width(), 0); |
799 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 858 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
800 CreateCandidateQuadAt(resource_provider_.get(), | 859 CreateCandidateQuadAt(resource_provider_.get(), |
801 pass->shared_quad_state_list.back(), pass.get(), rect); | 860 pass->shared_quad_state_list.back(), pass.get(), rect); |
802 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(-1.0f, | 861 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(-1.0f, |
803 2.0f); | 862 2.0f); |
804 | 863 |
805 OverlayCandidateList candidate_list; | 864 OverlayCandidateList candidate_list; |
806 RenderPassFilterList render_pass_filters; | 865 RenderPassFilterList render_pass_filters; |
807 RenderPassFilterList render_pass_background_filters; | 866 RenderPassFilterList render_pass_background_filters; |
808 overlay_processor_->ProcessForOverlays( | 867 overlay_processor_->ProcessForOverlays( |
809 resource_provider_.get(), pass.get(), render_pass_filters, | 868 resource_provider_.get(), pass.get(), render_pass_filters, |
810 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 869 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 870 &content_bounds_); |
811 ASSERT_EQ(1U, candidate_list.size()); | 871 ASSERT_EQ(1U, candidate_list.size()); |
812 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL, | 872 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL, |
813 candidate_list.back().transform); | 873 candidate_list.back().transform); |
814 } | 874 } |
815 | 875 |
816 TEST_F(SingleOverlayOnTopTest, AllowPositiveScaleTransform) { | 876 TEST_F(SingleOverlayOnTopTest, AllowPositiveScaleTransform) { |
817 gfx::Rect rect = kOverlayRect; | 877 gfx::Rect rect = kOverlayRect; |
818 rect.set_width(rect.width() / 2); | 878 rect.set_width(rect.width() / 2); |
819 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 879 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
820 CreateCandidateQuadAt(resource_provider_.get(), | 880 CreateCandidateQuadAt(resource_provider_.get(), |
821 pass->shared_quad_state_list.back(), pass.get(), rect); | 881 pass->shared_quad_state_list.back(), pass.get(), rect); |
822 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, | 882 pass->shared_quad_state_list.back()->quad_to_target_transform.Scale(2.0f, |
823 1.0f); | 883 1.0f); |
824 OverlayCandidateList candidate_list; | 884 OverlayCandidateList candidate_list; |
825 RenderPassFilterList render_pass_filters; | 885 RenderPassFilterList render_pass_filters; |
826 RenderPassFilterList render_pass_background_filters; | 886 RenderPassFilterList render_pass_background_filters; |
827 overlay_processor_->ProcessForOverlays( | 887 overlay_processor_->ProcessForOverlays( |
828 resource_provider_.get(), pass.get(), render_pass_filters, | 888 resource_provider_.get(), pass.get(), render_pass_filters, |
829 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 889 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 890 &content_bounds_); |
830 EXPECT_EQ(1U, candidate_list.size()); | 891 EXPECT_EQ(1U, candidate_list.size()); |
831 } | 892 } |
832 | 893 |
833 TEST_F(SingleOverlayOnTopTest, RejectTransform) { | 894 TEST_F(SingleOverlayOnTopTest, RejectTransform) { |
834 gfx::Rect rect = kOverlayRect; | 895 gfx::Rect rect = kOverlayRect; |
835 rect.Offset(0, -rect.height()); | 896 rect.Offset(0, -rect.height()); |
836 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 897 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
837 CreateCandidateQuadAt(resource_provider_.get(), | 898 CreateCandidateQuadAt(resource_provider_.get(), |
838 pass->shared_quad_state_list.back(), pass.get(), rect); | 899 pass->shared_quad_state_list.back(), pass.get(), rect); |
839 pass->shared_quad_state_list.back() | 900 pass->shared_quad_state_list.back() |
840 ->quad_to_target_transform.RotateAboutZAxis(90.f); | 901 ->quad_to_target_transform.RotateAboutZAxis(90.f); |
841 | 902 |
842 OverlayCandidateList candidate_list; | 903 OverlayCandidateList candidate_list; |
843 RenderPassFilterList render_pass_filters; | 904 RenderPassFilterList render_pass_filters; |
844 RenderPassFilterList render_pass_background_filters; | 905 RenderPassFilterList render_pass_background_filters; |
845 overlay_processor_->ProcessForOverlays( | 906 overlay_processor_->ProcessForOverlays( |
846 resource_provider_.get(), pass.get(), render_pass_filters, | 907 resource_provider_.get(), pass.get(), render_pass_filters, |
847 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 908 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 909 &content_bounds_); |
848 ASSERT_EQ(0U, candidate_list.size()); | 910 ASSERT_EQ(0U, candidate_list.size()); |
849 } | 911 } |
850 | 912 |
851 TEST_F(UnderlayTest, Allow90DegreeRotation) { | 913 TEST_F(UnderlayTest, Allow90DegreeRotation) { |
852 gfx::Rect rect = kOverlayRect; | 914 gfx::Rect rect = kOverlayRect; |
853 rect.Offset(0, -rect.height()); | 915 rect.Offset(0, -rect.height()); |
854 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 916 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
855 CreateCandidateQuadAt(resource_provider_.get(), | 917 CreateCandidateQuadAt(resource_provider_.get(), |
856 pass->shared_quad_state_list.back(), pass.get(), rect); | 918 pass->shared_quad_state_list.back(), pass.get(), rect); |
857 pass->shared_quad_state_list.back() | 919 pass->shared_quad_state_list.back() |
858 ->quad_to_target_transform.RotateAboutZAxis(90.f); | 920 ->quad_to_target_transform.RotateAboutZAxis(90.f); |
859 | 921 |
860 OverlayCandidateList candidate_list; | 922 OverlayCandidateList candidate_list; |
861 RenderPassFilterList render_pass_filters; | 923 RenderPassFilterList render_pass_filters; |
862 RenderPassFilterList render_pass_background_filters; | 924 RenderPassFilterList render_pass_background_filters; |
863 overlay_processor_->ProcessForOverlays( | 925 overlay_processor_->ProcessForOverlays( |
864 resource_provider_.get(), pass.get(), render_pass_filters, | 926 resource_provider_.get(), pass.get(), render_pass_filters, |
865 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 927 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 928 &content_bounds_); |
866 ASSERT_EQ(1U, candidate_list.size()); | 929 ASSERT_EQ(1U, candidate_list.size()); |
867 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_90, candidate_list.back().transform); | 930 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_90, candidate_list.back().transform); |
868 } | 931 } |
869 | 932 |
870 TEST_F(UnderlayTest, Allow180DegreeRotation) { | 933 TEST_F(UnderlayTest, Allow180DegreeRotation) { |
871 gfx::Rect rect = kOverlayRect; | 934 gfx::Rect rect = kOverlayRect; |
872 rect.Offset(-rect.width(), -rect.height()); | 935 rect.Offset(-rect.width(), -rect.height()); |
873 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 936 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
874 CreateCandidateQuadAt(resource_provider_.get(), | 937 CreateCandidateQuadAt(resource_provider_.get(), |
875 pass->shared_quad_state_list.back(), pass.get(), rect); | 938 pass->shared_quad_state_list.back(), pass.get(), rect); |
876 pass->shared_quad_state_list.back() | 939 pass->shared_quad_state_list.back() |
877 ->quad_to_target_transform.RotateAboutZAxis(180.f); | 940 ->quad_to_target_transform.RotateAboutZAxis(180.f); |
878 | 941 |
879 OverlayCandidateList candidate_list; | 942 OverlayCandidateList candidate_list; |
880 RenderPassFilterList render_pass_filters; | 943 RenderPassFilterList render_pass_filters; |
881 RenderPassFilterList render_pass_background_filters; | 944 RenderPassFilterList render_pass_background_filters; |
882 overlay_processor_->ProcessForOverlays( | 945 overlay_processor_->ProcessForOverlays( |
883 resource_provider_.get(), pass.get(), render_pass_filters, | 946 resource_provider_.get(), pass.get(), render_pass_filters, |
884 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 947 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 948 &content_bounds_); |
885 ASSERT_EQ(1U, candidate_list.size()); | 949 ASSERT_EQ(1U, candidate_list.size()); |
886 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_180, candidate_list.back().transform); | 950 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_180, candidate_list.back().transform); |
887 } | 951 } |
888 | 952 |
889 TEST_F(UnderlayTest, Allow270DegreeRotation) { | 953 TEST_F(UnderlayTest, Allow270DegreeRotation) { |
890 gfx::Rect rect = kOverlayRect; | 954 gfx::Rect rect = kOverlayRect; |
891 rect.Offset(-rect.width(), 0); | 955 rect.Offset(-rect.width(), 0); |
892 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 956 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
893 CreateCandidateQuadAt(resource_provider_.get(), | 957 CreateCandidateQuadAt(resource_provider_.get(), |
894 pass->shared_quad_state_list.back(), pass.get(), rect); | 958 pass->shared_quad_state_list.back(), pass.get(), rect); |
895 pass->shared_quad_state_list.back() | 959 pass->shared_quad_state_list.back() |
896 ->quad_to_target_transform.RotateAboutZAxis(270.f); | 960 ->quad_to_target_transform.RotateAboutZAxis(270.f); |
897 | 961 |
898 OverlayCandidateList candidate_list; | 962 OverlayCandidateList candidate_list; |
899 RenderPassFilterList render_pass_filters; | 963 RenderPassFilterList render_pass_filters; |
900 RenderPassFilterList render_pass_background_filters; | 964 RenderPassFilterList render_pass_background_filters; |
901 overlay_processor_->ProcessForOverlays( | 965 overlay_processor_->ProcessForOverlays( |
902 resource_provider_.get(), pass.get(), render_pass_filters, | 966 resource_provider_.get(), pass.get(), render_pass_filters, |
903 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 967 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 968 &content_bounds_); |
904 ASSERT_EQ(1U, candidate_list.size()); | 969 ASSERT_EQ(1U, candidate_list.size()); |
905 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform); | 970 EXPECT_EQ(gfx::OVERLAY_TRANSFORM_ROTATE_270, candidate_list.back().transform); |
906 } | 971 } |
907 | 972 |
908 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { | 973 TEST_F(SingleOverlayOnTopTest, AllowNotTopIfNotOccluded) { |
| 974 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( |
| 975 gfx::RectF(kOverlayBottomRightRect)); |
| 976 |
909 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 977 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
910 CreateOpaqueQuadAt(resource_provider_.get(), | 978 CreateOpaqueQuadAt(resource_provider_.get(), |
911 pass->shared_quad_state_list.back(), pass.get(), | 979 pass->shared_quad_state_list.back(), pass.get(), |
912 kOverlayTopLeftRect); | 980 kOverlayTopLeftRect); |
913 CreateCandidateQuadAt(resource_provider_.get(), | 981 CreateCandidateQuadAt(resource_provider_.get(), |
914 pass->shared_quad_state_list.back(), | 982 pass->shared_quad_state_list.back(), |
915 pass.get(), | 983 pass.get(), |
916 kOverlayBottomRightRect); | 984 kOverlayBottomRightRect); |
917 | 985 |
918 OverlayCandidateList candidate_list; | 986 OverlayCandidateList candidate_list; |
919 RenderPassFilterList render_pass_filters; | 987 RenderPassFilterList render_pass_filters; |
920 RenderPassFilterList render_pass_background_filters; | 988 RenderPassFilterList render_pass_background_filters; |
921 overlay_processor_->ProcessForOverlays( | 989 overlay_processor_->ProcessForOverlays( |
922 resource_provider_.get(), pass.get(), render_pass_filters, | 990 resource_provider_.get(), pass.get(), render_pass_filters, |
923 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 991 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 992 &content_bounds_); |
924 EXPECT_EQ(1U, candidate_list.size()); | 993 EXPECT_EQ(1U, candidate_list.size()); |
925 } | 994 } |
926 | 995 |
927 TEST_F(SingleOverlayOnTopTest, AllowTransparentOnTop) { | 996 TEST_F(SingleOverlayOnTopTest, AllowTransparentOnTop) { |
| 997 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( |
| 998 gfx::RectF(kOverlayBottomRightRect)); |
| 999 |
928 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1000 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
929 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 1001 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
930 shared_state->opacity = 0.f; | 1002 shared_state->opacity = 0.f; |
931 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), | 1003 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), |
932 kOverlayBottomRightRect); | 1004 kOverlayBottomRightRect); |
933 shared_state = pass->CreateAndAppendSharedQuadState(); | 1005 shared_state = pass->CreateAndAppendSharedQuadState(); |
934 shared_state->opacity = 1.f; | 1006 shared_state->opacity = 1.f; |
935 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), | 1007 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), |
936 kOverlayBottomRightRect); | 1008 kOverlayBottomRightRect); |
937 | 1009 |
938 OverlayCandidateList candidate_list; | 1010 OverlayCandidateList candidate_list; |
939 RenderPassFilterList render_pass_filters; | 1011 RenderPassFilterList render_pass_filters; |
940 RenderPassFilterList render_pass_background_filters; | 1012 RenderPassFilterList render_pass_background_filters; |
941 overlay_processor_->ProcessForOverlays( | 1013 overlay_processor_->ProcessForOverlays( |
942 resource_provider_.get(), pass.get(), render_pass_filters, | 1014 resource_provider_.get(), pass.get(), render_pass_filters, |
943 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 1015 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1016 &content_bounds_); |
944 EXPECT_EQ(1U, candidate_list.size()); | 1017 EXPECT_EQ(1U, candidate_list.size()); |
945 } | 1018 } |
946 | 1019 |
947 TEST_F(SingleOverlayOnTopTest, AllowTransparentColorOnTop) { | 1020 TEST_F(SingleOverlayOnTopTest, AllowTransparentColorOnTop) { |
| 1021 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( |
| 1022 gfx::RectF(kOverlayBottomRightRect)); |
| 1023 |
948 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1024 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
949 CreateSolidColorQuadAt(pass->shared_quad_state_list.back(), | 1025 CreateSolidColorQuadAt(pass->shared_quad_state_list.back(), |
950 SK_ColorTRANSPARENT, pass.get(), | 1026 SK_ColorTRANSPARENT, pass.get(), |
951 kOverlayBottomRightRect); | 1027 kOverlayBottomRightRect); |
952 CreateCandidateQuadAt(resource_provider_.get(), | 1028 CreateCandidateQuadAt(resource_provider_.get(), |
953 pass->shared_quad_state_list.back(), pass.get(), | 1029 pass->shared_quad_state_list.back(), pass.get(), |
954 kOverlayBottomRightRect); | 1030 kOverlayBottomRightRect); |
955 | 1031 |
956 OverlayCandidateList candidate_list; | 1032 OverlayCandidateList candidate_list; |
957 RenderPassFilterList render_pass_filters; | 1033 RenderPassFilterList render_pass_filters; |
958 RenderPassFilterList render_pass_background_filters; | 1034 RenderPassFilterList render_pass_background_filters; |
959 overlay_processor_->ProcessForOverlays( | 1035 overlay_processor_->ProcessForOverlays( |
960 resource_provider_.get(), pass.get(), render_pass_filters, | 1036 resource_provider_.get(), pass.get(), render_pass_filters, |
961 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 1037 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1038 &content_bounds_); |
962 EXPECT_EQ(1U, candidate_list.size()); | 1039 EXPECT_EQ(1U, candidate_list.size()); |
963 } | 1040 } |
964 | 1041 |
965 TEST_F(SingleOverlayOnTopTest, RejectOpaqueColorOnTop) { | 1042 TEST_F(SingleOverlayOnTopTest, RejectOpaqueColorOnTop) { |
966 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1043 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
967 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 1044 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
968 shared_state->opacity = 0.5f; | 1045 shared_state->opacity = 0.5f; |
969 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), | 1046 CreateSolidColorQuadAt(shared_state, SK_ColorBLACK, pass.get(), |
970 kOverlayBottomRightRect); | 1047 kOverlayBottomRightRect); |
971 shared_state = pass->CreateAndAppendSharedQuadState(); | 1048 shared_state = pass->CreateAndAppendSharedQuadState(); |
972 shared_state->opacity = 1.f; | 1049 shared_state->opacity = 1.f; |
973 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), | 1050 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), |
974 kOverlayBottomRightRect); | 1051 kOverlayBottomRightRect); |
975 | 1052 |
976 OverlayCandidateList candidate_list; | 1053 OverlayCandidateList candidate_list; |
977 RenderPassFilterList render_pass_filters; | 1054 RenderPassFilterList render_pass_filters; |
978 RenderPassFilterList render_pass_background_filters; | 1055 RenderPassFilterList render_pass_background_filters; |
979 overlay_processor_->ProcessForOverlays( | 1056 overlay_processor_->ProcessForOverlays( |
980 resource_provider_.get(), pass.get(), render_pass_filters, | 1057 resource_provider_.get(), pass.get(), render_pass_filters, |
981 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 1058 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1059 &content_bounds_); |
982 EXPECT_EQ(0U, candidate_list.size()); | 1060 EXPECT_EQ(0U, candidate_list.size()); |
983 } | 1061 } |
984 | 1062 |
985 TEST_F(SingleOverlayOnTopTest, RejectTransparentColorOnTopWithoutBlending) { | 1063 TEST_F(SingleOverlayOnTopTest, RejectTransparentColorOnTopWithoutBlending) { |
986 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1064 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
987 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); | 1065 SharedQuadState* shared_state = pass->CreateAndAppendSharedQuadState(); |
988 CreateSolidColorQuadAt(shared_state, SK_ColorTRANSPARENT, pass.get(), | 1066 CreateSolidColorQuadAt(shared_state, SK_ColorTRANSPARENT, pass.get(), |
989 kOverlayBottomRightRect)->opaque_rect = | 1067 kOverlayBottomRightRect)->opaque_rect = |
990 kOverlayBottomRightRect; | 1068 kOverlayBottomRightRect; |
991 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), | 1069 CreateCandidateQuadAt(resource_provider_.get(), shared_state, pass.get(), |
992 kOverlayBottomRightRect); | 1070 kOverlayBottomRightRect); |
993 | 1071 |
994 OverlayCandidateList candidate_list; | 1072 OverlayCandidateList candidate_list; |
995 RenderPassFilterList render_pass_filters; | 1073 RenderPassFilterList render_pass_filters; |
996 RenderPassFilterList render_pass_background_filters; | 1074 RenderPassFilterList render_pass_background_filters; |
997 overlay_processor_->ProcessForOverlays( | 1075 overlay_processor_->ProcessForOverlays( |
998 resource_provider_.get(), pass.get(), render_pass_filters, | 1076 resource_provider_.get(), pass.get(), render_pass_filters, |
999 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 1077 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1078 &content_bounds_); |
1000 EXPECT_EQ(0U, candidate_list.size()); | 1079 EXPECT_EQ(0U, candidate_list.size()); |
1001 } | 1080 } |
1002 | 1081 |
1003 TEST_F(SingleOverlayOnTopTest, RejectVideoSwapTransform) { | 1082 TEST_F(SingleOverlayOnTopTest, RejectVideoSwapTransform) { |
1004 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1083 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
1005 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1084 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
1006 pass->shared_quad_state_list.back(), | 1085 pass->shared_quad_state_list.back(), |
1007 pass.get(), kSwapTransform); | 1086 pass.get(), kSwapTransform); |
1008 | 1087 |
1009 OverlayCandidateList candidate_list; | 1088 OverlayCandidateList candidate_list; |
1010 RenderPassFilterList render_pass_filters; | 1089 RenderPassFilterList render_pass_filters; |
1011 RenderPassFilterList render_pass_background_filters; | 1090 RenderPassFilterList render_pass_background_filters; |
1012 overlay_processor_->ProcessForOverlays( | 1091 overlay_processor_->ProcessForOverlays( |
1013 resource_provider_.get(), pass.get(), render_pass_filters, | 1092 resource_provider_.get(), pass.get(), render_pass_filters, |
1014 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 1093 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1094 &content_bounds_); |
1015 EXPECT_EQ(0U, candidate_list.size()); | 1095 EXPECT_EQ(0U, candidate_list.size()); |
1016 } | 1096 } |
1017 | 1097 |
1018 TEST_F(UnderlayTest, AllowVideoXMirrorTransform) { | 1098 TEST_F(UnderlayTest, AllowVideoXMirrorTransform) { |
1019 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1099 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
1020 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1100 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
1021 pass->shared_quad_state_list.back(), | 1101 pass->shared_quad_state_list.back(), |
1022 pass.get(), kXMirrorTransform); | 1102 pass.get(), kXMirrorTransform); |
1023 | 1103 |
1024 OverlayCandidateList candidate_list; | 1104 OverlayCandidateList candidate_list; |
1025 RenderPassFilterList render_pass_filters; | 1105 RenderPassFilterList render_pass_filters; |
1026 RenderPassFilterList render_pass_background_filters; | 1106 RenderPassFilterList render_pass_background_filters; |
1027 overlay_processor_->ProcessForOverlays( | 1107 overlay_processor_->ProcessForOverlays( |
1028 resource_provider_.get(), pass.get(), render_pass_filters, | 1108 resource_provider_.get(), pass.get(), render_pass_filters, |
1029 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 1109 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1110 &content_bounds_); |
1030 EXPECT_EQ(1U, candidate_list.size()); | 1111 EXPECT_EQ(1U, candidate_list.size()); |
1031 } | 1112 } |
1032 | 1113 |
1033 TEST_F(UnderlayTest, AllowVideoBothMirrorTransform) { | 1114 TEST_F(UnderlayTest, AllowVideoBothMirrorTransform) { |
1034 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1115 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
1035 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1116 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
1036 pass->shared_quad_state_list.back(), | 1117 pass->shared_quad_state_list.back(), |
1037 pass.get(), kBothMirrorTransform); | 1118 pass.get(), kBothMirrorTransform); |
1038 | 1119 |
1039 OverlayCandidateList candidate_list; | 1120 OverlayCandidateList candidate_list; |
1040 RenderPassFilterList render_pass_filters; | 1121 RenderPassFilterList render_pass_filters; |
1041 RenderPassFilterList render_pass_background_filters; | 1122 RenderPassFilterList render_pass_background_filters; |
1042 overlay_processor_->ProcessForOverlays( | 1123 overlay_processor_->ProcessForOverlays( |
1043 resource_provider_.get(), pass.get(), render_pass_filters, | 1124 resource_provider_.get(), pass.get(), render_pass_filters, |
1044 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 1125 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1126 &content_bounds_); |
1045 EXPECT_EQ(1U, candidate_list.size()); | 1127 EXPECT_EQ(1U, candidate_list.size()); |
1046 } | 1128 } |
1047 | 1129 |
1048 TEST_F(UnderlayTest, AllowVideoNormalTransform) { | 1130 TEST_F(UnderlayTest, AllowVideoNormalTransform) { |
1049 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1131 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
1050 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1132 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
1051 pass->shared_quad_state_list.back(), | 1133 pass->shared_quad_state_list.back(), |
1052 pass.get(), kNormalTransform); | 1134 pass.get(), kNormalTransform); |
1053 | 1135 |
1054 OverlayCandidateList candidate_list; | 1136 OverlayCandidateList candidate_list; |
1055 RenderPassFilterList render_pass_filters; | 1137 RenderPassFilterList render_pass_filters; |
1056 RenderPassFilterList render_pass_background_filters; | 1138 RenderPassFilterList render_pass_background_filters; |
1057 overlay_processor_->ProcessForOverlays( | 1139 overlay_processor_->ProcessForOverlays( |
1058 resource_provider_.get(), pass.get(), render_pass_filters, | 1140 resource_provider_.get(), pass.get(), render_pass_filters, |
1059 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 1141 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1142 &content_bounds_); |
1060 EXPECT_EQ(1U, candidate_list.size()); | 1143 EXPECT_EQ(1U, candidate_list.size()); |
1061 } | 1144 } |
1062 | 1145 |
1063 TEST_F(SingleOverlayOnTopTest, AllowVideoYMirrorTransform) { | 1146 TEST_F(SingleOverlayOnTopTest, AllowVideoYMirrorTransform) { |
1064 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1147 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
1065 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), | 1148 CreateFullscreenCandidateVideoQuad(resource_provider_.get(), |
1066 pass->shared_quad_state_list.back(), | 1149 pass->shared_quad_state_list.back(), |
1067 pass.get(), kYMirrorTransform); | 1150 pass.get(), kYMirrorTransform); |
1068 | 1151 |
1069 OverlayCandidateList candidate_list; | 1152 OverlayCandidateList candidate_list; |
1070 RenderPassFilterList render_pass_filters; | 1153 RenderPassFilterList render_pass_filters; |
1071 RenderPassFilterList render_pass_background_filters; | 1154 RenderPassFilterList render_pass_background_filters; |
1072 overlay_processor_->ProcessForOverlays( | 1155 overlay_processor_->ProcessForOverlays( |
1073 resource_provider_.get(), pass.get(), render_pass_filters, | 1156 resource_provider_.get(), pass.get(), render_pass_filters, |
1074 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 1157 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1158 &content_bounds_); |
1075 EXPECT_EQ(1U, candidate_list.size()); | 1159 EXPECT_EQ(1U, candidate_list.size()); |
1076 } | 1160 } |
1077 | 1161 |
1078 TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) { | 1162 TEST_F(UnderlayTest, OverlayLayerUnderMainLayer) { |
| 1163 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( |
| 1164 gfx::RectF(kOverlayBottomRightRect)); |
| 1165 |
1079 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1166 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
1080 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1167 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
1081 pass->shared_quad_state_list.back(), pass.get()); | 1168 pass->shared_quad_state_list.back(), pass.get()); |
1082 CreateCandidateQuadAt(resource_provider_.get(), | 1169 CreateCandidateQuadAt(resource_provider_.get(), |
1083 pass->shared_quad_state_list.back(), pass.get(), | 1170 pass->shared_quad_state_list.back(), pass.get(), |
1084 kOverlayBottomRightRect); | 1171 kOverlayBottomRightRect); |
1085 | 1172 |
1086 OverlayCandidateList candidate_list; | 1173 OverlayCandidateList candidate_list; |
1087 RenderPassFilterList render_pass_filters; | 1174 RenderPassFilterList render_pass_filters; |
1088 RenderPassFilterList render_pass_background_filters; | 1175 RenderPassFilterList render_pass_background_filters; |
1089 overlay_processor_->ProcessForOverlays( | 1176 overlay_processor_->ProcessForOverlays( |
1090 resource_provider_.get(), pass.get(), render_pass_filters, | 1177 resource_provider_.get(), pass.get(), render_pass_filters, |
1091 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 1178 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1179 &content_bounds_); |
1092 ASSERT_EQ(1U, candidate_list.size()); | 1180 ASSERT_EQ(1U, candidate_list.size()); |
1093 EXPECT_EQ(-1, candidate_list[0].plane_z_order); | 1181 EXPECT_EQ(-1, candidate_list[0].plane_z_order); |
1094 EXPECT_EQ(2U, pass->quad_list.size()); | 1182 EXPECT_EQ(2U, pass->quad_list.size()); |
1095 // The overlay quad should have changed to a SOLID_COLOR quad. | 1183 // The overlay quad should have changed to a SOLID_COLOR quad. |
1096 EXPECT_EQ(pass->quad_list.back()->material, DrawQuad::SOLID_COLOR); | 1184 EXPECT_EQ(pass->quad_list.back()->material, DrawQuad::SOLID_COLOR); |
1097 } | 1185 } |
1098 | 1186 |
1099 TEST_F(UnderlayTest, AllowOnTop) { | 1187 TEST_F(UnderlayTest, AllowOnTop) { |
1100 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1188 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
1101 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1189 CreateFullscreenCandidateQuad(resource_provider_.get(), |
1102 pass->shared_quad_state_list.back(), | 1190 pass->shared_quad_state_list.back(), |
1103 pass.get()); | 1191 pass.get()); |
1104 pass->CreateAndAppendSharedQuadState()->opacity = 0.5f; | 1192 pass->CreateAndAppendSharedQuadState()->opacity = 0.5f; |
1105 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1193 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
1106 pass->shared_quad_state_list.back(), pass.get()); | 1194 pass->shared_quad_state_list.back(), pass.get()); |
1107 | 1195 |
1108 OverlayCandidateList candidate_list; | 1196 OverlayCandidateList candidate_list; |
1109 RenderPassFilterList render_pass_filters; | 1197 RenderPassFilterList render_pass_filters; |
1110 RenderPassFilterList render_pass_background_filters; | 1198 RenderPassFilterList render_pass_background_filters; |
1111 overlay_processor_->ProcessForOverlays( | 1199 overlay_processor_->ProcessForOverlays( |
1112 resource_provider_.get(), pass.get(), render_pass_filters, | 1200 resource_provider_.get(), pass.get(), render_pass_filters, |
1113 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 1201 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1202 &content_bounds_); |
1114 ASSERT_EQ(1U, candidate_list.size()); | 1203 ASSERT_EQ(1U, candidate_list.size()); |
1115 EXPECT_EQ(-1, candidate_list[0].plane_z_order); | 1204 EXPECT_EQ(-1, candidate_list[0].plane_z_order); |
1116 // The overlay quad should have changed to a SOLID_COLOR quad. | 1205 // The overlay quad should have changed to a SOLID_COLOR quad. |
1117 EXPECT_EQ(pass->quad_list.front()->material, DrawQuad::SOLID_COLOR); | 1206 EXPECT_EQ(pass->quad_list.front()->material, DrawQuad::SOLID_COLOR); |
1118 } | 1207 } |
1119 | 1208 |
1120 // The first time an underlay is scheduled its damage must not be subtracted. | 1209 // The first time an underlay is scheduled its damage must not be subtracted. |
1121 TEST_F(UnderlayTest, InitialUnderlayDamageNotSubtracted) { | 1210 TEST_F(UnderlayTest, InitialUnderlayDamageNotSubtracted) { |
1122 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1211 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
1123 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1212 CreateFullscreenCandidateQuad(resource_provider_.get(), |
1124 pass->shared_quad_state_list.back(), | 1213 pass->shared_quad_state_list.back(), |
1125 pass.get()); | 1214 pass.get()); |
1126 | 1215 |
1127 damage_rect_ = kOverlayRect; | 1216 damage_rect_ = kOverlayRect; |
1128 | 1217 |
1129 OverlayCandidateList candidate_list; | 1218 OverlayCandidateList candidate_list; |
1130 RenderPassFilterList render_pass_filters; | 1219 RenderPassFilterList render_pass_filters; |
1131 RenderPassFilterList render_pass_background_filters; | 1220 RenderPassFilterList render_pass_background_filters; |
1132 overlay_processor_->ProcessForOverlays( | 1221 overlay_processor_->ProcessForOverlays( |
1133 resource_provider_.get(), pass.get(), render_pass_filters, | 1222 resource_provider_.get(), pass.get(), render_pass_filters, |
1134 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_); | 1223 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1224 &content_bounds_); |
1135 | 1225 |
1136 EXPECT_EQ(kOverlayRect, damage_rect_); | 1226 EXPECT_EQ(kOverlayRect, damage_rect_); |
1137 } | 1227 } |
1138 | 1228 |
1139 // An identical underlay for two frames in a row means the damage can be | 1229 // An identical underlay for two frames in a row means the damage can be |
1140 // subtracted the second time. | 1230 // subtracted the second time. |
1141 TEST_F(UnderlayTest, DamageSubtractedForConsecutiveIdenticalUnderlays) { | 1231 TEST_F(UnderlayTest, DamageSubtractedForConsecutiveIdenticalUnderlays) { |
1142 for (int i = 0; i < 2; ++i) { | 1232 for (int i = 0; i < 2; ++i) { |
1143 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1233 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
1144 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1234 CreateFullscreenCandidateQuad(resource_provider_.get(), |
1145 pass->shared_quad_state_list.back(), | 1235 pass->shared_quad_state_list.back(), |
1146 pass.get()); | 1236 pass.get()); |
1147 | 1237 |
1148 damage_rect_ = kOverlayRect; | 1238 damage_rect_ = kOverlayRect; |
1149 | 1239 |
1150 // Add something behind it. | 1240 // Add something behind it. |
1151 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1241 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
1152 pass->shared_quad_state_list.back(), pass.get()); | 1242 pass->shared_quad_state_list.back(), pass.get()); |
1153 | 1243 |
1154 OverlayCandidateList candidate_list; | 1244 OverlayCandidateList candidate_list; |
1155 RenderPassFilterList render_pass_filters; | 1245 RenderPassFilterList render_pass_filters; |
1156 RenderPassFilterList render_pass_background_filters; | 1246 RenderPassFilterList render_pass_background_filters; |
1157 overlay_processor_->ProcessForOverlays( | 1247 overlay_processor_->ProcessForOverlays( |
1158 resource_provider_.get(), pass.get(), render_pass_filters, | 1248 resource_provider_.get(), pass.get(), render_pass_filters, |
1159 render_pass_background_filters, &candidate_list, nullptr, | 1249 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
1160 &damage_rect_); | 1250 &content_bounds_); |
1161 } | 1251 } |
1162 | 1252 |
1163 // The second time the same overlay rect is scheduled it will be subtracted | 1253 // The second time the same overlay rect is scheduled it will be subtracted |
1164 // from the damage rect. | 1254 // from the damage rect. |
1165 EXPECT_TRUE(damage_rect_.IsEmpty()); | 1255 EXPECT_TRUE(damage_rect_.IsEmpty()); |
1166 } | 1256 } |
1167 | 1257 |
1168 // Underlay damage can only be subtracted if the previous frame's underlay | 1258 // Underlay damage can only be subtracted if the previous frame's underlay |
1169 // was the same rect. | 1259 // was the same rect. |
1170 TEST_F(UnderlayTest, DamageNotSubtractedForNonIdenticalConsecutiveUnderlays) { | 1260 TEST_F(UnderlayTest, DamageNotSubtractedForNonIdenticalConsecutiveUnderlays) { |
1171 gfx::Rect overlay_rects[] = {kOverlayBottomRightRect, kOverlayRect}; | 1261 gfx::Rect overlay_rects[] = {kOverlayBottomRightRect, kOverlayRect}; |
1172 for (int i = 0; i < 2; ++i) { | 1262 for (int i = 0; i < 2; ++i) { |
| 1263 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( |
| 1264 gfx::RectF(overlay_rects[i])); |
| 1265 |
1173 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1266 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
1174 | 1267 |
1175 CreateCandidateQuadAt(resource_provider_.get(), | 1268 CreateCandidateQuadAt(resource_provider_.get(), |
1176 pass->shared_quad_state_list.back(), pass.get(), | 1269 pass->shared_quad_state_list.back(), pass.get(), |
1177 overlay_rects[i]); | 1270 overlay_rects[i]); |
1178 | 1271 |
1179 damage_rect_ = overlay_rects[i]; | 1272 damage_rect_ = overlay_rects[i]; |
1180 | 1273 |
1181 OverlayCandidateList candidate_list; | 1274 OverlayCandidateList candidate_list; |
1182 RenderPassFilterList render_pass_filters; | 1275 RenderPassFilterList render_pass_filters; |
1183 RenderPassFilterList render_pass_background_filters; | 1276 RenderPassFilterList render_pass_background_filters; |
1184 overlay_processor_->ProcessForOverlays( | 1277 overlay_processor_->ProcessForOverlays( |
1185 resource_provider_.get(), pass.get(), render_pass_filters, | 1278 resource_provider_.get(), pass.get(), render_pass_filters, |
1186 render_pass_background_filters, &candidate_list, nullptr, | 1279 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
1187 &damage_rect_); | 1280 &content_bounds_); |
1188 | 1281 |
1189 EXPECT_EQ(overlay_rects[i], damage_rect_); | 1282 EXPECT_EQ(overlay_rects[i], damage_rect_); |
1190 } | 1283 } |
1191 } | 1284 } |
1192 | 1285 |
1193 TEST_F(UnderlayTest, DamageNotSubtractedWhenQuadsAboveOverlap) { | 1286 TEST_F(UnderlayTest, DamageNotSubtractedWhenQuadsAboveOverlap) { |
1194 for (int i = 0; i < 2; ++i) { | 1287 for (int i = 0; i < 2; ++i) { |
1195 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1288 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
1196 // Add an overlapping quad above the candidate. | 1289 // Add an overlapping quad above the candidate. |
1197 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1290 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
1198 pass->shared_quad_state_list.back(), pass.get()); | 1291 pass->shared_quad_state_list.back(), pass.get()); |
1199 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1292 CreateFullscreenCandidateQuad(resource_provider_.get(), |
1200 pass->shared_quad_state_list.back(), | 1293 pass->shared_quad_state_list.back(), |
1201 pass.get()); | 1294 pass.get()); |
1202 | 1295 |
1203 damage_rect_ = kOverlayRect; | 1296 damage_rect_ = kOverlayRect; |
1204 | 1297 |
1205 OverlayCandidateList candidate_list; | 1298 OverlayCandidateList candidate_list; |
1206 RenderPassFilterList render_pass_filters; | 1299 RenderPassFilterList render_pass_filters; |
1207 RenderPassFilterList render_pass_background_filters; | 1300 RenderPassFilterList render_pass_background_filters; |
1208 overlay_processor_->ProcessForOverlays( | 1301 overlay_processor_->ProcessForOverlays( |
1209 resource_provider_.get(), pass.get(), render_pass_filters, | 1302 resource_provider_.get(), pass.get(), render_pass_filters, |
1210 render_pass_background_filters, &candidate_list, nullptr, | 1303 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
1211 &damage_rect_); | 1304 &content_bounds_); |
1212 } | 1305 } |
1213 | 1306 |
1214 EXPECT_EQ(kOverlayRect, damage_rect_); | 1307 EXPECT_EQ(kOverlayRect, damage_rect_); |
1215 } | 1308 } |
1216 | 1309 |
1217 TEST_F(UnderlayTest, DamageSubtractedWhenQuadsAboveDontOverlap) { | 1310 TEST_F(UnderlayTest, DamageSubtractedWhenQuadsAboveDontOverlap) { |
| 1311 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( |
| 1312 gfx::RectF(kOverlayBottomRightRect)); |
| 1313 |
1218 for (int i = 0; i < 2; ++i) { | 1314 for (int i = 0; i < 2; ++i) { |
1219 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1315 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
1220 // Add a non-overlapping quad above the candidate. | 1316 // Add a non-overlapping quad above the candidate. |
1221 CreateOpaqueQuadAt(resource_provider_.get(), | 1317 CreateOpaqueQuadAt(resource_provider_.get(), |
1222 pass->shared_quad_state_list.back(), pass.get(), | 1318 pass->shared_quad_state_list.back(), pass.get(), |
1223 kOverlayTopLeftRect); | 1319 kOverlayTopLeftRect); |
1224 CreateCandidateQuadAt(resource_provider_.get(), | 1320 CreateCandidateQuadAt(resource_provider_.get(), |
1225 pass->shared_quad_state_list.back(), pass.get(), | 1321 pass->shared_quad_state_list.back(), pass.get(), |
1226 kOverlayBottomRightRect); | 1322 kOverlayBottomRightRect); |
1227 | 1323 |
1228 damage_rect_ = kOverlayBottomRightRect; | 1324 damage_rect_ = kOverlayBottomRightRect; |
1229 | 1325 |
1230 OverlayCandidateList candidate_list; | 1326 OverlayCandidateList candidate_list; |
1231 RenderPassFilterList render_pass_filters; | 1327 RenderPassFilterList render_pass_filters; |
1232 RenderPassFilterList render_pass_background_filters; | 1328 RenderPassFilterList render_pass_background_filters; |
1233 overlay_processor_->ProcessForOverlays( | 1329 overlay_processor_->ProcessForOverlays( |
1234 resource_provider_.get(), pass.get(), render_pass_filters, | 1330 resource_provider_.get(), pass.get(), render_pass_filters, |
1235 render_pass_background_filters, &candidate_list, nullptr, | 1331 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
1236 &damage_rect_); | 1332 &content_bounds_); |
1237 } | 1333 } |
1238 | 1334 |
1239 EXPECT_TRUE(damage_rect_.IsEmpty()); | 1335 EXPECT_TRUE(damage_rect_.IsEmpty()); |
1240 } | 1336 } |
1241 | 1337 |
| 1338 TEST_F(UnderlayCastTest, NoOverlayContentBounds) { |
| 1339 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1340 |
| 1341 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1342 pass->shared_quad_state_list.back(), pass.get(), |
| 1343 kOverlayTopLeftRect); |
| 1344 |
| 1345 OverlayCandidateList candidate_list; |
| 1346 RenderPassFilterList render_pass_filters; |
| 1347 RenderPassFilterList render_pass_background_filters; |
| 1348 overlay_processor_->ProcessForOverlays( |
| 1349 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1350 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1351 &content_bounds_); |
| 1352 EXPECT_EQ(0U, content_bounds_.size()); |
| 1353 } |
| 1354 |
| 1355 TEST_F(UnderlayCastTest, FullScreenOverlayContentBounds) { |
| 1356 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1357 CreateCandidateQuadAt(resource_provider_.get(), |
| 1358 pass->shared_quad_state_list.back(), pass.get(), |
| 1359 kOverlayRect); |
| 1360 |
| 1361 OverlayCandidateList candidate_list; |
| 1362 RenderPassFilterList render_pass_filters; |
| 1363 RenderPassFilterList render_pass_background_filters; |
| 1364 overlay_processor_->ProcessForOverlays( |
| 1365 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1366 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1367 &content_bounds_); |
| 1368 |
| 1369 EXPECT_EQ(1U, content_bounds_.size()); |
| 1370 EXPECT_TRUE(content_bounds_[0].IsEmpty()); |
| 1371 } |
| 1372 |
| 1373 TEST_F(UnderlayCastTest, BlackOutsideOverlayContentBounds) { |
| 1374 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( |
| 1375 gfx::RectF(kOverlayBottomRightRect)); |
| 1376 |
| 1377 const gfx::Rect kLeftSide(0, 0, 128, 256); |
| 1378 const gfx::Rect kTopRight(128, 0, 128, 128); |
| 1379 |
| 1380 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1381 CreateCandidateQuadAt(resource_provider_.get(), |
| 1382 pass->shared_quad_state_list.back(), pass.get(), |
| 1383 kOverlayBottomRightRect); |
| 1384 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1385 pass->shared_quad_state_list.back(), pass.get(), kLeftSide, |
| 1386 SK_ColorBLACK); |
| 1387 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1388 pass->shared_quad_state_list.back(), pass.get(), kTopRight, |
| 1389 SK_ColorBLACK); |
| 1390 |
| 1391 OverlayCandidateList candidate_list; |
| 1392 RenderPassFilterList render_pass_filters; |
| 1393 RenderPassFilterList render_pass_background_filters; |
| 1394 overlay_processor_->ProcessForOverlays( |
| 1395 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1396 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1397 &content_bounds_); |
| 1398 |
| 1399 EXPECT_EQ(1U, content_bounds_.size()); |
| 1400 EXPECT_TRUE(content_bounds_[0].IsEmpty()); |
| 1401 } |
| 1402 |
| 1403 TEST_F(UnderlayCastTest, OverlayOccludedContentBounds) { |
| 1404 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1405 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1406 pass->shared_quad_state_list.back(), pass.get(), |
| 1407 kOverlayTopLeftRect); |
| 1408 CreateCandidateQuadAt(resource_provider_.get(), |
| 1409 pass->shared_quad_state_list.back(), pass.get(), |
| 1410 kOverlayRect); |
| 1411 |
| 1412 OverlayCandidateList candidate_list; |
| 1413 RenderPassFilterList render_pass_filters; |
| 1414 RenderPassFilterList render_pass_background_filters; |
| 1415 overlay_processor_->ProcessForOverlays( |
| 1416 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1417 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1418 &content_bounds_); |
| 1419 |
| 1420 EXPECT_EQ(1U, content_bounds_.size()); |
| 1421 EXPECT_EQ(kOverlayTopLeftRect, content_bounds_[0]); |
| 1422 } |
| 1423 |
| 1424 TEST_F(UnderlayCastTest, OverlayOccludedUnionContentBounds) { |
| 1425 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
| 1426 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1427 pass->shared_quad_state_list.back(), pass.get(), |
| 1428 kOverlayTopLeftRect); |
| 1429 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1430 pass->shared_quad_state_list.back(), pass.get(), |
| 1431 kOverlayBottomRightRect); |
| 1432 CreateCandidateQuadAt(resource_provider_.get(), |
| 1433 pass->shared_quad_state_list.back(), pass.get(), |
| 1434 kOverlayRect); |
| 1435 |
| 1436 OverlayCandidateList candidate_list; |
| 1437 RenderPassFilterList render_pass_filters; |
| 1438 RenderPassFilterList render_pass_background_filters; |
| 1439 overlay_processor_->ProcessForOverlays( |
| 1440 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1441 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1442 &content_bounds_); |
| 1443 |
| 1444 EXPECT_EQ(1U, content_bounds_.size()); |
| 1445 EXPECT_EQ(kOverlayRect, content_bounds_[0]); |
| 1446 } |
| 1447 |
| 1448 TEST_F(UnderlayCastTest, RoundOverlayContentBounds) { |
| 1449 // Check rounding behaviour on overlay quads. Be conservative (content |
| 1450 // potentially visible on boundary). |
| 1451 const gfx::Rect overlay_rect(1, 1, 8, 8); |
| 1452 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( |
| 1453 gfx::RectF(1.5f, 1.5f, 8, 8)); |
| 1454 |
| 1455 gfx::Transform transform; |
| 1456 transform.Translate(0.5f, 0.5f); |
| 1457 |
| 1458 std::unique_ptr<RenderPass> pass = CreateRenderPassWithTransform(transform); |
| 1459 CreateCandidateQuadAt(resource_provider_.get(), |
| 1460 pass->shared_quad_state_list.back(), pass.get(), |
| 1461 overlay_rect); |
| 1462 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1463 pass->shared_quad_state_list.back(), pass.get(), |
| 1464 gfx::Rect(0, 0, 10, 10), SK_ColorWHITE); |
| 1465 |
| 1466 OverlayCandidateList candidate_list; |
| 1467 RenderPassFilterList render_pass_filters; |
| 1468 RenderPassFilterList render_pass_background_filters; |
| 1469 overlay_processor_->ProcessForOverlays( |
| 1470 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1471 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1472 &content_bounds_); |
| 1473 |
| 1474 EXPECT_EQ(1U, content_bounds_.size()); |
| 1475 EXPECT_EQ(gfx::Rect(0, 0, 11, 11), content_bounds_[0]); |
| 1476 } |
| 1477 |
| 1478 TEST_F(UnderlayCastTest, RoundContentBounds) { |
| 1479 // Check rounding behaviour on content quads (bounds should be enclosing |
| 1480 // rect). |
| 1481 gfx::Rect overlay_rect = kOverlayRect; |
| 1482 overlay_rect.Inset(0, 0, 1, 1); |
| 1483 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( |
| 1484 gfx::RectF(0.5f, 0.5f, 255, 255)); |
| 1485 |
| 1486 gfx::Transform transform; |
| 1487 transform.Translate(0.5f, 0.5f); |
| 1488 |
| 1489 std::unique_ptr<RenderPass> pass = CreateRenderPassWithTransform(transform); |
| 1490 CreateCandidateQuadAt(resource_provider_.get(), |
| 1491 pass->shared_quad_state_list.back(), pass.get(), |
| 1492 overlay_rect); |
| 1493 CreateOpaqueQuadAt(resource_provider_.get(), |
| 1494 pass->shared_quad_state_list.back(), pass.get(), |
| 1495 gfx::Rect(0, 0, 255, 255), SK_ColorWHITE); |
| 1496 |
| 1497 OverlayCandidateList candidate_list; |
| 1498 RenderPassFilterList render_pass_filters; |
| 1499 RenderPassFilterList render_pass_background_filters; |
| 1500 overlay_processor_->ProcessForOverlays( |
| 1501 resource_provider_.get(), pass.get(), render_pass_filters, |
| 1502 render_pass_background_filters, &candidate_list, nullptr, &damage_rect_, |
| 1503 &content_bounds_); |
| 1504 |
| 1505 EXPECT_EQ(1U, content_bounds_.size()); |
| 1506 EXPECT_EQ(kOverlayRect, content_bounds_[0]); |
| 1507 } |
| 1508 |
1242 OverlayCandidateList BackbufferOverlayList(const RenderPass* root_render_pass) { | 1509 OverlayCandidateList BackbufferOverlayList(const RenderPass* root_render_pass) { |
1243 OverlayCandidateList list; | 1510 OverlayCandidateList list; |
1244 OverlayCandidate output_surface_plane; | 1511 OverlayCandidate output_surface_plane; |
1245 output_surface_plane.display_rect = gfx::RectF(root_render_pass->output_rect); | 1512 output_surface_plane.display_rect = gfx::RectF(root_render_pass->output_rect); |
1246 output_surface_plane.quad_rect_in_target_space = | 1513 output_surface_plane.quad_rect_in_target_space = |
1247 root_render_pass->output_rect; | 1514 root_render_pass->output_rect; |
1248 output_surface_plane.use_output_surface_for_resource = true; | 1515 output_surface_plane.use_output_surface_for_resource = true; |
1249 output_surface_plane.overlay_handled = true; | 1516 output_surface_plane.overlay_handled = true; |
1250 list.push_back(output_surface_plane); | 1517 list.push_back(output_surface_plane); |
1251 return list; | 1518 return list; |
1252 } | 1519 } |
1253 | 1520 |
1254 TEST_F(CALayerOverlayTest, AllowNonAxisAlignedTransform) { | 1521 TEST_F(CALayerOverlayTest, AllowNonAxisAlignedTransform) { |
1255 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1522 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
1256 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1523 CreateFullscreenCandidateQuad(resource_provider_.get(), |
1257 pass->shared_quad_state_list.back(), | 1524 pass->shared_quad_state_list.back(), |
1258 pass.get()); | 1525 pass.get()); |
1259 pass->shared_quad_state_list.back() | 1526 pass->shared_quad_state_list.back() |
1260 ->quad_to_target_transform.RotateAboutZAxis(45.f); | 1527 ->quad_to_target_transform.RotateAboutZAxis(45.f); |
1261 | 1528 |
1262 gfx::Rect damage_rect; | 1529 gfx::Rect damage_rect; |
1263 CALayerOverlayList ca_layer_list; | 1530 CALayerOverlayList ca_layer_list; |
1264 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); | 1531 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); |
1265 RenderPassFilterList render_pass_filters; | 1532 RenderPassFilterList render_pass_filters; |
1266 RenderPassFilterList render_pass_background_filters; | 1533 RenderPassFilterList render_pass_background_filters; |
1267 overlay_processor_->ProcessForOverlays( | 1534 overlay_processor_->ProcessForOverlays( |
1268 resource_provider_.get(), pass.get(), render_pass_filters, | 1535 resource_provider_.get(), pass.get(), render_pass_filters, |
1269 render_pass_background_filters, &overlay_list, &ca_layer_list, | 1536 render_pass_background_filters, &overlay_list, &ca_layer_list, |
1270 &damage_rect); | 1537 &damage_rect_, &content_bounds_); |
1271 EXPECT_EQ(gfx::Rect(), damage_rect); | 1538 EXPECT_EQ(gfx::Rect(), damage_rect); |
1272 EXPECT_EQ(0U, overlay_list.size()); | 1539 EXPECT_EQ(0U, overlay_list.size()); |
1273 EXPECT_EQ(1U, ca_layer_list.size()); | 1540 EXPECT_EQ(1U, ca_layer_list.size()); |
1274 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); | 1541 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
1275 } | 1542 } |
1276 | 1543 |
1277 TEST_F(CALayerOverlayTest, ThreeDTransform) { | 1544 TEST_F(CALayerOverlayTest, ThreeDTransform) { |
1278 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1545 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
1279 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1546 CreateFullscreenCandidateQuad(resource_provider_.get(), |
1280 pass->shared_quad_state_list.back(), | 1547 pass->shared_quad_state_list.back(), |
1281 pass.get()); | 1548 pass.get()); |
1282 pass->shared_quad_state_list.back() | 1549 pass->shared_quad_state_list.back() |
1283 ->quad_to_target_transform.RotateAboutXAxis(45.f); | 1550 ->quad_to_target_transform.RotateAboutXAxis(45.f); |
1284 | 1551 |
1285 gfx::Rect damage_rect; | 1552 gfx::Rect damage_rect; |
1286 CALayerOverlayList ca_layer_list; | 1553 CALayerOverlayList ca_layer_list; |
1287 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); | 1554 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); |
1288 RenderPassFilterList render_pass_filters; | 1555 RenderPassFilterList render_pass_filters; |
1289 RenderPassFilterList render_pass_background_filters; | 1556 RenderPassFilterList render_pass_background_filters; |
1290 overlay_processor_->ProcessForOverlays( | 1557 overlay_processor_->ProcessForOverlays( |
1291 resource_provider_.get(), pass.get(), render_pass_filters, | 1558 resource_provider_.get(), pass.get(), render_pass_filters, |
1292 render_pass_background_filters, &overlay_list, &ca_layer_list, | 1559 render_pass_background_filters, &overlay_list, &ca_layer_list, |
1293 &damage_rect); | 1560 &damage_rect_, &content_bounds_); |
1294 EXPECT_EQ(0U, overlay_list.size()); | 1561 EXPECT_EQ(0U, overlay_list.size()); |
1295 EXPECT_EQ(1U, ca_layer_list.size()); | 1562 EXPECT_EQ(1U, ca_layer_list.size()); |
1296 gfx::Transform expected_transform; | 1563 gfx::Transform expected_transform; |
1297 expected_transform.RotateAboutXAxis(45.f); | 1564 expected_transform.RotateAboutXAxis(45.f); |
1298 gfx::Transform actual_transform(ca_layer_list.back().shared_state->transform); | 1565 gfx::Transform actual_transform(ca_layer_list.back().shared_state->transform); |
1299 EXPECT_EQ(expected_transform.ToString(), actual_transform.ToString()); | 1566 EXPECT_EQ(expected_transform.ToString(), actual_transform.ToString()); |
1300 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); | 1567 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
1301 } | 1568 } |
1302 | 1569 |
1303 TEST_F(CALayerOverlayTest, AllowContainingClip) { | 1570 TEST_F(CALayerOverlayTest, AllowContainingClip) { |
1304 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1571 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
1305 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1572 CreateFullscreenCandidateQuad(resource_provider_.get(), |
1306 pass->shared_quad_state_list.back(), | 1573 pass->shared_quad_state_list.back(), |
1307 pass.get()); | 1574 pass.get()); |
1308 pass->shared_quad_state_list.back()->is_clipped = true; | 1575 pass->shared_quad_state_list.back()->is_clipped = true; |
1309 pass->shared_quad_state_list.back()->clip_rect = kOverlayRect; | 1576 pass->shared_quad_state_list.back()->clip_rect = kOverlayRect; |
1310 | 1577 |
1311 gfx::Rect damage_rect; | 1578 gfx::Rect damage_rect; |
1312 CALayerOverlayList ca_layer_list; | 1579 CALayerOverlayList ca_layer_list; |
1313 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); | 1580 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); |
1314 RenderPassFilterList render_pass_filters; | 1581 RenderPassFilterList render_pass_filters; |
1315 RenderPassFilterList render_pass_background_filters; | 1582 RenderPassFilterList render_pass_background_filters; |
1316 overlay_processor_->ProcessForOverlays( | 1583 overlay_processor_->ProcessForOverlays( |
1317 resource_provider_.get(), pass.get(), render_pass_filters, | 1584 resource_provider_.get(), pass.get(), render_pass_filters, |
1318 render_pass_background_filters, &overlay_list, &ca_layer_list, | 1585 render_pass_background_filters, &overlay_list, &ca_layer_list, |
1319 &damage_rect); | 1586 &damage_rect_, &content_bounds_); |
1320 EXPECT_EQ(gfx::Rect(), damage_rect); | 1587 EXPECT_EQ(gfx::Rect(), damage_rect); |
1321 EXPECT_EQ(0U, overlay_list.size()); | 1588 EXPECT_EQ(0U, overlay_list.size()); |
1322 EXPECT_EQ(1U, ca_layer_list.size()); | 1589 EXPECT_EQ(1U, ca_layer_list.size()); |
1323 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); | 1590 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
1324 } | 1591 } |
1325 | 1592 |
1326 TEST_F(CALayerOverlayTest, NontrivialClip) { | 1593 TEST_F(CALayerOverlayTest, NontrivialClip) { |
1327 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1594 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
1328 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1595 CreateFullscreenCandidateQuad(resource_provider_.get(), |
1329 pass->shared_quad_state_list.back(), | 1596 pass->shared_quad_state_list.back(), |
1330 pass.get()); | 1597 pass.get()); |
1331 pass->shared_quad_state_list.back()->is_clipped = true; | 1598 pass->shared_quad_state_list.back()->is_clipped = true; |
1332 pass->shared_quad_state_list.back()->clip_rect = gfx::Rect(64, 64, 128, 128); | 1599 pass->shared_quad_state_list.back()->clip_rect = gfx::Rect(64, 64, 128, 128); |
1333 | 1600 |
1334 gfx::Rect damage_rect; | 1601 gfx::Rect damage_rect; |
1335 CALayerOverlayList ca_layer_list; | 1602 CALayerOverlayList ca_layer_list; |
1336 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); | 1603 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); |
1337 RenderPassFilterList render_pass_filters; | 1604 RenderPassFilterList render_pass_filters; |
1338 RenderPassFilterList render_pass_background_filters; | 1605 RenderPassFilterList render_pass_background_filters; |
1339 overlay_processor_->ProcessForOverlays( | 1606 overlay_processor_->ProcessForOverlays( |
1340 resource_provider_.get(), pass.get(), render_pass_filters, | 1607 resource_provider_.get(), pass.get(), render_pass_filters, |
1341 render_pass_background_filters, &overlay_list, &ca_layer_list, | 1608 render_pass_background_filters, &overlay_list, &ca_layer_list, |
1342 &damage_rect); | 1609 &damage_rect_, &content_bounds_); |
1343 EXPECT_EQ(gfx::Rect(), damage_rect); | 1610 EXPECT_EQ(gfx::Rect(), damage_rect); |
1344 EXPECT_EQ(0U, overlay_list.size()); | 1611 EXPECT_EQ(0U, overlay_list.size()); |
1345 EXPECT_EQ(1U, ca_layer_list.size()); | 1612 EXPECT_EQ(1U, ca_layer_list.size()); |
1346 EXPECT_TRUE(ca_layer_list.back().shared_state->is_clipped); | 1613 EXPECT_TRUE(ca_layer_list.back().shared_state->is_clipped); |
1347 EXPECT_EQ(gfx::RectF(64, 64, 128, 128), | 1614 EXPECT_EQ(gfx::RectF(64, 64, 128, 128), |
1348 ca_layer_list.back().shared_state->clip_rect); | 1615 ca_layer_list.back().shared_state->clip_rect); |
1349 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); | 1616 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
1350 } | 1617 } |
1351 | 1618 |
1352 TEST_F(CALayerOverlayTest, SkipTransparent) { | 1619 TEST_F(CALayerOverlayTest, SkipTransparent) { |
1353 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1620 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
1354 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1621 CreateFullscreenCandidateQuad(resource_provider_.get(), |
1355 pass->shared_quad_state_list.back(), | 1622 pass->shared_quad_state_list.back(), |
1356 pass.get()); | 1623 pass.get()); |
1357 pass->shared_quad_state_list.back()->opacity = 0; | 1624 pass->shared_quad_state_list.back()->opacity = 0; |
1358 | 1625 |
1359 gfx::Rect damage_rect; | 1626 gfx::Rect damage_rect; |
1360 CALayerOverlayList ca_layer_list; | 1627 CALayerOverlayList ca_layer_list; |
1361 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); | 1628 OverlayCandidateList overlay_list(BackbufferOverlayList(pass.get())); |
1362 RenderPassFilterList render_pass_filters; | 1629 RenderPassFilterList render_pass_filters; |
1363 RenderPassFilterList render_pass_background_filters; | 1630 RenderPassFilterList render_pass_background_filters; |
1364 overlay_processor_->ProcessForOverlays( | 1631 overlay_processor_->ProcessForOverlays( |
1365 resource_provider_.get(), pass.get(), render_pass_filters, | 1632 resource_provider_.get(), pass.get(), render_pass_filters, |
1366 render_pass_background_filters, &overlay_list, &ca_layer_list, | 1633 render_pass_background_filters, &overlay_list, &ca_layer_list, |
1367 &damage_rect); | 1634 &damage_rect_, &content_bounds_); |
1368 EXPECT_EQ(gfx::Rect(), damage_rect); | 1635 EXPECT_EQ(gfx::Rect(), damage_rect); |
1369 EXPECT_EQ(0U, overlay_list.size()); | 1636 EXPECT_EQ(0U, overlay_list.size()); |
1370 EXPECT_EQ(0U, ca_layer_list.size()); | 1637 EXPECT_EQ(0U, ca_layer_list.size()); |
1371 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); | 1638 EXPECT_EQ(0U, output_surface_->bind_framebuffer_count()); |
1372 } | 1639 } |
1373 | 1640 |
1374 class OverlayInfoRendererGL : public GLRenderer { | 1641 class OverlayInfoRendererGL : public GLRenderer { |
1375 public: | 1642 public: |
1376 OverlayInfoRendererGL(const RendererSettings* settings, | 1643 OverlayInfoRendererGL(const RendererSettings* settings, |
1377 OutputSurface* output_surface, | 1644 OutputSurface* output_surface, |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1412 public: | 1679 public: |
1413 MOCK_METHOD5(Schedule, | 1680 MOCK_METHOD5(Schedule, |
1414 void(int plane_z_order, | 1681 void(int plane_z_order, |
1415 gfx::OverlayTransform plane_transform, | 1682 gfx::OverlayTransform plane_transform, |
1416 unsigned overlay_texture_id, | 1683 unsigned overlay_texture_id, |
1417 const gfx::Rect& display_bounds, | 1684 const gfx::Rect& display_bounds, |
1418 const gfx::RectF& uv_rect)); | 1685 const gfx::RectF& uv_rect)); |
1419 }; | 1686 }; |
1420 | 1687 |
1421 class GLRendererWithOverlaysTest : public testing::Test { | 1688 class GLRendererWithOverlaysTest : public testing::Test { |
| 1689 using OutputSurfaceType = OverlayOutputSurface<SingleOverlayValidator>; |
| 1690 |
1422 protected: | 1691 protected: |
1423 GLRendererWithOverlaysTest() { | 1692 GLRendererWithOverlaysTest() { |
1424 provider_ = TestContextProvider::Create(); | 1693 provider_ = TestContextProvider::Create(); |
1425 provider_->BindToCurrentThread(); | 1694 provider_->BindToCurrentThread(); |
1426 output_surface_.reset(new OverlayOutputSurface(provider_)); | 1695 output_surface_.reset(new OutputSurfaceType(provider_)); |
1427 output_surface_->BindToClient(&output_surface_client_); | 1696 output_surface_->BindToClient(&output_surface_client_); |
1428 resource_provider_ = FakeResourceProvider::Create(provider_.get(), nullptr); | 1697 resource_provider_ = FakeResourceProvider::Create(provider_.get(), nullptr); |
1429 | 1698 |
1430 provider_->support()->SetScheduleOverlayPlaneCallback(base::Bind( | 1699 provider_->support()->SetScheduleOverlayPlaneCallback(base::Bind( |
1431 &MockOverlayScheduler::Schedule, base::Unretained(&scheduler_))); | 1700 &MockOverlayScheduler::Schedule, base::Unretained(&scheduler_))); |
1432 } | 1701 } |
1433 | 1702 |
1434 void Init(bool use_validator) { | 1703 void Init(bool use_validator) { |
1435 if (use_validator) | 1704 if (use_validator) |
1436 output_surface_->SetOverlayCandidateValidator(new SingleOverlayValidator); | 1705 output_surface_->SetOverlayCandidateValidator(new SingleOverlayValidator); |
(...skipping 22 matching lines...) Expand all Loading... |
1459 gpu::TextureInUseResponse response; | 1728 gpu::TextureInUseResponse response; |
1460 response.texture = lock.texture_id(); | 1729 response.texture = lock.texture_id(); |
1461 response.in_use = false; | 1730 response.in_use = false; |
1462 gpu::TextureInUseResponses responses; | 1731 gpu::TextureInUseResponses responses; |
1463 responses.push_back(response); | 1732 responses.push_back(response); |
1464 renderer_->DidReceiveTextureInUseResponses(responses); | 1733 renderer_->DidReceiveTextureInUseResponses(responses); |
1465 } | 1734 } |
1466 | 1735 |
1467 RendererSettings settings_; | 1736 RendererSettings settings_; |
1468 FakeOutputSurfaceClient output_surface_client_; | 1737 FakeOutputSurfaceClient output_surface_client_; |
1469 std::unique_ptr<OverlayOutputSurface> output_surface_; | 1738 std::unique_ptr<OutputSurfaceType> output_surface_; |
1470 std::unique_ptr<ResourceProvider> resource_provider_; | 1739 std::unique_ptr<ResourceProvider> resource_provider_; |
1471 std::unique_ptr<OverlayInfoRendererGL> renderer_; | 1740 std::unique_ptr<OverlayInfoRendererGL> renderer_; |
1472 scoped_refptr<TestContextProvider> provider_; | 1741 scoped_refptr<TestContextProvider> provider_; |
1473 MockOverlayScheduler scheduler_; | 1742 MockOverlayScheduler scheduler_; |
1474 }; | 1743 }; |
1475 | 1744 |
1476 TEST_F(GLRendererWithOverlaysTest, OverlayQuadNotDrawn) { | 1745 TEST_F(GLRendererWithOverlaysTest, OverlayQuadNotDrawn) { |
1477 bool use_validator = true; | 1746 bool use_validator = true; |
1478 Init(use_validator); | 1747 Init(use_validator); |
1479 renderer_->set_expect_overlays(true); | 1748 renderer_->set_expect_overlays(true); |
| 1749 output_surface_->GetOverlayCandidateValidator()->SetExpectedRect( |
| 1750 gfx::RectF(kOverlayBottomRightRect)); |
| 1751 |
1480 gfx::Size viewport_size(16, 16); | 1752 gfx::Size viewport_size(16, 16); |
1481 | 1753 |
1482 std::unique_ptr<RenderPass> pass = CreateRenderPass(); | 1754 std::unique_ptr<RenderPass> pass = CreateRenderPass(); |
1483 | 1755 |
1484 CreateCandidateQuadAt(resource_provider_.get(), | 1756 CreateCandidateQuadAt(resource_provider_.get(), |
1485 pass->shared_quad_state_list.back(), pass.get(), | 1757 pass->shared_quad_state_list.back(), pass.get(), |
1486 kOverlayBottomRightRect); | 1758 kOverlayBottomRightRect); |
1487 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1759 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
1488 pass->shared_quad_state_list.back(), pass.get()); | 1760 pass->shared_quad_state_list.back(), pass.get()); |
1489 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1761 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1897 quad_ = pass_->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); | 2169 quad_ = pass_->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); |
1898 render_pass_id_ = 3; | 2170 render_pass_id_ = 3; |
1899 } | 2171 } |
1900 | 2172 |
1901 void ProcessForOverlays() { | 2173 void ProcessForOverlays() { |
1902 gfx::Rect damage_rect; | 2174 gfx::Rect damage_rect; |
1903 overlay_list_ = BackbufferOverlayList(pass_.get()); | 2175 overlay_list_ = BackbufferOverlayList(pass_.get()); |
1904 overlay_processor_->ProcessForOverlays( | 2176 overlay_processor_->ProcessForOverlays( |
1905 resource_provider_.get(), pass_.get(), render_pass_filters_, | 2177 resource_provider_.get(), pass_.get(), render_pass_filters_, |
1906 render_pass_background_filters_, &overlay_list_, &ca_layer_list_, | 2178 render_pass_background_filters_, &overlay_list_, &ca_layer_list_, |
1907 &damage_rect); | 2179 &damage_rect_, &content_bounds_); |
1908 } | 2180 } |
1909 std::unique_ptr<RenderPass> pass_; | 2181 std::unique_ptr<RenderPass> pass_; |
1910 RenderPassDrawQuad* quad_; | 2182 RenderPassDrawQuad* quad_; |
1911 int render_pass_id_; | 2183 int render_pass_id_; |
1912 FilterOperations filters_; | 2184 FilterOperations filters_; |
1913 FilterOperations background_filters_; | 2185 FilterOperations background_filters_; |
1914 RenderPassFilterList render_pass_filters_; | 2186 RenderPassFilterList render_pass_filters_; |
1915 RenderPassFilterList render_pass_background_filters_; | 2187 RenderPassFilterList render_pass_background_filters_; |
1916 CALayerOverlayList ca_layer_list_; | 2188 CALayerOverlayList ca_layer_list_; |
1917 OverlayCandidateList overlay_list_; | 2189 OverlayCandidateList overlay_list_; |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2018 kOverlayRect, render_pass_id_, 2, gfx::Vector2dF(), | 2290 kOverlayRect, render_pass_id_, 2, gfx::Vector2dF(), |
2019 gfx::Size(), gfx::Vector2dF(1, 1), gfx::PointF()); | 2291 gfx::Size(), gfx::Vector2dF(1, 1), gfx::PointF()); |
2020 } | 2292 } |
2021 | 2293 |
2022 ProcessForOverlays(); | 2294 ProcessForOverlays(); |
2023 EXPECT_EQ(0U, ca_layer_list_.size()); | 2295 EXPECT_EQ(0U, ca_layer_list_.size()); |
2024 } | 2296 } |
2025 | 2297 |
2026 } // namespace | 2298 } // namespace |
2027 } // namespace cc | 2299 } // namespace cc |
OLD | NEW |