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 "cc/base/region.h" | 5 #include "cc/base/region.h" |
6 #include "cc/output/compositor_frame_metadata.h" | 6 #include "cc/output/compositor_frame_metadata.h" |
7 #include "cc/output/gl_renderer.h" | 7 #include "cc/output/gl_renderer.h" |
8 #include "cc/output/output_surface.h" | 8 #include "cc/output/output_surface.h" |
9 #include "cc/output/output_surface_client.h" | 9 #include "cc/output/output_surface_client.h" |
10 #include "cc/output/overlay_candidate_validator.h" | 10 #include "cc/output/overlay_candidate_validator.h" |
(...skipping 1661 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1672 }; | 1672 }; |
1673 | 1673 |
1674 class FakeRendererClient : public RendererClient { | 1674 class FakeRendererClient : public RendererClient { |
1675 public: | 1675 public: |
1676 // RendererClient methods. | 1676 // RendererClient methods. |
1677 void SetFullRootLayerDamage() override {} | 1677 void SetFullRootLayerDamage() override {} |
1678 }; | 1678 }; |
1679 | 1679 |
1680 class MockOverlayScheduler { | 1680 class MockOverlayScheduler { |
1681 public: | 1681 public: |
1682 MOCK_METHOD5(Schedule, | 1682 MOCK_METHOD7(Schedule, |
1683 void(int plane_z_order, | 1683 void(int plane_z_order, |
1684 gfx::OverlayTransform plane_transform, | 1684 gfx::OverlayTransform plane_transform, |
| 1685 gfx::BufferFormat storage_format, |
1685 unsigned overlay_texture_id, | 1686 unsigned overlay_texture_id, |
1686 const gfx::Rect& display_bounds, | 1687 const gfx::Rect& display_bounds, |
1687 const gfx::RectF& uv_rect)); | 1688 const gfx::RectF& uv_rect, |
| 1689 bool handle_Scaling)); |
1688 }; | 1690 }; |
1689 | 1691 |
1690 class GLRendererWithOverlaysTest : public testing::Test { | 1692 class GLRendererWithOverlaysTest : public testing::Test { |
1691 protected: | 1693 protected: |
1692 GLRendererWithOverlaysTest() { | 1694 GLRendererWithOverlaysTest() { |
1693 provider_ = TestContextProvider::Create(); | 1695 provider_ = TestContextProvider::Create(); |
1694 output_surface_.reset(new OverlayOutputSurface(provider_)); | 1696 output_surface_.reset(new OverlayOutputSurface(provider_)); |
1695 CHECK(output_surface_->BindToClient(&output_surface_client_)); | 1697 CHECK(output_surface_->BindToClient(&output_surface_client_)); |
1696 resource_provider_ = | 1698 resource_provider_ = |
1697 FakeResourceProvider::Create(output_surface_.get(), nullptr); | 1699 FakeResourceProvider::Create(output_surface_.get(), nullptr); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1738 pass->shared_quad_state_list.back(), pass.get()); | 1740 pass->shared_quad_state_list.back(), pass.get()); |
1739 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1741 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
1740 pass->shared_quad_state_list.back(), pass.get()); | 1742 pass->shared_quad_state_list.back(), pass.get()); |
1741 | 1743 |
1742 RenderPassList pass_list; | 1744 RenderPassList pass_list; |
1743 pass_list.push_back(std::move(pass)); | 1745 pass_list.push_back(std::move(pass)); |
1744 | 1746 |
1745 // Candidate pass was taken out and extra skipped pass added, | 1747 // Candidate pass was taken out and extra skipped pass added, |
1746 // so only draw 2 quads. | 1748 // so only draw 2 quads. |
1747 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(2); | 1749 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(2); |
| 1750 EXPECT_CALL( |
| 1751 scheduler_, |
| 1752 Schedule(0, gfx::OVERLAY_TRANSFORM_NONE, gfx::BufferFormat::BGRX_8888, _, |
| 1753 gfx::Rect(kDisplaySize), gfx::RectF(0, 0, 1, 1), true)) |
| 1754 .Times(1); |
1748 EXPECT_CALL(scheduler_, | 1755 EXPECT_CALL(scheduler_, |
1749 Schedule(0, gfx::OVERLAY_TRANSFORM_NONE, _, | 1756 Schedule(1, gfx::OVERLAY_TRANSFORM_NONE, |
1750 gfx::Rect(kDisplaySize), gfx::RectF(0, 0, 1, 1))) | 1757 gfx::BufferFormat::BGRX_8888, _, kOverlayBottomRightRect, |
1751 .Times(1); | 1758 BoundingRect(kUVTopLeft, kUVBottomRight), true)) |
1752 EXPECT_CALL(scheduler_, Schedule(1, gfx::OVERLAY_TRANSFORM_NONE, _, | |
1753 kOverlayBottomRightRect, | |
1754 BoundingRect(kUVTopLeft, kUVBottomRight))) | |
1755 .Times(1); | 1759 .Times(1); |
1756 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); | 1760 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); |
1757 | 1761 |
1758 SwapBuffers(); | 1762 SwapBuffers(); |
1759 | 1763 |
1760 Mock::VerifyAndClearExpectations(renderer_.get()); | 1764 Mock::VerifyAndClearExpectations(renderer_.get()); |
1761 Mock::VerifyAndClearExpectations(&scheduler_); | 1765 Mock::VerifyAndClearExpectations(&scheduler_); |
1762 } | 1766 } |
1763 | 1767 |
1764 TEST_F(GLRendererWithOverlaysTest, OccludedQuadInUnderlay) { | 1768 TEST_F(GLRendererWithOverlaysTest, OccludedQuadInUnderlay) { |
(...skipping 12 matching lines...) Expand all Loading... |
1777 CreateFullscreenCandidateQuad(resource_provider_.get(), | 1781 CreateFullscreenCandidateQuad(resource_provider_.get(), |
1778 pass->shared_quad_state_list.back(), | 1782 pass->shared_quad_state_list.back(), |
1779 pass.get()); | 1783 pass.get()); |
1780 | 1784 |
1781 RenderPassList pass_list; | 1785 RenderPassList pass_list; |
1782 pass_list.push_back(std::move(pass)); | 1786 pass_list.push_back(std::move(pass)); |
1783 | 1787 |
1784 // Candidate quad should fail to be overlaid on top because of occlusion. | 1788 // Candidate quad should fail to be overlaid on top because of occlusion. |
1785 // Expect to be replaced with transparent hole quad and placed in underlay. | 1789 // Expect to be replaced with transparent hole quad and placed in underlay. |
1786 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(3); | 1790 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(3); |
1787 EXPECT_CALL(scheduler_, | 1791 EXPECT_CALL( |
1788 Schedule(0, gfx::OVERLAY_TRANSFORM_NONE, _, | 1792 scheduler_, |
1789 gfx::Rect(kDisplaySize), gfx::RectF(0, 0, 1, 1))) | 1793 Schedule(0, gfx::OVERLAY_TRANSFORM_NONE, gfx::BufferFormat::BGRX_8888, _, |
| 1794 gfx::Rect(kDisplaySize), gfx::RectF(0, 0, 1, 1), true)) |
1790 .Times(1); | 1795 .Times(1); |
1791 EXPECT_CALL(scheduler_, | 1796 EXPECT_CALL( |
1792 Schedule(-1, gfx::OVERLAY_TRANSFORM_NONE, _, kOverlayRect, | 1797 scheduler_, |
1793 BoundingRect(kUVTopLeft, kUVBottomRight))) | 1798 Schedule(-1, gfx::OVERLAY_TRANSFORM_NONE, gfx::BufferFormat::BGRX_8888, _, |
| 1799 kOverlayRect, BoundingRect(kUVTopLeft, kUVBottomRight), true)) |
1794 .Times(1); | 1800 .Times(1); |
1795 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); | 1801 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); |
1796 | 1802 |
1797 SwapBuffers(); | 1803 SwapBuffers(); |
1798 | 1804 |
1799 Mock::VerifyAndClearExpectations(renderer_.get()); | 1805 Mock::VerifyAndClearExpectations(renderer_.get()); |
1800 Mock::VerifyAndClearExpectations(&scheduler_); | 1806 Mock::VerifyAndClearExpectations(&scheduler_); |
1801 } | 1807 } |
1802 | 1808 |
1803 TEST_F(GLRendererWithOverlaysTest, NoValidatorNoOverlay) { | 1809 TEST_F(GLRendererWithOverlaysTest, NoValidatorNoOverlay) { |
(...skipping 12 matching lines...) Expand all Loading... |
1816 pass->shared_quad_state_list.back(), pass.get()); | 1822 pass->shared_quad_state_list.back(), pass.get()); |
1817 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1823 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
1818 pass->shared_quad_state_list.back(), pass.get()); | 1824 pass->shared_quad_state_list.back(), pass.get()); |
1819 | 1825 |
1820 RenderPassList pass_list; | 1826 RenderPassList pass_list; |
1821 pass_list.push_back(std::move(pass)); | 1827 pass_list.push_back(std::move(pass)); |
1822 | 1828 |
1823 // Should not see the primary surface's overlay. | 1829 // Should not see the primary surface's overlay. |
1824 output_surface_->set_is_displayed_as_overlay_plane(false); | 1830 output_surface_->set_is_displayed_as_overlay_plane(false); |
1825 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(3); | 1831 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(3); |
1826 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); | 1832 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _, _, _)).Times(0); |
1827 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); | 1833 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); |
1828 SwapBuffers(); | 1834 SwapBuffers(); |
1829 Mock::VerifyAndClearExpectations(renderer_.get()); | 1835 Mock::VerifyAndClearExpectations(renderer_.get()); |
1830 Mock::VerifyAndClearExpectations(&scheduler_); | 1836 Mock::VerifyAndClearExpectations(&scheduler_); |
1831 } | 1837 } |
1832 | 1838 |
1833 // GLRenderer skips drawing occluded quads when partial swap is enabled. | 1839 // GLRenderer skips drawing occluded quads when partial swap is enabled. |
1834 TEST_F(GLRendererWithOverlaysTest, OccludedQuadNotDrawnWhenPartialSwapEnabled) { | 1840 TEST_F(GLRendererWithOverlaysTest, OccludedQuadNotDrawnWhenPartialSwapEnabled) { |
1835 provider_->TestContext3d()->set_have_post_sub_buffer(true); | 1841 provider_->TestContext3d()->set_have_post_sub_buffer(true); |
1836 settings_.partial_swap_enabled = true; | 1842 settings_.partial_swap_enabled = true; |
(...skipping 10 matching lines...) Expand all Loading... |
1847 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1853 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
1848 pass->shared_quad_state_list.back(), pass.get()); | 1854 pass->shared_quad_state_list.back(), pass.get()); |
1849 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1855 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
1850 pass->shared_quad_state_list.back(), pass.get()); | 1856 pass->shared_quad_state_list.back(), pass.get()); |
1851 | 1857 |
1852 RenderPassList pass_list; | 1858 RenderPassList pass_list; |
1853 pass_list.push_back(std::move(pass)); | 1859 pass_list.push_back(std::move(pass)); |
1854 | 1860 |
1855 output_surface_->set_is_displayed_as_overlay_plane(true); | 1861 output_surface_->set_is_displayed_as_overlay_plane(true); |
1856 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(0); | 1862 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(0); |
1857 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); | 1863 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _, _, _)).Times(2); |
1858 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); | 1864 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); |
1859 SwapBuffers(); | 1865 SwapBuffers(); |
1860 Mock::VerifyAndClearExpectations(renderer_.get()); | 1866 Mock::VerifyAndClearExpectations(renderer_.get()); |
1861 Mock::VerifyAndClearExpectations(&scheduler_); | 1867 Mock::VerifyAndClearExpectations(&scheduler_); |
1862 } | 1868 } |
1863 | 1869 |
1864 // GLRenderer skips drawing occluded quads when empty swap is enabled. | 1870 // GLRenderer skips drawing occluded quads when empty swap is enabled. |
1865 TEST_F(GLRendererWithOverlaysTest, OccludedQuadNotDrawnWhenEmptySwapAllowed) { | 1871 TEST_F(GLRendererWithOverlaysTest, OccludedQuadNotDrawnWhenEmptySwapAllowed) { |
1866 provider_->TestContext3d()->set_have_commit_overlay_planes(true); | 1872 provider_->TestContext3d()->set_have_commit_overlay_planes(true); |
1867 bool use_validator = true; | 1873 bool use_validator = true; |
(...skipping 10 matching lines...) Expand all Loading... |
1878 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1884 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
1879 pass->shared_quad_state_list.back(), pass.get()); | 1885 pass->shared_quad_state_list.back(), pass.get()); |
1880 CreateFullscreenOpaqueQuad(resource_provider_.get(), | 1886 CreateFullscreenOpaqueQuad(resource_provider_.get(), |
1881 pass->shared_quad_state_list.back(), pass.get()); | 1887 pass->shared_quad_state_list.back(), pass.get()); |
1882 | 1888 |
1883 RenderPassList pass_list; | 1889 RenderPassList pass_list; |
1884 pass_list.push_back(std::move(pass)); | 1890 pass_list.push_back(std::move(pass)); |
1885 | 1891 |
1886 output_surface_->set_is_displayed_as_overlay_plane(true); | 1892 output_surface_->set_is_displayed_as_overlay_plane(true); |
1887 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(0); | 1893 EXPECT_CALL(*renderer_, DoDrawQuad(_, _, _)).Times(0); |
1888 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); | 1894 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _, _, _)).Times(2); |
1889 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); | 1895 renderer_->DrawFrame(&pass_list, 1.f, viewport_rect, viewport_rect, false); |
1890 SwapBuffers(); | 1896 SwapBuffers(); |
1891 Mock::VerifyAndClearExpectations(renderer_.get()); | 1897 Mock::VerifyAndClearExpectations(renderer_.get()); |
1892 Mock::VerifyAndClearExpectations(&scheduler_); | 1898 Mock::VerifyAndClearExpectations(&scheduler_); |
1893 } | 1899 } |
1894 | 1900 |
1895 TEST_F(GLRendererWithOverlaysTest, ResourcesExportedAndReturnedWithDelay) { | 1901 TEST_F(GLRendererWithOverlaysTest, ResourcesExportedAndReturnedWithDelay) { |
1896 bool use_validator = true; | 1902 bool use_validator = true; |
1897 Init(use_validator); | 1903 Init(use_validator); |
1898 renderer_->set_expect_overlays(true); | 1904 renderer_->set_expect_overlays(true); |
(...skipping 26 matching lines...) Expand all Loading... |
1925 overlay2.plane_z_order = 1; | 1931 overlay2.plane_z_order = 1; |
1926 | 1932 |
1927 DirectRenderer::DrawingFrame frame3; | 1933 DirectRenderer::DrawingFrame frame3; |
1928 frame3.render_passes_in_draw_order = &pass_list; | 1934 frame3.render_passes_in_draw_order = &pass_list; |
1929 frame3.overlay_list.resize(2); | 1935 frame3.overlay_list.resize(2); |
1930 frame3.overlay_list.front().use_output_surface_for_resource = true; | 1936 frame3.overlay_list.front().use_output_surface_for_resource = true; |
1931 OverlayCandidate& overlay3 = frame3.overlay_list.back(); | 1937 OverlayCandidate& overlay3 = frame3.overlay_list.back(); |
1932 overlay3.resource_id = resource3; | 1938 overlay3.resource_id = resource3; |
1933 overlay3.plane_z_order = 1; | 1939 overlay3.plane_z_order = 1; |
1934 | 1940 |
1935 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); | 1941 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _, _, _)).Times(2); |
1936 renderer_->BeginDrawingFrame(&frame1); | 1942 renderer_->BeginDrawingFrame(&frame1); |
1937 renderer_->FinishDrawingFrame(&frame1); | 1943 renderer_->FinishDrawingFrame(&frame1); |
1938 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1944 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
1939 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); | 1945 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); |
1940 SwapBuffers(); | 1946 SwapBuffers(); |
1941 Mock::VerifyAndClearExpectations(&scheduler_); | 1947 Mock::VerifyAndClearExpectations(&scheduler_); |
1942 | 1948 |
1943 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); | 1949 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _, _, _)).Times(2); |
1944 renderer_->BeginDrawingFrame(&frame2); | 1950 renderer_->BeginDrawingFrame(&frame2); |
1945 renderer_->FinishDrawingFrame(&frame2); | 1951 renderer_->FinishDrawingFrame(&frame2); |
1946 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1952 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
1947 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); | 1953 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); |
1948 SwapBuffers(); | 1954 SwapBuffers(); |
1949 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1955 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
1950 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); | 1956 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); |
1951 Mock::VerifyAndClearExpectations(&scheduler_); | 1957 Mock::VerifyAndClearExpectations(&scheduler_); |
1952 | 1958 |
1953 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); | 1959 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _, _, _)).Times(2); |
1954 renderer_->BeginDrawingFrame(&frame3); | 1960 renderer_->BeginDrawingFrame(&frame3); |
1955 renderer_->FinishDrawingFrame(&frame3); | 1961 renderer_->FinishDrawingFrame(&frame3); |
1956 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1962 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
1957 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); | 1963 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); |
1958 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource3)); | 1964 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource3)); |
1959 SwapBuffers(); | 1965 SwapBuffers(); |
1960 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 1966 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
1961 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); | 1967 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); |
1962 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource3)); | 1968 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource3)); |
1963 Mock::VerifyAndClearExpectations(&scheduler_); | 1969 Mock::VerifyAndClearExpectations(&scheduler_); |
1964 | 1970 |
1965 // No overlays, release the resource. | 1971 // No overlays, release the resource. |
1966 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); | 1972 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _, _, _)).Times(0); |
1967 DirectRenderer::DrawingFrame frame_no_overlays; | 1973 DirectRenderer::DrawingFrame frame_no_overlays; |
1968 frame_no_overlays.render_passes_in_draw_order = &pass_list; | 1974 frame_no_overlays.render_passes_in_draw_order = &pass_list; |
1969 renderer_->set_expect_overlays(false); | 1975 renderer_->set_expect_overlays(false); |
1970 renderer_->BeginDrawingFrame(&frame_no_overlays); | 1976 renderer_->BeginDrawingFrame(&frame_no_overlays); |
1971 renderer_->FinishDrawingFrame(&frame_no_overlays); | 1977 renderer_->FinishDrawingFrame(&frame_no_overlays); |
1972 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 1978 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
1973 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); | 1979 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); |
1974 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource3)); | 1980 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource3)); |
1975 SwapBuffers(); | 1981 SwapBuffers(); |
1976 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 1982 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
1977 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); | 1983 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); |
1978 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource3)); | 1984 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource3)); |
1979 Mock::VerifyAndClearExpectations(&scheduler_); | 1985 Mock::VerifyAndClearExpectations(&scheduler_); |
1980 | 1986 |
1981 // Use the same buffer twice. | 1987 // Use the same buffer twice. |
1982 renderer_->set_expect_overlays(true); | 1988 renderer_->set_expect_overlays(true); |
1983 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); | 1989 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _, _, _)).Times(2); |
1984 renderer_->BeginDrawingFrame(&frame1); | 1990 renderer_->BeginDrawingFrame(&frame1); |
1985 renderer_->FinishDrawingFrame(&frame1); | 1991 renderer_->FinishDrawingFrame(&frame1); |
1986 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1992 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
1987 SwapBuffers(); | 1993 SwapBuffers(); |
1988 Mock::VerifyAndClearExpectations(&scheduler_); | 1994 Mock::VerifyAndClearExpectations(&scheduler_); |
1989 | 1995 |
1990 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); | 1996 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _, _, _)).Times(2); |
1991 renderer_->BeginDrawingFrame(&frame1); | 1997 renderer_->BeginDrawingFrame(&frame1); |
1992 renderer_->FinishDrawingFrame(&frame1); | 1998 renderer_->FinishDrawingFrame(&frame1); |
1993 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 1999 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
1994 SwapBuffers(); | 2000 SwapBuffers(); |
1995 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 2001 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
1996 Mock::VerifyAndClearExpectations(&scheduler_); | 2002 Mock::VerifyAndClearExpectations(&scheduler_); |
1997 | 2003 |
1998 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); | 2004 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _, _, _)).Times(0); |
1999 renderer_->set_expect_overlays(false); | 2005 renderer_->set_expect_overlays(false); |
2000 renderer_->BeginDrawingFrame(&frame_no_overlays); | 2006 renderer_->BeginDrawingFrame(&frame_no_overlays); |
2001 renderer_->FinishDrawingFrame(&frame_no_overlays); | 2007 renderer_->FinishDrawingFrame(&frame_no_overlays); |
2002 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 2008 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
2003 SwapBuffers(); | 2009 SwapBuffers(); |
2004 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 2010 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
2005 Mock::VerifyAndClearExpectations(&scheduler_); | 2011 Mock::VerifyAndClearExpectations(&scheduler_); |
2006 | 2012 |
2007 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); | 2013 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _, _, _)).Times(0); |
2008 renderer_->set_expect_overlays(false); | 2014 renderer_->set_expect_overlays(false); |
2009 renderer_->BeginDrawingFrame(&frame_no_overlays); | 2015 renderer_->BeginDrawingFrame(&frame_no_overlays); |
2010 renderer_->FinishDrawingFrame(&frame_no_overlays); | 2016 renderer_->FinishDrawingFrame(&frame_no_overlays); |
2011 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 2017 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
2012 SwapBuffers(); | 2018 SwapBuffers(); |
2013 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 2019 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
2014 Mock::VerifyAndClearExpectations(&scheduler_); | 2020 Mock::VerifyAndClearExpectations(&scheduler_); |
2015 } | 2021 } |
2016 | 2022 |
2017 TEST_F(GLRendererWithOverlaysTest, ResourcesExportedAndReturnedWithExtraDelay) { | 2023 TEST_F(GLRendererWithOverlaysTest, ResourcesExportedAndReturnedWithExtraDelay) { |
(...skipping 30 matching lines...) Expand all Loading... |
2048 overlay2.plane_z_order = 1; | 2054 overlay2.plane_z_order = 1; |
2049 | 2055 |
2050 DirectRenderer::DrawingFrame frame3; | 2056 DirectRenderer::DrawingFrame frame3; |
2051 frame3.render_passes_in_draw_order = &pass_list; | 2057 frame3.render_passes_in_draw_order = &pass_list; |
2052 frame3.overlay_list.resize(2); | 2058 frame3.overlay_list.resize(2); |
2053 frame3.overlay_list.front().use_output_surface_for_resource = true; | 2059 frame3.overlay_list.front().use_output_surface_for_resource = true; |
2054 OverlayCandidate& overlay3 = frame3.overlay_list.back(); | 2060 OverlayCandidate& overlay3 = frame3.overlay_list.back(); |
2055 overlay3.resource_id = resource3; | 2061 overlay3.resource_id = resource3; |
2056 overlay3.plane_z_order = 1; | 2062 overlay3.plane_z_order = 1; |
2057 | 2063 |
2058 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); | 2064 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _, _, _)).Times(2); |
2059 renderer_->BeginDrawingFrame(&frame1); | 2065 renderer_->BeginDrawingFrame(&frame1); |
2060 renderer_->FinishDrawingFrame(&frame1); | 2066 renderer_->FinishDrawingFrame(&frame1); |
2061 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 2067 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
2062 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); | 2068 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); |
2063 SwapBuffers(); | 2069 SwapBuffers(); |
2064 Mock::VerifyAndClearExpectations(&scheduler_); | 2070 Mock::VerifyAndClearExpectations(&scheduler_); |
2065 | 2071 |
2066 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); | 2072 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _, _, _)).Times(2); |
2067 renderer_->BeginDrawingFrame(&frame2); | 2073 renderer_->BeginDrawingFrame(&frame2); |
2068 renderer_->FinishDrawingFrame(&frame2); | 2074 renderer_->FinishDrawingFrame(&frame2); |
2069 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 2075 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
2070 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); | 2076 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); |
2071 SwapBuffers(); | 2077 SwapBuffers(); |
2072 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 2078 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
2073 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); | 2079 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); |
2074 Mock::VerifyAndClearExpectations(&scheduler_); | 2080 Mock::VerifyAndClearExpectations(&scheduler_); |
2075 | 2081 |
2076 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); | 2082 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _, _, _)).Times(2); |
2077 renderer_->BeginDrawingFrame(&frame3); | 2083 renderer_->BeginDrawingFrame(&frame3); |
2078 renderer_->FinishDrawingFrame(&frame3); | 2084 renderer_->FinishDrawingFrame(&frame3); |
2079 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 2085 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
2080 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); | 2086 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); |
2081 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource3)); | 2087 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource3)); |
2082 SwapBuffers(); | 2088 SwapBuffers(); |
2083 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 2089 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
2084 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); | 2090 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); |
2085 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource3)); | 2091 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource3)); |
2086 Mock::VerifyAndClearExpectations(&scheduler_); | 2092 Mock::VerifyAndClearExpectations(&scheduler_); |
2087 | 2093 |
2088 // No overlays, release the resource. | 2094 // No overlays, release the resource. |
2089 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); | 2095 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _, _, _)).Times(0); |
2090 DirectRenderer::DrawingFrame frame_no_overlays; | 2096 DirectRenderer::DrawingFrame frame_no_overlays; |
2091 frame_no_overlays.render_passes_in_draw_order = &pass_list; | 2097 frame_no_overlays.render_passes_in_draw_order = &pass_list; |
2092 renderer_->set_expect_overlays(false); | 2098 renderer_->set_expect_overlays(false); |
2093 renderer_->BeginDrawingFrame(&frame_no_overlays); | 2099 renderer_->BeginDrawingFrame(&frame_no_overlays); |
2094 renderer_->FinishDrawingFrame(&frame_no_overlays); | 2100 renderer_->FinishDrawingFrame(&frame_no_overlays); |
2095 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 2101 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
2096 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); | 2102 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); |
2097 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource3)); | 2103 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource3)); |
2098 SwapBuffers(); | 2104 SwapBuffers(); |
2099 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 2105 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
2100 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); | 2106 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); |
2101 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource3)); | 2107 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource3)); |
2102 Mock::VerifyAndClearExpectations(&scheduler_); | 2108 Mock::VerifyAndClearExpectations(&scheduler_); |
2103 | 2109 |
2104 // Use the same buffer twice. | 2110 // Use the same buffer twice. |
2105 renderer_->set_expect_overlays(true); | 2111 renderer_->set_expect_overlays(true); |
2106 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); | 2112 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _, _, _)).Times(2); |
2107 renderer_->BeginDrawingFrame(&frame1); | 2113 renderer_->BeginDrawingFrame(&frame1); |
2108 renderer_->FinishDrawingFrame(&frame1); | 2114 renderer_->FinishDrawingFrame(&frame1); |
2109 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 2115 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
2110 SwapBuffers(); | 2116 SwapBuffers(); |
2111 Mock::VerifyAndClearExpectations(&scheduler_); | 2117 Mock::VerifyAndClearExpectations(&scheduler_); |
2112 | 2118 |
2113 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(2); | 2119 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _, _, _)).Times(2); |
2114 renderer_->BeginDrawingFrame(&frame1); | 2120 renderer_->BeginDrawingFrame(&frame1); |
2115 renderer_->FinishDrawingFrame(&frame1); | 2121 renderer_->FinishDrawingFrame(&frame1); |
2116 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 2122 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
2117 SwapBuffers(); | 2123 SwapBuffers(); |
2118 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 2124 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
2119 Mock::VerifyAndClearExpectations(&scheduler_); | 2125 Mock::VerifyAndClearExpectations(&scheduler_); |
2120 | 2126 |
2121 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); | 2127 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _, _, _)).Times(0); |
2122 renderer_->set_expect_overlays(false); | 2128 renderer_->set_expect_overlays(false); |
2123 renderer_->BeginDrawingFrame(&frame_no_overlays); | 2129 renderer_->BeginDrawingFrame(&frame_no_overlays); |
2124 renderer_->FinishDrawingFrame(&frame_no_overlays); | 2130 renderer_->FinishDrawingFrame(&frame_no_overlays); |
2125 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 2131 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
2126 SwapBuffers(); | 2132 SwapBuffers(); |
2127 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 2133 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
2128 Mock::VerifyAndClearExpectations(&scheduler_); | 2134 Mock::VerifyAndClearExpectations(&scheduler_); |
2129 | 2135 |
2130 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); | 2136 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _, _, _)).Times(0); |
2131 renderer_->set_expect_overlays(false); | 2137 renderer_->set_expect_overlays(false); |
2132 renderer_->BeginDrawingFrame(&frame_no_overlays); | 2138 renderer_->BeginDrawingFrame(&frame_no_overlays); |
2133 renderer_->FinishDrawingFrame(&frame_no_overlays); | 2139 renderer_->FinishDrawingFrame(&frame_no_overlays); |
2134 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 2140 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
2135 SwapBuffers(); | 2141 SwapBuffers(); |
2136 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 2142 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
2137 Mock::VerifyAndClearExpectations(&scheduler_); | 2143 Mock::VerifyAndClearExpectations(&scheduler_); |
2138 | 2144 |
2139 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); | 2145 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _, _, _)).Times(0); |
2140 renderer_->set_expect_overlays(false); | 2146 renderer_->set_expect_overlays(false); |
2141 renderer_->BeginDrawingFrame(&frame_no_overlays); | 2147 renderer_->BeginDrawingFrame(&frame_no_overlays); |
2142 renderer_->FinishDrawingFrame(&frame_no_overlays); | 2148 renderer_->FinishDrawingFrame(&frame_no_overlays); |
2143 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 2149 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
2144 SwapBuffers(); | 2150 SwapBuffers(); |
2145 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 2151 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
2146 Mock::VerifyAndClearExpectations(&scheduler_); | 2152 Mock::VerifyAndClearExpectations(&scheduler_); |
2147 } | 2153 } |
2148 | 2154 |
2149 } // namespace | 2155 } // namespace |
2150 } // namespace cc | 2156 } // namespace cc |
OLD | NEW |