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

Unified Diff: skia/ext/pixel_ref_utils.cc

Issue 1294673006: Update GatherPixelRefDevice to the new SkImage/SkPixelRef API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update cc_unittests 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/test/skia_common.cc ('k') | skia/ext/pixel_ref_utils_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: skia/ext/pixel_ref_utils.cc
diff --git a/skia/ext/pixel_ref_utils.cc b/skia/ext/pixel_ref_utils.cc
index d7e2f7e62efa7f9cdc448a5d58a8b5b2c55a941a..46a2a73200eb44395a190018fdaad7b3b659cac4 100644
--- a/skia/ext/pixel_ref_utils.cc
+++ b/skia/ext/pixel_ref_utils.cc
@@ -23,9 +23,6 @@ namespace skia {
namespace {
-// URI label for a discardable SkPixelRef.
-const char kLabelDiscardable[] = "discardable";
-
class DiscardablePixelRefSet {
public:
DiscardablePixelRefSet(
@@ -36,16 +33,16 @@ class DiscardablePixelRefSet {
const SkRect& rect,
const SkMatrix& matrix,
SkFilterQuality filter_quality) {
- // Only save discardable pixel refs.
- if (pixel_ref->getURI() &&
- !strcmp(pixel_ref->getURI(), kLabelDiscardable)) {
- PixelRefUtils::PositionPixelRef position_pixel_ref;
- position_pixel_ref.pixel_ref = pixel_ref;
- position_pixel_ref.pixel_ref_rect = rect;
- position_pixel_ref.matrix = matrix;
- position_pixel_ref.filter_quality = filter_quality;
- pixel_refs_->push_back(position_pixel_ref);
- }
+ // We should only be saving discardable pixel refs.
+ SkASSERT(pixel_ref);
+ SkASSERT(pixel_ref->isLazyGenerated());
+
+ PixelRefUtils::PositionPixelRef position_pixel_ref;
+ position_pixel_ref.pixel_ref = pixel_ref;
+ position_pixel_ref.pixel_ref_rect = rect;
+ position_pixel_ref.matrix = matrix;
+ position_pixel_ref.filter_quality = filter_quality;
+ pixel_refs_->push_back(position_pixel_ref);
}
private:
@@ -183,6 +180,27 @@ class GatherPixelRefDevice : public SkBitmapDevice {
if (GetBitmapFromPaint(paint, &paint_bitmap))
AddBitmap(paint_bitmap, mapped_rect, identity, paint.getFilterQuality());
}
+ void drawImage(const SkDraw& draw,
+ const SkImage* image,
+ SkScalar x,
+ SkScalar y,
+ const SkPaint& paint) override {
+ const SkMatrix image_matrix = SkMatrix::MakeTrans(x, y);
+ DrawImageInternal(draw, image, image_matrix, paint);
+ }
+ void drawImageRect(const SkDraw& draw,
+ const SkImage* image,
+ const SkRect* src_or_null,
+ const SkRect& dst,
+ const SkPaint& paint,
+ SkCanvas::SrcRectConstraint) override {
+ const SkRect src = src_or_null
+ ? *src_or_null
+ : SkRect::MakeIWH(image->width(), image->height());
+ const SkMatrix image_matrix =
+ SkMatrix::MakeRectToRect(src, dst, SkMatrix::kFill_ScaleToFit);
+ DrawImageInternal(draw, image, image_matrix, paint);
+ }
void drawText(const SkDraw& draw,
const void* text,
size_t len,
@@ -354,12 +372,25 @@ class GatherPixelRefDevice : public SkBitmapDevice {
const SkRect& rect,
const SkMatrix& matrix,
SkFilterQuality filter_quality) {
- SkRect canvas_rect = SkRect::MakeWH(width(), height());
- if (rect.intersects(canvas_rect)) {
+ const SkRect canvas_rect = SkRect::Make(imageInfo().bounds());
+ if (rect.intersects(canvas_rect) && bm.pixelRef()->isLazyGenerated()) {
pixel_ref_set_->Add(bm.pixelRef(), rect, matrix, filter_quality);
}
}
+ void AddImage(const SkImage* image,
+ const SkRect& rect,
+ const SkMatrix& matrix,
+ SkFilterQuality filter_quality) {
+ const SkRect canvas_rect = SkRect::Make(imageInfo().bounds());
+ if (rect.intersects(canvas_rect) && image->isLazyGenerated()) {
+ SkBitmap bm;
+ if (image->asLegacyBitmap(&bm, SkImage::kRO_LegacyBitmapMode) && bm.pixelRef()) {
+ pixel_ref_set_->Add(bm.pixelRef(), rect, matrix, filter_quality);
+ }
+ }
+ }
+
bool GetBitmapFromPaint(const SkPaint& paint, SkBitmap* bm) {
SkShader* shader = paint.getShader();
if (shader) {
@@ -370,6 +401,23 @@ class GatherPixelRefDevice : public SkBitmapDevice {
}
return false;
}
+
+ void DrawImageInternal(const SkDraw& draw,
+ const SkImage* image,
+ const SkMatrix& matrix,
+ const SkPaint& paint) {
+ const SkMatrix total_matrix = SkMatrix::Concat(*draw.fMatrix, matrix);
+ const SkRect image_rect = SkRect::MakeIWH(image->width(), image->height());
+ SkRect mapped_rect;
+ total_matrix.mapRect(&mapped_rect, image_rect);
+ AddImage(image, mapped_rect, total_matrix, paint.getFilterQuality());
+
+ SkBitmap paint_bitmap;
+ if (GetBitmapFromPaint(paint, &paint_bitmap)) {
+ AddBitmap(paint_bitmap, mapped_rect, total_matrix,
+ paint.getFilterQuality());
+ }
+ }
};
} // namespace
« no previous file with comments | « cc/test/skia_common.cc ('k') | skia/ext/pixel_ref_utils_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698