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

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

Issue 160023002: cc: Only make num_threads - 1 SkPicture clones. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: sw renderer too Created 6 years, 10 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/gl_renderer.cc ('k') | cc/resources/image_raster_worker_pool.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"
(...skipping 17 matching lines...) Expand all
28 #include "third_party/skia/include/core/SkShader.h" 28 #include "third_party/skia/include/core/SkShader.h"
29 #include "third_party/skia/include/effects/SkLayerRasterizer.h" 29 #include "third_party/skia/include/effects/SkLayerRasterizer.h"
30 #include "ui/gfx/rect_conversions.h" 30 #include "ui/gfx/rect_conversions.h"
31 #include "ui/gfx/skia_util.h" 31 #include "ui/gfx/skia_util.h"
32 #include "ui/gfx/transform.h" 32 #include "ui/gfx/transform.h"
33 33
34 namespace cc { 34 namespace cc {
35 35
36 namespace { 36 namespace {
37 37
38 class OnDemandRasterTaskImpl : public internal::Task {
39 public:
40 OnDemandRasterTaskImpl(PicturePileImpl* picture_pile,
41 SkCanvas* canvas,
42 gfx::Rect content_rect,
43 float contents_scale)
44 : picture_pile_(picture_pile),
45 canvas_(canvas),
46 content_rect_(content_rect),
47 contents_scale_(contents_scale) {
48 DCHECK(picture_pile_);
49 DCHECK(canvas_);
50 }
51
52 // Overridden from internal::Task:
53 virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE {
54 TRACE_EVENT0("cc", "OnDemandRasterTaskImpl::RunOnWorkerThread");
55 picture_pile_->RasterDirect(canvas_, content_rect_, contents_scale_, NULL);
56 }
57
58 protected:
59 virtual ~OnDemandRasterTaskImpl() {}
60
61 private:
62 PicturePileImpl* picture_pile_;
63 SkCanvas* canvas_;
64 const gfx::Rect content_rect_;
65 const float contents_scale_;
66
67 DISALLOW_COPY_AND_ASSIGN(OnDemandRasterTaskImpl);
68 };
69
38 static inline bool IsScalarNearlyInteger(SkScalar scalar) { 70 static inline bool IsScalarNearlyInteger(SkScalar scalar) {
39 return SkScalarNearlyZero(scalar - SkScalarRoundToScalar(scalar)); 71 return SkScalarNearlyZero(scalar - SkScalarRoundToScalar(scalar));
40 } 72 }
41 73
42 bool IsScaleAndIntegerTranslate(const SkMatrix& matrix) { 74 bool IsScaleAndIntegerTranslate(const SkMatrix& matrix) {
43 return IsScalarNearlyInteger(matrix[SkMatrix::kMTransX]) && 75 return IsScalarNearlyInteger(matrix[SkMatrix::kMTransX]) &&
44 IsScalarNearlyInteger(matrix[SkMatrix::kMTransY]) && 76 IsScalarNearlyInteger(matrix[SkMatrix::kMTransY]) &&
45 SkScalarNearlyZero(matrix[SkMatrix::kMSkewX]) && 77 SkScalarNearlyZero(matrix[SkMatrix::kMSkewX]) &&
46 SkScalarNearlyZero(matrix[SkMatrix::kMSkewY]) && 78 SkScalarNearlyZero(matrix[SkMatrix::kMSkewY]) &&
47 SkScalarNearlyZero(matrix[SkMatrix::kMPersp0]) && 79 SkScalarNearlyZero(matrix[SkMatrix::kMPersp0]) &&
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 // cases and fall back to a persistent bitmap backing 374 // cases and fall back to a persistent bitmap backing
343 // (http://crbug.com/280374). 375 // (http://crbug.com/280374).
344 skia::RefPtr<SkDrawFilter> opacity_filter = 376 skia::RefPtr<SkDrawFilter> opacity_filter =
345 skia::AdoptRef(new skia::OpacityDrawFilter( 377 skia::AdoptRef(new skia::OpacityDrawFilter(
346 quad->opacity(), frame->disable_picture_quad_image_filtering)); 378 quad->opacity(), frame->disable_picture_quad_image_filtering));
347 DCHECK(!current_canvas_->getDrawFilter()); 379 DCHECK(!current_canvas_->getDrawFilter());
348 current_canvas_->setDrawFilter(opacity_filter.get()); 380 current_canvas_->setDrawFilter(opacity_filter.get());
349 381
350 TRACE_EVENT0("cc", 382 TRACE_EVENT0("cc",
351 "SoftwareRenderer::DrawPictureQuad"); 383 "SoftwareRenderer::DrawPictureQuad");
352 quad->picture_pile->RasterDirect( 384
353 current_canvas_, quad->content_rect, quad->contents_scale, NULL); 385 // Create and run on-demand raster task for tile.
386 scoped_refptr<internal::Task> on_demand_raster_task(
387 new OnDemandRasterTaskImpl(quad->picture_pile,
388 current_canvas_,
389 quad->content_rect,
390 quad->contents_scale));
391 RunOnDemandRasterTask(on_demand_raster_task.get());
354 392
355 current_canvas_->setDrawFilter(NULL); 393 current_canvas_->setDrawFilter(NULL);
356 } 394 }
357 395
358 void SoftwareRenderer::DrawSolidColorQuad(const DrawingFrame* frame, 396 void SoftwareRenderer::DrawSolidColorQuad(const DrawingFrame* frame,
359 const SolidColorDrawQuad* quad) { 397 const SolidColorDrawQuad* quad) {
360 gfx::RectF visible_quad_vertex_rect = MathUtil::ScaleRectProportional( 398 gfx::RectF visible_quad_vertex_rect = MathUtil::ScaleRectProportional(
361 QuadVertexRect(), quad->rect, quad->visible_rect); 399 QuadVertexRect(), quad->rect, quad->visible_rect);
362 current_paint_.setColor(quad->color); 400 current_paint_.setColor(quad->color);
363 current_paint_.setAlpha(quad->opacity() * SkColorGetA(quad->color)); 401 current_paint_.setAlpha(quad->opacity() * SkColorGetA(quad->color));
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
620 return; 658 return;
621 visible_ = visible; 659 visible_ = visible;
622 660
623 if (visible_) 661 if (visible_)
624 EnsureBackbuffer(); 662 EnsureBackbuffer();
625 else 663 else
626 DiscardBackbuffer(); 664 DiscardBackbuffer();
627 } 665 }
628 666
629 } // namespace cc 667 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/gl_renderer.cc ('k') | cc/resources/image_raster_worker_pool.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698