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

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

Issue 280043002: Use Async readbacks in the SoftwareRenderer unit tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nocnr-software-renderer-tests: Created 6 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
« no previous file with comments | « no previous file | no next file » | 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 "base/run_loop.h"
7 #include "cc/layers/quad_sink.h" 8 #include "cc/layers/quad_sink.h"
8 #include "cc/output/compositor_frame_metadata.h" 9 #include "cc/output/compositor_frame_metadata.h"
10 #include "cc/output/copy_output_request.h"
11 #include "cc/output/copy_output_result.h"
9 #include "cc/output/software_output_device.h" 12 #include "cc/output/software_output_device.h"
10 #include "cc/quads/render_pass.h" 13 #include "cc/quads/render_pass.h"
11 #include "cc/quads/render_pass_draw_quad.h" 14 #include "cc/quads/render_pass_draw_quad.h"
12 #include "cc/quads/solid_color_draw_quad.h" 15 #include "cc/quads/solid_color_draw_quad.h"
13 #include "cc/quads/tile_draw_quad.h" 16 #include "cc/quads/tile_draw_quad.h"
14 #include "cc/test/animation_test_common.h" 17 #include "cc/test/animation_test_common.h"
15 #include "cc/test/fake_output_surface.h" 18 #include "cc/test/fake_output_surface.h"
16 #include "cc/test/fake_output_surface_client.h" 19 #include "cc/test/fake_output_surface_client.h"
17 #include "cc/test/geometry_test_utils.h" 20 #include "cc/test/geometry_test_utils.h"
18 #include "cc/test/render_pass_test_common.h" 21 #include "cc/test/render_pass_test_common.h"
(...skipping 24 matching lines...) Expand all
43 46
44 ResourceProvider* resource_provider() const { 47 ResourceProvider* resource_provider() const {
45 return resource_provider_.get(); 48 return resource_provider_.get();
46 } 49 }
47 50
48 SoftwareRenderer* renderer() const { return renderer_.get(); } 51 SoftwareRenderer* renderer() const { return renderer_.get(); }
49 52
50 // RendererClient implementation. 53 // RendererClient implementation.
51 virtual void SetFullRootLayerDamage() OVERRIDE {} 54 virtual void SetFullRootLayerDamage() OVERRIDE {}
52 55
56 scoped_ptr<SkBitmap> DrawAndCopyOutput(RenderPassList* list,
57 float device_scale_factor,
58 gfx::Rect device_viewport_rect) {
59 scoped_ptr<SkBitmap> bitmap_result;
60 base::RunLoop loop;
61
62 list->back()->copy_requests.push_back(
63 CopyOutputRequest::CreateBitmapRequest(
64 base::Bind(&SoftwareRendererTest::SaveBitmapResult,
65 base::Unretained(&bitmap_result),
66 loop.QuitClosure())));
67
68 renderer()->DrawFrame(list,
69 device_scale_factor,
70 device_viewport_rect,
71 device_viewport_rect,
72 false);
73 loop.Run();
74 return bitmap_result.Pass();
75 }
76
77 static void SaveBitmapResult(scoped_ptr<SkBitmap>* bitmap_result,
78 const base::Closure& quit_closure,
79 scoped_ptr<CopyOutputResult> result) {
80 DCHECK(result->HasBitmap());
81 *bitmap_result = result->TakeBitmap();
82 quit_closure.Run();
83 }
84
53 protected: 85 protected:
54 LayerTreeSettings settings_; 86 LayerTreeSettings settings_;
55 FakeOutputSurfaceClient output_surface_client_; 87 FakeOutputSurfaceClient output_surface_client_;
56 scoped_ptr<FakeOutputSurface> output_surface_; 88 scoped_ptr<FakeOutputSurface> output_surface_;
57 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; 89 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_;
58 scoped_ptr<ResourceProvider> resource_provider_; 90 scoped_ptr<ResourceProvider> resource_provider_;
59 scoped_ptr<SoftwareRenderer> renderer_; 91 scoped_ptr<SoftwareRenderer> renderer_;
60 }; 92 };
61 93
62 TEST_F(SoftwareRendererTest, SolidColorQuad) { 94 TEST_F(SoftwareRendererTest, SolidColorQuad) {
(...skipping 26 matching lines...) Expand all
89 shared_quad_state, inner_rect, inner_rect, SK_ColorCYAN, false); 121 shared_quad_state, inner_rect, inner_rect, SK_ColorCYAN, false);
90 inner_quad->visible_rect = visible_rect; 122 inner_quad->visible_rect = visible_rect;
91 root_render_pass->AppendQuad(inner_quad.PassAs<DrawQuad>()); 123 root_render_pass->AppendQuad(inner_quad.PassAs<DrawQuad>());
92 root_render_pass->AppendQuad(outer_quad.PassAs<DrawQuad>()); 124 root_render_pass->AppendQuad(outer_quad.PassAs<DrawQuad>());
93 125
94 RenderPassList list; 126 RenderPassList list;
95 list.push_back(root_render_pass.PassAs<RenderPass>()); 127 list.push_back(root_render_pass.PassAs<RenderPass>());
96 128
97 float device_scale_factor = 1.f; 129 float device_scale_factor = 1.f;
98 gfx::Rect device_viewport_rect(outer_size); 130 gfx::Rect device_viewport_rect(outer_size);
99 renderer()->DrawFrame(&list, 131 scoped_ptr<SkBitmap> output =
100 device_scale_factor, 132 DrawAndCopyOutput(&list, device_scale_factor, device_viewport_rect);
101 device_viewport_rect, 133 EXPECT_EQ(outer_rect.width(), output->info().fWidth);
102 device_viewport_rect, 134 EXPECT_EQ(outer_rect.width(), output->info().fHeight);
103 false);
104 135
105 SkBitmap output; 136 EXPECT_EQ(SK_ColorYELLOW, output->getColor(0, 0));
106 output.setConfig(
107 SkBitmap::kARGB_8888_Config, outer_rect.width(), outer_rect.height());
108 output.allocPixels();
109 renderer()->GetFramebufferPixels(output.getPixels(), outer_rect);
110
111 EXPECT_EQ(SK_ColorYELLOW, output.getColor(0, 0));
112 EXPECT_EQ(SK_ColorYELLOW, 137 EXPECT_EQ(SK_ColorYELLOW,
113 output.getColor(outer_size.width() - 1, outer_size.height() - 1)); 138 output->getColor(outer_size.width() - 1, outer_size.height() - 1));
114 EXPECT_EQ(SK_ColorYELLOW, output.getColor(1, 1)); 139 EXPECT_EQ(SK_ColorYELLOW, output->getColor(1, 1));
115 EXPECT_EQ(SK_ColorCYAN, output.getColor(1, 2)); 140 EXPECT_EQ(SK_ColorCYAN, output->getColor(1, 2));
116 EXPECT_EQ(SK_ColorCYAN, 141 EXPECT_EQ(SK_ColorCYAN,
117 output.getColor(inner_size.width() - 1, inner_size.height() - 1)); 142 output->getColor(inner_size.width() - 1, inner_size.height() - 1));
118 } 143 }
119 144
120 TEST_F(SoftwareRendererTest, TileQuad) { 145 TEST_F(SoftwareRendererTest, TileQuad) {
121 gfx::Size outer_size(100, 100); 146 gfx::Size outer_size(100, 100);
122 gfx::Size inner_size(98, 98); 147 gfx::Size inner_size(98, 98);
123 gfx::Rect outer_rect(outer_size); 148 gfx::Rect outer_rect(outer_size);
124 gfx::Rect inner_rect(gfx::Point(1, 1), inner_size); 149 gfx::Rect inner_rect(gfx::Point(1, 1), inner_size);
125 InitializeRenderer(make_scoped_ptr(new SoftwareOutputDevice)); 150 InitializeRenderer(make_scoped_ptr(new SoftwareOutputDevice));
126 151
127 ResourceProvider::ResourceId resource_yellow = 152 ResourceProvider::ResourceId resource_yellow =
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 inner_size, 218 inner_size,
194 false); 219 false);
195 root_render_pass->AppendQuad(inner_quad.PassAs<DrawQuad>()); 220 root_render_pass->AppendQuad(inner_quad.PassAs<DrawQuad>());
196 root_render_pass->AppendQuad(outer_quad.PassAs<DrawQuad>()); 221 root_render_pass->AppendQuad(outer_quad.PassAs<DrawQuad>());
197 222
198 RenderPassList list; 223 RenderPassList list;
199 list.push_back(root_render_pass.PassAs<RenderPass>()); 224 list.push_back(root_render_pass.PassAs<RenderPass>());
200 225
201 float device_scale_factor = 1.f; 226 float device_scale_factor = 1.f;
202 gfx::Rect device_viewport_rect(outer_size); 227 gfx::Rect device_viewport_rect(outer_size);
203 renderer()->DrawFrame(&list, 228 scoped_ptr<SkBitmap> output =
204 device_scale_factor, 229 DrawAndCopyOutput(&list, device_scale_factor, device_viewport_rect);
205 device_viewport_rect, 230 EXPECT_EQ(outer_rect.width(), output->info().fWidth);
206 device_viewport_rect, 231 EXPECT_EQ(outer_rect.width(), output->info().fHeight);
207 false);
208 232
209 SkBitmap output; 233 EXPECT_EQ(SK_ColorYELLOW, output->getColor(0, 0));
210 output.setConfig(
211 SkBitmap::kARGB_8888_Config, outer_size.width(), outer_size.height());
212 output.allocPixels();
213 renderer()->GetFramebufferPixels(output.getPixels(), outer_rect);
214
215 EXPECT_EQ(SK_ColorYELLOW, output.getColor(0, 0));
216 EXPECT_EQ(SK_ColorYELLOW, 234 EXPECT_EQ(SK_ColorYELLOW,
217 output.getColor(outer_size.width() - 1, outer_size.height() - 1)); 235 output->getColor(outer_size.width() - 1, outer_size.height() - 1));
218 EXPECT_EQ(SK_ColorCYAN, output.getColor(1, 1)); 236 EXPECT_EQ(SK_ColorCYAN, output->getColor(1, 1));
219 EXPECT_EQ(SK_ColorCYAN, 237 EXPECT_EQ(SK_ColorCYAN,
220 output.getColor(inner_size.width() - 1, inner_size.height() - 1)); 238 output->getColor(inner_size.width() - 1, inner_size.height() - 1));
221 } 239 }
222 240
223 TEST_F(SoftwareRendererTest, TileQuadVisibleRect) { 241 TEST_F(SoftwareRendererTest, TileQuadVisibleRect) {
224 gfx::Size tile_size(100, 100); 242 gfx::Size tile_size(100, 100);
225 gfx::Rect tile_rect(tile_size); 243 gfx::Rect tile_rect(tile_size);
226 gfx::Rect visible_rect = tile_rect; 244 gfx::Rect visible_rect = tile_rect;
227 visible_rect.Inset(1, 2, 3, 4); 245 visible_rect.Inset(1, 2, 3, 4);
228 InitializeRenderer(make_scoped_ptr(new SoftwareOutputDevice)); 246 InitializeRenderer(make_scoped_ptr(new SoftwareOutputDevice));
229 247
230 ResourceProvider::ResourceId resource_cyan = 248 ResourceProvider::ResourceId resource_cyan =
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 tile_size, 292 tile_size,
275 false); 293 false);
276 quad->visible_rect = visible_rect; 294 quad->visible_rect = visible_rect;
277 root_render_pass->AppendQuad(quad.PassAs<DrawQuad>()); 295 root_render_pass->AppendQuad(quad.PassAs<DrawQuad>());
278 296
279 RenderPassList list; 297 RenderPassList list;
280 list.push_back(root_render_pass.PassAs<RenderPass>()); 298 list.push_back(root_render_pass.PassAs<RenderPass>());
281 299
282 float device_scale_factor = 1.f; 300 float device_scale_factor = 1.f;
283 gfx::Rect device_viewport_rect(tile_size); 301 gfx::Rect device_viewport_rect(tile_size);
284 renderer()->DrawFrame(&list, 302 scoped_ptr<SkBitmap> output =
285 device_scale_factor, 303 DrawAndCopyOutput(&list, device_scale_factor, device_viewport_rect);
286 device_viewport_rect, 304 EXPECT_EQ(tile_rect.width(), output->info().fWidth);
287 device_viewport_rect, 305 EXPECT_EQ(tile_rect.width(), output->info().fHeight);
288 false);
289
290 SkBitmap output;
291 output.setConfig(
292 SkBitmap::kARGB_8888_Config, tile_size.width(), tile_size.height());
293 output.allocPixels();
294 renderer()->GetFramebufferPixels(output.getPixels(), tile_rect);
295 306
296 // Check portion of tile not in visible rect isn't drawn. 307 // Check portion of tile not in visible rect isn't drawn.
297 const unsigned int kTransparent = SK_ColorTRANSPARENT; 308 const unsigned int kTransparent = SK_ColorTRANSPARENT;
298 EXPECT_EQ(kTransparent, output.getColor(0, 0)); 309 EXPECT_EQ(kTransparent, output->getColor(0, 0));
299 EXPECT_EQ(kTransparent, 310 EXPECT_EQ(kTransparent,
300 output.getColor(tile_rect.width() - 1, tile_rect.height() - 1)); 311 output->getColor(tile_rect.width() - 1, tile_rect.height() - 1));
301 EXPECT_EQ(kTransparent, 312 EXPECT_EQ(kTransparent,
302 output.getColor(visible_rect.x() - 1, visible_rect.y() - 1)); 313 output->getColor(visible_rect.x() - 1, visible_rect.y() - 1));
303 EXPECT_EQ(kTransparent, 314 EXPECT_EQ(kTransparent,
304 output.getColor(visible_rect.right(), visible_rect.bottom())); 315 output->getColor(visible_rect.right(), visible_rect.bottom()));
305 // Ensure visible part is drawn correctly. 316 // Ensure visible part is drawn correctly.
306 EXPECT_EQ(SK_ColorCYAN, output.getColor(visible_rect.x(), visible_rect.y())); 317 EXPECT_EQ(SK_ColorCYAN, output->getColor(visible_rect.x(), visible_rect.y()));
307 EXPECT_EQ( 318 EXPECT_EQ(
308 SK_ColorCYAN, 319 SK_ColorCYAN,
309 output.getColor(visible_rect.right() - 2, visible_rect.bottom() - 2)); 320 output->getColor(visible_rect.right() - 2, visible_rect.bottom() - 2));
310 // Ensure last visible line is correct. 321 // Ensure last visible line is correct.
311 EXPECT_EQ( 322 EXPECT_EQ(
312 SK_ColorYELLOW, 323 SK_ColorYELLOW,
313 output.getColor(visible_rect.right() - 1, visible_rect.bottom() - 1)); 324 output->getColor(visible_rect.right() - 1, visible_rect.bottom() - 1));
314 } 325 }
315 326
316 TEST_F(SoftwareRendererTest, ShouldClearRootRenderPass) { 327 TEST_F(SoftwareRendererTest, ShouldClearRootRenderPass) {
317 float device_scale_factor = 1.f; 328 float device_scale_factor = 1.f;
318 gfx::Rect viewport_rect(0, 0, 100, 100); 329 gfx::Rect device_viewport_rect(0, 0, 100, 100);
319 330
320 settings_.should_clear_root_render_pass = false; 331 settings_.should_clear_root_render_pass = false;
321 InitializeRenderer(make_scoped_ptr(new SoftwareOutputDevice)); 332 InitializeRenderer(make_scoped_ptr(new SoftwareOutputDevice));
322 333
323 RenderPassList list; 334 RenderPassList list;
324 335
325 SkBitmap output;
326 output.setConfig(SkBitmap::kARGB_8888_Config,
327 viewport_rect.width(),
328 viewport_rect.height());
329 output.allocPixels();
330
331 // Draw a fullscreen green quad in a first frame. 336 // Draw a fullscreen green quad in a first frame.
332 RenderPass::Id root_clear_pass_id(1, 0); 337 RenderPass::Id root_clear_pass_id(1, 0);
333 TestRenderPass* root_clear_pass = AddRenderPass( 338 TestRenderPass* root_clear_pass = AddRenderPass(
334 &list, root_clear_pass_id, viewport_rect, gfx::Transform()); 339 &list, root_clear_pass_id, device_viewport_rect, gfx::Transform());
335 AddQuad(root_clear_pass, viewport_rect, SK_ColorGREEN); 340 AddQuad(root_clear_pass, device_viewport_rect, SK_ColorGREEN);
336 341
337 renderer()->DecideRenderPassAllocationsForFrame(list); 342 renderer()->DecideRenderPassAllocationsForFrame(list);
338 renderer()->DrawFrame(&list,
339 device_scale_factor,
340 viewport_rect,
341 viewport_rect,
342 false);
343 renderer()->GetFramebufferPixels(output.getPixels(), viewport_rect);
344 343
345 EXPECT_EQ(SK_ColorGREEN, output.getColor(0, 0)); 344 scoped_ptr<SkBitmap> output =
345 DrawAndCopyOutput(&list, device_scale_factor, device_viewport_rect);
346 EXPECT_EQ(device_viewport_rect.width(), output->info().fWidth);
347 EXPECT_EQ(device_viewport_rect.width(), output->info().fHeight);
348
349 EXPECT_EQ(SK_ColorGREEN, output->getColor(0, 0));
346 EXPECT_EQ(SK_ColorGREEN, 350 EXPECT_EQ(SK_ColorGREEN,
347 output.getColor(viewport_rect.width() - 1, viewport_rect.height() - 1)); 351 output->getColor(device_viewport_rect.width() - 1,
352 device_viewport_rect.height() - 1));
348 353
349 list.clear(); 354 list.clear();
350 355
351 // Draw a smaller magenta rect without filling the viewport in a separate 356 // Draw a smaller magenta rect without filling the viewport in a separate
352 // frame. 357 // frame.
353 gfx::Rect smaller_rect(20, 20, 60, 60); 358 gfx::Rect smaller_rect(20, 20, 60, 60);
354 359
355 RenderPass::Id root_smaller_pass_id(2, 0); 360 RenderPass::Id root_smaller_pass_id(2, 0);
356 TestRenderPass* root_smaller_pass = AddRenderPass( 361 TestRenderPass* root_smaller_pass = AddRenderPass(
357 &list, root_smaller_pass_id, viewport_rect, gfx::Transform()); 362 &list, root_smaller_pass_id, device_viewport_rect, gfx::Transform());
358 AddQuad(root_smaller_pass, smaller_rect, SK_ColorMAGENTA); 363 AddQuad(root_smaller_pass, smaller_rect, SK_ColorMAGENTA);
359 364
360 renderer()->DecideRenderPassAllocationsForFrame(list); 365 renderer()->DecideRenderPassAllocationsForFrame(list);
361 renderer()->DrawFrame(&list, 366
362 device_scale_factor, 367 output = DrawAndCopyOutput(&list, device_scale_factor, device_viewport_rect);
363 viewport_rect, 368 EXPECT_EQ(device_viewport_rect.width(), output->info().fWidth);
364 viewport_rect, 369 EXPECT_EQ(device_viewport_rect.width(), output->info().fHeight);
365 false);
366 renderer()->GetFramebufferPixels(output.getPixels(), viewport_rect);
367 370
368 // If we didn't clear, the borders should still be green. 371 // If we didn't clear, the borders should still be green.
369 EXPECT_EQ(SK_ColorGREEN, output.getColor(0, 0)); 372 EXPECT_EQ(SK_ColorGREEN, output->getColor(0, 0));
370 EXPECT_EQ(SK_ColorGREEN, 373 EXPECT_EQ(SK_ColorGREEN,
371 output.getColor(viewport_rect.width() - 1, viewport_rect.height() - 1)); 374 output->getColor(device_viewport_rect.width() - 1,
375 device_viewport_rect.height() - 1));
372 376
373 EXPECT_EQ(SK_ColorMAGENTA, 377 EXPECT_EQ(SK_ColorMAGENTA,
374 output.getColor(smaller_rect.x(), smaller_rect.y())); 378 output->getColor(smaller_rect.x(), smaller_rect.y()));
375 EXPECT_EQ(SK_ColorMAGENTA, 379 EXPECT_EQ(
376 output.getColor(smaller_rect.right() - 1, smaller_rect.bottom() - 1)); 380 SK_ColorMAGENTA,
381 output->getColor(smaller_rect.right() - 1, smaller_rect.bottom() - 1));
377 } 382 }
378 383
379 TEST_F(SoftwareRendererTest, RenderPassVisibleRect) { 384 TEST_F(SoftwareRendererTest, RenderPassVisibleRect) {
380 float device_scale_factor = 1.f; 385 float device_scale_factor = 1.f;
381 gfx::Rect viewport_rect(0, 0, 100, 100); 386 gfx::Rect device_viewport_rect(0, 0, 100, 100);
382 InitializeRenderer(make_scoped_ptr(new SoftwareOutputDevice)); 387 InitializeRenderer(make_scoped_ptr(new SoftwareOutputDevice));
383 388
384 RenderPassList list; 389 RenderPassList list;
385 390
386 SkBitmap output;
387 output.setConfig(SkBitmap::kARGB_8888_Config,
388 viewport_rect.width(),
389 viewport_rect.height());
390 output.allocPixels();
391
392 // Pass drawn as inner quad is magenta. 391 // Pass drawn as inner quad is magenta.
393 gfx::Rect smaller_rect(20, 20, 60, 60); 392 gfx::Rect smaller_rect(20, 20, 60, 60);
394 RenderPass::Id smaller_pass_id(2, 1); 393 RenderPass::Id smaller_pass_id(2, 1);
395 TestRenderPass* smaller_pass = 394 TestRenderPass* smaller_pass =
396 AddRenderPass(&list, smaller_pass_id, smaller_rect, gfx::Transform()); 395 AddRenderPass(&list, smaller_pass_id, smaller_rect, gfx::Transform());
397 AddQuad(smaller_pass, smaller_rect, SK_ColorMAGENTA); 396 AddQuad(smaller_pass, smaller_rect, SK_ColorMAGENTA);
398 397
399 // Root pass is green. 398 // Root pass is green.
400 RenderPass::Id root_clear_pass_id(1, 0); 399 RenderPass::Id root_clear_pass_id(1, 0);
401 TestRenderPass* root_clear_pass = 400 TestRenderPass* root_clear_pass = AddRenderPass(
402 AddRenderPass(&list, root_clear_pass_id, viewport_rect, gfx::Transform()); 401 &list, root_clear_pass_id, device_viewport_rect, gfx::Transform());
403 AddRenderPassQuad(root_clear_pass, smaller_pass); 402 AddRenderPassQuad(root_clear_pass, smaller_pass);
404 AddQuad(root_clear_pass, viewport_rect, SK_ColorGREEN); 403 AddQuad(root_clear_pass, device_viewport_rect, SK_ColorGREEN);
405 404
406 // Interior pass quad has smaller visible rect. 405 // Interior pass quad has smaller visible rect.
407 gfx::Rect interior_visible_rect(30, 30, 40, 40); 406 gfx::Rect interior_visible_rect(30, 30, 40, 40);
408 root_clear_pass->quad_list[0]->visible_rect = interior_visible_rect; 407 root_clear_pass->quad_list[0]->visible_rect = interior_visible_rect;
409 408
410 renderer()->DecideRenderPassAllocationsForFrame(list); 409 renderer()->DecideRenderPassAllocationsForFrame(list);
411 renderer()->DrawFrame(&list,
412 device_scale_factor,
413 viewport_rect,
414 viewport_rect,
415 false);
416 renderer()->GetFramebufferPixels(output.getPixels(), viewport_rect);
417 410
418 EXPECT_EQ(SK_ColorGREEN, output.getColor(0, 0)); 411 scoped_ptr<SkBitmap> output =
412 DrawAndCopyOutput(&list, device_scale_factor, device_viewport_rect);
413 EXPECT_EQ(device_viewport_rect.width(), output->info().fWidth);
414 EXPECT_EQ(device_viewport_rect.width(), output->info().fHeight);
415
416 EXPECT_EQ(SK_ColorGREEN, output->getColor(0, 0));
417 EXPECT_EQ(SK_ColorGREEN,
418 output->getColor(device_viewport_rect.width() - 1,
419 device_viewport_rect.height() - 1));
420
421 // Part outside visible rect should remain green.
422 EXPECT_EQ(SK_ColorGREEN,
423 output->getColor(smaller_rect.x(), smaller_rect.y()));
419 EXPECT_EQ( 424 EXPECT_EQ(
420 SK_ColorGREEN, 425 SK_ColorGREEN,
421 output.getColor(viewport_rect.width() - 1, viewport_rect.height() - 1)); 426 output->getColor(smaller_rect.right() - 1, smaller_rect.bottom() - 1));
422
423 // Part outside visible rect should remain green.
424 EXPECT_EQ(SK_ColorGREEN, output.getColor(smaller_rect.x(), smaller_rect.y()));
425 EXPECT_EQ(
426 SK_ColorGREEN,
427 output.getColor(smaller_rect.right() - 1, smaller_rect.bottom() - 1));
428 427
429 EXPECT_EQ( 428 EXPECT_EQ(
430 SK_ColorMAGENTA, 429 SK_ColorMAGENTA,
431 output.getColor(interior_visible_rect.x(), interior_visible_rect.y())); 430 output->getColor(interior_visible_rect.x(), interior_visible_rect.y()));
432 EXPECT_EQ(SK_ColorMAGENTA, 431 EXPECT_EQ(SK_ColorMAGENTA,
433 output.getColor(interior_visible_rect.right() - 1, 432 output->getColor(interior_visible_rect.right() - 1,
434 interior_visible_rect.bottom() - 1)); 433 interior_visible_rect.bottom() - 1));
435 } 434 }
436 435
437 } // namespace 436 } // namespace
438 } // namespace cc 437 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698