unify how canvas checks for null on skia objects (images, blobs, pictures)
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1568613008
Review URL: https://codereview.chromium.org/1568613008
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 82ceba4..8f28ea4 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -42,6 +42,8 @@
#include "SkGr.h"
#endif
+#define RETURN_ON_NULL(ptr) do { if (nullptr == (ptr)) return; } while (0)
+
/*
* Return true if the drawing this rect would hit every pixels in the canvas.
*
@@ -1929,11 +1931,13 @@
}
void SkCanvas::drawImage(const SkImage* image, SkScalar x, SkScalar y, const SkPaint* paint) {
+ RETURN_ON_NULL(image);
this->onDrawImage(image, x, y, paint);
}
void SkCanvas::drawImageRect(const SkImage* image, const SkRect& src, const SkRect& dst,
const SkPaint* paint, SrcRectConstraint constraint) {
+ RETURN_ON_NULL(image);
if (dst.isEmpty() || src.isEmpty()) {
return;
}
@@ -1942,17 +1946,20 @@
void SkCanvas::drawImageRect(const SkImage* image, const SkIRect& isrc, const SkRect& dst,
const SkPaint* paint, SrcRectConstraint constraint) {
+ RETURN_ON_NULL(image);
this->drawImageRect(image, SkRect::Make(isrc), dst, paint, constraint);
}
void SkCanvas::drawImageRect(const SkImage* image, const SkRect& dst, const SkPaint* paint,
SrcRectConstraint constraint) {
+ RETURN_ON_NULL(image);
this->drawImageRect(image, SkRect::MakeIWH(image->width(), image->height()), dst, paint,
constraint);
}
void SkCanvas::drawImageNine(const SkImage* image, const SkIRect& center, const SkRect& dst,
const SkPaint* paint) {
+ RETURN_ON_NULL(image);
if (dst.isEmpty()) {
return;
}
@@ -2002,6 +2009,7 @@
void SkCanvas::drawAtlas(const SkImage* atlas, const SkRSXform xform[], const SkRect tex[],
const SkColor colors[], int count, SkXfermode::Mode mode,
const SkRect* cull, const SkPaint* paint) {
+ RETURN_ON_NULL(atlas);
if (count <= 0) {
return;
}
@@ -2644,10 +2652,9 @@
}
void SkCanvas::drawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y,
const SkPaint& paint) {
+ RETURN_ON_NULL(blob);
TRACE_EVENT0("disabled-by-default-skia", "SkCanvas::drawTextBlob()");
- if (blob) {
- this->onDrawTextBlob(blob, x, y, paint);
- }
+ this->onDrawTextBlob(blob, x, y, paint);
}
void SkCanvas::onDrawVertices(VertexMode vmode, int vertexCount,
@@ -2698,23 +2705,21 @@
}
void SkCanvas::drawDrawable(SkDrawable* dr, SkScalar x, SkScalar y) {
- if (dr) {
- if (x || y) {
- SkMatrix matrix = SkMatrix::MakeTrans(x, y);
- this->onDrawDrawable(dr, &matrix);
- } else {
- this->onDrawDrawable(dr, nullptr);
- }
+ RETURN_ON_NULL(dr);
+ if (x || y) {
+ SkMatrix matrix = SkMatrix::MakeTrans(x, y);
+ this->onDrawDrawable(dr, &matrix);
+ } else {
+ this->onDrawDrawable(dr, nullptr);
}
}
void SkCanvas::drawDrawable(SkDrawable* dr, const SkMatrix* matrix) {
- if (dr) {
- if (matrix && matrix->isIdentity()) {
- matrix = nullptr;
- }
- this->onDrawDrawable(dr, matrix);
+ RETURN_ON_NULL(dr);
+ if (matrix && matrix->isIdentity()) {
+ matrix = nullptr;
}
+ this->onDrawDrawable(dr, matrix);
}
void SkCanvas::onDrawDrawable(SkDrawable* dr, const SkMatrix* matrix) {
@@ -2884,17 +2889,17 @@
#define kMaxPictureOpsToUnrollInsteadOfRef 1
void SkCanvas::drawPicture(const SkPicture* picture, const SkMatrix* matrix, const SkPaint* paint) {
+ RETURN_ON_NULL(picture);
+
TRACE_EVENT0("disabled-by-default-skia", "SkCanvas::drawPicture()");
- if (picture) {
- if (matrix && matrix->isIdentity()) {
- matrix = nullptr;
- }
- if (picture->approximateOpCount() <= kMaxPictureOpsToUnrollInsteadOfRef) {
- SkAutoCanvasMatrixPaint acmp(this, matrix, paint, picture->cullRect());
- picture->playback(this);
- } else {
- this->onDrawPicture(picture, matrix, paint);
- }
+ if (matrix && matrix->isIdentity()) {
+ matrix = nullptr;
+ }
+ if (picture->approximateOpCount() <= kMaxPictureOpsToUnrollInsteadOfRef) {
+ SkAutoCanvasMatrixPaint acmp(this, matrix, paint, picture->cullRect());
+ picture->playback(this);
+ } else {
+ this->onDrawPicture(picture, matrix, paint);
}
}
diff --git a/tests/PictureTest.cpp b/tests/PictureTest.cpp
index 86c791a..3d05a82 100644
--- a/tests/PictureTest.cpp
+++ b/tests/PictureTest.cpp
@@ -46,14 +46,13 @@
// For a while willPlayBackBitmaps() ignored SkImages and just looked for SkBitmaps.
static void test_images_are_found_by_willPlayBackBitmaps(skiatest::Reporter* reporter) {
- // We just need _some_ SkImage.
- SkAutoTUnref<SkImage> image(SkImage::NewFromBitmap(SkBitmap()));
+ // We just need _some_ SkImage
+ const SkPMColor pixel = 0;
+ const SkImageInfo info = SkImageInfo::MakeN32Premul(1, 1);
+ SkAutoTUnref<SkImage> image(SkImage::NewRasterCopy(info, &pixel, sizeof(pixel)));
SkPictureRecorder recorder;
- {
- auto canvas = recorder.beginRecording(100,100);
- canvas->drawImage(image, 0,0);
- }
+ recorder.beginRecording(100,100)->drawImage(image, 0,0);
SkAutoTUnref<SkPicture> picture(recorder.endRecording());
REPORTER_ASSERT(reporter, picture->willPlayBackBitmaps());