| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/output/gl_renderer.h" | 5 #include "cc/output/gl_renderer.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 | 8 |
| 9 #include "base/location.h" | 9 #include "base/location.h" |
| 10 #include "base/single_thread_task_runner.h" | 10 #include "base/single_thread_task_runner.h" |
| (...skipping 831 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 842 .Times(1); | 842 .Times(1); |
| 843 EXPECT_CALL(*context, clear(_)).Times(AnyNumber()); | 843 EXPECT_CALL(*context, clear(_)).Times(AnyNumber()); |
| 844 renderer.DrawFrame(&render_passes_in_draw_order_, | 844 renderer.DrawFrame(&render_passes_in_draw_order_, |
| 845 1.f, | 845 1.f, |
| 846 viewport_rect, | 846 viewport_rect, |
| 847 viewport_rect, | 847 viewport_rect, |
| 848 false); | 848 false); |
| 849 Mock::VerifyAndClearExpectations(context); | 849 Mock::VerifyAndClearExpectations(context); |
| 850 } | 850 } |
| 851 | 851 |
| 852 class VisibilityChangeIsLastCallTrackingContext | |
| 853 : public TestWebGraphicsContext3D { | |
| 854 public: | |
| 855 VisibilityChangeIsLastCallTrackingContext() | |
| 856 : last_call_was_set_visibility_(false) {} | |
| 857 | |
| 858 // TestWebGraphicsContext3D methods. | |
| 859 void flush() override { last_call_was_set_visibility_ = false; } | |
| 860 void deleteTexture(GLuint) override { last_call_was_set_visibility_ = false; } | |
| 861 void deleteFramebuffer(GLuint) override { | |
| 862 last_call_was_set_visibility_ = false; | |
| 863 } | |
| 864 void deleteQueryEXT(GLuint) override { | |
| 865 last_call_was_set_visibility_ = false; | |
| 866 } | |
| 867 void deleteRenderbuffer(GLuint) override { | |
| 868 last_call_was_set_visibility_ = false; | |
| 869 } | |
| 870 | |
| 871 // Methods added for test. | |
| 872 void set_last_call_was_visibility(bool visible) { | |
| 873 DCHECK(last_call_was_set_visibility_ == false); | |
| 874 last_call_was_set_visibility_ = true; | |
| 875 } | |
| 876 bool last_call_was_set_visibility() const { | |
| 877 return last_call_was_set_visibility_; | |
| 878 } | |
| 879 | |
| 880 private: | |
| 881 bool last_call_was_set_visibility_; | |
| 882 }; | |
| 883 | |
| 884 TEST_F(GLRendererTest, VisibilityChangeIsLastCall) { | |
| 885 scoped_ptr<VisibilityChangeIsLastCallTrackingContext> context_owned( | |
| 886 new VisibilityChangeIsLastCallTrackingContext); | |
| 887 VisibilityChangeIsLastCallTrackingContext* context = context_owned.get(); | |
| 888 | |
| 889 scoped_refptr<TestContextProvider> provider = | |
| 890 TestContextProvider::Create(std::move(context_owned)); | |
| 891 | |
| 892 provider->support()->SetSurfaceVisibleCallback(base::Bind( | |
| 893 &VisibilityChangeIsLastCallTrackingContext::set_last_call_was_visibility, | |
| 894 base::Unretained(context))); | |
| 895 | |
| 896 FakeOutputSurfaceClient output_surface_client; | |
| 897 scoped_ptr<OutputSurface> output_surface( | |
| 898 FakeOutputSurface::Create3d(provider)); | |
| 899 CHECK(output_surface->BindToClient(&output_surface_client)); | |
| 900 | |
| 901 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( | |
| 902 new TestSharedBitmapManager()); | |
| 903 scoped_ptr<ResourceProvider> resource_provider = FakeResourceProvider::Create( | |
| 904 output_surface.get(), shared_bitmap_manager.get()); | |
| 905 | |
| 906 RendererSettings settings; | |
| 907 FakeRendererClient renderer_client; | |
| 908 FakeRendererGL renderer(&renderer_client, | |
| 909 &settings, | |
| 910 output_surface.get(), | |
| 911 resource_provider.get()); | |
| 912 | |
| 913 gfx::Rect viewport_rect(1, 1); | |
| 914 AddRenderPass(&render_passes_in_draw_order_, | |
| 915 RenderPassId(1, 0), | |
| 916 viewport_rect, | |
| 917 gfx::Transform()); | |
| 918 | |
| 919 // Ensure that the call to SetSurfaceVisible is the last call issue to the | |
| 920 // GPU process, after glFlush is called, and after the RendererClient's | |
| 921 // SetManagedMemoryPolicy is called. Plumb this tracking between both the | |
| 922 // RenderClient and the Context by giving them both a pointer to a variable on | |
| 923 // the stack. | |
| 924 renderer.SetVisible(true); | |
| 925 renderer.DrawFrame(&render_passes_in_draw_order_, | |
| 926 1.f, | |
| 927 viewport_rect, | |
| 928 viewport_rect, | |
| 929 false); | |
| 930 renderer.SetVisible(false); | |
| 931 EXPECT_TRUE(context->last_call_was_set_visibility()); | |
| 932 } | |
| 933 | |
| 934 class TextureStateTrackingContext : public TestWebGraphicsContext3D { | 852 class TextureStateTrackingContext : public TestWebGraphicsContext3D { |
| 935 public: | 853 public: |
| 936 TextureStateTrackingContext() : active_texture_(GL_INVALID_ENUM) { | 854 TextureStateTrackingContext() : active_texture_(GL_INVALID_ENUM) { |
| 937 test_capabilities_.gpu.egl_image_external = true; | 855 test_capabilities_.gpu.egl_image_external = true; |
| 938 } | 856 } |
| 939 | 857 |
| 940 MOCK_METHOD1(waitSyncToken, void(const GLbyte* sync_token)); | 858 MOCK_METHOD1(waitSyncToken, void(const GLbyte* sync_token)); |
| 941 MOCK_METHOD3(texParameteri, void(GLenum target, GLenum pname, GLint param)); | 859 MOCK_METHOD3(texParameteri, void(GLenum target, GLenum pname, GLint param)); |
| 942 MOCK_METHOD4(drawElements, | 860 MOCK_METHOD4(drawElements, |
| 943 void(GLenum mode, GLsizei count, GLenum type, GLintptr offset)); | 861 void(GLenum mode, GLsizei count, GLenum type, GLintptr offset)); |
| (...skipping 1340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2284 EXPECT_CALL(overlay_scheduler, | 2202 EXPECT_CALL(overlay_scheduler, |
| 2285 Schedule(1, gfx::OVERLAY_TRANSFORM_NONE, _, viewport_rect, | 2203 Schedule(1, gfx::OVERLAY_TRANSFORM_NONE, _, viewport_rect, |
| 2286 BoundingRect(uv_top_left, uv_bottom_right))).Times(1); | 2204 BoundingRect(uv_top_left, uv_bottom_right))).Times(1); |
| 2287 | 2205 |
| 2288 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, viewport_rect, | 2206 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, viewport_rect, |
| 2289 viewport_rect, false); | 2207 viewport_rect, false); |
| 2290 } | 2208 } |
| 2291 | 2209 |
| 2292 } // namespace | 2210 } // namespace |
| 2293 } // namespace cc | 2211 } // namespace cc |
| OLD | NEW |