Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(843)

Side by Side Diff: cc/trees/layer_tree_host_perftest.cc

Issue 2193293004: cc: Make LayerTreeTests use a DelegatingRenderer and Display. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: display-layertreetest: withperftestsfix Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/trees/layer_tree_host_impl_unittest.cc ('k') | cc/trees/layer_tree_host_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 if (measure_commit_cost_) 66 if (measure_commit_cost_)
67 commit_timer_.Start(); 67 commit_timer_.Start();
68 } 68 }
69 69
70 void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { 70 void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override {
71 if (measure_commit_cost_ && draw_timer_.IsWarmedUp()) { 71 if (measure_commit_cost_ && draw_timer_.IsWarmedUp()) {
72 commit_timer_.NextLap(); 72 commit_timer_.NextLap();
73 } 73 }
74 } 74 }
75 75
76 void DrawLayersOnThread(LayerTreeHostImpl* impl) override { 76 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override {
77 if (TestEnded() || CleanUpStarted()) 77 if (TestEnded() || CleanUpStarted())
78 return; 78 return;
79 draw_timer_.NextLap(); 79 draw_timer_.NextLap();
80 if (draw_timer_.HasTimeLimitExpired()) { 80 if (draw_timer_.HasTimeLimitExpired()) {
81 CleanUpAndEndTest(impl); 81 CleanUpAndEndTest();
82 return; 82 return;
83 } 83 }
84 if (!begin_frame_driven_drawing_) 84 if (!begin_frame_driven_drawing_)
85 impl->SetNeedsRedraw(); 85 host_impl->SetNeedsRedraw();
86 if (full_damage_each_frame_) 86 if (full_damage_each_frame_)
87 impl->SetFullRootLayerDamage(); 87 host_impl->SetFullRootLayerDamage();
88 } 88 }
89 89
90 virtual void CleanUpAndEndTest(LayerTreeHostImpl* host_impl) { EndTest(); } 90 virtual void CleanUpAndEndTest() { EndTest(); }
91 91
92 virtual bool CleanUpStarted() { return false; } 92 virtual bool CleanUpStarted() { return false; }
93 93
94 virtual void BuildTree() {} 94 virtual void BuildTree() {}
95 95
96 void AfterTest() override { 96 void AfterTest() override {
97 CHECK(!test_name_.empty()) << "Must SetTestName() before AfterTest()."; 97 CHECK(!test_name_.empty()) << "Must SetTestName() before AfterTest().";
98 perf_test::PrintResult("layer_tree_host_frame_time", "", test_name_, 98 perf_test::PrintResult("layer_tree_host_frame_time", "", test_name_,
99 1000 * draw_timer_.MsPerLap(), "us", true); 99 1000 * draw_timer_.MsPerLap(), "us", true);
100 if (measure_commit_cost_) { 100 if (measure_commit_cost_) {
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 ReadTestFile("long_scrollable_page"); 246 ReadTestFile("long_scrollable_page");
247 RunTest(CompositorMode::SINGLE_THREADED, false); 247 RunTest(CompositorMode::SINGLE_THREADED, false);
248 } 248 }
249 249
250 TEST_F(ScrollingLayerTreePerfTest, LongScrollablePageThreaded) { 250 TEST_F(ScrollingLayerTreePerfTest, LongScrollablePageThreaded) {
251 SetTestName("long_scrollable_page_threaded_impl_side"); 251 SetTestName("long_scrollable_page_threaded_impl_side");
252 ReadTestFile("long_scrollable_page"); 252 ReadTestFile("long_scrollable_page");
253 RunTest(CompositorMode::THREADED, false); 253 RunTest(CompositorMode::THREADED, false);
254 } 254 }
255 255
256 static void EmptyReleaseCallback(const gpu::SyncToken& sync_token,
257 bool lost_resource) {}
258
259 // Simulates main-thread scrolling on each frame. 256 // Simulates main-thread scrolling on each frame.
260 class BrowserCompositorInvalidateLayerTreePerfTest 257 class BrowserCompositorInvalidateLayerTreePerfTest
261 : public LayerTreeHostPerfTestJsonReader { 258 : public LayerTreeHostPerfTestJsonReader {
262 public: 259 public:
263 BrowserCompositorInvalidateLayerTreePerfTest() 260 BrowserCompositorInvalidateLayerTreePerfTest() = default;
264 : LayerTreeHostPerfTestJsonReader(),
265 next_fence_sync_(1),
266 clean_up_started_(false) {}
267 261
268 void BuildTree() override { 262 void BuildTree() override {
269 LayerTreeHostPerfTestJsonReader::BuildTree(); 263 LayerTreeHostPerfTestJsonReader::BuildTree();
270 tab_contents_ = 264 tab_contents_ =
271 static_cast<TextureLayer*>( 265 static_cast<TextureLayer*>(
272 layer_tree_host()->root_layer()->children()[0]-> 266 layer_tree_host()->root_layer()->children()[0]->
273 children()[0]-> 267 children()[0]->
274 children()[0]-> 268 children()[0]->
275 children()[0].get()); 269 children()[0].get());
276 ASSERT_TRUE(tab_contents_.get()); 270 ASSERT_TRUE(tab_contents_.get());
277 } 271 }
278 272
279 void WillCommit() override { 273 void WillCommit() override {
280 if (CleanUpStarted()) 274 if (CleanUpStarted())
281 return; 275 return;
282 gpu::Mailbox gpu_mailbox; 276 gpu::Mailbox gpu_mailbox;
283 std::ostringstream name_stream; 277 std::ostringstream name_stream;
284 name_stream << "name" << next_fence_sync_; 278 name_stream << "name" << next_fence_sync_;
285 gpu_mailbox.SetName( 279 gpu_mailbox.SetName(
286 reinterpret_cast<const int8_t*>(name_stream.str().c_str())); 280 reinterpret_cast<const int8_t*>(name_stream.str().c_str()));
287 std::unique_ptr<SingleReleaseCallback> callback = 281 std::unique_ptr<SingleReleaseCallback> callback =
288 SingleReleaseCallback::Create(base::Bind(&EmptyReleaseCallback)); 282 SingleReleaseCallback::Create(base::Bind(
283 &BrowserCompositorInvalidateLayerTreePerfTest::ReleaseMailbox,
284 base::Unretained(this)));
289 285
290 gpu::SyncToken next_sync_token(gpu::CommandBufferNamespace::GPU_IO, 0, 286 gpu::SyncToken next_sync_token(gpu::CommandBufferNamespace::GPU_IO, 0,
291 gpu::CommandBufferId::FromUnsafeValue(1), 287 gpu::CommandBufferId::FromUnsafeValue(1),
292 next_fence_sync_); 288 next_fence_sync_);
293 next_sync_token.SetVerifyFlush(); 289 next_sync_token.SetVerifyFlush();
294 TextureMailbox mailbox(gpu_mailbox, next_sync_token, GL_TEXTURE_2D); 290 TextureMailbox mailbox(gpu_mailbox, next_sync_token, GL_TEXTURE_2D);
295 next_fence_sync_++; 291 next_fence_sync_++;
296 292
297 tab_contents_->SetTextureMailbox(mailbox, std::move(callback)); 293 tab_contents_->SetTextureMailbox(mailbox, std::move(callback));
294 ++sent_mailboxes_count_;
295 tab_contents_->SetNeedsDisplay();
298 } 296 }
299 297
300 void DidCommit() override { 298 void DidCommit() override {
301 if (CleanUpStarted()) 299 if (CleanUpStarted())
302 return; 300 return;
303 layer_tree_host()->SetNeedsCommit(); 301 layer_tree_host()->SetNeedsCommit();
304 } 302 }
305 303
306 void CleanUpAndEndTest(LayerTreeHostImpl* host_impl) override { 304 void CleanUpAndEndTest() override {
307 clean_up_started_ = true; 305 clean_up_started_ = true;
308 MainThreadTaskRunner()->PostTask( 306 MainThreadTaskRunner()->PostTask(
309 FROM_HERE, 307 FROM_HERE,
310 base::Bind(&BrowserCompositorInvalidateLayerTreePerfTest:: 308 base::Bind(&BrowserCompositorInvalidateLayerTreePerfTest::
311 CleanUpAndEndTestOnMainThread, 309 CleanUpAndEndTestOnMainThread,
312 base::Unretained(this))); 310 base::Unretained(this)));
313 } 311 }
314 312
315 void CleanUpAndEndTestOnMainThread() { 313 void CleanUpAndEndTestOnMainThread() {
316 tab_contents_->SetTextureMailbox(TextureMailbox(), nullptr); 314 tab_contents_->SetTextureMailbox(TextureMailbox(), nullptr);
317 EndTest(); 315 // ReleaseMailbox will end the test when we get the last mailbox back.
316 }
317
318 void ReleaseMailbox(const gpu::SyncToken& sync_token, bool lost_resource) {
319 ++released_mailboxes_count_;
320 if (released_mailboxes_count_ == sent_mailboxes_count_) {
321 DCHECK(CleanUpStarted());
322 EndTest();
323 }
318 } 324 }
319 325
320 bool CleanUpStarted() override { return clean_up_started_; } 326 bool CleanUpStarted() override { return clean_up_started_; }
321 327
322 private: 328 private:
323 scoped_refptr<TextureLayer> tab_contents_; 329 scoped_refptr<TextureLayer> tab_contents_;
324 uint64_t next_fence_sync_; 330 uint64_t next_fence_sync_ = 1;
325 bool clean_up_started_; 331 bool clean_up_started_ = false;
332 int sent_mailboxes_count_ = 0;
333 int released_mailboxes_count_ = 0;
326 }; 334 };
327 335
328 TEST_F(BrowserCompositorInvalidateLayerTreePerfTest, DenseBrowserUIThreaded) { 336 TEST_F(BrowserCompositorInvalidateLayerTreePerfTest, DenseBrowserUIThreaded) {
329 measure_commit_cost_ = true; 337 measure_commit_cost_ = true;
330 SetTestName("dense_layer_tree"); 338 SetTestName("dense_layer_tree");
331 ReadTestFile("dense_layer_tree"); 339 ReadTestFile("dense_layer_tree");
332 RunTest(CompositorMode::THREADED, false); 340 RunTest(CompositorMode::THREADED, false);
333 } 341 }
334 342
335 // Simulates a page with several large, transformed and animated layers. 343 // Simulates a page with several large, transformed and animated layers.
336 TEST_F(LayerTreeHostPerfTestJsonReader, HeavyPageThreaded) { 344 TEST_F(LayerTreeHostPerfTestJsonReader, HeavyPageThreaded) {
337 begin_frame_driven_drawing_ = true; 345 begin_frame_driven_drawing_ = true;
338 measure_commit_cost_ = true; 346 measure_commit_cost_ = true;
339 SetTestName("heavy_page"); 347 SetTestName("heavy_page");
340 ReadTestFile("heavy_layer_tree"); 348 ReadTestFile("heavy_layer_tree");
341 RunTest(CompositorMode::THREADED, false); 349 RunTest(CompositorMode::THREADED, false);
342 } 350 }
343 351
344 } // namespace 352 } // namespace
345 } // namespace cc 353 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl_unittest.cc ('k') | cc/trees/layer_tree_host_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698