| 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 |