| 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 |