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 { resource_collection_->SetClient(nullptr); } |
danakj
2014/10/09 16:00:53
and here
| |
300 | 300 |
301 // DelegatedFrameProviderClient implementation. | 301 // DelegatedFrameProviderClient implementation. |
302 virtual void UnusedResourcesAreAvailable() override { available_ = true; } | 302 virtual void UnusedResourcesAreAvailable() override { available_ = true; } |
303 | 303 |
304 bool TestAndResetAvailable() { | 304 bool TestAndResetAvailable() { |
305 bool available = available_; | 305 bool available = available_; |
306 available_ = false; | 306 available_ = false; |
307 return available; | 307 return available; |
308 } | 308 } |
309 | 309 |
(...skipping 1580 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1890 | 1890 |
1891 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); | 1891 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); |
1892 AddTextureQuad(frame.get(), 999); | 1892 AddTextureQuad(frame.get(), 999); |
1893 AddTransferableResource(frame.get(), 999); | 1893 AddTransferableResource(frame.get(), 999); |
1894 AddTextureQuad(frame.get(), 555); | 1894 AddTextureQuad(frame.get(), 555); |
1895 AddTransferableResource(frame.get(), 555); | 1895 AddTransferableResource(frame.get(), 555); |
1896 | 1896 |
1897 // Remove the delegated layer and replace it with a new one. Make a new | 1897 // Remove the delegated layer and replace it with a new one. Make a new |
1898 // frame but with the same resources for it. | 1898 // frame but with the same resources for it. |
1899 delegated_->RemoveFromParent(); | 1899 delegated_->RemoveFromParent(); |
1900 delegated_ = NULL; | 1900 delegated_ = nullptr; |
1901 | 1901 |
1902 frame_provider_->SetFrameData(frame.Pass()); | 1902 frame_provider_->SetFrameData(frame.Pass()); |
1903 delegated_ = CreateDelegatedLayer(frame_provider_.get()); | 1903 delegated_ = CreateDelegatedLayer(frame_provider_.get()); |
1904 break; | 1904 break; |
1905 case 3: | 1905 case 3: |
1906 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); | 1906 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
1907 EXPECT_EQ(0u, resources.size()); | 1907 EXPECT_EQ(0u, resources.size()); |
1908 EXPECT_FALSE(TestAndResetAvailable()); | 1908 EXPECT_FALSE(TestAndResetAvailable()); |
1909 | 1909 |
1910 // Use a frame with no resources in it. | 1910 // 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. | 1955 // Create a DelegatedRendererLayer using the frame. |
1956 SetFrameData(frame.Pass()); | 1956 SetFrameData(frame.Pass()); |
1957 break; | 1957 break; |
1958 case 2: | 1958 case 2: |
1959 // Create a second DelegatedRendererLayer using the same frame provider. | 1959 // Create a second DelegatedRendererLayer using the same frame provider. |
1960 delegated_thief_ = CreateDelegatedLayer(frame_provider_.get()); | 1960 delegated_thief_ = CreateDelegatedLayer(frame_provider_.get()); |
1961 root_->AddChild(delegated_thief_); | 1961 root_->AddChild(delegated_thief_); |
1962 | 1962 |
1963 // And drop our ref on the frame provider so only the layers keep it | 1963 // And drop our ref on the frame provider so only the layers keep it |
1964 // alive. | 1964 // alive. |
1965 frame_provider_ = NULL; | 1965 frame_provider_ = nullptr; |
1966 break; | 1966 break; |
1967 case 3: | 1967 case 3: |
1968 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); | 1968 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
1969 EXPECT_EQ(0u, resources.size()); | 1969 EXPECT_EQ(0u, resources.size()); |
1970 EXPECT_FALSE(TestAndResetAvailable()); | 1970 EXPECT_FALSE(TestAndResetAvailable()); |
1971 | 1971 |
1972 // Remove one delegated layer from the tree. No resources should be | 1972 // Remove one delegated layer from the tree. No resources should be |
1973 // returned yet. | 1973 // returned yet. |
1974 delegated_->RemoveFromParent(); | 1974 delegated_->RemoveFromParent(); |
1975 break; | 1975 break; |
1976 case 4: | 1976 case 4: |
1977 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); | 1977 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
1978 EXPECT_EQ(0u, resources.size()); | 1978 EXPECT_EQ(0u, resources.size()); |
1979 EXPECT_FALSE(TestAndResetAvailable()); | 1979 EXPECT_FALSE(TestAndResetAvailable()); |
1980 | 1980 |
1981 // Put the first layer back, and remove the other layer and destroy it. | 1981 // Put the first layer back, and remove the other layer and destroy it. |
1982 // No resources should be returned yet. | 1982 // No resources should be returned yet. |
1983 root_->AddChild(delegated_); | 1983 root_->AddChild(delegated_); |
1984 delegated_thief_->RemoveFromParent(); | 1984 delegated_thief_->RemoveFromParent(); |
1985 delegated_thief_ = NULL; | 1985 delegated_thief_ = nullptr; |
1986 break; | 1986 break; |
1987 case 5: | 1987 case 5: |
1988 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); | 1988 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
1989 EXPECT_EQ(0u, resources.size()); | 1989 EXPECT_EQ(0u, resources.size()); |
1990 EXPECT_FALSE(TestAndResetAvailable()); | 1990 EXPECT_FALSE(TestAndResetAvailable()); |
1991 | 1991 |
1992 // Remove the first layer from the tree again. The resources are still | 1992 // Remove the first layer from the tree again. The resources are still |
1993 // held by the main thread layer. | 1993 // held by the main thread layer. |
1994 delegated_->RemoveFromParent(); | 1994 delegated_->RemoveFromParent(); |
1995 break; | 1995 break; |
1996 case 6: | 1996 case 6: |
1997 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); | 1997 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
1998 EXPECT_EQ(0u, resources.size()); | 1998 EXPECT_EQ(0u, resources.size()); |
1999 EXPECT_FALSE(TestAndResetAvailable()); | 1999 EXPECT_FALSE(TestAndResetAvailable()); |
2000 | 2000 |
2001 // Destroy the layer and the resources should be returned immediately. | 2001 // Destroy the layer and the resources should be returned immediately. |
2002 delegated_ = NULL; | 2002 delegated_ = nullptr; |
2003 | 2003 |
2004 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); | 2004 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
2005 { | 2005 { |
2006 unsigned expected[] = {555, 999}; | 2006 unsigned expected[] = {555, 999}; |
2007 EXPECT_RESOURCES(expected, resources); | 2007 EXPECT_RESOURCES(expected, resources); |
2008 EXPECT_TRUE(TestAndResetAvailable()); | 2008 EXPECT_TRUE(TestAndResetAvailable()); |
2009 } | 2009 } |
2010 EndTest(); | 2010 EndTest(); |
2011 break; | 2011 break; |
2012 } | 2012 } |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2076 case 5: | 2076 case 5: |
2077 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); | 2077 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
2078 { | 2078 { |
2079 unsigned expected[] = {555, 999}; | 2079 unsigned expected[] = {555, 999}; |
2080 EXPECT_RESOURCES(expected, resources); | 2080 EXPECT_RESOURCES(expected, resources); |
2081 EXPECT_TRUE(TestAndResetAvailable()); | 2081 EXPECT_TRUE(TestAndResetAvailable()); |
2082 } | 2082 } |
2083 | 2083 |
2084 // Destroy the layer. | 2084 // Destroy the layer. |
2085 delegated_->RemoveFromParent(); | 2085 delegated_->RemoveFromParent(); |
2086 delegated_ = NULL; | 2086 delegated_ = nullptr; |
2087 break; | 2087 break; |
2088 case 6: | 2088 case 6: |
2089 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); | 2089 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
2090 EXPECT_EQ(0u, resources.size()); | 2090 EXPECT_EQ(0u, resources.size()); |
2091 EXPECT_FALSE(TestAndResetAvailable()); | 2091 EXPECT_FALSE(TestAndResetAvailable()); |
2092 | 2092 |
2093 // Destroy the frame provider. Resources should be returned. | 2093 // Destroy the frame provider. Resources should be returned. |
2094 frame_provider_ = NULL; | 2094 frame_provider_ = nullptr; |
2095 | 2095 |
2096 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); | 2096 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
2097 { | 2097 { |
2098 unsigned expected[] = {777, 888}; | 2098 unsigned expected[] = {777, 888}; |
2099 EXPECT_RESOURCES(expected, resources); | 2099 EXPECT_RESOURCES(expected, resources); |
2100 EXPECT_TRUE(TestAndResetAvailable()); | 2100 EXPECT_TRUE(TestAndResetAvailable()); |
2101 } | 2101 } |
2102 EndTest(); | 2102 EndTest(); |
2103 break; | 2103 break; |
2104 } | 2104 } |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2159 | 2159 |
2160 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); | 2160 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
2161 { | 2161 { |
2162 unsigned expected[] = {555, 999}; | 2162 unsigned expected[] = {555, 999}; |
2163 EXPECT_RESOURCES(expected, resources); | 2163 EXPECT_RESOURCES(expected, resources); |
2164 EXPECT_TRUE(TestAndResetAvailable()); | 2164 EXPECT_TRUE(TestAndResetAvailable()); |
2165 resources.clear(); | 2165 resources.clear(); |
2166 } | 2166 } |
2167 | 2167 |
2168 // Destroy the frame provider. | 2168 // Destroy the frame provider. |
2169 frame_provider_ = NULL; | 2169 frame_provider_ = nullptr; |
2170 | 2170 |
2171 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); | 2171 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
2172 EXPECT_EQ(0u, resources.size()); | 2172 EXPECT_EQ(0u, resources.size()); |
2173 EXPECT_FALSE(TestAndResetAvailable()); | 2173 EXPECT_FALSE(TestAndResetAvailable()); |
2174 | 2174 |
2175 // Destroy the layer. Resources should be returned. | 2175 // Destroy the layer. Resources should be returned. |
2176 delegated_ = NULL; | 2176 delegated_ = nullptr; |
2177 | 2177 |
2178 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); | 2178 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
2179 { | 2179 { |
2180 unsigned expected[] = {777, 888}; | 2180 unsigned expected[] = {777, 888}; |
2181 EXPECT_RESOURCES(expected, resources); | 2181 EXPECT_RESOURCES(expected, resources); |
2182 EXPECT_TRUE(TestAndResetAvailable()); | 2182 EXPECT_TRUE(TestAndResetAvailable()); |
2183 } | 2183 } |
2184 EndTest(); | 2184 EndTest(); |
2185 break; | 2185 break; |
2186 } | 2186 } |
2187 } | 2187 } |
2188 | 2188 |
2189 virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, | 2189 virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, |
2190 bool result) override { | 2190 bool result) override { |
2191 ReturnUnusedResourcesFromParent(host_impl); | 2191 ReturnUnusedResourcesFromParent(host_impl); |
2192 } | 2192 } |
2193 | 2193 |
2194 scoped_refptr<DelegatedRendererLayer> delegated_thief_; | 2194 scoped_refptr<DelegatedRendererLayer> delegated_thief_; |
2195 }; | 2195 }; |
2196 | 2196 |
2197 SINGLE_AND_MULTI_THREAD_TEST_F( | 2197 SINGLE_AND_MULTI_THREAD_TEST_F( |
2198 LayerTreeHostDelegatedTestRemoveAndChangeResources); | 2198 LayerTreeHostDelegatedTestRemoveAndChangeResources); |
2199 | 2199 |
2200 } // namespace | 2200 } // namespace |
2201 } // namespace cc | 2201 } // namespace cc |
OLD | NEW |