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

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

Issue 13863015: Add flag for drawing layers to screen with Ganesh (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase again Created 7 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 | « cc/output/renderer_pixeltest.cc ('k') | cc/quads/draw_quad_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"
(...skipping 13 matching lines...) Expand all
24 #include "third_party/skia/include/core/SkShader.h" 24 #include "third_party/skia/include/core/SkShader.h"
25 #include "third_party/skia/include/effects/SkLayerRasterizer.h" 25 #include "third_party/skia/include/effects/SkLayerRasterizer.h"
26 #include "ui/gfx/rect_conversions.h" 26 #include "ui/gfx/rect_conversions.h"
27 #include "ui/gfx/skia_util.h" 27 #include "ui/gfx/skia_util.h"
28 #include "ui/gfx/transform.h" 28 #include "ui/gfx/transform.h"
29 29
30 namespace cc { 30 namespace cc {
31 31
32 namespace { 32 namespace {
33 33
34 void ToSkMatrix(SkMatrix* flattened, const gfx::Transform& m) {
35 // Convert from 4x4 to 3x3 by dropping the third row and column.
36 flattened->set(0, SkDoubleToScalar(m.matrix().getDouble(0, 0)));
37 flattened->set(1, SkDoubleToScalar(m.matrix().getDouble(0, 1)));
38 flattened->set(2, SkDoubleToScalar(m.matrix().getDouble(0, 3)));
39 flattened->set(3, SkDoubleToScalar(m.matrix().getDouble(1, 0)));
40 flattened->set(4, SkDoubleToScalar(m.matrix().getDouble(1, 1)));
41 flattened->set(5, SkDoubleToScalar(m.matrix().getDouble(1, 3)));
42 flattened->set(6, SkDoubleToScalar(m.matrix().getDouble(3, 0)));
43 flattened->set(7, SkDoubleToScalar(m.matrix().getDouble(3, 1)));
44 flattened->set(8, SkDoubleToScalar(m.matrix().getDouble(3, 3)));
45 }
46
47 bool IsScaleAndTranslate(const SkMatrix& matrix) { 34 bool IsScaleAndTranslate(const SkMatrix& matrix) {
48 return SkScalarNearlyZero(matrix[SkMatrix::kMSkewX]) && 35 return SkScalarNearlyZero(matrix[SkMatrix::kMSkewX]) &&
49 SkScalarNearlyZero(matrix[SkMatrix::kMSkewY]) && 36 SkScalarNearlyZero(matrix[SkMatrix::kMSkewY]) &&
50 SkScalarNearlyZero(matrix[SkMatrix::kMPersp0]) && 37 SkScalarNearlyZero(matrix[SkMatrix::kMPersp0]) &&
51 SkScalarNearlyZero(matrix[SkMatrix::kMPersp1]) && 38 SkScalarNearlyZero(matrix[SkMatrix::kMPersp1]) &&
52 SkScalarNearlyZero(matrix[SkMatrix::kMPersp2] - 1.0f); 39 SkScalarNearlyZero(matrix[SkMatrix::kMPersp2] - 1.0f);
53 } 40 }
54 41
55 } // anonymous namespace 42 } // anonymous namespace
56 43
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 } 208 }
222 209
223 void SoftwareRenderer::DoDrawQuad(DrawingFrame* frame, const DrawQuad* quad) { 210 void SoftwareRenderer::DoDrawQuad(DrawingFrame* frame, const DrawQuad* quad) {
224 TRACE_EVENT0("cc", "SoftwareRenderer::DoDrawQuad"); 211 TRACE_EVENT0("cc", "SoftwareRenderer::DoDrawQuad");
225 gfx::Transform quad_rect_matrix; 212 gfx::Transform quad_rect_matrix;
226 QuadRectTransform(&quad_rect_matrix, quad->quadTransform(), quad->rect); 213 QuadRectTransform(&quad_rect_matrix, quad->quadTransform(), quad->rect);
227 gfx::Transform contents_device_transform = 214 gfx::Transform contents_device_transform =
228 frame->window_matrix * frame->projection_matrix * quad_rect_matrix; 215 frame->window_matrix * frame->projection_matrix * quad_rect_matrix;
229 contents_device_transform.FlattenTo2d(); 216 contents_device_transform.FlattenTo2d();
230 SkMatrix sk_device_matrix; 217 SkMatrix sk_device_matrix;
231 ToSkMatrix(&sk_device_matrix, contents_device_transform); 218 gfx::TransformToFlattenedSkMatrix(contents_device_transform,
219 &sk_device_matrix);
232 current_canvas_->setMatrix(sk_device_matrix); 220 current_canvas_->setMatrix(sk_device_matrix);
233 221
234 current_paint_.reset(); 222 current_paint_.reset();
235 if (!IsScaleAndTranslate(sk_device_matrix)) { 223 if (!IsScaleAndTranslate(sk_device_matrix)) {
236 current_paint_.setAntiAlias(true); 224 current_paint_.setAntiAlias(true);
237 current_paint_.setFilterBitmap(true); 225 current_paint_.setFilterBitmap(true);
238 } 226 }
239 227
240 if (quad->ShouldDrawWithBlending()) { 228 if (quad->ShouldDrawWithBlending()) {
241 current_paint_.setAlpha(quad->opacity() * 255); 229 current_paint_.setAlpha(quad->opacity() * 255);
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 if (quad->ShouldDrawWithBlending()) { 290 if (quad->ShouldDrawWithBlending()) {
303 TRACE_EVENT0("cc", "SoftwareRenderer::DrawPictureQuad with blending"); 291 TRACE_EVENT0("cc", "SoftwareRenderer::DrawPictureQuad with blending");
304 SkBitmap temp_bitmap; 292 SkBitmap temp_bitmap;
305 temp_bitmap.setConfig(SkBitmap::kARGB_8888_Config, 293 temp_bitmap.setConfig(SkBitmap::kARGB_8888_Config,
306 quad->texture_size.width(), 294 quad->texture_size.width(),
307 quad->texture_size.height()); 295 quad->texture_size.height());
308 temp_bitmap.allocPixels(); 296 temp_bitmap.allocPixels();
309 SkDevice temp_device(temp_bitmap); 297 SkDevice temp_device(temp_bitmap);
310 SkCanvas temp_canvas(&temp_device); 298 SkCanvas temp_canvas(&temp_device);
311 299
312 quad->picture_pile->Raster( 300 quad->picture_pile->RasterToBitmap(
313 &temp_canvas, quad->content_rect, quad->contents_scale, NULL); 301 &temp_canvas, quad->content_rect, quad->contents_scale, NULL);
314 302
315 current_paint_.setFilterBitmap(true); 303 current_paint_.setFilterBitmap(true);
316 current_canvas_->drawBitmap(temp_bitmap, 0, 0, &current_paint_); 304 current_canvas_->drawBitmap(temp_bitmap, 0, 0, &current_paint_);
317 } else { 305 } else {
318 TRACE_EVENT0("cc", 306 TRACE_EVENT0("cc",
319 "SoftwareRenderer::DrawPictureQuad direct from PicturePile"); 307 "SoftwareRenderer::DrawPictureQuad direct from PicturePile");
320 quad->picture_pile->Raster( 308 quad->picture_pile->RasterDirect(
321 current_canvas_, quad->content_rect, quad->contents_scale, NULL); 309 current_canvas_, quad->content_rect, quad->contents_scale, NULL);
322 } 310 }
323 } 311 }
324 312
325 void SoftwareRenderer::DrawSolidColorQuad(const DrawingFrame* frame, 313 void SoftwareRenderer::DrawSolidColorQuad(const DrawingFrame* frame,
326 const SolidColorDrawQuad* quad) { 314 const SolidColorDrawQuad* quad) {
327 current_paint_.setColor(quad->color); 315 current_paint_.setColor(quad->color);
328 current_paint_.setAlpha(quad->opacity() * SkColorGetA(quad->color)); 316 current_paint_.setAlpha(quad->opacity() * SkColorGetA(quad->color));
329 current_canvas_->drawRect(gfx::RectFToSkRect(QuadVertexRect()), 317 current_canvas_->drawRect(gfx::RectFToSkRect(QuadVertexRect()),
330 current_paint_); 318 current_paint_);
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 4 * rect.width()); 456 4 * rect.width());
469 } 457 }
470 458
471 void SoftwareRenderer::SetVisible(bool visible) { 459 void SoftwareRenderer::SetVisible(bool visible) {
472 if (visible_ == visible) 460 if (visible_ == visible)
473 return; 461 return;
474 visible_ = visible; 462 visible_ = visible;
475 } 463 }
476 464
477 } // namespace cc 465 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/renderer_pixeltest.cc ('k') | cc/quads/draw_quad_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698