| 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 | 8 |
| 9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
| 10 #include "cc/base/region.h" | 10 #include "cc/base/region.h" |
| (...skipping 1202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1213 | 1213 |
| 1214 void Init(bool use_validator) { | 1214 void Init(bool use_validator) { |
| 1215 if (use_validator) | 1215 if (use_validator) |
| 1216 output_surface_->SetOverlayCandidateValidator(new SingleOverlayValidator); | 1216 output_surface_->SetOverlayCandidateValidator(new SingleOverlayValidator); |
| 1217 | 1217 |
| 1218 renderer_ = base::WrapUnique(new OverlayInfoRendererGL( | 1218 renderer_ = base::WrapUnique(new OverlayInfoRendererGL( |
| 1219 &renderer_client_, &settings_, output_surface_.get(), | 1219 &renderer_client_, &settings_, output_surface_.get(), |
| 1220 resource_provider_.get())); | 1220 resource_provider_.get())); |
| 1221 } | 1221 } |
| 1222 | 1222 |
| 1223 void DrawFrame(RenderPassList* pass_list, const gfx::Rect& viewport_rect) { |
| 1224 renderer_->DrawFrame(pass_list, 1.f, gfx::ColorProfile(), viewport_rect, |
| 1225 viewport_rect, false); |
| 1226 } |
| 1223 void SwapBuffers() { | 1227 void SwapBuffers() { |
| 1224 renderer_->SwapBuffers(CompositorFrameMetadata()); | 1228 renderer_->SwapBuffers(CompositorFrameMetadata()); |
| 1225 output_surface_->OnSwapBuffersComplete(); | 1229 output_surface_->OnSwapBuffersComplete(); |
| 1226 renderer_->SwapBuffersComplete(); | 1230 renderer_->SwapBuffersComplete(); |
| 1227 } | 1231 } |
| 1228 void SwapBuffersWithoutComplete() { | 1232 void SwapBuffersWithoutComplete() { |
| 1229 renderer_->SwapBuffers(CompositorFrameMetadata()); | 1233 renderer_->SwapBuffers(CompositorFrameMetadata()); |
| 1230 } | 1234 } |
| 1231 void SwapBuffersComplete() { | 1235 void SwapBuffersComplete() { |
| 1232 output_surface_->OnSwapBuffersComplete(); | 1236 output_surface_->OnSwapBuffersComplete(); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1275 // so only draw 2 quads. | 1279 // so only draw 2 quads. |
| 1276 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(2); | 1280 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(2); |
| 1277 EXPECT_CALL(scheduler_, | 1281 EXPECT_CALL(scheduler_, |
| 1278 Schedule(0, gfx::OVERLAY_TRANSFORM_NONE, _, | 1282 Schedule(0, gfx::OVERLAY_TRANSFORM_NONE, _, |
| 1279 gfx::Rect(kDisplaySize), gfx::RectF(0, 0, 1, 1))) | 1283 gfx::Rect(kDisplaySize), gfx::RectF(0, 0, 1, 1))) |
| 1280 .Times(1); | 1284 .Times(1); |
| 1281 EXPECT_CALL(scheduler_, Schedule(1, gfx::OVERLAY_TRANSFORM_NONE, _, | 1285 EXPECT_CALL(scheduler_, Schedule(1, gfx::OVERLAY_TRANSFORM_NONE, _, |
| 1282 kOverlayBottomRightRect, | 1286 kOverlayBottomRightRect, |
| 1283 BoundingRect(kUVTopLeft, kUVBottomRight))) | 1287 BoundingRect(kUVTopLeft, kUVBottomRight))) |
| 1284 .Times(1); | 1288 .Times(1); |
| 1285 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); | 1289 DrawFrame(&pass_list, viewport_rect); |
| 1286 EXPECT_EQ(1U, output_surface_->bind_framebuffer_count()); | 1290 EXPECT_EQ(1U, output_surface_->bind_framebuffer_count()); |
| 1287 | 1291 |
| 1288 SwapBuffers(); | 1292 SwapBuffers(); |
| 1289 | 1293 |
| 1290 Mock::VerifyAndClearExpectations(renderer_.get()); | 1294 Mock::VerifyAndClearExpectations(renderer_.get()); |
| 1291 Mock::VerifyAndClearExpectations(&scheduler_); | 1295 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1292 } | 1296 } |
| 1293 | 1297 |
| 1294 TEST_F(GLRendererWithOverlaysTest, OccludedQuadInUnderlay) { | 1298 TEST_F(GLRendererWithOverlaysTest, OccludedQuadInUnderlay) { |
| 1295 bool use_validator = true; | 1299 bool use_validator = true; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1315 // Expect to be replaced with transparent hole quad and placed in underlay. | 1319 // Expect to be replaced with transparent hole quad and placed in underlay. |
| 1316 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(3); | 1320 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(3); |
| 1317 EXPECT_CALL(scheduler_, | 1321 EXPECT_CALL(scheduler_, |
| 1318 Schedule(0, gfx::OVERLAY_TRANSFORM_NONE, _, | 1322 Schedule(0, gfx::OVERLAY_TRANSFORM_NONE, _, |
| 1319 gfx::Rect(kDisplaySize), gfx::RectF(0, 0, 1, 1))) | 1323 gfx::Rect(kDisplaySize), gfx::RectF(0, 0, 1, 1))) |
| 1320 .Times(1); | 1324 .Times(1); |
| 1321 EXPECT_CALL(scheduler_, | 1325 EXPECT_CALL(scheduler_, |
| 1322 Schedule(-1, gfx::OVERLAY_TRANSFORM_NONE, _, kOverlayRect, | 1326 Schedule(-1, gfx::OVERLAY_TRANSFORM_NONE, _, kOverlayRect, |
| 1323 BoundingRect(kUVTopLeft, kUVBottomRight))) | 1327 BoundingRect(kUVTopLeft, kUVBottomRight))) |
| 1324 .Times(1); | 1328 .Times(1); |
| 1325 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); | 1329 DrawFrame(&pass_list, viewport_rect); |
| 1326 EXPECT_EQ(1U, output_surface_->bind_framebuffer_count()); | 1330 EXPECT_EQ(1U, output_surface_->bind_framebuffer_count()); |
| 1327 | 1331 |
| 1328 SwapBuffers(); | 1332 SwapBuffers(); |
| 1329 | 1333 |
| 1330 Mock::VerifyAndClearExpectations(renderer_.get()); | 1334 Mock::VerifyAndClearExpectations(renderer_.get()); |
| 1331 Mock::VerifyAndClearExpectations(&scheduler_); | 1335 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1332 } | 1336 } |
| 1333 | 1337 |
| 1334 TEST_F(GLRendererWithOverlaysTest, NoValidatorNoOverlay) { | 1338 TEST_F(GLRendererWithOverlaysTest, NoValidatorNoOverlay) { |
| 1335 bool use_validator = false; | 1339 bool use_validator = false; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1348 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1352 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1349 pass->shared_quad_state_list.back(), pass.get()); | 1353 pass->shared_quad_state_list.back(), pass.get()); |
| 1350 | 1354 |
| 1351 RenderPassList pass_list; | 1355 RenderPassList pass_list; |
| 1352 pass_list.push_back(std::move(pass)); | 1356 pass_list.push_back(std::move(pass)); |
| 1353 | 1357 |
| 1354 // Should not see the primary surface's overlay. | 1358 // Should not see the primary surface's overlay. |
| 1355 output_surface_->set_is_displayed_as_overlay_plane(false); | 1359 output_surface_->set_is_displayed_as_overlay_plane(false); |
| 1356 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(3); | 1360 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(3); |
| 1357 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); | 1361 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); |
| 1358 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); | 1362 DrawFrame(&pass_list, viewport_rect); |
| 1359 EXPECT_EQ(1U, output_surface_->bind_framebuffer_count()); | 1363 EXPECT_EQ(1U, output_surface_->bind_framebuffer_count()); |
| 1360 SwapBuffers(); | 1364 SwapBuffers(); |
| 1361 Mock::VerifyAndClearExpectations(renderer_.get()); | 1365 Mock::VerifyAndClearExpectations(renderer_.get()); |
| 1362 Mock::VerifyAndClearExpectations(&scheduler_); | 1366 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1363 } | 1367 } |
| 1364 | 1368 |
| 1365 // GLRenderer skips drawing occluded quads when partial swap is enabled. | 1369 // GLRenderer skips drawing occluded quads when partial swap is enabled. |
| 1366 TEST_F(GLRendererWithOverlaysTest, OccludedQuadNotDrawnWhenPartialSwapEnabled) { | 1370 TEST_F(GLRendererWithOverlaysTest, OccludedQuadNotDrawnWhenPartialSwapEnabled) { |
| 1367 provider_->TestContext3d()->set_have_post_sub_buffer(true); | 1371 provider_->TestContext3d()->set_have_post_sub_buffer(true); |
| 1368 settings_.partial_swap_enabled = true; | 1372 settings_.partial_swap_enabled = true; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1380 pass->shared_quad_state_list.back(), pass.get()); | 1384 pass->shared_quad_state_list.back(), pass.get()); |
| 1381 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1385 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1382 pass->shared_quad_state_list.back(), pass.get()); | 1386 pass->shared_quad_state_list.back(), pass.get()); |
| 1383 | 1387 |
| 1384 RenderPassList pass_list; | 1388 RenderPassList pass_list; |
| 1385 pass_list.push_back(std::move(pass)); | 1389 pass_list.push_back(std::move(pass)); |
| 1386 | 1390 |
| 1387 output_surface_->set_is_displayed_as_overlay_plane(true); | 1391 output_surface_->set_is_displayed_as_overlay_plane(true); |
| 1388 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(0); | 1392 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(0); |
| 1389 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); | 1393 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); |
| 1390 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); | 1394 DrawFrame(&pass_list, viewport_rect); |
| 1391 EXPECT_EQ(1U, output_surface_->bind_framebuffer_count()); | 1395 EXPECT_EQ(1U, output_surface_->bind_framebuffer_count()); |
| 1392 SwapBuffers(); | 1396 SwapBuffers(); |
| 1393 Mock::VerifyAndClearExpectations(renderer_.get()); | 1397 Mock::VerifyAndClearExpectations(renderer_.get()); |
| 1394 Mock::VerifyAndClearExpectations(&scheduler_); | 1398 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1395 } | 1399 } |
| 1396 | 1400 |
| 1397 // GLRenderer skips drawing occluded quads when empty swap is enabled. | 1401 // GLRenderer skips drawing occluded quads when empty swap is enabled. |
| 1398 TEST_F(GLRendererWithOverlaysTest, OccludedQuadNotDrawnWhenEmptySwapAllowed) { | 1402 TEST_F(GLRendererWithOverlaysTest, OccludedQuadNotDrawnWhenEmptySwapAllowed) { |
| 1399 provider_->TestContext3d()->set_have_commit_overlay_planes(true); | 1403 provider_->TestContext3d()->set_have_commit_overlay_planes(true); |
| 1400 bool use_validator = true; | 1404 bool use_validator = true; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1412 pass->shared_quad_state_list.back(), pass.get()); | 1416 pass->shared_quad_state_list.back(), pass.get()); |
| 1413 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1417 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
| 1414 pass->shared_quad_state_list.back(), pass.get()); | 1418 pass->shared_quad_state_list.back(), pass.get()); |
| 1415 | 1419 |
| 1416 RenderPassList pass_list; | 1420 RenderPassList pass_list; |
| 1417 pass_list.push_back(std::move(pass)); | 1421 pass_list.push_back(std::move(pass)); |
| 1418 | 1422 |
| 1419 output_surface_->set_is_displayed_as_overlay_plane(true); | 1423 output_surface_->set_is_displayed_as_overlay_plane(true); |
| 1420 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(0); | 1424 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(0); |
| 1421 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); | 1425 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); |
| 1422 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); | 1426 DrawFrame(&pass_list, viewport_rect); |
| 1423 EXPECT_EQ(1U, output_surface_->bind_framebuffer_count()); | 1427 EXPECT_EQ(1U, output_surface_->bind_framebuffer_count()); |
| 1424 SwapBuffers(); | 1428 SwapBuffers(); |
| 1425 Mock::VerifyAndClearExpectations(renderer_.get()); | 1429 Mock::VerifyAndClearExpectations(renderer_.get()); |
| 1426 Mock::VerifyAndClearExpectations(&scheduler_); | 1430 Mock::VerifyAndClearExpectations(&scheduler_); |
| 1427 } | 1431 } |
| 1428 | 1432 |
| 1429 TEST_F(GLRendererWithOverlaysTest, ResourcesExportedAndReturnedWithDelay) { | 1433 TEST_F(GLRendererWithOverlaysTest, ResourcesExportedAndReturnedWithDelay) { |
| 1430 bool use_validator = true; | 1434 bool use_validator = true; |
| 1431 Init(use_validator); | 1435 Init(use_validator); |
| 1432 renderer_->set_expect_overlays(true); | 1436 renderer_->set_expect_overlays(true); |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1645 | 1649 |
| 1646 ReturnResourceInUseQuery(resource2); | 1650 ReturnResourceInUseQuery(resource2); |
| 1647 ReturnResourceInUseQuery(resource3); | 1651 ReturnResourceInUseQuery(resource3); |
| 1648 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 1652 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
| 1649 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); | 1653 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); |
| 1650 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource3)); | 1654 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource3)); |
| 1651 } | 1655 } |
| 1652 | 1656 |
| 1653 } // namespace | 1657 } // namespace |
| 1654 } // namespace cc | 1658 } // namespace cc |
| OLD | NEW |