Chromium Code Reviews| 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 <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <set> | 9 #include <set> |
| 10 | 10 |
| (...skipping 2061 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2072 }; | 2072 }; |
| 2073 | 2073 |
| 2074 TEST_F(GLRendererPartialSwapTest, PartialSwap) { | 2074 TEST_F(GLRendererPartialSwapTest, PartialSwap) { |
| 2075 RunTest(true); | 2075 RunTest(true); |
| 2076 } | 2076 } |
| 2077 | 2077 |
| 2078 TEST_F(GLRendererPartialSwapTest, NoPartialSwap) { | 2078 TEST_F(GLRendererPartialSwapTest, NoPartialSwap) { |
| 2079 RunTest(false); | 2079 RunTest(false); |
| 2080 } | 2080 } |
| 2081 | 2081 |
| 2082 class GLRendererWithMockContextTest : public ::testing::Test { | 2082 class GLRendererWithMockContextCacheControllerTest : public ::testing::Test { |
| 2083 protected: | 2083 protected: |
| 2084 class MockContextProvider : public TestContextProvider { | 2084 class MockContextCacheController : public ContextCacheController { |
| 2085 public: | 2085 public: |
| 2086 explicit MockContextProvider(std::unique_ptr<TestContextSupport> support) | 2086 explicit MockContextCacheController(gpu::ContextSupport* support) |
| 2087 : TestContextProvider(std::move(support), | 2087 : ContextCacheController(support) {} |
| 2088 base::MakeUnique<TestGLES2Interface>(), | 2088 MOCK_METHOD0(OnClientBecameVisible, void()); |
| 2089 TestWebGraphicsContext3D::Create()) {} | 2089 MOCK_METHOD0(OnClientBecameNotVisible, void()); |
| 2090 | 2090 |
| 2091 MOCK_METHOD0(DeleteCachedResources, void()); | 2091 std::unique_ptr<ScopedVisibility> ClientBecameVisible() { |
| 2092 if (num_visible_clients_ == 0) | |
| 2093 OnClientBecameVisible(); | |
| 2094 ++num_visible_clients_; | |
| 2095 return CreateScopedVisibilityForTesting(); | |
|
danakj
2016/08/29 23:56:20
this could just call ContextCacheController::OnCli
ericrk
2016/08/30 18:18:58
Made un-virtual, so no longer an issue.
| |
| 2096 } | |
| 2097 | |
| 2098 void ClientBecameNotVisible( | |
| 2099 std::unique_ptr<ScopedVisibility> scoped_visibility) { | |
| 2100 --num_visible_clients_; | |
| 2101 if (num_visible_clients_ == 0) | |
| 2102 OnClientBecameNotVisible(); | |
| 2103 ReleaseScopedVisibilityForTesting(std::move(scoped_visibility)); | |
| 2104 } | |
| 2092 | 2105 |
| 2093 private: | 2106 private: |
| 2094 ~MockContextProvider() = default; | 2107 int num_visible_clients_ = 0; |
| 2095 }; | |
| 2096 | |
| 2097 class MockContextSupport : public TestContextSupport { | |
| 2098 public: | |
| 2099 MockContextSupport() {} | |
| 2100 MOCK_METHOD1(SetAggressivelyFreeResources, | |
| 2101 void(bool aggressively_free_resources)); | |
| 2102 MOCK_METHOD2(SetClientVisible, void(int client_id, bool is_visible)); | |
| 2103 MOCK_CONST_METHOD0(AnyClientsVisible, bool()); | |
| 2104 }; | 2108 }; |
| 2105 | 2109 |
| 2106 void SetUp() override { | 2110 void SetUp() override { |
| 2107 auto context_support = base::MakeUnique<MockContextSupport>(); | 2111 auto support = base::MakeUnique<TestContextSupport>(); |
| 2108 context_support_ptr_ = context_support.get(); | 2112 auto context = TestWebGraphicsContext3D::Create(); |
| 2109 context_provider_ = new MockContextProvider(std::move(context_support)); | 2113 auto cache_controller = |
| 2110 output_surface_ = FakeOutputSurface::Create3d(context_provider_); | 2114 base::MakeUnique<::testing::StrictMock<MockContextCacheController>>( |
| 2115 support.get()); | |
| 2116 mock_cache_controller_ = cache_controller.get(); | |
| 2117 auto context_provider = TestContextProvider::Create( | |
| 2118 std::move(context), std::move(support), std::move(cache_controller)); | |
| 2119 output_surface_ = FakeOutputSurface::Create3d(std::move(context_provider)); | |
| 2111 output_surface_->BindToClient(&output_surface_client_); | 2120 output_surface_->BindToClient(&output_surface_client_); |
| 2112 resource_provider_ = | 2121 resource_provider_ = |
| 2113 FakeResourceProvider::Create(output_surface_.get(), nullptr); | 2122 FakeResourceProvider::Create(output_surface_.get(), nullptr); |
| 2114 renderer_ = | 2123 renderer_ = |
| 2115 base::MakeUnique<GLRenderer>(&settings_, output_surface_.get(), | 2124 base::MakeUnique<GLRenderer>(&settings_, output_surface_.get(), |
| 2116 resource_provider_.get(), nullptr, 0); | 2125 resource_provider_.get(), nullptr, 0); |
| 2117 renderer_->Initialize(); | 2126 renderer_->Initialize(); |
| 2118 } | 2127 } |
| 2119 | 2128 |
| 2120 RendererSettings settings_; | 2129 RendererSettings settings_; |
| 2121 FakeOutputSurfaceClient output_surface_client_; | 2130 FakeOutputSurfaceClient output_surface_client_; |
| 2122 MockContextSupport* context_support_ptr_; | 2131 MockContextCacheController* mock_cache_controller_; |
| 2123 scoped_refptr<MockContextProvider> context_provider_; | |
| 2124 std::unique_ptr<OutputSurface> output_surface_; | 2132 std::unique_ptr<OutputSurface> output_surface_; |
| 2125 std::unique_ptr<ResourceProvider> resource_provider_; | 2133 std::unique_ptr<ResourceProvider> resource_provider_; |
| 2126 std::unique_ptr<GLRenderer> renderer_; | 2134 std::unique_ptr<GLRenderer> renderer_; |
| 2127 }; | 2135 }; |
| 2128 | 2136 |
| 2129 TEST_F(GLRendererWithMockContextTest, | 2137 TEST_F(GLRendererWithMockContextCacheControllerTest, |
| 2130 ContextPurgedWhenRendererBecomesInvisible) { | 2138 ContextPurgedWhenRendererBecomesInvisible) { |
| 2131 // Ensure our expectations run in order. | 2139 EXPECT_CALL(*mock_cache_controller_, OnClientBecameVisible()); |
| 2132 ::testing::InSequence s; | 2140 renderer_->SetVisible(true); |
| 2141 Mock::VerifyAndClearExpectations(mock_cache_controller_); | |
| 2133 | 2142 |
| 2134 EXPECT_CALL(*context_support_ptr_, SetClientVisible(0, true)); | 2143 EXPECT_CALL(*mock_cache_controller_, OnClientBecameNotVisible()); |
| 2135 EXPECT_CALL(*context_support_ptr_, AnyClientsVisible()) | |
| 2136 .WillOnce(Return(true)); | |
| 2137 EXPECT_CALL(*context_support_ptr_, SetAggressivelyFreeResources(false)); | |
| 2138 renderer_->SetVisible(true); | |
| 2139 Mock::VerifyAndClearExpectations(context_support_ptr_); | |
| 2140 | |
| 2141 EXPECT_CALL(*context_support_ptr_, SetClientVisible(0, false)); | |
| 2142 EXPECT_CALL(*context_support_ptr_, AnyClientsVisible()) | |
| 2143 .WillOnce(Return(false)); | |
| 2144 EXPECT_CALL(*context_provider_, DeleteCachedResources()); | |
| 2145 EXPECT_CALL(*context_support_ptr_, SetAggressivelyFreeResources(true)); | |
| 2146 renderer_->SetVisible(false); | 2144 renderer_->SetVisible(false); |
| 2147 Mock::VerifyAndClearExpectations(context_support_ptr_); | 2145 Mock::VerifyAndClearExpectations(mock_cache_controller_); |
| 2148 } | 2146 } |
| 2149 | 2147 |
| 2150 } // namespace | 2148 } // namespace |
| 2151 } // namespace cc | 2149 } // namespace cc |
| OLD | NEW |