Chromium Code Reviews| Index: ui/compositor/layer_unittest.cc |
| diff --git a/ui/compositor/layer_unittest.cc b/ui/compositor/layer_unittest.cc |
| index f4e1ab50a800e875aa41df6c6e51ad9a8c1191a2..e10ff807b87c0a207358f39d8ec7c721d4e2e8e1 100644 |
| --- a/ui/compositor/layer_unittest.cc |
| +++ b/ui/compositor/layer_unittest.cc |
| @@ -15,6 +15,8 @@ |
| #include "cc/layers/delegated_frame_provider.h" |
| #include "cc/layers/delegated_frame_resource_collection.h" |
| #include "cc/layers/layer.h" |
| +#include "cc/output/copy_output_request.h" |
| +#include "cc/output/copy_output_result.h" |
| #include "cc/output/delegated_frame_data.h" |
| #include "cc/test/pixel_test_utils.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| @@ -126,8 +128,29 @@ class LayerWithRealCompositorTest : public testing::Test { |
| } |
| bool ReadPixels(SkBitmap* bitmap) { |
| - return GetCompositor()->ReadPixels(bitmap, |
| - gfx::Rect(GetCompositor()->size())); |
| + return ReadPixels(bitmap, gfx::Rect(GetCompositor()->size())); |
| + } |
| + |
| + bool ReadPixels(SkBitmap* bitmap, gfx::Rect source_rect) { |
| + scoped_refptr<ReadbackHolder> holder(new ReadbackHolder); |
| + scoped_ptr<cc::CopyOutputRequest> request = |
| + cc::CopyOutputRequest::CreateBitmapRequest( |
| + base::Bind(&ReadbackHolder::OutputRequestCallback, holder)); |
| + request->set_area(source_rect); |
| + |
| + GetCompositor()->root_layer()->RequestCopyOfOutput(request.Pass()); |
| + |
| + // Wait for copy response. |
| + WaitForDraw(); |
| + |
| + if (holder->completed()) { |
| + *bitmap = holder->result(); |
| + return true; |
| + } |
| + |
| + // Callback never called. |
| + NOTREACHED(); |
| + return false; |
| } |
| void WaitForDraw() { |
| @@ -149,6 +172,29 @@ class LayerWithRealCompositorTest : public testing::Test { |
| } |
| private: |
| + class ReadbackHolder : public base::RefCountedThreadSafe<ReadbackHolder> { |
| + public: |
| + ReadbackHolder() : completed_(false) {} |
| + |
| + void OutputRequestCallback(scoped_ptr<cc::CopyOutputResult> result) { |
| + DCHECK(!completed_); |
| + result_ = result->TakeBitmap(); |
| + completed_ = true; |
| + } |
| + bool completed() const { |
| + return completed_; |
| + }; |
| + const SkBitmap& result() const { return *result_.get(); } |
|
danakj
2014/01/17 17:36:36
can't you just do *result?
enne (OOO)
2014/01/17 17:51:13
I don't think so, since result is a scoped_ptr.
enne (OOO)
2014/01/17 17:52:27
By which I mean I misunderstood what you were aski
|
| + |
| + private: |
| + friend class base::RefCountedThreadSafe<ReadbackHolder>; |
| + |
| + virtual ~ReadbackHolder() {} |
| + |
| + scoped_ptr<SkBitmap> result_; |
| + bool completed_; |
| + }; |
| + |
| scoped_ptr<TestCompositorHost> window_; |
| // The root directory for test files. |
| @@ -783,7 +829,7 @@ TEST_F(LayerWithRealCompositorTest, DrawPixels) { |
| DrawTree(layer.get()); |
| SkBitmap bitmap; |
| - ASSERT_TRUE(GetCompositor()->ReadPixels(&bitmap, gfx::Rect(viewport_size))); |
| + ASSERT_TRUE(ReadPixels(&bitmap, gfx::Rect(viewport_size))); |
| ASSERT_FALSE(bitmap.empty()); |
| SkAutoLockPixels lock(bitmap); |