Chromium Code Reviews| 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 |