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

Side by Side Diff: cc/output/software_renderer_unittest.cc

Issue 1866203004: Convert //cc from scoped_ptr to std::unique_ptr. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: scopedptrcc: rebase Created 4 years, 8 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/output/software_renderer.cc ('k') | cc/output/texture_mailbox_deleter.h » ('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/output/software_renderer.h" 5 #include "cc/output/software_renderer.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include "base/memory/ptr_util.h"
9 #include "base/run_loop.h" 10 #include "base/run_loop.h"
10 #include "cc/output/compositor_frame_metadata.h" 11 #include "cc/output/compositor_frame_metadata.h"
11 #include "cc/output/copy_output_request.h" 12 #include "cc/output/copy_output_request.h"
12 #include "cc/output/copy_output_result.h" 13 #include "cc/output/copy_output_result.h"
13 #include "cc/output/software_output_device.h" 14 #include "cc/output/software_output_device.h"
14 #include "cc/quads/render_pass.h" 15 #include "cc/quads/render_pass.h"
15 #include "cc/quads/render_pass_draw_quad.h" 16 #include "cc/quads/render_pass_draw_quad.h"
16 #include "cc/quads/solid_color_draw_quad.h" 17 #include "cc/quads/solid_color_draw_quad.h"
17 #include "cc/quads/tile_draw_quad.h" 18 #include "cc/quads/tile_draw_quad.h"
18 #include "cc/test/animation_test_common.h" 19 #include "cc/test/animation_test_common.h"
19 #include "cc/test/fake_output_surface.h" 20 #include "cc/test/fake_output_surface.h"
20 #include "cc/test/fake_output_surface_client.h" 21 #include "cc/test/fake_output_surface_client.h"
21 #include "cc/test/fake_resource_provider.h" 22 #include "cc/test/fake_resource_provider.h"
22 #include "cc/test/geometry_test_utils.h" 23 #include "cc/test/geometry_test_utils.h"
23 #include "cc/test/render_pass_test_utils.h" 24 #include "cc/test/render_pass_test_utils.h"
24 #include "cc/test/test_shared_bitmap_manager.h" 25 #include "cc/test/test_shared_bitmap_manager.h"
25 #include "testing/gmock/include/gmock/gmock.h" 26 #include "testing/gmock/include/gmock/gmock.h"
26 #include "testing/gtest/include/gtest/gtest.h" 27 #include "testing/gtest/include/gtest/gtest.h"
27 #include "third_party/skia/include/core/SkCanvas.h" 28 #include "third_party/skia/include/core/SkCanvas.h"
28 29
29 namespace cc { 30 namespace cc {
30 namespace { 31 namespace {
31 32
32 class SoftwareRendererTest : public testing::Test, public RendererClient { 33 class SoftwareRendererTest : public testing::Test, public RendererClient {
33 public: 34 public:
34 void InitializeRenderer( 35 void InitializeRenderer(
35 scoped_ptr<SoftwareOutputDevice> software_output_device) { 36 std::unique_ptr<SoftwareOutputDevice> software_output_device) {
36 output_surface_ = 37 output_surface_ =
37 FakeOutputSurface::CreateSoftware(std::move(software_output_device)); 38 FakeOutputSurface::CreateSoftware(std::move(software_output_device));
38 CHECK(output_surface_->BindToClient(&output_surface_client_)); 39 CHECK(output_surface_->BindToClient(&output_surface_client_));
39 40
40 shared_bitmap_manager_.reset(new TestSharedBitmapManager()); 41 shared_bitmap_manager_.reset(new TestSharedBitmapManager());
41 resource_provider_ = FakeResourceProvider::Create( 42 resource_provider_ = FakeResourceProvider::Create(
42 output_surface_.get(), shared_bitmap_manager_.get()); 43 output_surface_.get(), shared_bitmap_manager_.get());
43 renderer_ = SoftwareRenderer::Create( 44 renderer_ = SoftwareRenderer::Create(
44 this, &settings_, output_surface_.get(), resource_provider()); 45 this, &settings_, output_surface_.get(), resource_provider());
45 } 46 }
46 47
47 ResourceProvider* resource_provider() const { 48 ResourceProvider* resource_provider() const {
48 return resource_provider_.get(); 49 return resource_provider_.get();
49 } 50 }
50 51
51 SoftwareRenderer* renderer() const { return renderer_.get(); } 52 SoftwareRenderer* renderer() const { return renderer_.get(); }
52 53
53 // RendererClient implementation. 54 // RendererClient implementation.
54 void SetFullRootLayerDamage() override {} 55 void SetFullRootLayerDamage() override {}
55 56
56 scoped_ptr<SkBitmap> DrawAndCopyOutput(RenderPassList* list, 57 std::unique_ptr<SkBitmap> DrawAndCopyOutput(RenderPassList* list,
57 float device_scale_factor, 58 float device_scale_factor,
58 gfx::Rect device_viewport_rect) { 59 gfx::Rect device_viewport_rect) {
59 scoped_ptr<SkBitmap> bitmap_result; 60 std::unique_ptr<SkBitmap> bitmap_result;
60 base::RunLoop loop; 61 base::RunLoop loop;
61 62
62 list->back()->copy_requests.push_back( 63 list->back()->copy_requests.push_back(
63 CopyOutputRequest::CreateBitmapRequest( 64 CopyOutputRequest::CreateBitmapRequest(
64 base::Bind(&SoftwareRendererTest::SaveBitmapResult, 65 base::Bind(&SoftwareRendererTest::SaveBitmapResult,
65 base::Unretained(&bitmap_result), 66 base::Unretained(&bitmap_result),
66 loop.QuitClosure()))); 67 loop.QuitClosure())));
67 68
68 renderer()->DrawFrame(list, 69 renderer()->DrawFrame(list,
69 device_scale_factor, 70 device_scale_factor,
70 device_viewport_rect, 71 device_viewport_rect,
71 device_viewport_rect, 72 device_viewport_rect,
72 false); 73 false);
73 loop.Run(); 74 loop.Run();
74 return bitmap_result; 75 return bitmap_result;
75 } 76 }
76 77
77 static void SaveBitmapResult(scoped_ptr<SkBitmap>* bitmap_result, 78 static void SaveBitmapResult(std::unique_ptr<SkBitmap>* bitmap_result,
78 const base::Closure& quit_closure, 79 const base::Closure& quit_closure,
79 scoped_ptr<CopyOutputResult> result) { 80 std::unique_ptr<CopyOutputResult> result) {
80 DCHECK(result->HasBitmap()); 81 DCHECK(result->HasBitmap());
81 *bitmap_result = result->TakeBitmap(); 82 *bitmap_result = result->TakeBitmap();
82 quit_closure.Run(); 83 quit_closure.Run();
83 } 84 }
84 85
85 protected: 86 protected:
86 RendererSettings settings_; 87 RendererSettings settings_;
87 FakeOutputSurfaceClient output_surface_client_; 88 FakeOutputSurfaceClient output_surface_client_;
88 scoped_ptr<FakeOutputSurface> output_surface_; 89 std::unique_ptr<FakeOutputSurface> output_surface_;
89 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; 90 std::unique_ptr<SharedBitmapManager> shared_bitmap_manager_;
90 scoped_ptr<ResourceProvider> resource_provider_; 91 std::unique_ptr<ResourceProvider> resource_provider_;
91 scoped_ptr<SoftwareRenderer> renderer_; 92 std::unique_ptr<SoftwareRenderer> renderer_;
92 }; 93 };
93 94
94 TEST_F(SoftwareRendererTest, SolidColorQuad) { 95 TEST_F(SoftwareRendererTest, SolidColorQuad) {
95 gfx::Size outer_size(100, 100); 96 gfx::Size outer_size(100, 100);
96 gfx::Size inner_size(98, 98); 97 gfx::Size inner_size(98, 98);
97 gfx::Rect outer_rect(outer_size); 98 gfx::Rect outer_rect(outer_size);
98 gfx::Rect inner_rect(gfx::Point(1, 1), inner_size); 99 gfx::Rect inner_rect(gfx::Point(1, 1), inner_size);
99 gfx::Rect visible_rect(gfx::Point(1, 2), gfx::Size(98, 97)); 100 gfx::Rect visible_rect(gfx::Point(1, 2), gfx::Size(98, 97));
100 101
101 InitializeRenderer(make_scoped_ptr(new SoftwareOutputDevice)); 102 InitializeRenderer(base::WrapUnique(new SoftwareOutputDevice));
102 103
103 RenderPassId root_render_pass_id = RenderPassId(1, 1); 104 RenderPassId root_render_pass_id = RenderPassId(1, 1);
104 scoped_ptr<RenderPass> root_render_pass = RenderPass::Create(); 105 std::unique_ptr<RenderPass> root_render_pass = RenderPass::Create();
105 root_render_pass->SetNew( 106 root_render_pass->SetNew(
106 root_render_pass_id, outer_rect, outer_rect, gfx::Transform()); 107 root_render_pass_id, outer_rect, outer_rect, gfx::Transform());
107 SharedQuadState* shared_quad_state = 108 SharedQuadState* shared_quad_state =
108 root_render_pass->CreateAndAppendSharedQuadState(); 109 root_render_pass->CreateAndAppendSharedQuadState();
109 shared_quad_state->SetAll(gfx::Transform(), 110 shared_quad_state->SetAll(gfx::Transform(),
110 outer_size, 111 outer_size,
111 outer_rect, 112 outer_rect,
112 outer_rect, 113 outer_rect,
113 false, 114 false,
114 1.0, 115 1.0,
115 SkXfermode::kSrcOver_Mode, 116 SkXfermode::kSrcOver_Mode,
116 0); 117 0);
117 SolidColorDrawQuad* inner_quad = 118 SolidColorDrawQuad* inner_quad =
118 root_render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 119 root_render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
119 inner_quad->SetNew( 120 inner_quad->SetNew(
120 shared_quad_state, inner_rect, inner_rect, SK_ColorCYAN, false); 121 shared_quad_state, inner_rect, inner_rect, SK_ColorCYAN, false);
121 inner_quad->visible_rect = visible_rect; 122 inner_quad->visible_rect = visible_rect;
122 SolidColorDrawQuad* outer_quad = 123 SolidColorDrawQuad* outer_quad =
123 root_render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 124 root_render_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
124 outer_quad->SetNew( 125 outer_quad->SetNew(
125 shared_quad_state, outer_rect, outer_rect, SK_ColorYELLOW, false); 126 shared_quad_state, outer_rect, outer_rect, SK_ColorYELLOW, false);
126 127
127 RenderPassList list; 128 RenderPassList list;
128 list.push_back(std::move(root_render_pass)); 129 list.push_back(std::move(root_render_pass));
129 130
130 float device_scale_factor = 1.f; 131 float device_scale_factor = 1.f;
131 gfx::Rect device_viewport_rect(outer_size); 132 gfx::Rect device_viewport_rect(outer_size);
132 scoped_ptr<SkBitmap> output = 133 std::unique_ptr<SkBitmap> output =
133 DrawAndCopyOutput(&list, device_scale_factor, device_viewport_rect); 134 DrawAndCopyOutput(&list, device_scale_factor, device_viewport_rect);
134 EXPECT_EQ(outer_rect.width(), output->info().width()); 135 EXPECT_EQ(outer_rect.width(), output->info().width());
135 EXPECT_EQ(outer_rect.height(), output->info().height()); 136 EXPECT_EQ(outer_rect.height(), output->info().height());
136 137
137 EXPECT_EQ(SK_ColorYELLOW, output->getColor(0, 0)); 138 EXPECT_EQ(SK_ColorYELLOW, output->getColor(0, 0));
138 EXPECT_EQ(SK_ColorYELLOW, 139 EXPECT_EQ(SK_ColorYELLOW,
139 output->getColor(outer_size.width() - 1, outer_size.height() - 1)); 140 output->getColor(outer_size.width() - 1, outer_size.height() - 1));
140 EXPECT_EQ(SK_ColorYELLOW, output->getColor(1, 1)); 141 EXPECT_EQ(SK_ColorYELLOW, output->getColor(1, 1));
141 EXPECT_EQ(SK_ColorCYAN, output->getColor(1, 2)); 142 EXPECT_EQ(SK_ColorCYAN, output->getColor(1, 2));
142 EXPECT_EQ(SK_ColorCYAN, 143 EXPECT_EQ(SK_ColorCYAN,
143 output->getColor(inner_size.width() - 1, inner_size.height() - 1)); 144 output->getColor(inner_size.width() - 1, inner_size.height() - 1));
144 } 145 }
145 146
146 TEST_F(SoftwareRendererTest, TileQuad) { 147 TEST_F(SoftwareRendererTest, TileQuad) {
147 gfx::Size outer_size(100, 100); 148 gfx::Size outer_size(100, 100);
148 gfx::Size inner_size(98, 98); 149 gfx::Size inner_size(98, 98);
149 gfx::Rect outer_rect(outer_size); 150 gfx::Rect outer_rect(outer_size);
150 gfx::Rect inner_rect(gfx::Point(1, 1), inner_size); 151 gfx::Rect inner_rect(gfx::Point(1, 1), inner_size);
151 InitializeRenderer(make_scoped_ptr(new SoftwareOutputDevice)); 152 InitializeRenderer(base::WrapUnique(new SoftwareOutputDevice));
152 153
153 ResourceId resource_yellow = resource_provider()->CreateResource( 154 ResourceId resource_yellow = resource_provider()->CreateResource(
154 outer_size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, RGBA_8888); 155 outer_size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, RGBA_8888);
155 ResourceId resource_cyan = resource_provider()->CreateResource( 156 ResourceId resource_cyan = resource_provider()->CreateResource(
156 inner_size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, RGBA_8888); 157 inner_size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, RGBA_8888);
157 158
158 SkBitmap yellow_tile; 159 SkBitmap yellow_tile;
159 yellow_tile.allocN32Pixels(outer_size.width(), outer_size.height()); 160 yellow_tile.allocN32Pixels(outer_size.width(), outer_size.height());
160 yellow_tile.eraseColor(SK_ColorYELLOW); 161 yellow_tile.eraseColor(SK_ColorYELLOW);
161 162
162 SkBitmap cyan_tile; 163 SkBitmap cyan_tile;
163 cyan_tile.allocN32Pixels(inner_size.width(), inner_size.height()); 164 cyan_tile.allocN32Pixels(inner_size.width(), inner_size.height());
164 cyan_tile.eraseColor(SK_ColorCYAN); 165 cyan_tile.eraseColor(SK_ColorCYAN);
165 166
166 resource_provider()->CopyToResource( 167 resource_provider()->CopyToResource(
167 resource_yellow, static_cast<uint8_t*>(yellow_tile.getPixels()), 168 resource_yellow, static_cast<uint8_t*>(yellow_tile.getPixels()),
168 outer_size); 169 outer_size);
169 resource_provider()->CopyToResource( 170 resource_provider()->CopyToResource(
170 resource_cyan, static_cast<uint8_t*>(cyan_tile.getPixels()), inner_size); 171 resource_cyan, static_cast<uint8_t*>(cyan_tile.getPixels()), inner_size);
171 172
172 gfx::Rect root_rect = outer_rect; 173 gfx::Rect root_rect = outer_rect;
173 174
174 RenderPassId root_render_pass_id = RenderPassId(1, 1); 175 RenderPassId root_render_pass_id = RenderPassId(1, 1);
175 scoped_ptr<RenderPass> root_render_pass = RenderPass::Create(); 176 std::unique_ptr<RenderPass> root_render_pass = RenderPass::Create();
176 root_render_pass->SetNew( 177 root_render_pass->SetNew(
177 root_render_pass_id, root_rect, root_rect, gfx::Transform()); 178 root_render_pass_id, root_rect, root_rect, gfx::Transform());
178 SharedQuadState* shared_quad_state = 179 SharedQuadState* shared_quad_state =
179 root_render_pass->CreateAndAppendSharedQuadState(); 180 root_render_pass->CreateAndAppendSharedQuadState();
180 shared_quad_state->SetAll(gfx::Transform(), 181 shared_quad_state->SetAll(gfx::Transform(),
181 outer_size, 182 outer_size,
182 outer_rect, 183 outer_rect,
183 outer_rect, 184 outer_rect,
184 false, 185 false,
185 1.0, 186 1.0,
186 SkXfermode::kSrcOver_Mode, 187 SkXfermode::kSrcOver_Mode,
187 0); 188 0);
188 TileDrawQuad* inner_quad = 189 TileDrawQuad* inner_quad =
189 root_render_pass->CreateAndAppendDrawQuad<TileDrawQuad>(); 190 root_render_pass->CreateAndAppendDrawQuad<TileDrawQuad>();
190 inner_quad->SetNew(shared_quad_state, inner_rect, inner_rect, inner_rect, 191 inner_quad->SetNew(shared_quad_state, inner_rect, inner_rect, inner_rect,
191 resource_cyan, gfx::RectF(gfx::SizeF(inner_size)), 192 resource_cyan, gfx::RectF(gfx::SizeF(inner_size)),
192 inner_size, false, false); 193 inner_size, false, false);
193 TileDrawQuad* outer_quad = 194 TileDrawQuad* outer_quad =
194 root_render_pass->CreateAndAppendDrawQuad<TileDrawQuad>(); 195 root_render_pass->CreateAndAppendDrawQuad<TileDrawQuad>();
195 outer_quad->SetNew(shared_quad_state, outer_rect, outer_rect, outer_rect, 196 outer_quad->SetNew(shared_quad_state, outer_rect, outer_rect, outer_rect,
196 resource_yellow, gfx::RectF(gfx::SizeF(outer_size)), 197 resource_yellow, gfx::RectF(gfx::SizeF(outer_size)),
197 outer_size, false, false); 198 outer_size, false, false);
198 199
199 RenderPassList list; 200 RenderPassList list;
200 list.push_back(std::move(root_render_pass)); 201 list.push_back(std::move(root_render_pass));
201 202
202 float device_scale_factor = 1.f; 203 float device_scale_factor = 1.f;
203 gfx::Rect device_viewport_rect(outer_size); 204 gfx::Rect device_viewport_rect(outer_size);
204 scoped_ptr<SkBitmap> output = 205 std::unique_ptr<SkBitmap> output =
205 DrawAndCopyOutput(&list, device_scale_factor, device_viewport_rect); 206 DrawAndCopyOutput(&list, device_scale_factor, device_viewport_rect);
206 EXPECT_EQ(outer_rect.width(), output->info().width()); 207 EXPECT_EQ(outer_rect.width(), output->info().width());
207 EXPECT_EQ(outer_rect.height(), output->info().height()); 208 EXPECT_EQ(outer_rect.height(), output->info().height());
208 209
209 EXPECT_EQ(SK_ColorYELLOW, output->getColor(0, 0)); 210 EXPECT_EQ(SK_ColorYELLOW, output->getColor(0, 0));
210 EXPECT_EQ(SK_ColorYELLOW, 211 EXPECT_EQ(SK_ColorYELLOW,
211 output->getColor(outer_size.width() - 1, outer_size.height() - 1)); 212 output->getColor(outer_size.width() - 1, outer_size.height() - 1));
212 EXPECT_EQ(SK_ColorCYAN, output->getColor(1, 1)); 213 EXPECT_EQ(SK_ColorCYAN, output->getColor(1, 1));
213 EXPECT_EQ(SK_ColorCYAN, 214 EXPECT_EQ(SK_ColorCYAN,
214 output->getColor(inner_size.width() - 1, inner_size.height() - 1)); 215 output->getColor(inner_size.width() - 1, inner_size.height() - 1));
215 } 216 }
216 217
217 TEST_F(SoftwareRendererTest, TileQuadVisibleRect) { 218 TEST_F(SoftwareRendererTest, TileQuadVisibleRect) {
218 gfx::Size tile_size(100, 100); 219 gfx::Size tile_size(100, 100);
219 gfx::Rect tile_rect(tile_size); 220 gfx::Rect tile_rect(tile_size);
220 gfx::Rect visible_rect = tile_rect; 221 gfx::Rect visible_rect = tile_rect;
221 visible_rect.Inset(1, 2, 3, 4); 222 visible_rect.Inset(1, 2, 3, 4);
222 InitializeRenderer(make_scoped_ptr(new SoftwareOutputDevice)); 223 InitializeRenderer(base::WrapUnique(new SoftwareOutputDevice));
223 224
224 ResourceId resource_cyan = resource_provider()->CreateResource( 225 ResourceId resource_cyan = resource_provider()->CreateResource(
225 tile_size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, RGBA_8888); 226 tile_size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, RGBA_8888);
226 227
227 SkBitmap cyan_tile; // The lowest five rows are yellow. 228 SkBitmap cyan_tile; // The lowest five rows are yellow.
228 cyan_tile.allocN32Pixels(tile_size.width(), tile_size.height()); 229 cyan_tile.allocN32Pixels(tile_size.width(), tile_size.height());
229 cyan_tile.eraseColor(SK_ColorCYAN); 230 cyan_tile.eraseColor(SK_ColorCYAN);
230 cyan_tile.eraseArea( 231 cyan_tile.eraseArea(
231 SkIRect::MakeLTRB( 232 SkIRect::MakeLTRB(
232 0, visible_rect.bottom() - 1, tile_rect.width(), tile_rect.bottom()), 233 0, visible_rect.bottom() - 1, tile_rect.width(), tile_rect.bottom()),
233 SK_ColorYELLOW); 234 SK_ColorYELLOW);
234 235
235 resource_provider()->CopyToResource( 236 resource_provider()->CopyToResource(
236 resource_cyan, static_cast<uint8_t*>(cyan_tile.getPixels()), tile_size); 237 resource_cyan, static_cast<uint8_t*>(cyan_tile.getPixels()), tile_size);
237 238
238 gfx::Rect root_rect(tile_size); 239 gfx::Rect root_rect(tile_size);
239 240
240 RenderPassId root_render_pass_id = RenderPassId(1, 1); 241 RenderPassId root_render_pass_id = RenderPassId(1, 1);
241 scoped_ptr<RenderPass> root_render_pass = RenderPass::Create(); 242 std::unique_ptr<RenderPass> root_render_pass = RenderPass::Create();
242 root_render_pass->SetNew( 243 root_render_pass->SetNew(
243 root_render_pass_id, root_rect, root_rect, gfx::Transform()); 244 root_render_pass_id, root_rect, root_rect, gfx::Transform());
244 SharedQuadState* shared_quad_state = 245 SharedQuadState* shared_quad_state =
245 root_render_pass->CreateAndAppendSharedQuadState(); 246 root_render_pass->CreateAndAppendSharedQuadState();
246 shared_quad_state->SetAll(gfx::Transform(), 247 shared_quad_state->SetAll(gfx::Transform(),
247 tile_size, 248 tile_size,
248 tile_rect, 249 tile_rect,
249 tile_rect, 250 tile_rect,
250 false, 251 false,
251 1.0, 252 1.0,
252 SkXfermode::kSrcOver_Mode, 253 SkXfermode::kSrcOver_Mode,
253 0); 254 0);
254 TileDrawQuad* quad = 255 TileDrawQuad* quad =
255 root_render_pass->CreateAndAppendDrawQuad<TileDrawQuad>(); 256 root_render_pass->CreateAndAppendDrawQuad<TileDrawQuad>();
256 quad->SetNew(shared_quad_state, tile_rect, tile_rect, tile_rect, 257 quad->SetNew(shared_quad_state, tile_rect, tile_rect, tile_rect,
257 resource_cyan, gfx::RectF(gfx::SizeF(tile_size)), tile_size, 258 resource_cyan, gfx::RectF(gfx::SizeF(tile_size)), tile_size,
258 false, false); 259 false, false);
259 quad->visible_rect = visible_rect; 260 quad->visible_rect = visible_rect;
260 261
261 RenderPassList list; 262 RenderPassList list;
262 list.push_back(std::move(root_render_pass)); 263 list.push_back(std::move(root_render_pass));
263 264
264 float device_scale_factor = 1.f; 265 float device_scale_factor = 1.f;
265 gfx::Rect device_viewport_rect(tile_size); 266 gfx::Rect device_viewport_rect(tile_size);
266 scoped_ptr<SkBitmap> output = 267 std::unique_ptr<SkBitmap> output =
267 DrawAndCopyOutput(&list, device_scale_factor, device_viewport_rect); 268 DrawAndCopyOutput(&list, device_scale_factor, device_viewport_rect);
268 EXPECT_EQ(tile_rect.width(), output->info().width()); 269 EXPECT_EQ(tile_rect.width(), output->info().width());
269 EXPECT_EQ(tile_rect.height(), output->info().height()); 270 EXPECT_EQ(tile_rect.height(), output->info().height());
270 271
271 // Check portion of tile not in visible rect isn't drawn. 272 // Check portion of tile not in visible rect isn't drawn.
272 const unsigned int kTransparent = SK_ColorTRANSPARENT; 273 const unsigned int kTransparent = SK_ColorTRANSPARENT;
273 EXPECT_EQ(kTransparent, output->getColor(0, 0)); 274 EXPECT_EQ(kTransparent, output->getColor(0, 0));
274 EXPECT_EQ(kTransparent, 275 EXPECT_EQ(kTransparent,
275 output->getColor(tile_rect.width() - 1, tile_rect.height() - 1)); 276 output->getColor(tile_rect.width() - 1, tile_rect.height() - 1));
276 EXPECT_EQ(kTransparent, 277 EXPECT_EQ(kTransparent,
277 output->getColor(visible_rect.x() - 1, visible_rect.y() - 1)); 278 output->getColor(visible_rect.x() - 1, visible_rect.y() - 1));
278 EXPECT_EQ(kTransparent, 279 EXPECT_EQ(kTransparent,
279 output->getColor(visible_rect.right(), visible_rect.bottom())); 280 output->getColor(visible_rect.right(), visible_rect.bottom()));
280 // Ensure visible part is drawn correctly. 281 // Ensure visible part is drawn correctly.
281 EXPECT_EQ(SK_ColorCYAN, output->getColor(visible_rect.x(), visible_rect.y())); 282 EXPECT_EQ(SK_ColorCYAN, output->getColor(visible_rect.x(), visible_rect.y()));
282 EXPECT_EQ( 283 EXPECT_EQ(
283 SK_ColorCYAN, 284 SK_ColorCYAN,
284 output->getColor(visible_rect.right() - 2, visible_rect.bottom() - 2)); 285 output->getColor(visible_rect.right() - 2, visible_rect.bottom() - 2));
285 // Ensure last visible line is correct. 286 // Ensure last visible line is correct.
286 EXPECT_EQ( 287 EXPECT_EQ(
287 SK_ColorYELLOW, 288 SK_ColorYELLOW,
288 output->getColor(visible_rect.right() - 1, visible_rect.bottom() - 1)); 289 output->getColor(visible_rect.right() - 1, visible_rect.bottom() - 1));
289 } 290 }
290 291
291 TEST_F(SoftwareRendererTest, ShouldClearRootRenderPass) { 292 TEST_F(SoftwareRendererTest, ShouldClearRootRenderPass) {
292 float device_scale_factor = 1.f; 293 float device_scale_factor = 1.f;
293 gfx::Rect device_viewport_rect(0, 0, 100, 100); 294 gfx::Rect device_viewport_rect(0, 0, 100, 100);
294 295
295 settings_.should_clear_root_render_pass = false; 296 settings_.should_clear_root_render_pass = false;
296 InitializeRenderer(make_scoped_ptr(new SoftwareOutputDevice)); 297 InitializeRenderer(base::WrapUnique(new SoftwareOutputDevice));
297 298
298 RenderPassList list; 299 RenderPassList list;
299 300
300 // Draw a fullscreen green quad in a first frame. 301 // Draw a fullscreen green quad in a first frame.
301 RenderPassId root_clear_pass_id(1, 0); 302 RenderPassId root_clear_pass_id(1, 0);
302 RenderPass* root_clear_pass = AddRenderPass( 303 RenderPass* root_clear_pass = AddRenderPass(
303 &list, root_clear_pass_id, device_viewport_rect, gfx::Transform()); 304 &list, root_clear_pass_id, device_viewport_rect, gfx::Transform());
304 AddQuad(root_clear_pass, device_viewport_rect, SK_ColorGREEN); 305 AddQuad(root_clear_pass, device_viewport_rect, SK_ColorGREEN);
305 306
306 renderer()->DecideRenderPassAllocationsForFrame(list); 307 renderer()->DecideRenderPassAllocationsForFrame(list);
307 308
308 scoped_ptr<SkBitmap> output = 309 std::unique_ptr<SkBitmap> output =
309 DrawAndCopyOutput(&list, device_scale_factor, device_viewport_rect); 310 DrawAndCopyOutput(&list, device_scale_factor, device_viewport_rect);
310 EXPECT_EQ(device_viewport_rect.width(), output->info().width()); 311 EXPECT_EQ(device_viewport_rect.width(), output->info().width());
311 EXPECT_EQ(device_viewport_rect.height(), output->info().height()); 312 EXPECT_EQ(device_viewport_rect.height(), output->info().height());
312 313
313 EXPECT_EQ(SK_ColorGREEN, output->getColor(0, 0)); 314 EXPECT_EQ(SK_ColorGREEN, output->getColor(0, 0));
314 EXPECT_EQ(SK_ColorGREEN, 315 EXPECT_EQ(SK_ColorGREEN,
315 output->getColor(device_viewport_rect.width() - 1, 316 output->getColor(device_viewport_rect.width() - 1,
316 device_viewport_rect.height() - 1)); 317 device_viewport_rect.height() - 1));
317 318
318 list.clear(); 319 list.clear();
(...skipping 22 matching lines...) Expand all
341 EXPECT_EQ(SK_ColorMAGENTA, 342 EXPECT_EQ(SK_ColorMAGENTA,
342 output->getColor(smaller_rect.x(), smaller_rect.y())); 343 output->getColor(smaller_rect.x(), smaller_rect.y()));
343 EXPECT_EQ( 344 EXPECT_EQ(
344 SK_ColorMAGENTA, 345 SK_ColorMAGENTA,
345 output->getColor(smaller_rect.right() - 1, smaller_rect.bottom() - 1)); 346 output->getColor(smaller_rect.right() - 1, smaller_rect.bottom() - 1));
346 } 347 }
347 348
348 TEST_F(SoftwareRendererTest, RenderPassVisibleRect) { 349 TEST_F(SoftwareRendererTest, RenderPassVisibleRect) {
349 float device_scale_factor = 1.f; 350 float device_scale_factor = 1.f;
350 gfx::Rect device_viewport_rect(0, 0, 100, 100); 351 gfx::Rect device_viewport_rect(0, 0, 100, 100);
351 InitializeRenderer(make_scoped_ptr(new SoftwareOutputDevice)); 352 InitializeRenderer(base::WrapUnique(new SoftwareOutputDevice));
352 353
353 RenderPassList list; 354 RenderPassList list;
354 355
355 // Pass drawn as inner quad is magenta. 356 // Pass drawn as inner quad is magenta.
356 gfx::Rect smaller_rect(20, 20, 60, 60); 357 gfx::Rect smaller_rect(20, 20, 60, 60);
357 RenderPassId smaller_pass_id(2, 1); 358 RenderPassId smaller_pass_id(2, 1);
358 RenderPass* smaller_pass = 359 RenderPass* smaller_pass =
359 AddRenderPass(&list, smaller_pass_id, smaller_rect, gfx::Transform()); 360 AddRenderPass(&list, smaller_pass_id, smaller_rect, gfx::Transform());
360 AddQuad(smaller_pass, smaller_rect, SK_ColorMAGENTA); 361 AddQuad(smaller_pass, smaller_rect, SK_ColorMAGENTA);
361 362
362 // Root pass is green. 363 // Root pass is green.
363 RenderPassId root_clear_pass_id(1, 0); 364 RenderPassId root_clear_pass_id(1, 0);
364 RenderPass* root_clear_pass = AddRenderPass( 365 RenderPass* root_clear_pass = AddRenderPass(
365 &list, root_clear_pass_id, device_viewport_rect, gfx::Transform()); 366 &list, root_clear_pass_id, device_viewport_rect, gfx::Transform());
366 AddRenderPassQuad(root_clear_pass, smaller_pass); 367 AddRenderPassQuad(root_clear_pass, smaller_pass);
367 AddQuad(root_clear_pass, device_viewport_rect, SK_ColorGREEN); 368 AddQuad(root_clear_pass, device_viewport_rect, SK_ColorGREEN);
368 369
369 // Interior pass quad has smaller visible rect. 370 // Interior pass quad has smaller visible rect.
370 gfx::Rect interior_visible_rect(30, 30, 40, 40); 371 gfx::Rect interior_visible_rect(30, 30, 40, 40);
371 root_clear_pass->quad_list.front()->visible_rect = interior_visible_rect; 372 root_clear_pass->quad_list.front()->visible_rect = interior_visible_rect;
372 373
373 renderer()->DecideRenderPassAllocationsForFrame(list); 374 renderer()->DecideRenderPassAllocationsForFrame(list);
374 375
375 scoped_ptr<SkBitmap> output = 376 std::unique_ptr<SkBitmap> output =
376 DrawAndCopyOutput(&list, device_scale_factor, device_viewport_rect); 377 DrawAndCopyOutput(&list, device_scale_factor, device_viewport_rect);
377 EXPECT_EQ(device_viewport_rect.width(), output->info().width()); 378 EXPECT_EQ(device_viewport_rect.width(), output->info().width());
378 EXPECT_EQ(device_viewport_rect.height(), output->info().height()); 379 EXPECT_EQ(device_viewport_rect.height(), output->info().height());
379 380
380 EXPECT_EQ(SK_ColorGREEN, output->getColor(0, 0)); 381 EXPECT_EQ(SK_ColorGREEN, output->getColor(0, 0));
381 EXPECT_EQ(SK_ColorGREEN, 382 EXPECT_EQ(SK_ColorGREEN,
382 output->getColor(device_viewport_rect.width() - 1, 383 output->getColor(device_viewport_rect.width() - 1,
383 device_viewport_rect.height() - 1)); 384 device_viewport_rect.height() - 1));
384 385
385 // Part outside visible rect should remain green. 386 // Part outside visible rect should remain green.
386 EXPECT_EQ(SK_ColorGREEN, 387 EXPECT_EQ(SK_ColorGREEN,
387 output->getColor(smaller_rect.x(), smaller_rect.y())); 388 output->getColor(smaller_rect.x(), smaller_rect.y()));
388 EXPECT_EQ( 389 EXPECT_EQ(
389 SK_ColorGREEN, 390 SK_ColorGREEN,
390 output->getColor(smaller_rect.right() - 1, smaller_rect.bottom() - 1)); 391 output->getColor(smaller_rect.right() - 1, smaller_rect.bottom() - 1));
391 392
392 EXPECT_EQ( 393 EXPECT_EQ(
393 SK_ColorMAGENTA, 394 SK_ColorMAGENTA,
394 output->getColor(interior_visible_rect.x(), interior_visible_rect.y())); 395 output->getColor(interior_visible_rect.x(), interior_visible_rect.y()));
395 EXPECT_EQ(SK_ColorMAGENTA, 396 EXPECT_EQ(SK_ColorMAGENTA,
396 output->getColor(interior_visible_rect.right() - 1, 397 output->getColor(interior_visible_rect.right() - 1,
397 interior_visible_rect.bottom() - 1)); 398 interior_visible_rect.bottom() - 1));
398 } 399 }
399 400
400 } // namespace 401 } // namespace
401 } // namespace cc 402 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/software_renderer.cc ('k') | cc/output/texture_mailbox_deleter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698