From 2bf8d09689715eaa84deebe11b62d987013923c3 Mon Sep 17 00:00:00 2001 From: piotaixr Date: Tue, 4 Nov 2014 13:21:41 -0800 Subject: [PATCH] Revert of Override SkCanvas::drawImage() in SkDeferredCanvas and SkGPipe (patchset #8 id:140001 of https://codereview.chromium.org/613673005/) Reason for revert: The patch is breaking the telemetry blink build on some windows configurations Original issue's description: > Override SkCanvas::drawImage() in SkDeferredCanvas and SkGPipe > > Depend on https://codereview.chromium.org/663233002 > > BUG=skia:2947 > > Committed: https://skia.googlesource.com/skia/+/687732fe046c9cfec940f2d7f661cd97651d10a8 > > Committed: https://skia.googlesource.com/skia/+/9bb7539a59ab15749fe26fecfec05330cffae684 BUG=skia:2947, 426708 Review URL: https://codereview.chromium.org/705633002 --- include/utils/SkDeferredCanvas.h | 10 ++--- src/pipe/SkGPipePriv.h | 6 --- src/pipe/SkGPipeRead.cpp | 42 ++---------------- src/pipe/SkGPipeWrite.cpp | 94 +++------------------------------------- src/utils/SkDeferredCanvas.cpp | 37 ---------------- 5 files changed, 12 insertions(+), 177 deletions(-) diff --git a/include/utils/SkDeferredCanvas.h b/include/utils/SkDeferredCanvas.h index a1ac295..5f781f8 100644 --- a/include/utils/SkDeferredCanvas.h +++ b/include/utils/SkDeferredCanvas.h @@ -164,12 +164,8 @@ public: virtual void drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& m, const SkPaint* paint) SK_OVERRIDE; virtual void drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, - const SkRect& dst, const SkPaint* paint) SK_OVERRIDE; - virtual void drawImage(const SkImage* image, SkScalar left, SkScalar top, - const SkPaint* paint) SK_OVERRIDE; - virtual void drawImageRect(const SkImage* image, const SkRect* src, - const SkRect& dst, - const SkPaint* paint) SK_OVERRIDE; + const SkRect& dst, const SkPaint* paint) + SK_OVERRIDE; virtual void drawSprite(const SkBitmap& bitmap, int left, int top, const SkPaint* paint) SK_OVERRIDE; virtual void drawVertices(VertexMode vmode, int vertexCount, @@ -201,7 +197,7 @@ protected: virtual void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], const SkPoint texCoords[4], SkXfermode* xmode, const SkPaint& paint) SK_OVERRIDE; - + virtual void onClipRect(const SkRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE; virtual void onClipRRect(const SkRRect&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE; virtual void onClipPath(const SkPath&, SkRegion::Op, ClipEdgeStyle) SK_OVERRIDE; diff --git a/src/pipe/SkGPipePriv.h b/src/pipe/SkGPipePriv.h index 8d2a2af..121512d 100644 --- a/src/pipe/SkGPipePriv.h +++ b/src/pipe/SkGPipePriv.h @@ -46,8 +46,6 @@ enum DrawOps { kDrawClear_DrawOp, kDrawData_DrawOp, kDrawDRRect_DrawOp, - kDrawImage_DrawOp, - kDrawImageRect_DrawOp, kDrawOval_DrawOp, kDrawPaint_DrawOp, kDrawPatch_DrawOp, @@ -159,10 +157,6 @@ enum { kDrawBitmap_Bleed_DrawOpFlag = 1 << 2, }; enum { - kDrawImage_HasPaint_DrawOpFlag = 1 << 0, - kDrawImage_HasSrcRect_DrawOpFlag = 1 << 1, -}; -enum { kClip_HasAntiAlias_DrawOpFlag = 1 << 0, }; /////////////////////////////////////////////////////////////////////////////// diff --git a/src/pipe/SkGPipeRead.cpp b/src/pipe/SkGPipeRead.cpp index 222dc99..8cb0e34 100644 --- a/src/pipe/SkGPipeRead.cpp +++ b/src/pipe/SkGPipeRead.cpp @@ -408,11 +408,11 @@ static void drawDRRect_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, static void drawPatch_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, SkGPipeState* state) { - + unsigned flags = DrawOp_unpackFlags(op32); - + const SkPoint* cubics = skip(reader, SkPatchUtils::kNumCtrlPts); - + const SkColor* colors = NULL; if (flags & kDrawVertices_HasColors_DrawOpFlag) { colors = skip(reader, SkPatchUtils::kNumCorners); @@ -651,40 +651,6 @@ static void drawSprite_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, } } -static void drawImage_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, - SkGPipeState* state) { - bool hasPaint = SkToBool(DrawOp_unpackFlags(op32) & kDrawBitmap_HasPaint_DrawOpFlag); - // Balances call to ref() in SkGPipeWrite - SkAutoTUnref image (static_cast(reader->readPtr())); - - SkScalar left = reader->readScalar(); - SkScalar top = reader->readScalar(); - - if (state->shouldDraw()) { - canvas->drawImage(image, left, top, hasPaint ? &state->paint() : NULL); - } -} - -static void drawImageRect_rp(SkCanvas* canvas, SkReader32* reader, - uint32_t op32, SkGPipeState* state) { - unsigned flags = DrawOp_unpackFlags(op32); - bool hasPaint = SkToBool(flags & kDrawBitmap_HasPaint_DrawOpFlag); - bool hasSrc = SkToBool(flags & kDrawBitmap_HasSrcRect_DrawOpFlag); - // Balances call to ref() in SkGPipeWrite - SkAutoTUnref image (static_cast(reader->readPtr())); - - const SkRect* src; - if (hasSrc) { - src = skip(reader); - } else { - src = NULL; - } - const SkRect* dst = skip(reader); - if (state->shouldDraw()) { - canvas->drawImageRect(image, src, *dst, hasPaint ? &state->paint() : NULL); - } -} - /////////////////////////////////////////////////////////////////////////////// static void drawData_rp(SkCanvas* canvas, SkReader32* reader, uint32_t op32, @@ -865,8 +831,6 @@ static const ReadProc gReadTable[] = { drawClear_rp, drawData_rp, drawDRRect_rp, - drawImage_rp, - drawImageRect_rp, drawOval_rp, drawPaint_rp, drawPatch_rp, diff --git a/src/pipe/SkGPipeWrite.cpp b/src/pipe/SkGPipeWrite.cpp index a1e7dc2..41b0234 100644 --- a/src/pipe/SkGPipeWrite.cpp +++ b/src/pipe/SkGPipeWrite.cpp @@ -250,11 +250,6 @@ public: const SkPaint*) SK_OVERRIDE; virtual void drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, const SkRect& dst, const SkPaint* paint = NULL) SK_OVERRIDE; - virtual void drawImage(const SkImage* image, SkScalar left, SkScalar top, - const SkPaint* paint) SK_OVERRIDE; - virtual void drawImageRect(const SkImage* image, const SkRect* src, - const SkRect& dst, - const SkPaint* paint) SK_OVERRIDE; virtual void drawSprite(const SkBitmap&, int left, int top, const SkPaint*) SK_OVERRIDE; virtual void drawVertices(VertexMode, int vertexCount, @@ -364,9 +359,6 @@ private: bool commonDrawBitmap(const SkBitmap& bm, DrawOps op, unsigned flags, size_t opBytesNeeded, const SkPaint* paint); - bool commonDrawImage(const SkImage* image, DrawOps op, unsigned flags, - size_t opBytesNeeded, const SkPaint* paint); - SkPaint fPaint; void writePaint(const SkPaint&); @@ -479,7 +471,6 @@ SkGPipeCanvas::SkGPipeCanvas(SkGPipeController* controller, } } fFlattenableHeap.setBitmapStorage(fBitmapHeap); - this->doNotify(); } @@ -808,79 +799,6 @@ bool SkGPipeCanvas::commonDrawBitmap(const SkBitmap& bm, DrawOps op, return false; } -bool SkGPipeCanvas::commonDrawImage(const SkImage* image, DrawOps op, - unsigned flags, - size_t opBytesNeeded, - const SkPaint* paint) { - if (fDone) { - return false; - } - - if (paint != NULL) { - flags |= kDrawBitmap_HasPaint_DrawOpFlag; - this->writePaint(*paint); - } - - opBytesNeeded += sizeof (SkImage*); - - if (this->needOpBytes(opBytesNeeded)) { - this->writeOp(op, flags, 0); - - image->ref(); // The SkGPipeReader will have to call unref() - fWriter.writePtr(static_cast(const_cast(image))); - - return true; - } - return false; -} - -void SkGPipeCanvas::drawImage(const SkImage* image, SkScalar left, SkScalar top, - const SkPaint* paint) { - if (is_cross_process(fFlags)){ - // If the SkGPipe is cross-process, we will have to flatten the data in the SkImage, so - // fallback to the default implementation in SkCanvas (which calls SkImage::draw()) - // https://code.google.com//p/skia/issues/detail?id=2985 - this->INHERITED::drawImage(image, left, top, paint); - } else { - NOTIFY_SETUP(this); - size_t opBytesNeeded = sizeof(SkScalar) * 2; - - if (this->commonDrawImage(image, kDrawImage_DrawOp, 0, opBytesNeeded, paint)) { - fWriter.writeScalar(left); - fWriter.writeScalar(top); - } - } -} - -void SkGPipeCanvas::drawImageRect(const SkImage* image, const SkRect* src, - const SkRect& dst, - const SkPaint* paint) { - if (is_cross_process(fFlags)){ - // If the SkGPipe is cross-process, we will have to flatten the data in the SkImage, so - // fallback to the default implementation in SkCanvas (which calls SkImage::drawRect()) - // https://code.google.com//p/skia/issues/detail?id=2985 - this->INHERITED::drawImageRect(image, src, dst, paint); - } else { - NOTIFY_SETUP(this); - size_t opBytesNeeded = sizeof (SkRect); - bool hasSrc = src != NULL; - unsigned flags; - if (hasSrc) { - flags = kDrawImage_HasSrcRect_DrawOpFlag; - opBytesNeeded += sizeof (SkRect); - } else { - flags = 0; - } - - if (this->commonDrawImage(image, kDrawImageRect_DrawOp, flags, opBytesNeeded, paint)) { - if (hasSrc) { - fWriter.writeRect(*src); - } - fWriter.writeRect(dst); - } - } -} - void SkGPipeCanvas::drawBitmap(const SkBitmap& bm, SkScalar left, SkScalar top, const SkPaint* paint) { NOTIFY_SETUP(this); @@ -1172,7 +1090,7 @@ void SkGPipeCanvas::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4 const SkPoint texCoords[4], SkXfermode* xmode, const SkPaint& paint) { NOTIFY_SETUP(this); - + size_t size = SkPatchUtils::kNumCtrlPts * sizeof(SkPoint); unsigned flags = 0; if (colors) { @@ -1190,21 +1108,21 @@ void SkGPipeCanvas::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4 size += sizeof(int32_t); } } - + this->writePaint(paint); if (this->needOpBytes(size)) { this->writeOp(kDrawPatch_DrawOp, flags, 0); - + fWriter.write(cubics, SkPatchUtils::kNumCtrlPts * sizeof(SkPoint)); - + if (colors) { fWriter.write(colors, SkPatchUtils::kNumCorners * sizeof(SkColor)); } - + if (texCoords) { fWriter.write(texCoords, SkPatchUtils::kNumCorners * sizeof(SkPoint)); } - + if (flags & kDrawVertices_HasXfermode_DrawOpFlag) { SkXfermode::Mode mode = SkXfermode::kModulate_Mode; SkAssertResult(xmode->asMode(&mode)); diff --git a/src/utils/SkDeferredCanvas.cpp b/src/utils/SkDeferredCanvas.cpp index c20aa62..06f7bb0 100644 --- a/src/utils/SkDeferredCanvas.cpp +++ b/src/utils/SkDeferredCanvas.cpp @@ -866,43 +866,6 @@ void SkDeferredCanvas::drawBitmapNine(const SkBitmap& bitmap, this->recordedDrawCommand(); } -void SkDeferredCanvas::drawImage(const SkImage* image, SkScalar left, SkScalar top, - const SkPaint* paint) { - SkRect imageRect = SkRect::MakeXYWH(left, top, - SkIntToScalar(image->width()), SkIntToScalar(image->height())); - bool isImageOpaque = image->isOpaque(); - SkPaintBitmapOpacity pct = isImageOpaque - ? kOpaque_SkPaintBitmapOpacity : kUnknown_SkPaintBitmapOpacity; - - if (fDeferredDrawing && - this->isFullFrame(&imageRect, paint) && - (isImageOpaque ||isPaintOpaque(paint, pct))) { - this->getDeferredDevice()->skipPendingCommands(); - } - - AutoImmediateDrawIfNeeded autoDraw(*this, paint); - this->drawingCanvas()->drawImage(image, left, top, paint); - this->recordedDrawCommand(); -} - -void SkDeferredCanvas::drawImageRect(const SkImage* image, const SkRect* src, - const SkRect& dst, - const SkPaint* paint) { - bool isImageOpaque = image->isOpaque(); - SkPaintBitmapOpacity pct = isImageOpaque - ? kOpaque_SkPaintBitmapOpacity : kUnknown_SkPaintBitmapOpacity; - - if (fDeferredDrawing && - this->isFullFrame(&dst, paint) && - (isImageOpaque || isPaintOpaque(paint, pct))) { - this->getDeferredDevice()->skipPendingCommands(); - } - - AutoImmediateDrawIfNeeded autoDraw(*this, paint); - this->drawingCanvas()->drawImageRect(image, src, dst, paint); - this->recordedDrawCommand(); -} - void SkDeferredCanvas::drawSprite(const SkBitmap& bitmap, int left, int top, const SkPaint* paint) { SkRect bitmapRect = SkRect::MakeXYWH( -- 2.7.4