From 65197ff1ac66555436d6d8b8d6f8d7c6d3aa0d59 Mon Sep 17 00:00:00 2001 From: Brian Osman Date: Tue, 29 May 2018 14:25:39 -0400 Subject: SkDrawCommand cleanup, continued - Removes all remaining manual memory management Change-Id: I3e9ed4e186082a13b46a2d2de295cbeb0cf9a449 Reviewed-on: https://skia-review.googlesource.com/130542 Commit-Queue: Brian Osman Reviewed-by: Mike Klein --- tools/debugger/SkDrawCommand.cpp | 104 ++++++++++++++------------------------- tools/debugger/SkDrawCommand.h | 42 ++++++---------- 2 files changed, 54 insertions(+), 92 deletions(-) (limited to 'tools/debugger') diff --git a/tools/debugger/SkDrawCommand.cpp b/tools/debugger/SkDrawCommand.cpp index 001911c975..215328603f 100644 --- a/tools/debugger/SkDrawCommand.cpp +++ b/tools/debugger/SkDrawCommand.cpp @@ -1855,31 +1855,26 @@ Json::Value SkDrawPointsCommand::toJSON(UrlDataManager& urlDataManager) const { return result; } +static Json::Value make_json_text(sk_sp text) { + return Json::Value((const char*)text->data(), (const char*)text->data() + text->size()); +} + SkDrawPosTextCommand::SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[], const SkPaint& paint) - : INHERITED(kDrawPosText_OpType) { - size_t numPts = paint.countText(text, byteLength); - - fText = new char[byteLength]; - memcpy(fText, text, byteLength); - fByteLength = byteLength; - - fPos = new SkPoint[numPts]; - memcpy(fPos, pos, numPts * sizeof(SkPoint)); - - fPaint = paint; -} + : INHERITED(kDrawPosText_OpType) + , fText(SkData::MakeWithCopy(text, byteLength)) + , fPos(pos, paint.countText(text, byteLength)) + , fPaint(paint) {} void SkDrawPosTextCommand::execute(SkCanvas* canvas) const { - canvas->drawPosText(fText, fByteLength, fPos, fPaint); + canvas->drawPosText(fText->data(), fText->size(), fPos.begin(), fPaint); } Json::Value SkDrawPosTextCommand::toJSON(UrlDataManager& urlDataManager) const { Json::Value result = INHERITED::toJSON(urlDataManager); - result[SKDEBUGCANVAS_ATTRIBUTE_TEXT] = Json::Value((const char*) fText, - ((const char*) fText) + fByteLength); + result[SKDEBUGCANVAS_ATTRIBUTE_TEXT] = make_json_text(fText); Json::Value coords(Json::arrayValue); - size_t numCoords = fPaint.textToGlyphs(fText, fByteLength, nullptr); + size_t numCoords = fPaint.textToGlyphs(fText->data(), fText->size(), nullptr); for (size_t i = 0; i < numCoords; i++) { coords.append(MakeJsonPoint(fPos[i])); } @@ -1891,31 +1886,22 @@ Json::Value SkDrawPosTextCommand::toJSON(UrlDataManager& urlDataManager) const { SkDrawPosTextHCommand::SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[], SkScalar constY, const SkPaint& paint) - : INHERITED(kDrawPosTextH_OpType) { - size_t numPts = paint.countText(text, byteLength); - - fText = new char[byteLength]; - memcpy(fText, text, byteLength); - fByteLength = byteLength; - - fXpos = new SkScalar[numPts]; - memcpy(fXpos, xpos, numPts * sizeof(SkScalar)); - - fConstY = constY; - fPaint = paint; -} + : INHERITED(kDrawPosTextH_OpType) + , fText(SkData::MakeWithCopy(text, byteLength)) + , fXpos(xpos, paint.countText(text, byteLength)) + , fConstY(constY) + , fPaint(paint) {} void SkDrawPosTextHCommand::execute(SkCanvas* canvas) const { - canvas->drawPosTextH(fText, fByteLength, fXpos, fConstY, fPaint); + canvas->drawPosTextH(fText->data(), fText->size(), fXpos.begin(), fConstY, fPaint); } Json::Value SkDrawPosTextHCommand::toJSON(UrlDataManager& urlDataManager) const { Json::Value result = INHERITED::toJSON(urlDataManager); - result[SKDEBUGCANVAS_ATTRIBUTE_TEXT] = Json::Value((const char*) fText, - ((const char*) fText) + fByteLength); + result[SKDEBUGCANVAS_ATTRIBUTE_TEXT] = make_json_text(fText); result[SKDEBUGCANVAS_ATTRIBUTE_Y] = Json::Value(fConstY); Json::Value xpos(Json::arrayValue); - size_t numXpos = fPaint.textToGlyphs(fText, fByteLength, nullptr); + size_t numXpos = fPaint.textToGlyphs(fText->data(), fText->size(), nullptr); for (size_t i = 0; i < numXpos; i++) { xpos.append(Json::Value(fXpos[i])); } @@ -2156,23 +2142,19 @@ Json::Value SkDrawShadowCommand::toJSON(UrlDataManager& urlDataManager) const { SkDrawTextCommand::SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y, const SkPaint& paint) - : INHERITED(kDrawText_OpType) { - fText = new char[byteLength]; - memcpy(fText, text, byteLength); - fByteLength = byteLength; - fX = x; - fY = y; - fPaint = paint; -} + : INHERITED(kDrawText_OpType) + , fText(SkData::MakeWithCopy(text, byteLength)) + , fX(x) + , fY(y) + , fPaint(paint) {} void SkDrawTextCommand::execute(SkCanvas* canvas) const { - canvas->drawText(fText, fByteLength, fX, fY, fPaint); + canvas->drawText(fText->data(), fText->size(), fX, fY, fPaint); } Json::Value SkDrawTextCommand::toJSON(UrlDataManager& urlDataManager) const { Json::Value result = INHERITED::toJSON(urlDataManager); - result[SKDEBUGCANVAS_ATTRIBUTE_TEXT] = Json::Value((const char*) fText, - ((const char*) fText) + fByteLength); + result[SKDEBUGCANVAS_ATTRIBUTE_TEXT] = make_json_text(fText); Json::Value coords(Json::arrayValue); result[SKDEBUGCANVAS_ATTRIBUTE_COORDS] = MakeJsonPoint(fX, fY); result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = MakeJsonPaint(fPaint, urlDataManager); @@ -2185,22 +2167,18 @@ SkDrawTextOnPathCommand::SkDrawTextOnPathCommand(const void* text, size_t byteLe const SkPath& path, const SkMatrix* matrix, const SkPaint& paint) : INHERITED(kDrawTextOnPath_OpType) - , fMatrix(matrix) { - fText = new char[byteLength]; - memcpy(fText, text, byteLength); - fByteLength = byteLength; - fPath = path; - fPaint = paint; -} + , fText(SkData::MakeWithCopy(text, byteLength)) + , fPath(path) + , fMatrix(matrix) + , fPaint(paint) {} void SkDrawTextOnPathCommand::execute(SkCanvas* canvas) const { - canvas->drawTextOnPath(fText, fByteLength, fPath, fMatrix.getMaybeNull(), fPaint); + canvas->drawTextOnPath(fText->data(), fText->size(), fPath, fMatrix.getMaybeNull(), fPaint); } Json::Value SkDrawTextOnPathCommand::toJSON(UrlDataManager& urlDataManager) const { Json::Value result = INHERITED::toJSON(urlDataManager); - result[SKDEBUGCANVAS_ATTRIBUTE_TEXT] = Json::Value((const char*) fText, - ((const char*) fText) + fByteLength); + result[SKDEBUGCANVAS_ATTRIBUTE_TEXT] = make_json_text(fText); Json::Value coords(Json::arrayValue); result[SKDEBUGCANVAS_ATTRIBUTE_PATH] = MakeJsonPath(fPath); if (fMatrix.isValid()) { @@ -2216,25 +2194,19 @@ SkDrawTextRSXformCommand::SkDrawTextRSXformCommand(const void* text, size_t byte const SkRSXform xform[], const SkRect* cull, const SkPaint& paint) : INHERITED(kDrawTextRSXform_OpType) + , fText(SkData::MakeWithCopy(text, byteLength)) + , fXform(xform, paint.countText(text, byteLength)) , fCull(cull) -{ - fText = new char[byteLength]; - memcpy(fText, text, byteLength); - fByteLength = byteLength; - int count = paint.countText(text, byteLength); - fXform = new SkRSXform[count]; - memcpy(fXform, xform, count * sizeof(SkRSXform)); - fPaint = paint; -} + , fPaint(paint) {} void SkDrawTextRSXformCommand::execute(SkCanvas* canvas) const { - canvas->drawTextRSXform(fText, fByteLength, fXform, fCull.getMaybeNull(), fPaint); + canvas->drawTextRSXform(fText->data(), fText->size(), fXform.begin(), fCull.getMaybeNull(), + fPaint); } Json::Value SkDrawTextRSXformCommand::toJSON(UrlDataManager& urlDataManager) const { Json::Value result = INHERITED::toJSON(urlDataManager); - result[SKDEBUGCANVAS_ATTRIBUTE_TEXT] = Json::Value((const char*) fText, - ((const char*) fText) + fByteLength); + result[SKDEBUGCANVAS_ATTRIBUTE_TEXT] = make_json_text(fText); result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = MakeJsonPaint(fPaint, urlDataManager); return result; } diff --git a/tools/debugger/SkDrawCommand.h b/tools/debugger/SkDrawCommand.h index 7bac9e4858..fa12dd45d3 100644 --- a/tools/debugger/SkDrawCommand.h +++ b/tools/debugger/SkDrawCommand.h @@ -486,16 +486,14 @@ class SkDrawTextCommand : public SkDrawCommand { public: SkDrawTextCommand(const void* text, size_t byteLength, SkScalar x, SkScalar y, const SkPaint& paint); - ~SkDrawTextCommand() override { delete [] fText; } void execute(SkCanvas* canvas) const override; Json::Value toJSON(UrlDataManager& urlDataManager) const override; private: - char* fText; - size_t fByteLength; - SkScalar fX; - SkScalar fY; - SkPaint fPaint; + sk_sp fText; + SkScalar fX; + SkScalar fY; + SkPaint fPaint; typedef SkDrawCommand INHERITED; }; @@ -504,15 +502,13 @@ class SkDrawPosTextCommand : public SkDrawCommand { public: SkDrawPosTextCommand(const void* text, size_t byteLength, const SkPoint pos[], const SkPaint& paint); - ~SkDrawPosTextCommand() override { delete [] fPos; delete [] fText; } void execute(SkCanvas* canvas) const override; Json::Value toJSON(UrlDataManager& urlDataManager) const override; private: - char* fText; - size_t fByteLength; - SkPoint* fPos; - SkPaint fPaint; + sk_sp fText; + SkTDArray fPos; + SkPaint fPaint; typedef SkDrawCommand INHERITED; }; @@ -521,13 +517,11 @@ class SkDrawTextOnPathCommand : public SkDrawCommand { public: SkDrawTextOnPathCommand(const void* text, size_t byteLength, const SkPath& path, const SkMatrix* matrix, const SkPaint& paint); - ~SkDrawTextOnPathCommand() override { delete [] fText; } void execute(SkCanvas* canvas) const override; Json::Value toJSON(UrlDataManager& urlDataManager) const override; private: - char* fText; - size_t fByteLength; + sk_sp fText; SkPath fPath; SkTLazy fMatrix; SkPaint fPaint; @@ -539,16 +533,14 @@ class SkDrawTextRSXformCommand : public SkDrawCommand { public: SkDrawTextRSXformCommand(const void* text, size_t byteLength, const SkRSXform[], const SkRect*, const SkPaint& paint); - ~SkDrawTextRSXformCommand() override { delete[] fText; delete[] fXform; } void execute(SkCanvas* canvas) const override; Json::Value toJSON(UrlDataManager& urlDataManager) const override; private: - char* fText; - size_t fByteLength; - SkRSXform* fXform; - SkTLazy fCull; - SkPaint fPaint; + sk_sp fText; + SkTDArray fXform; + SkTLazy fCull; + SkPaint fPaint; typedef SkDrawCommand INHERITED; }; @@ -557,16 +549,14 @@ class SkDrawPosTextHCommand : public SkDrawCommand { public: SkDrawPosTextHCommand(const void* text, size_t byteLength, const SkScalar xpos[], SkScalar constY, const SkPaint& paint); - ~SkDrawPosTextHCommand() override { delete [] fXpos; delete [] fText; } void execute(SkCanvas* canvas) const override; Json::Value toJSON(UrlDataManager& urlDataManager) const override; private: - SkScalar* fXpos; - char* fText; - size_t fByteLength; - SkScalar fConstY; - SkPaint fPaint; + sk_sp fText; + SkTDArray fXpos; + SkScalar fConstY; + SkPaint fPaint; typedef SkDrawCommand INHERITED; }; -- cgit v1.2.3