skia2/tools/debugger/DebugCanvas.cpp

525 lines
20 KiB
C++
Raw Normal View History

/*
* Copyright 2012 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "include/core/SkPicture.h"
#include "include/core/SkTextBlob.h"
#include "include/utils/SkPaintFilterCanvas.h"
#include "src/core/SkCanvasPriv.h"
#include "src/core/SkClipOpPriv.h"
#include "src/core/SkRectPriv.h"
#include "src/utils/SkJSONWriter.h"
#include "tools/debugger/DebugCanvas.h"
#include "tools/debugger/DrawCommand.h"
#include "include/gpu/GrContext.h"
#include "src/gpu/GrAuditTrail.h"
#include "src/gpu/GrContextPriv.h"
#include "src/gpu/GrRenderTargetContext.h"
#define SKDEBUGCANVAS_VERSION 1
#define SKDEBUGCANVAS_ATTRIBUTE_VERSION "version"
#define SKDEBUGCANVAS_ATTRIBUTE_COMMANDS "commands"
#define SKDEBUGCANVAS_ATTRIBUTE_AUDITTRAIL "auditTrail"
class DebugPaintFilterCanvas : public SkPaintFilterCanvas {
public:
DebugPaintFilterCanvas(SkCanvas* canvas, bool overdrawViz)
: INHERITED(canvas), fOverdrawViz(overdrawViz) {}
protected:
bool onFilter(SkPaint& paint) const override {
if (fOverdrawViz) {
paint.setColor(SK_ColorRED);
paint.setAlpha(0x08);
paint.setBlendMode(SkBlendMode::kSrcOver);
}
return true;
}
void onDrawPicture(const SkPicture* picture,
const SkMatrix* matrix,
const SkPaint* paint) override {
// We need to replay the picture onto this canvas in order to filter its internal paints.
this->SkCanvas::onDrawPicture(picture, matrix, paint);
}
private:
bool fOverdrawViz;
typedef SkPaintFilterCanvas INHERITED;
};
DebugCanvas::DebugCanvas(int width, int height)
: INHERITED(width, height)
, fOverdrawViz(false)
, fClipVizColor(SK_ColorTRANSPARENT)
, fDrawGpuOpBounds(false) {
// SkPicturePlayback uses the base-class' quickReject calls to cull clipped
// operations. This can lead to problems in the debugger which expects all
// the operations in the captured skp to appear in the debug canvas. To
// circumvent this we create a wide open clip here (an empty clip rect
// is not sufficient).
// Internally, the SkRect passed to clipRect is converted to an SkIRect and
// rounded out. The following code creates a nearly maximal rect that will
// not get collapsed by the coming conversions (Due to precision loss the
// inset has to be surprisingly large).
SkIRect largeIRect = SkRectPriv::MakeILarge();
largeIRect.inset(1024, 1024);
SkRect large = SkRect::Make(largeIRect);
#ifdef SK_DEBUG
SkASSERT(!large.roundOut().isEmpty());
#endif
// call the base class' version to avoid adding a draw command
this->INHERITED::onClipRect(large, kReplace_SkClipOp, kHard_ClipEdgeStyle);
}
DebugCanvas::DebugCanvas(SkIRect bounds) { DebugCanvas(bounds.width(), bounds.height()); }
DebugCanvas::~DebugCanvas() { fCommandVector.deleteAll(); }
void DebugCanvas::addDrawCommand(DrawCommand* command) { fCommandVector.push_back(command); }
void DebugCanvas::draw(SkCanvas* canvas) {
if (!fCommandVector.isEmpty()) {
this->drawTo(canvas, fCommandVector.count() - 1);
}
}
void DebugCanvas::drawTo(SkCanvas* originalCanvas, int index, int m) {
SkASSERT(!fCommandVector.isEmpty());
SkASSERT(index < fCommandVector.count());
Revert "Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing"" This reverts commit 9bcda719e87140dcb541356fdb3f589e145c9b8e. Reason for revert: No idea why the bots failed with the original CL. Putting it back in. Original change's description: > Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing" > > This reverts commit 4bf98e7e802edf43effec93bea22fecb031f65f1. > > Reason for revert: Seems to have caused some compile bots to break- > https://chromium-swarm.appspot.com/task?id=333c47cadb764f10&refresh=10 > > Original change's description: > > Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing > > > > Change-Id: I3446bfc42c4cf521916a03aa0f367cd38b4fd370 > > Reviewed-on: https://skia-review.googlesource.com/6401 > > Reviewed-by: Ben Wagner <bungeman@google.com> > > Commit-Queue: Brian Salomon <bsalomon@google.com> > > > > TBR=bsalomon@google.com,bungeman@google.com,reviews@skia.org > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > > Change-Id: I0a73fe8c13967233dec950c317693d13d738722a > Reviewed-on: https://skia-review.googlesource.com/6408 > Commit-Queue: Ravi Mistry <rmistry@google.com> > Reviewed-by: Ravi Mistry <rmistry@google.com> > TBR=bsalomon@google.com,bungeman@google.com,rmistry@google.com,reviews@skia.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Change-Id: Iad544f883804d13f04640498b4b63f735d33840e Reviewed-on: https://skia-review.googlesource.com/6409 Commit-Queue: Ravi Mistry <rmistry@google.com> Reviewed-by: Ravi Mistry <rmistry@google.com>
2016-12-21 22:41:03 +00:00
int saveCount = originalCanvas->save();
Revert "Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing"" This reverts commit 9bcda719e87140dcb541356fdb3f589e145c9b8e. Reason for revert: No idea why the bots failed with the original CL. Putting it back in. Original change's description: > Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing" > > This reverts commit 4bf98e7e802edf43effec93bea22fecb031f65f1. > > Reason for revert: Seems to have caused some compile bots to break- > https://chromium-swarm.appspot.com/task?id=333c47cadb764f10&refresh=10 > > Original change's description: > > Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing > > > > Change-Id: I3446bfc42c4cf521916a03aa0f367cd38b4fd370 > > Reviewed-on: https://skia-review.googlesource.com/6401 > > Reviewed-by: Ben Wagner <bungeman@google.com> > > Commit-Queue: Brian Salomon <bsalomon@google.com> > > > > TBR=bsalomon@google.com,bungeman@google.com,reviews@skia.org > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > > Change-Id: I0a73fe8c13967233dec950c317693d13d738722a > Reviewed-on: https://skia-review.googlesource.com/6408 > Commit-Queue: Ravi Mistry <rmistry@google.com> > Reviewed-by: Ravi Mistry <rmistry@google.com> > TBR=bsalomon@google.com,bungeman@google.com,rmistry@google.com,reviews@skia.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Change-Id: Iad544f883804d13f04640498b4b63f735d33840e Reviewed-on: https://skia-review.googlesource.com/6409 Commit-Queue: Ravi Mistry <rmistry@google.com> Reviewed-by: Ravi Mistry <rmistry@google.com>
2016-12-21 22:41:03 +00:00
SkRect windowRect = SkRect::MakeWH(SkIntToScalar(originalCanvas->getBaseLayerSize().width()),
SkIntToScalar(originalCanvas->getBaseLayerSize().height()));
originalCanvas->clear(SK_ColorTRANSPARENT);
Revert "Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing"" This reverts commit 9bcda719e87140dcb541356fdb3f589e145c9b8e. Reason for revert: No idea why the bots failed with the original CL. Putting it back in. Original change's description: > Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing" > > This reverts commit 4bf98e7e802edf43effec93bea22fecb031f65f1. > > Reason for revert: Seems to have caused some compile bots to break- > https://chromium-swarm.appspot.com/task?id=333c47cadb764f10&refresh=10 > > Original change's description: > > Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing > > > > Change-Id: I3446bfc42c4cf521916a03aa0f367cd38b4fd370 > > Reviewed-on: https://skia-review.googlesource.com/6401 > > Reviewed-by: Ben Wagner <bungeman@google.com> > > Commit-Queue: Brian Salomon <bsalomon@google.com> > > > > TBR=bsalomon@google.com,bungeman@google.com,reviews@skia.org > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > > Change-Id: I0a73fe8c13967233dec950c317693d13d738722a > Reviewed-on: https://skia-review.googlesource.com/6408 > Commit-Queue: Ravi Mistry <rmistry@google.com> > Reviewed-by: Ravi Mistry <rmistry@google.com> > TBR=bsalomon@google.com,bungeman@google.com,rmistry@google.com,reviews@skia.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Change-Id: Iad544f883804d13f04640498b4b63f735d33840e Reviewed-on: https://skia-review.googlesource.com/6409 Commit-Queue: Ravi Mistry <rmistry@google.com> Reviewed-by: Ravi Mistry <rmistry@google.com>
2016-12-21 22:41:03 +00:00
originalCanvas->resetMatrix();
if (!windowRect.isEmpty()) {
Revert "Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing"" This reverts commit 9bcda719e87140dcb541356fdb3f589e145c9b8e. Reason for revert: No idea why the bots failed with the original CL. Putting it back in. Original change's description: > Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing" > > This reverts commit 4bf98e7e802edf43effec93bea22fecb031f65f1. > > Reason for revert: Seems to have caused some compile bots to break- > https://chromium-swarm.appspot.com/task?id=333c47cadb764f10&refresh=10 > > Original change's description: > > Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing > > > > Change-Id: I3446bfc42c4cf521916a03aa0f367cd38b4fd370 > > Reviewed-on: https://skia-review.googlesource.com/6401 > > Reviewed-by: Ben Wagner <bungeman@google.com> > > Commit-Queue: Brian Salomon <bsalomon@google.com> > > > > TBR=bsalomon@google.com,bungeman@google.com,reviews@skia.org > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > > Change-Id: I0a73fe8c13967233dec950c317693d13d738722a > Reviewed-on: https://skia-review.googlesource.com/6408 > Commit-Queue: Ravi Mistry <rmistry@google.com> > Reviewed-by: Ravi Mistry <rmistry@google.com> > TBR=bsalomon@google.com,bungeman@google.com,rmistry@google.com,reviews@skia.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Change-Id: Iad544f883804d13f04640498b4b63f735d33840e Reviewed-on: https://skia-review.googlesource.com/6409 Commit-Queue: Ravi Mistry <rmistry@google.com> Reviewed-by: Ravi Mistry <rmistry@google.com>
2016-12-21 22:41:03 +00:00
originalCanvas->clipRect(windowRect, kReplace_SkClipOp);
}
DebugPaintFilterCanvas filterCanvas(originalCanvas, fOverdrawViz);
// If we have a GPU backend we can also visualize the op information
GrAuditTrail* at = nullptr;
if (fDrawGpuOpBounds || m != -1) {
Revert "Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing"" This reverts commit 9bcda719e87140dcb541356fdb3f589e145c9b8e. Reason for revert: No idea why the bots failed with the original CL. Putting it back in. Original change's description: > Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing" > > This reverts commit 4bf98e7e802edf43effec93bea22fecb031f65f1. > > Reason for revert: Seems to have caused some compile bots to break- > https://chromium-swarm.appspot.com/task?id=333c47cadb764f10&refresh=10 > > Original change's description: > > Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing > > > > Change-Id: I3446bfc42c4cf521916a03aa0f367cd38b4fd370 > > Reviewed-on: https://skia-review.googlesource.com/6401 > > Reviewed-by: Ben Wagner <bungeman@google.com> > > Commit-Queue: Brian Salomon <bsalomon@google.com> > > > > TBR=bsalomon@google.com,bungeman@google.com,reviews@skia.org > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > > Change-Id: I0a73fe8c13967233dec950c317693d13d738722a > Reviewed-on: https://skia-review.googlesource.com/6408 > Commit-Queue: Ravi Mistry <rmistry@google.com> > Reviewed-by: Ravi Mistry <rmistry@google.com> > TBR=bsalomon@google.com,bungeman@google.com,rmistry@google.com,reviews@skia.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Change-Id: Iad544f883804d13f04640498b4b63f735d33840e Reviewed-on: https://skia-review.googlesource.com/6409 Commit-Queue: Ravi Mistry <rmistry@google.com> Reviewed-by: Ravi Mistry <rmistry@google.com>
2016-12-21 22:41:03 +00:00
// The audit trail must be obtained from the original canvas.
at = this->getAuditTrail(originalCanvas);
}
for (int i = 0; i <= index; i++) {
// We need to flush any pending operations, or they might combine with commands below.
// Previous operations were not registered with the audit trail when they were
// created, so if we allow them to combine, the audit trail will fail to find them.
Revert "Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing"" This reverts commit 9bcda719e87140dcb541356fdb3f589e145c9b8e. Reason for revert: No idea why the bots failed with the original CL. Putting it back in. Original change's description: > Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing" > > This reverts commit 4bf98e7e802edf43effec93bea22fecb031f65f1. > > Reason for revert: Seems to have caused some compile bots to break- > https://chromium-swarm.appspot.com/task?id=333c47cadb764f10&refresh=10 > > Original change's description: > > Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing > > > > Change-Id: I3446bfc42c4cf521916a03aa0f367cd38b4fd370 > > Reviewed-on: https://skia-review.googlesource.com/6401 > > Reviewed-by: Ben Wagner <bungeman@google.com> > > Commit-Queue: Brian Salomon <bsalomon@google.com> > > > > TBR=bsalomon@google.com,bungeman@google.com,reviews@skia.org > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > > Change-Id: I0a73fe8c13967233dec950c317693d13d738722a > Reviewed-on: https://skia-review.googlesource.com/6408 > Commit-Queue: Ravi Mistry <rmistry@google.com> > Reviewed-by: Ravi Mistry <rmistry@google.com> > TBR=bsalomon@google.com,bungeman@google.com,rmistry@google.com,reviews@skia.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Change-Id: Iad544f883804d13f04640498b4b63f735d33840e Reviewed-on: https://skia-review.googlesource.com/6409 Commit-Queue: Ravi Mistry <rmistry@google.com> Reviewed-by: Ravi Mistry <rmistry@google.com>
2016-12-21 22:41:03 +00:00
filterCanvas.flush();
GrAuditTrail::AutoCollectOps* acb = nullptr;
if (at) {
acb = new GrAuditTrail::AutoCollectOps(at, i);
}
if (fCommandVector[i]->isVisible()) {
fCommandVector[i]->execute(&filterCanvas);
}
if (at && acb) {
delete acb;
}
}
if (SkColorGetA(fClipVizColor) != 0) {
Revert "Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing"" This reverts commit 9bcda719e87140dcb541356fdb3f589e145c9b8e. Reason for revert: No idea why the bots failed with the original CL. Putting it back in. Original change's description: > Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing" > > This reverts commit 4bf98e7e802edf43effec93bea22fecb031f65f1. > > Reason for revert: Seems to have caused some compile bots to break- > https://chromium-swarm.appspot.com/task?id=333c47cadb764f10&refresh=10 > > Original change's description: > > Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing > > > > Change-Id: I3446bfc42c4cf521916a03aa0f367cd38b4fd370 > > Reviewed-on: https://skia-review.googlesource.com/6401 > > Reviewed-by: Ben Wagner <bungeman@google.com> > > Commit-Queue: Brian Salomon <bsalomon@google.com> > > > > TBR=bsalomon@google.com,bungeman@google.com,reviews@skia.org > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > > Change-Id: I0a73fe8c13967233dec950c317693d13d738722a > Reviewed-on: https://skia-review.googlesource.com/6408 > Commit-Queue: Ravi Mistry <rmistry@google.com> > Reviewed-by: Ravi Mistry <rmistry@google.com> > TBR=bsalomon@google.com,bungeman@google.com,rmistry@google.com,reviews@skia.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Change-Id: Iad544f883804d13f04640498b4b63f735d33840e Reviewed-on: https://skia-review.googlesource.com/6409 Commit-Queue: Ravi Mistry <rmistry@google.com> Reviewed-by: Ravi Mistry <rmistry@google.com>
2016-12-21 22:41:03 +00:00
filterCanvas.save();
#define LARGE_COORD 1000000000
Revert "Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing"" This reverts commit 9bcda719e87140dcb541356fdb3f589e145c9b8e. Reason for revert: No idea why the bots failed with the original CL. Putting it back in. Original change's description: > Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing" > > This reverts commit 4bf98e7e802edf43effec93bea22fecb031f65f1. > > Reason for revert: Seems to have caused some compile bots to break- > https://chromium-swarm.appspot.com/task?id=333c47cadb764f10&refresh=10 > > Original change's description: > > Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing > > > > Change-Id: I3446bfc42c4cf521916a03aa0f367cd38b4fd370 > > Reviewed-on: https://skia-review.googlesource.com/6401 > > Reviewed-by: Ben Wagner <bungeman@google.com> > > Commit-Queue: Brian Salomon <bsalomon@google.com> > > > > TBR=bsalomon@google.com,bungeman@google.com,reviews@skia.org > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > > Change-Id: I0a73fe8c13967233dec950c317693d13d738722a > Reviewed-on: https://skia-review.googlesource.com/6408 > Commit-Queue: Ravi Mistry <rmistry@google.com> > Reviewed-by: Ravi Mistry <rmistry@google.com> > TBR=bsalomon@google.com,bungeman@google.com,rmistry@google.com,reviews@skia.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Change-Id: Iad544f883804d13f04640498b4b63f735d33840e Reviewed-on: https://skia-review.googlesource.com/6409 Commit-Queue: Ravi Mistry <rmistry@google.com> Reviewed-by: Ravi Mistry <rmistry@google.com>
2016-12-21 22:41:03 +00:00
filterCanvas.clipRect(
SkRect::MakeLTRB(-LARGE_COORD, -LARGE_COORD, LARGE_COORD, LARGE_COORD),
kReverseDifference_SkClipOp);
SkPaint clipPaint;
clipPaint.setColor(fClipVizColor);
Revert "Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing"" This reverts commit 9bcda719e87140dcb541356fdb3f589e145c9b8e. Reason for revert: No idea why the bots failed with the original CL. Putting it back in. Original change's description: > Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing" > > This reverts commit 4bf98e7e802edf43effec93bea22fecb031f65f1. > > Reason for revert: Seems to have caused some compile bots to break- > https://chromium-swarm.appspot.com/task?id=333c47cadb764f10&refresh=10 > > Original change's description: > > Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing > > > > Change-Id: I3446bfc42c4cf521916a03aa0f367cd38b4fd370 > > Reviewed-on: https://skia-review.googlesource.com/6401 > > Reviewed-by: Ben Wagner <bungeman@google.com> > > Commit-Queue: Brian Salomon <bsalomon@google.com> > > > > TBR=bsalomon@google.com,bungeman@google.com,reviews@skia.org > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > > Change-Id: I0a73fe8c13967233dec950c317693d13d738722a > Reviewed-on: https://skia-review.googlesource.com/6408 > Commit-Queue: Ravi Mistry <rmistry@google.com> > Reviewed-by: Ravi Mistry <rmistry@google.com> > TBR=bsalomon@google.com,bungeman@google.com,rmistry@google.com,reviews@skia.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Change-Id: Iad544f883804d13f04640498b4b63f735d33840e Reviewed-on: https://skia-review.googlesource.com/6409 Commit-Queue: Ravi Mistry <rmistry@google.com> Reviewed-by: Ravi Mistry <rmistry@google.com>
2016-12-21 22:41:03 +00:00
filterCanvas.drawPaint(clipPaint);
filterCanvas.restore();
}
Revert "Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing"" This reverts commit 9bcda719e87140dcb541356fdb3f589e145c9b8e. Reason for revert: No idea why the bots failed with the original CL. Putting it back in. Original change's description: > Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing" > > This reverts commit 4bf98e7e802edf43effec93bea22fecb031f65f1. > > Reason for revert: Seems to have caused some compile bots to break- > https://chromium-swarm.appspot.com/task?id=333c47cadb764f10&refresh=10 > > Original change's description: > > Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing > > > > Change-Id: I3446bfc42c4cf521916a03aa0f367cd38b4fd370 > > Reviewed-on: https://skia-review.googlesource.com/6401 > > Reviewed-by: Ben Wagner <bungeman@google.com> > > Commit-Queue: Brian Salomon <bsalomon@google.com> > > > > TBR=bsalomon@google.com,bungeman@google.com,reviews@skia.org > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > > Change-Id: I0a73fe8c13967233dec950c317693d13d738722a > Reviewed-on: https://skia-review.googlesource.com/6408 > Commit-Queue: Ravi Mistry <rmistry@google.com> > Reviewed-by: Ravi Mistry <rmistry@google.com> > TBR=bsalomon@google.com,bungeman@google.com,rmistry@google.com,reviews@skia.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Change-Id: Iad544f883804d13f04640498b4b63f735d33840e Reviewed-on: https://skia-review.googlesource.com/6409 Commit-Queue: Ravi Mistry <rmistry@google.com> Reviewed-by: Ravi Mistry <rmistry@google.com>
2016-12-21 22:41:03 +00:00
fMatrix = filterCanvas.getTotalMatrix();
fClip = filterCanvas.getDeviceClipBounds();
Revert "Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing"" This reverts commit 9bcda719e87140dcb541356fdb3f589e145c9b8e. Reason for revert: No idea why the bots failed with the original CL. Putting it back in. Original change's description: > Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing" > > This reverts commit 4bf98e7e802edf43effec93bea22fecb031f65f1. > > Reason for revert: Seems to have caused some compile bots to break- > https://chromium-swarm.appspot.com/task?id=333c47cadb764f10&refresh=10 > > Original change's description: > > Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing > > > > Change-Id: I3446bfc42c4cf521916a03aa0f367cd38b4fd370 > > Reviewed-on: https://skia-review.googlesource.com/6401 > > Reviewed-by: Ben Wagner <bungeman@google.com> > > Commit-Queue: Brian Salomon <bsalomon@google.com> > > > > TBR=bsalomon@google.com,bungeman@google.com,reviews@skia.org > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > > Change-Id: I0a73fe8c13967233dec950c317693d13d738722a > Reviewed-on: https://skia-review.googlesource.com/6408 > Commit-Queue: Ravi Mistry <rmistry@google.com> > Reviewed-by: Ravi Mistry <rmistry@google.com> > TBR=bsalomon@google.com,bungeman@google.com,rmistry@google.com,reviews@skia.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Change-Id: Iad544f883804d13f04640498b4b63f735d33840e Reviewed-on: https://skia-review.googlesource.com/6409 Commit-Queue: Ravi Mistry <rmistry@google.com> Reviewed-by: Ravi Mistry <rmistry@google.com>
2016-12-21 22:41:03 +00:00
filterCanvas.restoreToCount(saveCount);
// draw any ops if required and issue a full reset onto GrAuditTrail
if (at) {
// just in case there is global reordering, we flush the canvas before querying
// GrAuditTrail
GrAuditTrail::AutoEnable ae(at);
Revert "Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing"" This reverts commit 9bcda719e87140dcb541356fdb3f589e145c9b8e. Reason for revert: No idea why the bots failed with the original CL. Putting it back in. Original change's description: > Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing" > > This reverts commit 4bf98e7e802edf43effec93bea22fecb031f65f1. > > Reason for revert: Seems to have caused some compile bots to break- > https://chromium-swarm.appspot.com/task?id=333c47cadb764f10&refresh=10 > > Original change's description: > > Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing > > > > Change-Id: I3446bfc42c4cf521916a03aa0f367cd38b4fd370 > > Reviewed-on: https://skia-review.googlesource.com/6401 > > Reviewed-by: Ben Wagner <bungeman@google.com> > > Commit-Queue: Brian Salomon <bsalomon@google.com> > > > > TBR=bsalomon@google.com,bungeman@google.com,reviews@skia.org > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > > Change-Id: I0a73fe8c13967233dec950c317693d13d738722a > Reviewed-on: https://skia-review.googlesource.com/6408 > Commit-Queue: Ravi Mistry <rmistry@google.com> > Reviewed-by: Ravi Mistry <rmistry@google.com> > TBR=bsalomon@google.com,bungeman@google.com,rmistry@google.com,reviews@skia.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Change-Id: Iad544f883804d13f04640498b4b63f735d33840e Reviewed-on: https://skia-review.googlesource.com/6409 Commit-Queue: Ravi Mistry <rmistry@google.com> Reviewed-by: Ravi Mistry <rmistry@google.com>
2016-12-21 22:41:03 +00:00
filterCanvas.flush();
// we pick three colorblind-safe colors, 75% alpha
static const SkColor kTotalBounds = SkColorSetARGB(0xC0, 0x6A, 0x3D, 0x9A);
static const SkColor kCommandOpBounds = SkColorSetARGB(0xC0, 0xE3, 0x1A, 0x1C);
static const SkColor kOtherOpBounds = SkColorSetARGB(0xC0, 0xFF, 0x7F, 0x00);
Revert "Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing"" This reverts commit 9bcda719e87140dcb541356fdb3f589e145c9b8e. Reason for revert: No idea why the bots failed with the original CL. Putting it back in. Original change's description: > Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing" > > This reverts commit 4bf98e7e802edf43effec93bea22fecb031f65f1. > > Reason for revert: Seems to have caused some compile bots to break- > https://chromium-swarm.appspot.com/task?id=333c47cadb764f10&refresh=10 > > Original change's description: > > Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing > > > > Change-Id: I3446bfc42c4cf521916a03aa0f367cd38b4fd370 > > Reviewed-on: https://skia-review.googlesource.com/6401 > > Reviewed-by: Ben Wagner <bungeman@google.com> > > Commit-Queue: Brian Salomon <bsalomon@google.com> > > > > TBR=bsalomon@google.com,bungeman@google.com,reviews@skia.org > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > > Change-Id: I0a73fe8c13967233dec950c317693d13d738722a > Reviewed-on: https://skia-review.googlesource.com/6408 > Commit-Queue: Ravi Mistry <rmistry@google.com> > Reviewed-by: Ravi Mistry <rmistry@google.com> > TBR=bsalomon@google.com,bungeman@google.com,rmistry@google.com,reviews@skia.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Change-Id: Iad544f883804d13f04640498b4b63f735d33840e Reviewed-on: https://skia-review.googlesource.com/6409 Commit-Queue: Ravi Mistry <rmistry@google.com> Reviewed-by: Ravi Mistry <rmistry@google.com>
2016-12-21 22:41:03 +00:00
// get the render target of the top device (from the original canvas) so we can ignore ops
// drawn offscreen
GrRenderTargetContext* rtc =
originalCanvas->internal_private_accessTopLayerRenderTargetContext();
GrSurfaceProxy::UniqueID proxyID = rtc->asSurfaceProxy()->uniqueID();
// get the bounding boxes to draw
SkTArray<GrAuditTrail::OpInfo> childrenBounds;
if (m == -1) {
at->getBoundsByClientID(&childrenBounds, index);
} else {
// the client wants us to draw the mth op
at->getBoundsByOpListID(&childrenBounds.push_back(), m);
}
SkPaint paint;
paint.setStyle(SkPaint::kStroke_Style);
paint.setStrokeWidth(1);
for (int i = 0; i < childrenBounds.count(); i++) {
if (childrenBounds[i].fProxyUniqueID != proxyID) {
// offscreen draw, ignore for now
continue;
}
paint.setColor(kTotalBounds);
Revert "Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing"" This reverts commit 9bcda719e87140dcb541356fdb3f589e145c9b8e. Reason for revert: No idea why the bots failed with the original CL. Putting it back in. Original change's description: > Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing" > > This reverts commit 4bf98e7e802edf43effec93bea22fecb031f65f1. > > Reason for revert: Seems to have caused some compile bots to break- > https://chromium-swarm.appspot.com/task?id=333c47cadb764f10&refresh=10 > > Original change's description: > > Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing > > > > Change-Id: I3446bfc42c4cf521916a03aa0f367cd38b4fd370 > > Reviewed-on: https://skia-review.googlesource.com/6401 > > Reviewed-by: Ben Wagner <bungeman@google.com> > > Commit-Queue: Brian Salomon <bsalomon@google.com> > > > > TBR=bsalomon@google.com,bungeman@google.com,reviews@skia.org > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > > Change-Id: I0a73fe8c13967233dec950c317693d13d738722a > Reviewed-on: https://skia-review.googlesource.com/6408 > Commit-Queue: Ravi Mistry <rmistry@google.com> > Reviewed-by: Ravi Mistry <rmistry@google.com> > TBR=bsalomon@google.com,bungeman@google.com,rmistry@google.com,reviews@skia.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Change-Id: Iad544f883804d13f04640498b4b63f735d33840e Reviewed-on: https://skia-review.googlesource.com/6409 Commit-Queue: Ravi Mistry <rmistry@google.com> Reviewed-by: Ravi Mistry <rmistry@google.com>
2016-12-21 22:41:03 +00:00
filterCanvas.drawRect(childrenBounds[i].fBounds, paint);
for (int j = 0; j < childrenBounds[i].fOps.count(); j++) {
const GrAuditTrail::OpInfo::Op& op = childrenBounds[i].fOps[j];
if (op.fClientID != index) {
paint.setColor(kOtherOpBounds);
} else {
paint.setColor(kCommandOpBounds);
}
Revert "Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing"" This reverts commit 9bcda719e87140dcb541356fdb3f589e145c9b8e. Reason for revert: No idea why the bots failed with the original CL. Putting it back in. Original change's description: > Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing" > > This reverts commit 4bf98e7e802edf43effec93bea22fecb031f65f1. > > Reason for revert: Seems to have caused some compile bots to break- > https://chromium-swarm.appspot.com/task?id=333c47cadb764f10&refresh=10 > > Original change's description: > > Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing > > > > Change-Id: I3446bfc42c4cf521916a03aa0f367cd38b4fd370 > > Reviewed-on: https://skia-review.googlesource.com/6401 > > Reviewed-by: Ben Wagner <bungeman@google.com> > > Commit-Queue: Brian Salomon <bsalomon@google.com> > > > > TBR=bsalomon@google.com,bungeman@google.com,reviews@skia.org > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > > Change-Id: I0a73fe8c13967233dec950c317693d13d738722a > Reviewed-on: https://skia-review.googlesource.com/6408 > Commit-Queue: Ravi Mistry <rmistry@google.com> > Reviewed-by: Ravi Mistry <rmistry@google.com> > TBR=bsalomon@google.com,bungeman@google.com,rmistry@google.com,reviews@skia.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Change-Id: Iad544f883804d13f04640498b4b63f735d33840e Reviewed-on: https://skia-review.googlesource.com/6409 Commit-Queue: Ravi Mistry <rmistry@google.com> Reviewed-by: Ravi Mistry <rmistry@google.com>
2016-12-21 22:41:03 +00:00
filterCanvas.drawRect(op.fBounds, paint);
}
}
}
Revert "Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing"" This reverts commit 9bcda719e87140dcb541356fdb3f589e145c9b8e. Reason for revert: No idea why the bots failed with the original CL. Putting it back in. Original change's description: > Revert "Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing" > > This reverts commit 4bf98e7e802edf43effec93bea22fecb031f65f1. > > Reason for revert: Seems to have caused some compile bots to break- > https://chromium-swarm.appspot.com/task?id=333c47cadb764f10&refresh=10 > > Original change's description: > > Fix issue in SkDebugCanvas where filter canvas prevents GrOp bounds from drawing > > > > Change-Id: I3446bfc42c4cf521916a03aa0f367cd38b4fd370 > > Reviewed-on: https://skia-review.googlesource.com/6401 > > Reviewed-by: Ben Wagner <bungeman@google.com> > > Commit-Queue: Brian Salomon <bsalomon@google.com> > > > > TBR=bsalomon@google.com,bungeman@google.com,reviews@skia.org > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > > Change-Id: I0a73fe8c13967233dec950c317693d13d738722a > Reviewed-on: https://skia-review.googlesource.com/6408 > Commit-Queue: Ravi Mistry <rmistry@google.com> > Reviewed-by: Ravi Mistry <rmistry@google.com> > TBR=bsalomon@google.com,bungeman@google.com,rmistry@google.com,reviews@skia.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Change-Id: Iad544f883804d13f04640498b4b63f735d33840e Reviewed-on: https://skia-review.googlesource.com/6409 Commit-Queue: Ravi Mistry <rmistry@google.com> Reviewed-by: Ravi Mistry <rmistry@google.com>
2016-12-21 22:41:03 +00:00
this->cleanupAuditTrail(originalCanvas);
}
void DebugCanvas::deleteDrawCommandAt(int index) {
SkASSERT(index < fCommandVector.count());
delete fCommandVector[index];
fCommandVector.remove(index);
}
DrawCommand* DebugCanvas::getDrawCommandAt(int index) {
SkASSERT(index < fCommandVector.count());
return fCommandVector[index];
}
GrAuditTrail* DebugCanvas::getAuditTrail(SkCanvas* canvas) {
GrAuditTrail* at = nullptr;
GrContext* ctx = canvas->getGrContext();
if (ctx) {
at = ctx->priv().auditTrail();
}
return at;
}
void DebugCanvas::drawAndCollectOps(int n, SkCanvas* canvas) {
GrAuditTrail* at = this->getAuditTrail(canvas);
if (at) {
// loop over all of the commands and draw them, this is to collect reordering
// information
for (int i = 0; i < this->getSize() && i <= n; i++) {
GrAuditTrail::AutoCollectOps enable(at, i);
fCommandVector[i]->execute(canvas);
}
// in case there is some kind of global reordering
{
GrAuditTrail::AutoEnable ae(at);
canvas->flush();
}
}
}
void DebugCanvas::cleanupAuditTrail(SkCanvas* canvas) {
GrAuditTrail* at = this->getAuditTrail(canvas);
if (at) {
GrAuditTrail::AutoEnable ae(at);
at->fullReset();
}
}
void DebugCanvas::toJSON(SkJSONWriter& writer,
UrlDataManager& urlDataManager,
int n,
SkCanvas* canvas) {
this->drawAndCollectOps(n, canvas);
// now collect json
GrAuditTrail* at = this->getAuditTrail(canvas);
writer.appendS32(SKDEBUGCANVAS_ATTRIBUTE_VERSION, SKDEBUGCANVAS_VERSION);
writer.beginArray(SKDEBUGCANVAS_ATTRIBUTE_COMMANDS);
for (int i = 0; i < this->getSize() && i <= n; i++) {
writer.beginObject(); // command
this->getDrawCommandAt(i)->toJSON(writer, urlDataManager);
if (at) {
writer.appendName(SKDEBUGCANVAS_ATTRIBUTE_AUDITTRAIL);
at->toJson(writer, i);
}
writer.endObject(); // command
}
writer.endArray(); // commands
this->cleanupAuditTrail(canvas);
}
void DebugCanvas::toJSONOpList(SkJSONWriter& writer, int n, SkCanvas* canvas) {
this->drawAndCollectOps(n, canvas);
GrAuditTrail* at = this->getAuditTrail(canvas);
if (at) {
GrAuditTrail::AutoManageOpList enable(at);
at->toJson(writer);
} else {
writer.beginObject();
writer.endObject();
}
this->cleanupAuditTrail(canvas);
}
void DebugCanvas::setOverdrawViz(bool overdrawViz) { fOverdrawViz = overdrawViz; }
void DebugCanvas::onClipPath(const SkPath& path, SkClipOp op, ClipEdgeStyle edgeStyle) {
this->addDrawCommand(new ClipPathCommand(path, op, kSoft_ClipEdgeStyle == edgeStyle));
}
void DebugCanvas::onClipRect(const SkRect& rect, SkClipOp op, ClipEdgeStyle edgeStyle) {
this->addDrawCommand(new ClipRectCommand(rect, op, kSoft_ClipEdgeStyle == edgeStyle));
}
void DebugCanvas::onClipRRect(const SkRRect& rrect, SkClipOp op, ClipEdgeStyle edgeStyle) {
this->addDrawCommand(new ClipRRectCommand(rrect, op, kSoft_ClipEdgeStyle == edgeStyle));
}
void DebugCanvas::onClipRegion(const SkRegion& region, SkClipOp op) {
this->addDrawCommand(new ClipRegionCommand(region, op));
}
void DebugCanvas::didConcat(const SkMatrix& matrix) {
this->addDrawCommand(new ConcatCommand(matrix));
this->INHERITED::didConcat(matrix);
}
void DebugCanvas::onDrawAnnotation(const SkRect& rect, const char key[], SkData* value) {
this->addDrawCommand(new DrawAnnotationCommand(rect, key, sk_ref_sp(value)));
}
void DebugCanvas::onDrawBitmap(const SkBitmap& bitmap,
SkScalar left,
SkScalar top,
const SkPaint* paint) {
this->addDrawCommand(new DrawBitmapCommand(bitmap, left, top, paint));
}
void DebugCanvas::onDrawBitmapLattice(const SkBitmap& bitmap,
const Lattice& lattice,
const SkRect& dst,
const SkPaint* paint) {
this->addDrawCommand(new DrawBitmapLatticeCommand(bitmap, lattice, dst, paint));
}
void DebugCanvas::onDrawBitmapRect(const SkBitmap& bitmap,
const SkRect* src,
const SkRect& dst,
const SkPaint* paint,
SrcRectConstraint constraint) {
this->addDrawCommand(
new DrawBitmapRectCommand(bitmap, src, dst, paint, (SrcRectConstraint)constraint));
}
void DebugCanvas::onDrawBitmapNine(const SkBitmap& bitmap,
const SkIRect& center,
const SkRect& dst,
const SkPaint* paint) {
this->addDrawCommand(new DrawBitmapNineCommand(bitmap, center, dst, paint));
}
void DebugCanvas::onDrawImage(const SkImage* image,
SkScalar left,
SkScalar top,
const SkPaint* paint) {
this->addDrawCommand(new DrawImageCommand(image, left, top, paint));
}
void DebugCanvas::onDrawImageLattice(const SkImage* image,
const Lattice& lattice,
const SkRect& dst,
const SkPaint* paint) {
this->addDrawCommand(new DrawImageLatticeCommand(image, lattice, dst, paint));
}
void DebugCanvas::onDrawImageRect(const SkImage* image,
const SkRect* src,
const SkRect& dst,
const SkPaint* paint,
SrcRectConstraint constraint) {
this->addDrawCommand(new DrawImageRectCommand(image, src, dst, paint, constraint));
}
void DebugCanvas::onDrawImageNine(const SkImage* image,
const SkIRect& center,
const SkRect& dst,
const SkPaint* paint) {
this->addDrawCommand(new DrawImageNineCommand(image, center, dst, paint));
}
void DebugCanvas::onDrawOval(const SkRect& oval, const SkPaint& paint) {
this->addDrawCommand(new DrawOvalCommand(oval, paint));
}
void DebugCanvas::onDrawArc(const SkRect& oval,
SkScalar startAngle,
SkScalar sweepAngle,
bool useCenter,
const SkPaint& paint) {
this->addDrawCommand(new DrawArcCommand(oval, startAngle, sweepAngle, useCenter, paint));
}
void DebugCanvas::onDrawPaint(const SkPaint& paint) {
this->addDrawCommand(new DrawPaintCommand(paint));
}
void DebugCanvas::onDrawBehind(const SkPaint& paint) {
this->addDrawCommand(new DrawBehindCommand(paint));
}
void DebugCanvas::onDrawPath(const SkPath& path, const SkPaint& paint) {
this->addDrawCommand(new DrawPathCommand(path, paint));
}
void DebugCanvas::onDrawRegion(const SkRegion& region, const SkPaint& paint) {
this->addDrawCommand(new DrawRegionCommand(region, paint));
}
void DebugCanvas::onDrawPicture(const SkPicture* picture,
const SkMatrix* matrix,
const SkPaint* paint) {
this->addDrawCommand(new BeginDrawPictureCommand(picture, matrix, paint));
SkAutoCanvasMatrixPaint acmp(this, matrix, paint, picture->cullRect());
picture->playback(this);
this->addDrawCommand(new EndDrawPictureCommand(SkToBool(matrix) || SkToBool(paint)));
}
void DebugCanvas::onDrawPoints(PointMode mode,
size_t count,
const SkPoint pts[],
const SkPaint& paint) {
this->addDrawCommand(new DrawPointsCommand(mode, count, pts, paint));
}
void DebugCanvas::onDrawRect(const SkRect& rect, const SkPaint& paint) {
// NOTE(chudy): Messing up when renamed to DrawRect... Why?
addDrawCommand(new DrawRectCommand(rect, paint));
}
void DebugCanvas::onDrawRRect(const SkRRect& rrect, const SkPaint& paint) {
this->addDrawCommand(new DrawRRectCommand(rrect, paint));
}
void DebugCanvas::onDrawDRRect(const SkRRect& outer, const SkRRect& inner, const SkPaint& paint) {
this->addDrawCommand(new DrawDRRectCommand(outer, inner, paint));
}
void DebugCanvas::onDrawTextBlob(const SkTextBlob* blob,
SkScalar x,
SkScalar y,
const SkPaint& paint) {
this->addDrawCommand(
new DrawTextBlobCommand(sk_ref_sp(const_cast<SkTextBlob*>(blob)), x, y, paint));
}
void DebugCanvas::onDrawPatch(const SkPoint cubics[12],
const SkColor colors[4],
const SkPoint texCoords[4],
SkBlendMode bmode,
const SkPaint& paint) {
this->addDrawCommand(new DrawPatchCommand(cubics, colors, texCoords, bmode, paint));
}
void DebugCanvas::onDrawVerticesObject(const SkVertices* vertices,
const SkVertices::Bone bones[],
int boneCount,
SkBlendMode bmode,
const SkPaint& paint) {
// TODO: ANIMATION NOT LOGGED
this->addDrawCommand(
new DrawVerticesCommand(sk_ref_sp(const_cast<SkVertices*>(vertices)), bmode, paint));
}
void DebugCanvas::onDrawAtlas(const SkImage* image,
const SkRSXform xform[],
const SkRect tex[],
const SkColor colors[],
int count,
SkBlendMode bmode,
const SkRect* cull,
const SkPaint* paint) {
this->addDrawCommand(
new DrawAtlasCommand(image, xform, tex, colors, count, bmode, cull, paint));
}
void DebugCanvas::onDrawShadowRec(const SkPath& path, const SkDrawShadowRec& rec) {
this->addDrawCommand(new DrawShadowCommand(path, rec));
}
void DebugCanvas::onDrawDrawable(SkDrawable* drawable, const SkMatrix* matrix) {
this->addDrawCommand(new DrawDrawableCommand(drawable, matrix));
}
void DebugCanvas::onDrawEdgeAAQuad(const SkRect& rect,
const SkPoint clip[4],
QuadAAFlags aa,
SkColor color,
SkBlendMode mode) {
this->addDrawCommand(new DrawEdgeAAQuadCommand(rect, clip, aa, color, mode));
Reland "Reland "Update SkCanvas' experimental SkiaRenderer API"" This reverts commit 138a06d1b1cd035daf6b6a970c75126e94777822. Reason for revert: add explicit constructors to ImageSetEntry to account for the new arguments, matching SkiaRenderer's current initializer list. Also hardens SkPictureDrawback's deserialization code for drawEdgeAAImageSet and drawEdgeAAQuad from a fuzz that was found during the CL's brief lifespan. Original change's description: > Revert "Reland "Update SkCanvas' experimental SkiaRenderer API"" > > This reverts commit bd9d88a6e4d9730f3aa67227e5a1618180513a87. > > Reason for revert: Breaks SkiaRenderer on Android. Rendering is all corrupted, bisected to this change. > > Original change's description: > > Reland "Update SkCanvas' experimental SkiaRenderer API" > > > > This reverts commit 90791c202dd2d943565237bf511d929e8bd19951. > > > > Reason for revert: Jumped the gun, just need to update blacklist > > > > Original change's description: > > > Revert "Update SkCanvas' experimental SkiaRenderer API" > > > > > > This reverts commit 4bf964602ab8758f6e580aaaa69add4fb260c1a6. > > > > > > Reason for revert: vulkan dm crashes > > > > > > Original change's description: > > > > Update SkCanvas' experimental SkiaRenderer API > > > > > > > > This lifts the temporary functions in SkGpuDevice into SkCanvas and > > > > deprecates the older experimental_DrawImageSetV1 and > > > > experimental_DrawEdgeAARect. The new functions can handle paints and > > > > transform batching. Internally, SkCanvas routes the old functions to the > > > > new entry points and all device-level code is updated to handle the new > > > > API features. > > > > > > > > While touching all of the canvas/device/recording areas, the > > > > experimental functions are grouped in an "EdgeAA" cluster instead of being > > > > separated into the image category and the rectangle category. > > > > > > > > Bug: skia:8739 > > > > Change-Id: I67c2a724873040ad5dc3307ab5b2823ba1eac54b > > > > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/190221 > > > > Commit-Queue: Michael Ludwig <michaelludwig@google.com> > > > > Reviewed-by: Brian Salomon <bsalomon@google.com> > > > > > > TBR=bsalomon@google.com,robertphillips@google.com,michaelludwig@google.com > > > > > > Change-Id: I87a5a258c5a1bd15e16389cdf91743772d6fa98a > > > No-Presubmit: true > > > No-Tree-Checks: true > > > No-Try: true > > > Bug: skia:8739 > > > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/201226 > > > Reviewed-by: Michael Ludwig <michaelludwig@google.com> > > > Commit-Queue: Michael Ludwig <michaelludwig@google.com> > > > > TBR=bsalomon@google.com,robertphillips@google.com,michaelludwig@google.com > > > > Change-Id: I75e9b6cbf079a7739b69a7e208730a930621abf9 > > No-Presubmit: true > > No-Tree-Checks: true > > No-Try: true > > Bug: skia:8739 > > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/201229 > > Reviewed-by: Michael Ludwig <michaelludwig@google.com> > > Commit-Queue: Michael Ludwig <michaelludwig@google.com> > > Auto-Submit: Michael Ludwig <michaelludwig@google.com> > > TBR=bsalomon@google.com,robertphillips@google.com,michaelludwig@google.com > > Change-Id: Ib87ef9b8b8598c16a8a6915920adf0b5dffc644b > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: skia:8739 > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/201391 > Reviewed-by: Brian Salomon <bsalomon@google.com> > Commit-Queue: Brian Salomon <bsalomon@google.com> Bug: skia:8739, oss-fuzz:13794 Change-Id: Ibd7df4a398928c3170d16300bf3ade496125372c Reviewed-on: https://skia-review.googlesource.com/c/skia/+/201650 Commit-Queue: Michael Ludwig <michaelludwig@google.com> Reviewed-by: Brian Salomon <bsalomon@google.com>
2019-03-19 13:16:38 +00:00
}
void DebugCanvas::onDrawEdgeAAImageSet(const ImageSetEntry set[],
int count,
const SkPoint dstClips[],
const SkMatrix preViewMatrices[],
const SkPaint* paint,
SrcRectConstraint constraint) {
this->addDrawCommand(new DrawEdgeAAImageSetCommand(
set, count, dstClips, preViewMatrices, paint, constraint));
Reland "Reland "Update SkCanvas' experimental SkiaRenderer API"" This reverts commit 138a06d1b1cd035daf6b6a970c75126e94777822. Reason for revert: add explicit constructors to ImageSetEntry to account for the new arguments, matching SkiaRenderer's current initializer list. Also hardens SkPictureDrawback's deserialization code for drawEdgeAAImageSet and drawEdgeAAQuad from a fuzz that was found during the CL's brief lifespan. Original change's description: > Revert "Reland "Update SkCanvas' experimental SkiaRenderer API"" > > This reverts commit bd9d88a6e4d9730f3aa67227e5a1618180513a87. > > Reason for revert: Breaks SkiaRenderer on Android. Rendering is all corrupted, bisected to this change. > > Original change's description: > > Reland "Update SkCanvas' experimental SkiaRenderer API" > > > > This reverts commit 90791c202dd2d943565237bf511d929e8bd19951. > > > > Reason for revert: Jumped the gun, just need to update blacklist > > > > Original change's description: > > > Revert "Update SkCanvas' experimental SkiaRenderer API" > > > > > > This reverts commit 4bf964602ab8758f6e580aaaa69add4fb260c1a6. > > > > > > Reason for revert: vulkan dm crashes > > > > > > Original change's description: > > > > Update SkCanvas' experimental SkiaRenderer API > > > > > > > > This lifts the temporary functions in SkGpuDevice into SkCanvas and > > > > deprecates the older experimental_DrawImageSetV1 and > > > > experimental_DrawEdgeAARect. The new functions can handle paints and > > > > transform batching. Internally, SkCanvas routes the old functions to the > > > > new entry points and all device-level code is updated to handle the new > > > > API features. > > > > > > > > While touching all of the canvas/device/recording areas, the > > > > experimental functions are grouped in an "EdgeAA" cluster instead of being > > > > separated into the image category and the rectangle category. > > > > > > > > Bug: skia:8739 > > > > Change-Id: I67c2a724873040ad5dc3307ab5b2823ba1eac54b > > > > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/190221 > > > > Commit-Queue: Michael Ludwig <michaelludwig@google.com> > > > > Reviewed-by: Brian Salomon <bsalomon@google.com> > > > > > > TBR=bsalomon@google.com,robertphillips@google.com,michaelludwig@google.com > > > > > > Change-Id: I87a5a258c5a1bd15e16389cdf91743772d6fa98a > > > No-Presubmit: true > > > No-Tree-Checks: true > > > No-Try: true > > > Bug: skia:8739 > > > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/201226 > > > Reviewed-by: Michael Ludwig <michaelludwig@google.com> > > > Commit-Queue: Michael Ludwig <michaelludwig@google.com> > > > > TBR=bsalomon@google.com,robertphillips@google.com,michaelludwig@google.com > > > > Change-Id: I75e9b6cbf079a7739b69a7e208730a930621abf9 > > No-Presubmit: true > > No-Tree-Checks: true > > No-Try: true > > Bug: skia:8739 > > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/201229 > > Reviewed-by: Michael Ludwig <michaelludwig@google.com> > > Commit-Queue: Michael Ludwig <michaelludwig@google.com> > > Auto-Submit: Michael Ludwig <michaelludwig@google.com> > > TBR=bsalomon@google.com,robertphillips@google.com,michaelludwig@google.com > > Change-Id: Ib87ef9b8b8598c16a8a6915920adf0b5dffc644b > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: skia:8739 > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/201391 > Reviewed-by: Brian Salomon <bsalomon@google.com> > Commit-Queue: Brian Salomon <bsalomon@google.com> Bug: skia:8739, oss-fuzz:13794 Change-Id: Ibd7df4a398928c3170d16300bf3ade496125372c Reviewed-on: https://skia-review.googlesource.com/c/skia/+/201650 Commit-Queue: Michael Ludwig <michaelludwig@google.com> Reviewed-by: Brian Salomon <bsalomon@google.com>
2019-03-19 13:16:38 +00:00
}
void DebugCanvas::willRestore() {
this->addDrawCommand(new RestoreCommand());
this->INHERITED::willRestore();
}
void DebugCanvas::willSave() {
this->addDrawCommand(new SaveCommand());
this->INHERITED::willSave();
}
SkCanvas::SaveLayerStrategy DebugCanvas::getSaveLayerStrategy(const SaveLayerRec& rec) {
this->addDrawCommand(new SaveLayerCommand(rec));
(void)this->INHERITED::getSaveLayerStrategy(rec);
// No need for a full layer.
return kNoLayer_SaveLayerStrategy;
}
bool DebugCanvas::onDoSaveBehind(const SkRect* subset) {
// TODO
return false;
}
void DebugCanvas::didSetMatrix(const SkMatrix& matrix) {
this->addDrawCommand(new SetMatrixCommand(matrix));
this->INHERITED::didSetMatrix(matrix);
}
void DebugCanvas::toggleCommand(int index, bool toggle) {
SkASSERT(index < fCommandVector.count());
fCommandVector[index]->setVisible(toggle);
}