OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "cc/output/delegating_renderer.h" | |
6 #include "cc/output/gl_renderer.h" | |
7 #include "cc/output/output_surface.h" | |
8 #include "cc/test/fake_output_surface_client.h" | |
9 #include "cc/test/fake_renderer_client.h" | |
10 #include "cc/test/fake_resource_provider.h" | |
11 #include "cc/test/test_context_provider.h" | |
12 #include "cc/test/test_gles2_interface.h" | |
13 #include "cc/test/test_web_graphics_context_3d.h" | |
14 #include "testing/gmock/include/gmock/gmock.h" | |
15 #include "testing/gtest/include/gtest/gtest.h" | |
16 | |
17 namespace cc { | |
18 namespace { | |
19 | |
20 class TestOutputSurface : public OutputSurface { | |
21 public: | |
22 explicit TestOutputSurface(scoped_refptr<ContextProvider> context_provider); | |
23 ~TestOutputSurface() override; | |
24 | |
25 // OutputSurface implementation. | |
26 void SwapBuffers(CompositorFrame frame) override; | |
27 uint32_t GetFramebufferCopyTextureFormat() override { return GL_RGB; } | |
28 }; | |
29 | |
30 TestOutputSurface::TestOutputSurface( | |
31 scoped_refptr<ContextProvider> context_provider) | |
32 : OutputSurface(std::move(context_provider), nullptr, nullptr) {} | |
33 | |
34 TestOutputSurface::~TestOutputSurface() { | |
35 } | |
36 | |
37 void TestOutputSurface::SwapBuffers(CompositorFrame frame) { | |
38 client_->DidSwapBuffersComplete(); | |
39 } | |
40 | |
41 class MockContextProvider : public TestContextProvider { | |
42 public: | |
43 explicit MockContextProvider( | |
44 std::unique_ptr<TestWebGraphicsContext3D> context) | |
45 : TestContextProvider(base::MakeUnique<TestContextSupport>(), | |
46 base::MakeUnique<TestGLES2Interface>(), | |
47 std::move(context)) {} | |
48 MOCK_METHOD0(DeleteCachedResources, void()); | |
49 | |
50 protected: | |
51 ~MockContextProvider() {} | |
52 }; | |
53 | |
54 template <class T> | |
55 std::unique_ptr<Renderer> CreateRenderer(RendererClient* client, | |
56 const RendererSettings* settings, | |
57 OutputSurface* output_surface, | |
58 ResourceProvider* resource_provider); | |
59 | |
60 template <> | |
61 std::unique_ptr<Renderer> CreateRenderer<DelegatingRenderer>( | |
62 RendererClient* client, | |
63 const RendererSettings* settings, | |
64 OutputSurface* output_surface, | |
65 ResourceProvider* resource_provider) { | |
66 return DelegatingRenderer::Create( | |
67 client, settings, output_surface, resource_provider); | |
68 } | |
69 | |
70 template <> | |
71 std::unique_ptr<Renderer> CreateRenderer<GLRenderer>( | |
72 RendererClient* client, | |
73 const RendererSettings* settings, | |
74 OutputSurface* output_surface, | |
75 ResourceProvider* resource_provider) { | |
76 return GLRenderer::Create( | |
77 client, settings, output_surface, resource_provider, NULL, 0); | |
78 } | |
79 | |
80 template <typename T> | |
81 class RendererTest : public ::testing::Test { | |
82 protected: | |
83 virtual void SetUp() { | |
84 context_provider_ = | |
85 new MockContextProvider(TestWebGraphicsContext3D::Create()); | |
86 output_surface_.reset(new TestOutputSurface(context_provider_)); | |
87 output_surface_->BindToClient(&output_surface_client_); | |
88 resource_provider_ = | |
89 FakeResourceProvider::Create(output_surface_.get(), nullptr); | |
90 renderer_ = CreateRenderer<T>(&renderer_client_, | |
91 &tree_settings_, | |
92 output_surface_.get(), | |
93 resource_provider_.get()); | |
94 } | |
95 | |
96 FakeRendererClient renderer_client_; | |
97 RendererSettings tree_settings_; | |
98 FakeOutputSurfaceClient output_surface_client_; | |
99 scoped_refptr<MockContextProvider> context_provider_; | |
100 std::unique_ptr<OutputSurface> output_surface_; | |
101 std::unique_ptr<ResourceProvider> resource_provider_; | |
102 std::unique_ptr<Renderer> renderer_; | |
103 }; | |
104 | |
105 typedef ::testing::Types<DelegatingRenderer, GLRenderer> RendererTypes; | |
106 TYPED_TEST_CASE(RendererTest, RendererTypes); | |
107 | |
108 TYPED_TEST(RendererTest, ContextPurgedWhenRendererBecomesInvisible) { | |
109 EXPECT_CALL(*(this->context_provider_.get()), DeleteCachedResources()) | |
110 .Times(1); | |
111 | |
112 EXPECT_TRUE(this->renderer_->visible()); | |
113 this->renderer_->SetVisible(false); | |
114 EXPECT_FALSE(this->renderer_->visible()); | |
115 } | |
116 | |
117 } // namespace | |
118 } // namespace cc | |
OLD | NEW |