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

Side by Side Diff: skia/ext/pixel_ref_utils.cc

Issue 1279843004: cc: Plumb more details about pixel refs to tile manager. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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
« cc/playback/pixel_ref_map.cc ('K') | « skia/ext/pixel_ref_utils.h ('k') | 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "skia/ext/pixel_ref_utils.h" 5 #include "skia/ext/pixel_ref_utils.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "third_party/skia/include/core/SkBitmapDevice.h" 9 #include "third_party/skia/include/core/SkBitmapDevice.h"
10 #include "third_party/skia/include/core/SkCanvas.h" 10 #include "third_party/skia/include/core/SkCanvas.h"
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 92
93 GatherPixelRefDevice::drawRect(draw, bounds, paint); 93 GatherPixelRefDevice::drawRect(draw, bounds, paint);
94 } 94 }
95 void drawRect(const SkDraw& draw, 95 void drawRect(const SkDraw& draw,
96 const SkRect& rect, 96 const SkRect& rect,
97 const SkPaint& paint) override { 97 const SkPaint& paint) override {
98 SkBitmap bitmap; 98 SkBitmap bitmap;
99 if (GetBitmapFromPaint(paint, &bitmap)) { 99 if (GetBitmapFromPaint(paint, &bitmap)) {
100 SkRect mapped_rect; 100 SkRect mapped_rect;
101 draw.fMatrix->mapRect(&mapped_rect, rect); 101 draw.fMatrix->mapRect(&mapped_rect, rect);
102 if (mapped_rect.intersect(SkRect::Make(draw.fRC->getBounds()))) { 102 if (mapped_rect.intersects(SkRect::Make(draw.fRC->getBounds()))) {
103 AddBitmap(bitmap, mapped_rect, *draw.fMatrix, paint.getFilterQuality()); 103 AddBitmap(bitmap, mapped_rect, *draw.fMatrix, paint.getFilterQuality());
104 } 104 }
105 } 105 }
106 } 106 }
107 void drawOval(const SkDraw& draw, 107 void drawOval(const SkDraw& draw,
108 const SkRect& rect, 108 const SkRect& rect,
109 const SkPaint& paint) override { 109 const SkPaint& paint) override {
110 GatherPixelRefDevice::drawRect(draw, rect, paint); 110 GatherPixelRefDevice::drawRect(draw, rect, paint);
111 } 111 }
112 void drawRRect(const SkDraw& draw, 112 void drawRRect(const SkDraw& draw,
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 } 334 }
335 335
336 private: 336 private:
337 DiscardablePixelRefSet* pixel_ref_set_; 337 DiscardablePixelRefSet* pixel_ref_set_;
338 338
339 void AddBitmap(const SkBitmap& bm, 339 void AddBitmap(const SkBitmap& bm,
340 const SkRect& rect, 340 const SkRect& rect,
341 const SkMatrix& matrix, 341 const SkMatrix& matrix,
342 SkFilterQuality filter_quality) { 342 SkFilterQuality filter_quality) {
343 SkRect canvas_rect = SkRect::MakeWH(width(), height()); 343 SkRect canvas_rect = SkRect::MakeWH(width(), height());
344 SkRect paint_rect = SkRect::MakeEmpty(); 344 if (rect.intersects(canvas_rect)) {
345 if (paint_rect.intersect(rect, canvas_rect)) { 345 pixel_ref_set_->Add(bm.pixelRef(), rect, matrix, filter_quality);
346 pixel_ref_set_->Add(bm.pixelRef(), paint_rect, matrix,
347 filter_quality);
348 } 346 }
349 } 347 }
350 348
351 bool GetBitmapFromPaint(const SkPaint& paint, SkBitmap* bm) { 349 bool GetBitmapFromPaint(const SkPaint& paint, SkBitmap* bm) {
352 SkShader* shader = paint.getShader(); 350 SkShader* shader = paint.getShader();
353 if (shader) { 351 if (shader) {
354 // Check whether the shader is a gradient in order to prevent generation 352 // Check whether the shader is a gradient in order to prevent generation
355 // of bitmaps from gradient shaders, which implement asABitmap. 353 // of bitmaps from gradient shaders, which implement asABitmap.
356 if (SkShader::kNone_GradientType == shader->asAGradient(NULL)) 354 if (SkShader::kNone_GradientType == shader->asAGradient(NULL))
357 return shader->asABitmap(bm, NULL, NULL); 355 return shader->asABitmap(bm, NULL, NULL);
358 } 356 }
359 return false; 357 return false;
360 } 358 }
361 }; 359 };
362 360
363 } // namespace 361 } // namespace
364 362
365 void PixelRefUtils::GatherDiscardablePixelRefs( 363 void PixelRefUtils::GatherDiscardablePixelRefs(
366 SkPicture* picture, 364 SkPicture* picture,
367 std::vector<PositionPixelRef>* pixel_refs) { 365 std::vector<PositionPixelRef>* pixel_refs) {
368 pixel_refs->clear(); 366 pixel_refs->clear();
369 DiscardablePixelRefSet pixel_ref_set(pixel_refs); 367 DiscardablePixelRefSet pixel_ref_set(pixel_refs);
370 368
371 SkRect picture_bounds = picture->cullRect(); 369 SkRect picture_bounds = picture->cullRect();
372 SkIRect picture_ibounds = picture_bounds.roundOut(); 370 SkIRect picture_ibounds = picture_bounds.roundOut();
373 SkBitmap empty_bitmap; 371 SkBitmap empty_bitmap;
374 empty_bitmap.setInfo(SkImageInfo::MakeUnknown(picture_ibounds.width(), 372 empty_bitmap.setInfo(SkImageInfo::MakeUnknown(picture_ibounds.right(),
weiliangc 2015/08/07 22:56:00 Just to double check, this won't need more memory
vmpstr 2015/08/10 17:36:05 It shouldn't, since we don't allocate any memory f
375 picture_ibounds.height())); 373 picture_ibounds.bottom()));
376 374
377 GatherPixelRefDevice device(empty_bitmap, &pixel_ref_set); 375 GatherPixelRefDevice device(empty_bitmap, &pixel_ref_set);
378 SkNoSaveLayerCanvas canvas(&device); 376 SkNoSaveLayerCanvas canvas(&device);
379 377
380 // Draw the picture pinned against our top/left corner.
381 canvas.translate(-picture_bounds.left(), -picture_bounds.top());
382 canvas.drawPicture(picture); 378 canvas.drawPicture(picture);
383 } 379 }
384 380
385 } // namespace skia 381 } // namespace skia
OLDNEW
« cc/playback/pixel_ref_map.cc ('K') | « skia/ext/pixel_ref_utils.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698