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::ColorSpace(), 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 |