OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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/auto_reset.h" | 9 #include "base/auto_reset.h" |
10 #include "base/synchronization/lock.h" | 10 #include "base/synchronization/lock.h" |
(...skipping 2129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2140 | 2140 |
2141 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( | 2141 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( |
2142 new TestSharedBitmapManager()); | 2142 new TestSharedBitmapManager()); |
2143 scoped_ptr<LayerTreeHost> host = | 2143 scoped_ptr<LayerTreeHost> host = |
2144 LayerTreeHost::CreateSingleThreaded(&client, | 2144 LayerTreeHost::CreateSingleThreaded(&client, |
2145 &client, | 2145 &client, |
2146 shared_bitmap_manager.get(), | 2146 shared_bitmap_manager.get(), |
2147 NULL, | 2147 NULL, |
2148 settings, | 2148 settings, |
2149 base::MessageLoopProxy::current(), | 2149 base::MessageLoopProxy::current(), |
| 2150 nullptr, |
2150 nullptr); | 2151 nullptr); |
2151 client.SetLayerTreeHost(host.get()); | 2152 client.SetLayerTreeHost(host.get()); |
2152 host->Composite(base::TimeTicks::Now()); | 2153 host->Composite(base::TimeTicks::Now()); |
2153 | 2154 |
2154 EXPECT_EQ(4u, host->settings().max_partial_texture_updates); | 2155 EXPECT_EQ(4u, host->settings().max_partial_texture_updates); |
2155 } | 2156 } |
2156 | 2157 |
2157 TEST(LayerTreeHostTest, PartialUpdatesWithSoftwareRenderer) { | 2158 TEST(LayerTreeHostTest, PartialUpdatesWithSoftwareRenderer) { |
2158 FakeLayerTreeHostClient client(FakeLayerTreeHostClient::DIRECT_SOFTWARE); | 2159 FakeLayerTreeHostClient client(FakeLayerTreeHostClient::DIRECT_SOFTWARE); |
2159 | 2160 |
2160 LayerTreeSettings settings; | 2161 LayerTreeSettings settings; |
2161 settings.max_partial_texture_updates = 4; | 2162 settings.max_partial_texture_updates = 4; |
2162 settings.single_thread_proxy_scheduler = false; | 2163 settings.single_thread_proxy_scheduler = false; |
2163 | 2164 |
2164 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( | 2165 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( |
2165 new TestSharedBitmapManager()); | 2166 new TestSharedBitmapManager()); |
2166 scoped_ptr<LayerTreeHost> host = | 2167 scoped_ptr<LayerTreeHost> host = |
2167 LayerTreeHost::CreateSingleThreaded(&client, | 2168 LayerTreeHost::CreateSingleThreaded(&client, |
2168 &client, | 2169 &client, |
2169 shared_bitmap_manager.get(), | 2170 shared_bitmap_manager.get(), |
2170 NULL, | 2171 NULL, |
2171 settings, | 2172 settings, |
2172 base::MessageLoopProxy::current(), | 2173 base::MessageLoopProxy::current(), |
| 2174 nullptr, |
2173 nullptr); | 2175 nullptr); |
2174 client.SetLayerTreeHost(host.get()); | 2176 client.SetLayerTreeHost(host.get()); |
2175 host->Composite(base::TimeTicks::Now()); | 2177 host->Composite(base::TimeTicks::Now()); |
2176 | 2178 |
2177 EXPECT_EQ(4u, host->settings().max_partial_texture_updates); | 2179 EXPECT_EQ(4u, host->settings().max_partial_texture_updates); |
2178 } | 2180 } |
2179 | 2181 |
2180 TEST(LayerTreeHostTest, PartialUpdatesWithDelegatingRendererAndGLContent) { | 2182 TEST(LayerTreeHostTest, PartialUpdatesWithDelegatingRendererAndGLContent) { |
2181 FakeLayerTreeHostClient client(FakeLayerTreeHostClient::DELEGATED_3D); | 2183 FakeLayerTreeHostClient client(FakeLayerTreeHostClient::DELEGATED_3D); |
2182 | 2184 |
2183 LayerTreeSettings settings; | 2185 LayerTreeSettings settings; |
2184 settings.max_partial_texture_updates = 4; | 2186 settings.max_partial_texture_updates = 4; |
2185 settings.single_thread_proxy_scheduler = false; | 2187 settings.single_thread_proxy_scheduler = false; |
2186 | 2188 |
2187 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( | 2189 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( |
2188 new TestSharedBitmapManager()); | 2190 new TestSharedBitmapManager()); |
2189 scoped_ptr<LayerTreeHost> host = | 2191 scoped_ptr<LayerTreeHost> host = |
2190 LayerTreeHost::CreateSingleThreaded(&client, | 2192 LayerTreeHost::CreateSingleThreaded(&client, |
2191 &client, | 2193 &client, |
2192 shared_bitmap_manager.get(), | 2194 shared_bitmap_manager.get(), |
2193 NULL, | 2195 NULL, |
2194 settings, | 2196 settings, |
2195 base::MessageLoopProxy::current(), | 2197 base::MessageLoopProxy::current(), |
| 2198 nullptr, |
2196 nullptr); | 2199 nullptr); |
2197 client.SetLayerTreeHost(host.get()); | 2200 client.SetLayerTreeHost(host.get()); |
2198 host->Composite(base::TimeTicks::Now()); | 2201 host->Composite(base::TimeTicks::Now()); |
2199 | 2202 |
2200 EXPECT_EQ(0u, host->MaxPartialTextureUpdates()); | 2203 EXPECT_EQ(0u, host->MaxPartialTextureUpdates()); |
2201 } | 2204 } |
2202 | 2205 |
2203 TEST(LayerTreeHostTest, | 2206 TEST(LayerTreeHostTest, |
2204 PartialUpdatesWithDelegatingRendererAndSoftwareContent) { | 2207 PartialUpdatesWithDelegatingRendererAndSoftwareContent) { |
2205 FakeLayerTreeHostClient client(FakeLayerTreeHostClient::DELEGATED_SOFTWARE); | 2208 FakeLayerTreeHostClient client(FakeLayerTreeHostClient::DELEGATED_SOFTWARE); |
2206 | 2209 |
2207 LayerTreeSettings settings; | 2210 LayerTreeSettings settings; |
2208 settings.max_partial_texture_updates = 4; | 2211 settings.max_partial_texture_updates = 4; |
2209 settings.single_thread_proxy_scheduler = false; | 2212 settings.single_thread_proxy_scheduler = false; |
2210 | 2213 |
2211 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( | 2214 scoped_ptr<SharedBitmapManager> shared_bitmap_manager( |
2212 new TestSharedBitmapManager()); | 2215 new TestSharedBitmapManager()); |
2213 scoped_ptr<LayerTreeHost> host = | 2216 scoped_ptr<LayerTreeHost> host = |
2214 LayerTreeHost::CreateSingleThreaded(&client, | 2217 LayerTreeHost::CreateSingleThreaded(&client, |
2215 &client, | 2218 &client, |
2216 shared_bitmap_manager.get(), | 2219 shared_bitmap_manager.get(), |
2217 NULL, | 2220 NULL, |
2218 settings, | 2221 settings, |
2219 base::MessageLoopProxy::current(), | 2222 base::MessageLoopProxy::current(), |
| 2223 nullptr, |
2220 nullptr); | 2224 nullptr); |
2221 client.SetLayerTreeHost(host.get()); | 2225 client.SetLayerTreeHost(host.get()); |
2222 host->Composite(base::TimeTicks::Now()); | 2226 host->Composite(base::TimeTicks::Now()); |
2223 | 2227 |
2224 EXPECT_EQ(0u, host->MaxPartialTextureUpdates()); | 2228 EXPECT_EQ(0u, host->MaxPartialTextureUpdates()); |
2225 } | 2229 } |
2226 | 2230 |
2227 // TODO(sohanjg) : Remove it once impl-side painting ships everywhere. | 2231 // TODO(sohanjg) : Remove it once impl-side painting ships everywhere. |
2228 class LayerTreeHostTestShutdownWithOnlySomeResourcesEvicted | 2232 class LayerTreeHostTestShutdownWithOnlySomeResourcesEvicted |
2229 : public LayerTreeHostTest { | 2233 : public LayerTreeHostTest { |
(...skipping 3052 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5282 int num_draws_; | 5286 int num_draws_; |
5283 const gfx::Size bounds_; | 5287 const gfx::Size bounds_; |
5284 FakeContentLayerClient client_; | 5288 FakeContentLayerClient client_; |
5285 scoped_refptr<ContentLayerWithUpdateTracking> content_layer_; | 5289 scoped_refptr<ContentLayerWithUpdateTracking> content_layer_; |
5286 scoped_refptr<FakePictureLayer> picture_layer_; | 5290 scoped_refptr<FakePictureLayer> picture_layer_; |
5287 Layer* child_layer_; | 5291 Layer* child_layer_; |
5288 }; | 5292 }; |
5289 | 5293 |
5290 MULTI_THREAD_TEST_F(LayerTreeHostTestContinuousPainting); | 5294 MULTI_THREAD_TEST_F(LayerTreeHostTestContinuousPainting); |
5291 | 5295 |
| 5296 class TestBeginFrameObserver : public BeginFrameObserverMixIn { |
| 5297 public: |
| 5298 TestBeginFrameObserver() {} |
| 5299 ~TestBeginFrameObserver() override {} |
| 5300 |
| 5301 protected: |
| 5302 bool OnBeginFrameMixInDelegate(const BeginFrameArgs& args) override { |
| 5303 return true; |
| 5304 } |
| 5305 }; |
| 5306 |
5292 class LayerTreeHostTestSendBeginFramesToChildren : public LayerTreeHostTest { | 5307 class LayerTreeHostTestSendBeginFramesToChildren : public LayerTreeHostTest { |
5293 public: | 5308 public: |
5294 LayerTreeHostTestSendBeginFramesToChildren() | 5309 LayerTreeHostTestSendBeginFramesToChildren() |
5295 : begin_frame_sent_to_children_(false) { | 5310 : begin_frame_sent_to_children_(false) { |
| 5311 begin_frame_observer_.reset(new TestBeginFrameObserver); |
5296 } | 5312 } |
5297 | 5313 |
5298 void InitializeSettings(LayerTreeSettings* settings) override { | 5314 void InitializeSettings(LayerTreeSettings* settings) override { |
5299 settings->forward_begin_frames_to_children = true; | 5315 settings->forward_begin_frames_to_children = true; |
5300 } | 5316 } |
5301 | 5317 |
5302 void BeginTest() override { | 5318 void BeginTest() override { |
5303 // Kick off the test with a commit. | 5319 // Kick off the test with a commit. |
5304 PostSetNeedsCommitToMainThread(); | 5320 PostSetNeedsCommitToMainThread(); |
5305 } | 5321 } |
5306 | 5322 |
5307 void SendBeginFramesToChildren(const BeginFrameArgs& args) override { | 5323 void SendBeginFramesToChildren(const BeginFrameArgs& args) override { |
5308 begin_frame_sent_to_children_ = true; | 5324 begin_frame_sent_to_children_ = true; |
5309 EndTest(); | 5325 EndTest(); |
5310 } | 5326 } |
5311 | 5327 |
5312 void DidBeginMainFrame() override { | 5328 void DidBeginMainFrame() override { |
5313 // Children requested BeginFrames. | 5329 // Add observer will trigger BeginFrame. |
5314 layer_tree_host()->SetChildrenNeedBeginFrames(true); | 5330 proxy_begin_frame_source()->AddObserver(begin_frame_observer_.get()); |
5315 } | 5331 } |
5316 | 5332 |
5317 void AfterTest() override { | 5333 void AfterTest() override { |
5318 // Ensure that BeginFrame message is sent to children during parent | 5334 // Ensure that BeginFrame message is sent to children during parent |
5319 // scheduler handles its BeginFrame. | 5335 // scheduler handles its BeginFrame. |
5320 EXPECT_TRUE(begin_frame_sent_to_children_); | 5336 EXPECT_TRUE(begin_frame_sent_to_children_); |
| 5337 proxy_begin_frame_source()->RemoveObserver(begin_frame_observer_.get()); |
5321 } | 5338 } |
5322 | 5339 |
5323 private: | 5340 private: |
5324 bool begin_frame_sent_to_children_; | 5341 bool begin_frame_sent_to_children_; |
| 5342 scoped_ptr<TestBeginFrameObserver> begin_frame_observer_; |
5325 }; | 5343 }; |
5326 | 5344 |
5327 SINGLE_THREAD_TEST_F(LayerTreeHostTestSendBeginFramesToChildren); | 5345 SINGLE_THREAD_TEST_F(LayerTreeHostTestSendBeginFramesToChildren); |
5328 | 5346 |
5329 class LayerTreeHostTestSendBeginFramesToChildrenWithExternalBFS | 5347 class LayerTreeHostTestSendBeginFramesToChildrenWithExternalBFS |
5330 : public LayerTreeHostTest { | 5348 : public LayerTreeHostTest { |
5331 public: | 5349 public: |
5332 LayerTreeHostTestSendBeginFramesToChildrenWithExternalBFS() | 5350 LayerTreeHostTestSendBeginFramesToChildrenWithExternalBFS() |
5333 : begin_frame_sent_to_children_(false) { | 5351 : begin_frame_sent_to_children_(false) { |
| 5352 begin_frame_observer_.reset(new TestBeginFrameObserver); |
5334 } | 5353 } |
5335 | 5354 |
5336 void InitializeSettings(LayerTreeSettings* settings) override { | 5355 void InitializeSettings(LayerTreeSettings* settings) override { |
5337 settings->use_external_begin_frame_source = true; | 5356 settings->use_external_begin_frame_source = true; |
5338 settings->forward_begin_frames_to_children = true; | 5357 settings->forward_begin_frames_to_children = true; |
5339 } | 5358 } |
5340 | 5359 |
5341 void BeginTest() override { | 5360 void BeginTest() override { |
5342 // Kick off the test with a commit. | 5361 // Kick off the test with a commit. |
5343 PostSetNeedsCommitToMainThread(); | 5362 PostSetNeedsCommitToMainThread(); |
5344 } | 5363 } |
5345 | 5364 |
5346 void SendBeginFramesToChildren(const BeginFrameArgs& args) override { | 5365 void SendBeginFramesToChildren(const BeginFrameArgs& args) override { |
5347 begin_frame_sent_to_children_ = true; | 5366 begin_frame_sent_to_children_ = true; |
5348 EndTest(); | 5367 EndTest(); |
5349 } | 5368 } |
5350 | 5369 |
5351 void DidBeginMainFrame() override { | 5370 void DidBeginMainFrame() override { |
5352 // Children requested BeginFrames. | 5371 // Add observer will trigger BeginFrame. |
5353 layer_tree_host()->SetChildrenNeedBeginFrames(true); | 5372 proxy_begin_frame_source()->AddObserver(begin_frame_observer_.get()); |
5354 } | 5373 } |
5355 | 5374 |
5356 void AfterTest() override { | 5375 void AfterTest() override { |
5357 // Ensure that BeginFrame message is sent to children during parent | 5376 // Ensure that BeginFrame message is sent to children during parent |
5358 // scheduler handles its BeginFrame. | 5377 // scheduler handles its BeginFrame. |
5359 EXPECT_TRUE(begin_frame_sent_to_children_); | 5378 EXPECT_TRUE(begin_frame_sent_to_children_); |
| 5379 proxy_begin_frame_source()->RemoveObserver(begin_frame_observer_.get()); |
5360 } | 5380 } |
5361 | 5381 |
5362 private: | 5382 private: |
5363 bool begin_frame_sent_to_children_; | 5383 bool begin_frame_sent_to_children_; |
| 5384 scoped_ptr<TestBeginFrameObserver> begin_frame_observer_; |
5364 }; | 5385 }; |
5365 | 5386 |
5366 SINGLE_THREAD_TEST_F(LayerTreeHostTestSendBeginFramesToChildrenWithExternalBFS); | 5387 SINGLE_THREAD_TEST_F(LayerTreeHostTestSendBeginFramesToChildrenWithExternalBFS); |
5367 | 5388 |
5368 class LayerTreeHostTestActivateOnInvisible : public LayerTreeHostTest { | 5389 class LayerTreeHostTestActivateOnInvisible : public LayerTreeHostTest { |
5369 public: | 5390 public: |
5370 LayerTreeHostTestActivateOnInvisible() | 5391 LayerTreeHostTestActivateOnInvisible() |
5371 : activation_count_(0), visible_(true) {} | 5392 : activation_count_(0), visible_(true) {} |
5372 | 5393 |
5373 void InitializeSettings(LayerTreeSettings* settings) override { | 5394 void InitializeSettings(LayerTreeSettings* settings) override { |
(...skipping 800 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6174 | 6195 |
6175 void AfterTest() override { EXPECT_TRUE(did_commit_); } | 6196 void AfterTest() override { EXPECT_TRUE(did_commit_); } |
6176 | 6197 |
6177 private: | 6198 private: |
6178 bool did_commit_; | 6199 bool did_commit_; |
6179 }; | 6200 }; |
6180 | 6201 |
6181 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestNoTasksBetweenWillAndDidCommit); | 6202 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestNoTasksBetweenWillAndDidCommit); |
6182 | 6203 |
6183 } // namespace cc | 6204 } // namespace cc |
OLD | NEW |