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

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

Issue 14273026: cc: Make async readback path use async glRreadPixels. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 7 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 | Annotate | Revision Log
OLDNEW
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/synchronization/lock.h" 9 #include "base/synchronization/lock.h"
10 #include "cc/animation/timing_function.h" 10 #include "cc/animation/timing_function.h"
(...skipping 2565 matching lines...) Expand 10 before | Expand all | Expand 10 after
2576 2576
2577 layer_tree_host()->SetRootLayer(root); 2577 layer_tree_host()->SetRootLayer(root);
2578 LayerTreeHostTest::SetupTree(); 2578 LayerTreeHostTest::SetupTree();
2579 } 2579 }
2580 2580
2581 virtual void BeginTest() OVERRIDE { 2581 virtual void BeginTest() OVERRIDE {
2582 PostSetNeedsCommitToMainThread(); 2582 PostSetNeedsCommitToMainThread();
2583 } 2583 }
2584 2584
2585 virtual void DidCommitAndDrawFrame() { 2585 virtual void DidCommitAndDrawFrame() {
2586 WaitForCallback();
2587 }
2588
2589 void WaitForCallback() {
2590 base::MessageLoop::current()->PostTask(
2591 FROM_HERE,
2592 base::Bind(
2593 &LayerTreeHostTestAsyncReadback::NextStep,
2594 base::Unretained(this)));
2595 }
2596
2597 void NextStep() {
2586 int frame = layer_tree_host()->commit_number(); 2598 int frame = layer_tree_host()->commit_number();
2587 switch (frame) { 2599 switch (frame) {
2588 case 1: 2600 case 1:
2589 child->RequestCopyAsBitmap(base::Bind( 2601 child->RequestCopyAsBitmap(base::Bind(
2590 &LayerTreeHostTestAsyncReadback::BitmapCallback, 2602 &LayerTreeHostTestAsyncReadback::BitmapCallback,
2591 base::Unretained(this))); 2603 base::Unretained(this)));
2592 EXPECT_EQ(0u, callbacks_.size()); 2604 EXPECT_EQ(0u, callbacks_.size());
2593 break; 2605 break;
2594 case 2: 2606 case 2:
2595 // Flush the message loops and make sure the callbacks run. 2607 if (callbacks_.size() < 1u) {
2596 layer_tree_host()->SetNeedsCommit(); 2608 WaitForCallback();
2597 break; 2609 return;
2598 case 3: 2610 }
2599 ASSERT_EQ(1u, callbacks_.size()); 2611 EXPECT_EQ(1u, callbacks_.size());
2600 EXPECT_EQ(gfx::Size(10, 10).ToString(), callbacks_[0].ToString()); 2612 EXPECT_EQ(gfx::Size(10, 10).ToString(), callbacks_[0].ToString());
2601 2613
2602 child->RequestCopyAsBitmap(base::Bind( 2614 child->RequestCopyAsBitmap(base::Bind(
2603 &LayerTreeHostTestAsyncReadback::BitmapCallback, 2615 &LayerTreeHostTestAsyncReadback::BitmapCallback,
2604 base::Unretained(this))); 2616 base::Unretained(this)));
2605 root->RequestCopyAsBitmap(base::Bind( 2617 root->RequestCopyAsBitmap(base::Bind(
2606 &LayerTreeHostTestAsyncReadback::BitmapCallback, 2618 &LayerTreeHostTestAsyncReadback::BitmapCallback,
2607 base::Unretained(this))); 2619 base::Unretained(this)));
2608 child->RequestCopyAsBitmap(base::Bind( 2620 child->RequestCopyAsBitmap(base::Bind(
2609 &LayerTreeHostTestAsyncReadback::BitmapCallback, 2621 &LayerTreeHostTestAsyncReadback::BitmapCallback,
2610 base::Unretained(this))); 2622 base::Unretained(this)));
2611 EXPECT_EQ(1u, callbacks_.size()); 2623 EXPECT_EQ(1u, callbacks_.size());
2612 break; 2624 break;
2613 case 4: 2625 case 3:
2614 // Flush the message loops and make sure the callbacks run. 2626 if (callbacks_.size() < 4u) {
2615 layer_tree_host()->SetNeedsCommit(); 2627 WaitForCallback();
2616 break; 2628 return;
2617 case 5: 2629 }
2618 ASSERT_EQ(4u, callbacks_.size()); 2630 EXPECT_EQ(4u, callbacks_.size());
2619 // The child was copied to a bitmap and passed back twice. 2631 // The child was copied to a bitmap and passed back twice.
2620 EXPECT_EQ(gfx::Size(10, 10).ToString(), callbacks_[1].ToString()); 2632 EXPECT_EQ(gfx::Size(10, 10).ToString(), callbacks_[1].ToString());
2621 EXPECT_EQ(gfx::Size(10, 10).ToString(), callbacks_[2].ToString()); 2633 EXPECT_EQ(gfx::Size(10, 10).ToString(), callbacks_[2].ToString());
2622 // The root was copied to a bitmap and passed back also. 2634 // The root was copied to a bitmap and passed back also.
2623 EXPECT_EQ(gfx::Size(20, 20).ToString(), callbacks_[3].ToString()); 2635 EXPECT_EQ(gfx::Size(20, 20).ToString(), callbacks_[3].ToString());
2624 EndTest(); 2636 EndTest();
2625 break; 2637 break;
2626 } 2638 }
2627 } 2639 }
2628 2640
2629 void BitmapCallback(scoped_ptr<SkBitmap> bitmap) { 2641 void BitmapCallback(scoped_ptr<SkBitmap> bitmap) {
2630 EXPECT_TRUE(layer_tree_host()->proxy()->IsMainThread()); 2642 EXPECT_TRUE(layer_tree_host()->proxy()->IsMainThread());
2631 EXPECT_TRUE(bitmap); 2643 EXPECT_TRUE(bitmap);
2632 callbacks_.push_back(gfx::Size(bitmap->width(), bitmap->height())); 2644 callbacks_.push_back(gfx::Size(bitmap->width(), bitmap->height()));
2633 } 2645 }
2634 2646
2635 virtual void AfterTest() {} 2647 virtual void AfterTest() {
2648 EXPECT_EQ(4u, callbacks_.size());
2649 }
2636 2650
2637 virtual scoped_ptr<OutputSurface> CreateOutputSurface() OVERRIDE { 2651 virtual scoped_ptr<OutputSurface> CreateOutputSurface() OVERRIDE {
2638 if (use_gl_renderer_) 2652 if (use_gl_renderer_)
2639 return FakeOutputSurface::Create3d().PassAs<OutputSurface>(); 2653 return FakeOutputSurface::Create3d().PassAs<OutputSurface>();
2640 return FakeOutputSurface::CreateSoftware( 2654 return FakeOutputSurface::CreateSoftware(
2641 make_scoped_ptr(new SoftwareOutputDevice)).PassAs<OutputSurface>(); 2655 make_scoped_ptr(new SoftwareOutputDevice)).PassAs<OutputSurface>();
2642 } 2656 }
2643 2657
2644 bool use_gl_renderer_; 2658 bool use_gl_renderer_;
2645 std::vector<gfx::Size> callbacks_; 2659 std::vector<gfx::Size> callbacks_;
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
2752 FakeContentLayerClient client_; 2766 FakeContentLayerClient client_;
2753 scoped_refptr<FakeContentLayer> root_; 2767 scoped_refptr<FakeContentLayer> root_;
2754 scoped_refptr<FakeContentLayer> main_destroyed_; 2768 scoped_refptr<FakeContentLayer> main_destroyed_;
2755 scoped_refptr<FakeContentLayer> impl_destroyed_; 2769 scoped_refptr<FakeContentLayer> impl_destroyed_;
2756 }; 2770 };
2757 2771
2758 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestAsyncReadbackLayerDestroyed); 2772 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestAsyncReadbackLayerDestroyed);
2759 2773
2760 } // namespace 2774 } // namespace
2761 } // namespace cc 2775 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698