OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/trees/layer_tree_host.h" | 5 #include "cc/trees/layer_tree_host.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/location.h" | 10 #include "base/location.h" |
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
268 RenderPass* root_pass = frame_data->render_pass_list.back(); | 268 RenderPass* root_pass = frame_data->render_pass_list.back(); |
269 gfx::Size frame_size = root_pass->output_rect.size(); | 269 gfx::Size frame_size = root_pass->output_rect.size(); |
270 | 270 |
271 if (frame_provider_.get() && frame_size == frame_provider_->frame_size()) { | 271 if (frame_provider_.get() && frame_size == frame_provider_->frame_size()) { |
272 frame_provider_->SetFrameData(frame_data.Pass()); | 272 frame_provider_->SetFrameData(frame_data.Pass()); |
273 return; | 273 return; |
274 } | 274 } |
275 | 275 |
276 if (delegated_.get()) { | 276 if (delegated_.get()) { |
277 delegated_->RemoveFromParent(); | 277 delegated_->RemoveFromParent(); |
278 delegated_ = NULL; | 278 delegated_ = nullptr; |
279 frame_provider_ = NULL; | 279 frame_provider_ = nullptr; |
280 } | 280 } |
281 | 281 |
282 frame_provider_ = new DelegatedFrameProvider(resource_collection_.get(), | 282 frame_provider_ = new DelegatedFrameProvider(resource_collection_.get(), |
283 frame_data.Pass()); | 283 frame_data.Pass()); |
284 | 284 |
285 delegated_ = CreateDelegatedLayer(frame_provider_.get()); | 285 delegated_ = CreateDelegatedLayer(frame_provider_.get()); |
286 } | 286 } |
287 | 287 |
288 scoped_refptr<DelegatedRendererLayer> CreateDelegatedLayer( | 288 scoped_refptr<DelegatedRendererLayer> CreateDelegatedLayer( |
289 DelegatedFrameProvider* frame_provider) { | 289 DelegatedFrameProvider* frame_provider) { |
290 scoped_refptr<DelegatedRendererLayer> delegated = | 290 scoped_refptr<DelegatedRendererLayer> delegated = |
291 FakeDelegatedRendererLayer::Create(frame_provider); | 291 FakeDelegatedRendererLayer::Create(frame_provider); |
292 delegated->SetBounds(gfx::Size(10, 10)); | 292 delegated->SetBounds(gfx::Size(10, 10)); |
293 delegated->SetIsDrawable(true); | 293 delegated->SetIsDrawable(true); |
294 | 294 |
295 root_->AddChild(delegated); | 295 root_->AddChild(delegated); |
296 return delegated; | 296 return delegated; |
297 } | 297 } |
298 | 298 |
299 virtual void AfterTest() override { resource_collection_->SetClient(NULL); } | 299 virtual void AfterTest() override { |
| 300 resource_collection_->SetClient(nullptr); |
| 301 } |
300 | 302 |
301 // DelegatedFrameProviderClient implementation. | 303 // DelegatedFrameProviderClient implementation. |
302 virtual void UnusedResourcesAreAvailable() override { available_ = true; } | 304 virtual void UnusedResourcesAreAvailable() override { available_ = true; } |
303 | 305 |
304 bool TestAndResetAvailable() { | 306 bool TestAndResetAvailable() { |
305 bool available = available_; | 307 bool available = available_; |
306 available_ = false; | 308 available_ = false; |
307 return available; | 309 return available; |
308 } | 310 } |
309 | 311 |
(...skipping 1580 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1890 | 1892 |
1891 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); | 1893 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); |
1892 AddTextureQuad(frame.get(), 999); | 1894 AddTextureQuad(frame.get(), 999); |
1893 AddTransferableResource(frame.get(), 999); | 1895 AddTransferableResource(frame.get(), 999); |
1894 AddTextureQuad(frame.get(), 555); | 1896 AddTextureQuad(frame.get(), 555); |
1895 AddTransferableResource(frame.get(), 555); | 1897 AddTransferableResource(frame.get(), 555); |
1896 | 1898 |
1897 // Remove the delegated layer and replace it with a new one. Make a new | 1899 // Remove the delegated layer and replace it with a new one. Make a new |
1898 // frame but with the same resources for it. | 1900 // frame but with the same resources for it. |
1899 delegated_->RemoveFromParent(); | 1901 delegated_->RemoveFromParent(); |
1900 delegated_ = NULL; | 1902 delegated_ = nullptr; |
1901 | 1903 |
1902 frame_provider_->SetFrameData(frame.Pass()); | 1904 frame_provider_->SetFrameData(frame.Pass()); |
1903 delegated_ = CreateDelegatedLayer(frame_provider_.get()); | 1905 delegated_ = CreateDelegatedLayer(frame_provider_.get()); |
1904 break; | 1906 break; |
1905 case 3: | 1907 case 3: |
1906 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); | 1908 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
1907 EXPECT_EQ(0u, resources.size()); | 1909 EXPECT_EQ(0u, resources.size()); |
1908 EXPECT_FALSE(TestAndResetAvailable()); | 1910 EXPECT_FALSE(TestAndResetAvailable()); |
1909 | 1911 |
1910 // Use a frame with no resources in it. | 1912 // Use a frame with no resources in it. |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1955 // Create a DelegatedRendererLayer using the frame. | 1957 // Create a DelegatedRendererLayer using the frame. |
1956 SetFrameData(frame.Pass()); | 1958 SetFrameData(frame.Pass()); |
1957 break; | 1959 break; |
1958 case 2: | 1960 case 2: |
1959 // Create a second DelegatedRendererLayer using the same frame provider. | 1961 // Create a second DelegatedRendererLayer using the same frame provider. |
1960 delegated_thief_ = CreateDelegatedLayer(frame_provider_.get()); | 1962 delegated_thief_ = CreateDelegatedLayer(frame_provider_.get()); |
1961 root_->AddChild(delegated_thief_); | 1963 root_->AddChild(delegated_thief_); |
1962 | 1964 |
1963 // And drop our ref on the frame provider so only the layers keep it | 1965 // And drop our ref on the frame provider so only the layers keep it |
1964 // alive. | 1966 // alive. |
1965 frame_provider_ = NULL; | 1967 frame_provider_ = nullptr; |
1966 break; | 1968 break; |
1967 case 3: | 1969 case 3: |
1968 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); | 1970 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
1969 EXPECT_EQ(0u, resources.size()); | 1971 EXPECT_EQ(0u, resources.size()); |
1970 EXPECT_FALSE(TestAndResetAvailable()); | 1972 EXPECT_FALSE(TestAndResetAvailable()); |
1971 | 1973 |
1972 // Remove one delegated layer from the tree. No resources should be | 1974 // Remove one delegated layer from the tree. No resources should be |
1973 // returned yet. | 1975 // returned yet. |
1974 delegated_->RemoveFromParent(); | 1976 delegated_->RemoveFromParent(); |
1975 break; | 1977 break; |
1976 case 4: | 1978 case 4: |
1977 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); | 1979 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
1978 EXPECT_EQ(0u, resources.size()); | 1980 EXPECT_EQ(0u, resources.size()); |
1979 EXPECT_FALSE(TestAndResetAvailable()); | 1981 EXPECT_FALSE(TestAndResetAvailable()); |
1980 | 1982 |
1981 // Put the first layer back, and remove the other layer and destroy it. | 1983 // Put the first layer back, and remove the other layer and destroy it. |
1982 // No resources should be returned yet. | 1984 // No resources should be returned yet. |
1983 root_->AddChild(delegated_); | 1985 root_->AddChild(delegated_); |
1984 delegated_thief_->RemoveFromParent(); | 1986 delegated_thief_->RemoveFromParent(); |
1985 delegated_thief_ = NULL; | 1987 delegated_thief_ = nullptr; |
1986 break; | 1988 break; |
1987 case 5: | 1989 case 5: |
1988 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); | 1990 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
1989 EXPECT_EQ(0u, resources.size()); | 1991 EXPECT_EQ(0u, resources.size()); |
1990 EXPECT_FALSE(TestAndResetAvailable()); | 1992 EXPECT_FALSE(TestAndResetAvailable()); |
1991 | 1993 |
1992 // Remove the first layer from the tree again. The resources are still | 1994 // Remove the first layer from the tree again. The resources are still |
1993 // held by the main thread layer. | 1995 // held by the main thread layer. |
1994 delegated_->RemoveFromParent(); | 1996 delegated_->RemoveFromParent(); |
1995 break; | 1997 break; |
1996 case 6: | 1998 case 6: |
1997 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); | 1999 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
1998 EXPECT_EQ(0u, resources.size()); | 2000 EXPECT_EQ(0u, resources.size()); |
1999 EXPECT_FALSE(TestAndResetAvailable()); | 2001 EXPECT_FALSE(TestAndResetAvailable()); |
2000 | 2002 |
2001 // Destroy the layer and the resources should be returned immediately. | 2003 // Destroy the layer and the resources should be returned immediately. |
2002 delegated_ = NULL; | 2004 delegated_ = nullptr; |
2003 | 2005 |
2004 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); | 2006 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
2005 { | 2007 { |
2006 unsigned expected[] = {555, 999}; | 2008 unsigned expected[] = {555, 999}; |
2007 EXPECT_RESOURCES(expected, resources); | 2009 EXPECT_RESOURCES(expected, resources); |
2008 EXPECT_TRUE(TestAndResetAvailable()); | 2010 EXPECT_TRUE(TestAndResetAvailable()); |
2009 } | 2011 } |
2010 EndTest(); | 2012 EndTest(); |
2011 break; | 2013 break; |
2012 } | 2014 } |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2076 case 5: | 2078 case 5: |
2077 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); | 2079 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
2078 { | 2080 { |
2079 unsigned expected[] = {555, 999}; | 2081 unsigned expected[] = {555, 999}; |
2080 EXPECT_RESOURCES(expected, resources); | 2082 EXPECT_RESOURCES(expected, resources); |
2081 EXPECT_TRUE(TestAndResetAvailable()); | 2083 EXPECT_TRUE(TestAndResetAvailable()); |
2082 } | 2084 } |
2083 | 2085 |
2084 // Destroy the layer. | 2086 // Destroy the layer. |
2085 delegated_->RemoveFromParent(); | 2087 delegated_->RemoveFromParent(); |
2086 delegated_ = NULL; | 2088 delegated_ = nullptr; |
2087 break; | 2089 break; |
2088 case 6: | 2090 case 6: |
2089 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); | 2091 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
2090 EXPECT_EQ(0u, resources.size()); | 2092 EXPECT_EQ(0u, resources.size()); |
2091 EXPECT_FALSE(TestAndResetAvailable()); | 2093 EXPECT_FALSE(TestAndResetAvailable()); |
2092 | 2094 |
2093 // Destroy the frame provider. Resources should be returned. | 2095 // Destroy the frame provider. Resources should be returned. |
2094 frame_provider_ = NULL; | 2096 frame_provider_ = nullptr; |
2095 | 2097 |
2096 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); | 2098 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
2097 { | 2099 { |
2098 unsigned expected[] = {777, 888}; | 2100 unsigned expected[] = {777, 888}; |
2099 EXPECT_RESOURCES(expected, resources); | 2101 EXPECT_RESOURCES(expected, resources); |
2100 EXPECT_TRUE(TestAndResetAvailable()); | 2102 EXPECT_TRUE(TestAndResetAvailable()); |
2101 } | 2103 } |
2102 EndTest(); | 2104 EndTest(); |
2103 break; | 2105 break; |
2104 } | 2106 } |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2159 | 2161 |
2160 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); | 2162 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
2161 { | 2163 { |
2162 unsigned expected[] = {555, 999}; | 2164 unsigned expected[] = {555, 999}; |
2163 EXPECT_RESOURCES(expected, resources); | 2165 EXPECT_RESOURCES(expected, resources); |
2164 EXPECT_TRUE(TestAndResetAvailable()); | 2166 EXPECT_TRUE(TestAndResetAvailable()); |
2165 resources.clear(); | 2167 resources.clear(); |
2166 } | 2168 } |
2167 | 2169 |
2168 // Destroy the frame provider. | 2170 // Destroy the frame provider. |
2169 frame_provider_ = NULL; | 2171 frame_provider_ = nullptr; |
2170 | 2172 |
2171 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); | 2173 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
2172 EXPECT_EQ(0u, resources.size()); | 2174 EXPECT_EQ(0u, resources.size()); |
2173 EXPECT_FALSE(TestAndResetAvailable()); | 2175 EXPECT_FALSE(TestAndResetAvailable()); |
2174 | 2176 |
2175 // Destroy the layer. Resources should be returned. | 2177 // Destroy the layer. Resources should be returned. |
2176 delegated_ = NULL; | 2178 delegated_ = nullptr; |
2177 | 2179 |
2178 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); | 2180 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
2179 { | 2181 { |
2180 unsigned expected[] = {777, 888}; | 2182 unsigned expected[] = {777, 888}; |
2181 EXPECT_RESOURCES(expected, resources); | 2183 EXPECT_RESOURCES(expected, resources); |
2182 EXPECT_TRUE(TestAndResetAvailable()); | 2184 EXPECT_TRUE(TestAndResetAvailable()); |
2183 } | 2185 } |
2184 EndTest(); | 2186 EndTest(); |
2185 break; | 2187 break; |
2186 } | 2188 } |
2187 } | 2189 } |
2188 | 2190 |
2189 virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, | 2191 virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, |
2190 bool result) override { | 2192 bool result) override { |
2191 ReturnUnusedResourcesFromParent(host_impl); | 2193 ReturnUnusedResourcesFromParent(host_impl); |
2192 } | 2194 } |
2193 | 2195 |
2194 scoped_refptr<DelegatedRendererLayer> delegated_thief_; | 2196 scoped_refptr<DelegatedRendererLayer> delegated_thief_; |
2195 }; | 2197 }; |
2196 | 2198 |
2197 SINGLE_AND_MULTI_THREAD_TEST_F( | 2199 SINGLE_AND_MULTI_THREAD_TEST_F( |
2198 LayerTreeHostDelegatedTestRemoveAndChangeResources); | 2200 LayerTreeHostDelegatedTestRemoveAndChangeResources); |
2199 | 2201 |
2200 } // namespace | 2202 } // namespace |
2201 } // namespace cc | 2203 } // namespace cc |
OLD | NEW |