OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/test/pixel_test.h" | 5 #include "cc/test/pixel_test.h" |
6 | 6 |
7 #include "base/path_service.h" | 7 #include "base/path_service.h" |
| 8 #include "base/run_loop.h" |
8 #include "cc/output/compositor_frame_metadata.h" | 9 #include "cc/output/compositor_frame_metadata.h" |
9 #include "cc/output/gl_renderer.h" | 10 #include "cc/output/gl_renderer.h" |
10 #include "cc/output/output_surface.h" | 11 #include "cc/output/output_surface.h" |
11 #include "cc/output/software_renderer.h" | 12 #include "cc/output/software_renderer.h" |
12 #include "cc/resources/resource_provider.h" | 13 #include "cc/resources/resource_provider.h" |
13 #include "cc/test/paths.h" | 14 #include "cc/test/paths.h" |
14 #include "cc/test/pixel_test_utils.h" | 15 #include "cc/test/pixel_test_utils.h" |
15 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
16 #include "ui/gl/gl_implementation.h" | 17 #include "ui/gl/gl_implementation.h" |
17 #include "webkit/gpu/context_provider_in_process.h" | 18 #include "webkit/gpu/context_provider_in_process.h" |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 | 54 |
54 PixelTest::PixelTest() | 55 PixelTest::PixelTest() |
55 : device_viewport_size_(gfx::Size(200, 200)), | 56 : device_viewport_size_(gfx::Size(200, 200)), |
56 fake_client_(new PixelTestRendererClient(device_viewport_size_)) {} | 57 fake_client_(new PixelTestRendererClient(device_viewport_size_)) {} |
57 | 58 |
58 PixelTest::~PixelTest() {} | 59 PixelTest::~PixelTest() {} |
59 | 60 |
60 bool PixelTest::RunPixelTest(RenderPassList* pass_list, | 61 bool PixelTest::RunPixelTest(RenderPassList* pass_list, |
61 const base::FilePath& ref_file, | 62 const base::FilePath& ref_file, |
62 const PixelComparator& comparator) { | 63 const PixelComparator& comparator) { |
| 64 base::RunLoop run_loop; |
| 65 |
63 pass_list->back()->copy_callbacks.push_back( | 66 pass_list->back()->copy_callbacks.push_back( |
64 base::Bind(&PixelTest::ReadbackResult, base::Unretained(this))); | 67 base::Bind(&PixelTest::ReadbackResult, |
| 68 base::Unretained(this), |
| 69 run_loop.QuitClosure())); |
65 | 70 |
66 renderer_->DecideRenderPassAllocationsForFrame(*pass_list); | 71 renderer_->DecideRenderPassAllocationsForFrame(*pass_list); |
67 renderer_->DrawFrame(pass_list); | 72 renderer_->DrawFrame(pass_list); |
68 | 73 |
69 // TODO(danakj): When the glReadPixels is async, wait for it to finish. | 74 // Wait for the readback to complete. |
| 75 resource_provider_->Finish(); |
| 76 run_loop.Run(); |
70 | 77 |
71 return PixelsMatchReference(ref_file, comparator); | 78 return PixelsMatchReference(ref_file, comparator); |
72 } | 79 } |
73 | 80 |
74 void PixelTest::ReadbackResult(scoped_ptr<SkBitmap> bitmap) { | 81 void PixelTest::ReadbackResult(base::Closure quit_run_loop, |
| 82 scoped_ptr<SkBitmap> bitmap) { |
75 result_bitmap_ = bitmap.Pass(); | 83 result_bitmap_ = bitmap.Pass(); |
| 84 quit_run_loop.Run(); |
76 } | 85 } |
77 | 86 |
78 bool PixelTest::PixelsMatchReference(const base::FilePath& ref_file, | 87 bool PixelTest::PixelsMatchReference(const base::FilePath& ref_file, |
79 const PixelComparator& comparator) { | 88 const PixelComparator& comparator) { |
80 base::FilePath test_data_dir; | 89 base::FilePath test_data_dir; |
81 if (!PathService::Get(cc::DIR_TEST_DATA, &test_data_dir)) | 90 if (!PathService::Get(cc::DIR_TEST_DATA, &test_data_dir)) |
82 return false; | 91 return false; |
83 | 92 |
84 // If this is false, we didn't set up a readback on a render pass. | 93 // If this is false, we didn't set up a readback on a render pass. |
85 if (!result_bitmap_) | 94 if (!result_bitmap_) |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 scoped_ptr<SoftwareOutputDevice> device(new SoftwareOutputDevice()); | 130 scoped_ptr<SoftwareOutputDevice> device(new SoftwareOutputDevice()); |
122 output_surface_.reset(new OutputSurface(device.Pass())); | 131 output_surface_.reset(new OutputSurface(device.Pass())); |
123 resource_provider_ = ResourceProvider::Create(output_surface_.get(), 0); | 132 resource_provider_ = ResourceProvider::Create(output_surface_.get(), 0); |
124 renderer_ = SoftwareRenderer::Create( | 133 renderer_ = SoftwareRenderer::Create( |
125 fake_client_.get(), | 134 fake_client_.get(), |
126 output_surface_.get(), | 135 output_surface_.get(), |
127 resource_provider_.get()).PassAs<DirectRenderer>(); | 136 resource_provider_.get()).PassAs<DirectRenderer>(); |
128 } | 137 } |
129 | 138 |
130 } // namespace cc | 139 } // namespace cc |
OLD | NEW |