OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <sstream> | 9 #include <sstream> |
10 | 10 |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 | 265 |
266 static void EmptyReleaseCallback(const gpu::SyncToken& sync_token, | 266 static void EmptyReleaseCallback(const gpu::SyncToken& sync_token, |
267 bool lost_resource) {} | 267 bool lost_resource) {} |
268 | 268 |
269 // Simulates main-thread scrolling on each frame. | 269 // Simulates main-thread scrolling on each frame. |
270 class BrowserCompositorInvalidateLayerTreePerfTest | 270 class BrowserCompositorInvalidateLayerTreePerfTest |
271 : public LayerTreeHostPerfTestJsonReader { | 271 : public LayerTreeHostPerfTestJsonReader { |
272 public: | 272 public: |
273 BrowserCompositorInvalidateLayerTreePerfTest() | 273 BrowserCompositorInvalidateLayerTreePerfTest() |
274 : LayerTreeHostPerfTestJsonReader(), | 274 : LayerTreeHostPerfTestJsonReader(), |
275 next_sync_point_(1), | 275 next_fence_sync_(1), |
276 clean_up_started_(false) {} | 276 clean_up_started_(false) {} |
277 | 277 |
278 void BuildTree() override { | 278 void BuildTree() override { |
279 LayerTreeHostPerfTestJsonReader::BuildTree(); | 279 LayerTreeHostPerfTestJsonReader::BuildTree(); |
280 tab_contents_ = | 280 tab_contents_ = |
281 static_cast<TextureLayer*>( | 281 static_cast<TextureLayer*>( |
282 layer_tree_host()->root_layer()->children()[0]-> | 282 layer_tree_host()->root_layer()->children()[0]-> |
283 children()[0]-> | 283 children()[0]-> |
284 children()[0]-> | 284 children()[0]-> |
285 children()[0].get()); | 285 children()[0].get()); |
286 ASSERT_TRUE(tab_contents_.get()); | 286 ASSERT_TRUE(tab_contents_.get()); |
287 } | 287 } |
288 | 288 |
289 void WillCommit() override { | 289 void WillCommit() override { |
290 if (CleanUpStarted()) | 290 if (CleanUpStarted()) |
291 return; | 291 return; |
292 gpu::Mailbox gpu_mailbox; | 292 gpu::Mailbox gpu_mailbox; |
293 std::ostringstream name_stream; | 293 std::ostringstream name_stream; |
294 name_stream << "name" << next_sync_point_; | 294 name_stream << "name" << next_fence_sync_; |
295 gpu_mailbox.SetName( | 295 gpu_mailbox.SetName( |
296 reinterpret_cast<const int8_t*>(name_stream.str().c_str())); | 296 reinterpret_cast<const int8_t*>(name_stream.str().c_str())); |
297 scoped_ptr<SingleReleaseCallback> callback = SingleReleaseCallback::Create( | 297 scoped_ptr<SingleReleaseCallback> callback = SingleReleaseCallback::Create( |
298 base::Bind(&EmptyReleaseCallback)); | 298 base::Bind(&EmptyReleaseCallback)); |
299 TextureMailbox mailbox(gpu_mailbox, gpu::SyncToken(next_sync_point_), | 299 |
300 GL_TEXTURE_2D); | 300 gpu::SyncToken next_sync_token(gpu::CommandBufferNamespace::GPU_IO, 0, 1, |
301 next_sync_point_++; | 301 next_fence_sync_); |
| 302 next_sync_token.SetVerifyFlush(); |
| 303 TextureMailbox mailbox(gpu_mailbox, next_sync_token, GL_TEXTURE_2D); |
| 304 next_fence_sync_++; |
302 | 305 |
303 tab_contents_->SetTextureMailbox(mailbox, std::move(callback)); | 306 tab_contents_->SetTextureMailbox(mailbox, std::move(callback)); |
304 } | 307 } |
305 | 308 |
306 void DidCommit() override { | 309 void DidCommit() override { |
307 if (CleanUpStarted()) | 310 if (CleanUpStarted()) |
308 return; | 311 return; |
309 layer_tree_host()->SetNeedsCommit(); | 312 layer_tree_host()->SetNeedsCommit(); |
310 } | 313 } |
311 | 314 |
312 void CleanUpAndEndTest(LayerTreeHostImpl* host_impl) override { | 315 void CleanUpAndEndTest(LayerTreeHostImpl* host_impl) override { |
313 clean_up_started_ = true; | 316 clean_up_started_ = true; |
314 MainThreadTaskRunner()->PostTask( | 317 MainThreadTaskRunner()->PostTask( |
315 FROM_HERE, | 318 FROM_HERE, |
316 base::Bind(&BrowserCompositorInvalidateLayerTreePerfTest:: | 319 base::Bind(&BrowserCompositorInvalidateLayerTreePerfTest:: |
317 CleanUpAndEndTestOnMainThread, | 320 CleanUpAndEndTestOnMainThread, |
318 base::Unretained(this))); | 321 base::Unretained(this))); |
319 } | 322 } |
320 | 323 |
321 void CleanUpAndEndTestOnMainThread() { | 324 void CleanUpAndEndTestOnMainThread() { |
322 tab_contents_->SetTextureMailbox(TextureMailbox(), nullptr); | 325 tab_contents_->SetTextureMailbox(TextureMailbox(), nullptr); |
323 EndTest(); | 326 EndTest(); |
324 } | 327 } |
325 | 328 |
326 bool CleanUpStarted() override { return clean_up_started_; } | 329 bool CleanUpStarted() override { return clean_up_started_; } |
327 | 330 |
328 private: | 331 private: |
329 scoped_refptr<TextureLayer> tab_contents_; | 332 scoped_refptr<TextureLayer> tab_contents_; |
330 unsigned next_sync_point_; | 333 uint64_t next_fence_sync_; |
331 bool clean_up_started_; | 334 bool clean_up_started_; |
332 }; | 335 }; |
333 | 336 |
334 TEST_F(BrowserCompositorInvalidateLayerTreePerfTest, DenseBrowserUIThreaded) { | 337 TEST_F(BrowserCompositorInvalidateLayerTreePerfTest, DenseBrowserUIThreaded) { |
335 measure_commit_cost_ = true; | 338 measure_commit_cost_ = true; |
336 SetTestName("dense_layer_tree"); | 339 SetTestName("dense_layer_tree"); |
337 ReadTestFile("dense_layer_tree"); | 340 ReadTestFile("dense_layer_tree"); |
338 RunTest(CompositorMode::Threaded, false); | 341 RunTest(CompositorMode::Threaded, false); |
339 } | 342 } |
340 | 343 |
341 // Simulates a page with several large, transformed and animated layers. | 344 // Simulates a page with several large, transformed and animated layers. |
342 TEST_F(LayerTreeHostPerfTestJsonReader, HeavyPageThreaded) { | 345 TEST_F(LayerTreeHostPerfTestJsonReader, HeavyPageThreaded) { |
343 begin_frame_driven_drawing_ = true; | 346 begin_frame_driven_drawing_ = true; |
344 measure_commit_cost_ = true; | 347 measure_commit_cost_ = true; |
345 SetTestName("heavy_page"); | 348 SetTestName("heavy_page"); |
346 ReadTestFile("heavy_layer_tree"); | 349 ReadTestFile("heavy_layer_tree"); |
347 RunTest(CompositorMode::Threaded, false); | 350 RunTest(CompositorMode::Threaded, false); |
348 } | 351 } |
349 | 352 |
350 } // namespace | 353 } // namespace |
351 } // namespace cc | 354 } // namespace cc |
OLD | NEW |