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

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

Issue 362073002: cc: Remove all traces of SkPicture cloning. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 4 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 | « cc/output/renderer.h ('k') | cc/output/software_renderer_unittest.cc » ('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 "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "cc/base/math_util.h" 8 #include "cc/base/math_util.h"
9 #include "cc/output/compositor_frame.h" 9 #include "cc/output/compositor_frame.h"
10 #include "cc/output/compositor_frame_ack.h" 10 #include "cc/output/compositor_frame_ack.h"
11 #include "cc/output/compositor_frame_metadata.h" 11 #include "cc/output/compositor_frame_metadata.h"
12 #include "cc/output/copy_output_request.h" 12 #include "cc/output/copy_output_request.h"
13 #include "cc/output/output_surface.h" 13 #include "cc/output/output_surface.h"
14 #include "cc/output/render_surface_filters.h" 14 #include "cc/output/render_surface_filters.h"
15 #include "cc/output/software_output_device.h" 15 #include "cc/output/software_output_device.h"
16 #include "cc/quads/checkerboard_draw_quad.h" 16 #include "cc/quads/checkerboard_draw_quad.h"
17 #include "cc/quads/debug_border_draw_quad.h" 17 #include "cc/quads/debug_border_draw_quad.h"
18 #include "cc/quads/picture_draw_quad.h" 18 #include "cc/quads/picture_draw_quad.h"
19 #include "cc/quads/render_pass_draw_quad.h" 19 #include "cc/quads/render_pass_draw_quad.h"
20 #include "cc/quads/solid_color_draw_quad.h" 20 #include "cc/quads/solid_color_draw_quad.h"
21 #include "cc/quads/texture_draw_quad.h" 21 #include "cc/quads/texture_draw_quad.h"
22 #include "cc/quads/tile_draw_quad.h" 22 #include "cc/quads/tile_draw_quad.h"
23 #include "cc/resources/raster_worker_pool.h"
24 #include "skia/ext/opacity_draw_filter.h" 23 #include "skia/ext/opacity_draw_filter.h"
25 #include "third_party/skia/include/core/SkBitmapDevice.h" 24 #include "third_party/skia/include/core/SkBitmapDevice.h"
26 #include "third_party/skia/include/core/SkCanvas.h" 25 #include "third_party/skia/include/core/SkCanvas.h"
27 #include "third_party/skia/include/core/SkColor.h" 26 #include "third_party/skia/include/core/SkColor.h"
28 #include "third_party/skia/include/core/SkImageFilter.h" 27 #include "third_party/skia/include/core/SkImageFilter.h"
29 #include "third_party/skia/include/core/SkMatrix.h" 28 #include "third_party/skia/include/core/SkMatrix.h"
30 #include "third_party/skia/include/core/SkShader.h" 29 #include "third_party/skia/include/core/SkShader.h"
31 #include "third_party/skia/include/effects/SkLayerRasterizer.h" 30 #include "third_party/skia/include/effects/SkLayerRasterizer.h"
32 #include "ui/gfx/geometry/rect_conversions.h" 31 #include "ui/gfx/geometry/rect_conversions.h"
33 #include "ui/gfx/skia_util.h" 32 #include "ui/gfx/skia_util.h"
34 #include "ui/gfx/transform.h" 33 #include "ui/gfx/transform.h"
35 34
36 namespace cc { 35 namespace cc {
37
38 namespace { 36 namespace {
39 37
40 class OnDemandRasterTaskImpl : public Task {
41 public:
42 OnDemandRasterTaskImpl(PicturePileImpl* picture_pile,
43 SkCanvas* canvas,
44 gfx::Rect content_rect,
45 float contents_scale)
46 : picture_pile_(picture_pile),
47 canvas_(canvas),
48 content_rect_(content_rect),
49 contents_scale_(contents_scale) {
50 DCHECK(picture_pile_);
51 DCHECK(canvas_);
52 }
53
54 // Overridden from Task:
55 virtual void RunOnWorkerThread() OVERRIDE {
56 TRACE_EVENT0("cc", "OnDemandRasterTaskImpl::RunOnWorkerThread");
57
58 PicturePileImpl* picture_pile = picture_pile_->GetCloneForDrawingOnThread(
59 RasterWorkerPool::GetPictureCloneIndexForCurrentThread());
60 DCHECK(picture_pile);
61
62 picture_pile->RasterDirect(canvas_, content_rect_, contents_scale_, NULL);
63 }
64
65 protected:
66 virtual ~OnDemandRasterTaskImpl() {}
67
68 private:
69 PicturePileImpl* picture_pile_;
70 SkCanvas* canvas_;
71 const gfx::Rect content_rect_;
72 const float contents_scale_;
73
74 DISALLOW_COPY_AND_ASSIGN(OnDemandRasterTaskImpl);
75 };
76
77 static inline bool IsScalarNearlyInteger(SkScalar scalar) { 38 static inline bool IsScalarNearlyInteger(SkScalar scalar) {
78 return SkScalarNearlyZero(scalar - SkScalarRoundToScalar(scalar)); 39 return SkScalarNearlyZero(scalar - SkScalarRoundToScalar(scalar));
79 } 40 }
80 41
81 bool IsScaleAndIntegerTranslate(const SkMatrix& matrix) { 42 bool IsScaleAndIntegerTranslate(const SkMatrix& matrix) {
82 return IsScalarNearlyInteger(matrix[SkMatrix::kMTransX]) && 43 return IsScalarNearlyInteger(matrix[SkMatrix::kMTransX]) &&
83 IsScalarNearlyInteger(matrix[SkMatrix::kMTransY]) && 44 IsScalarNearlyInteger(matrix[SkMatrix::kMTransY]) &&
84 SkScalarNearlyZero(matrix[SkMatrix::kMSkewX]) && 45 SkScalarNearlyZero(matrix[SkMatrix::kMSkewX]) &&
85 SkScalarNearlyZero(matrix[SkMatrix::kMSkewY]) && 46 SkScalarNearlyZero(matrix[SkMatrix::kMSkewY]) &&
86 SkScalarNearlyZero(matrix[SkMatrix::kMPersp0]) && 47 SkScalarNearlyZero(matrix[SkMatrix::kMPersp0]) &&
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 // (http://crbug.com/280374). 343 // (http://crbug.com/280374).
383 skia::RefPtr<SkDrawFilter> opacity_filter = 344 skia::RefPtr<SkDrawFilter> opacity_filter =
384 skia::AdoptRef(new skia::OpacityDrawFilter( 345 skia::AdoptRef(new skia::OpacityDrawFilter(
385 quad->opacity(), frame->disable_picture_quad_image_filtering)); 346 quad->opacity(), frame->disable_picture_quad_image_filtering));
386 DCHECK(!current_canvas_->getDrawFilter()); 347 DCHECK(!current_canvas_->getDrawFilter());
387 current_canvas_->setDrawFilter(opacity_filter.get()); 348 current_canvas_->setDrawFilter(opacity_filter.get());
388 349
389 TRACE_EVENT0("cc", 350 TRACE_EVENT0("cc",
390 "SoftwareRenderer::DrawPictureQuad"); 351 "SoftwareRenderer::DrawPictureQuad");
391 352
392 // Create and run on-demand raster task for tile. 353 quad->picture_pile->RasterDirect(
393 scoped_refptr<Task> on_demand_raster_task( 354 current_canvas_, quad->content_rect, quad->contents_scale, NULL);
394 new OnDemandRasterTaskImpl(quad->picture_pile,
395 current_canvas_,
396 quad->content_rect,
397 quad->contents_scale));
398 client_->RunOnDemandRasterTask(on_demand_raster_task.get());
399 355
400 current_canvas_->setDrawFilter(NULL); 356 current_canvas_->setDrawFilter(NULL);
401 } 357 }
402 358
403 void SoftwareRenderer::DrawSolidColorQuad(const DrawingFrame* frame, 359 void SoftwareRenderer::DrawSolidColorQuad(const DrawingFrame* frame,
404 const SolidColorDrawQuad* quad) { 360 const SolidColorDrawQuad* quad) {
405 gfx::RectF visible_quad_vertex_rect = MathUtil::ScaleRectProportional( 361 gfx::RectF visible_quad_vertex_rect = MathUtil::ScaleRectProportional(
406 QuadVertexRect(), quad->rect, quad->visible_rect); 362 QuadVertexRect(), quad->rect, quad->visible_rect);
407 current_paint_.setColor(quad->color); 363 current_paint_.setColor(quad->color);
408 current_paint_.setAlpha(quad->opacity() * SkColorGetA(quad->color)); 364 current_paint_.setAlpha(quad->opacity() * SkColorGetA(quad->color));
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
644 } 600 }
645 601
646 void SoftwareRenderer::DidChangeVisibility() { 602 void SoftwareRenderer::DidChangeVisibility() {
647 if (visible()) 603 if (visible())
648 EnsureBackbuffer(); 604 EnsureBackbuffer();
649 else 605 else
650 DiscardBackbuffer(); 606 DiscardBackbuffer();
651 } 607 }
652 608
653 } // namespace cc 609 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/renderer.h ('k') | cc/output/software_renderer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698