diff options
author | 2016-02-11 10:35:21 -0800 | |
---|---|---|
committer | 2016-02-11 10:35:21 -0800 | |
commit | f62a8b786c0e17a3818d0bdc8dbf1c627b063e1b (patch) | |
tree | d7c4f529e435a6a98cc94b4e604e421876f8645a /tools | |
parent | bed1ed6eaced308149a05fecded14d8458c7d99c (diff) |
integrated SkDebugCanvas JSON support with UrlDataManager
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1686143004
Review URL: https://codereview.chromium.org/1686143004
Diffstat (limited to 'tools')
-rw-r--r-- | tools/debugger/SkDebugCanvas.cpp | 2 | ||||
-rw-r--r-- | tools/debugger/SkDrawCommand.cpp | 590 | ||||
-rw-r--r-- | tools/debugger/SkDrawCommand.h | 110 |
3 files changed, 363 insertions, 339 deletions
diff --git a/tools/debugger/SkDebugCanvas.cpp b/tools/debugger/SkDebugCanvas.cpp index 8b71c0fb2c..0c79b755f3 100644 --- a/tools/debugger/SkDebugCanvas.cpp +++ b/tools/debugger/SkDebugCanvas.cpp @@ -323,7 +323,7 @@ Json::Value SkDebugCanvas::toJSON(UrlDataManager& urlDataManager, int n) { result[SKDEBUGCANVAS_ATTRIBUTE_VERSION] = Json::Value(SKDEBUGCANVAS_VERSION); Json::Value commands = Json::Value(Json::arrayValue); for (int i = 0; i < this->getSize() && i < n; i++) { - commands[i] = this->getDrawCommandAt(i)->toJSON(); + commands[i] = this->getDrawCommandAt(i)->toJSON(urlDataManager); } result[SKDEBUGCANVAS_ATTRIBUTE_COMMANDS] = commands; return result; diff --git a/tools/debugger/SkDrawCommand.cpp b/tools/debugger/SkDrawCommand.cpp index 20ac9942b9..f23c41a0e9 100644 --- a/tools/debugger/SkDrawCommand.cpp +++ b/tools/debugger/SkDrawCommand.cpp @@ -24,8 +24,6 @@ #include "SkValidatingReadBuffer.h" #include "SkWriteBuffer.h" -#define SKDEBUGCANVAS_SEND_BINARIES false - #define SKDEBUGCANVAS_ATTRIBUTE_COMMAND "command" #define SKDEBUGCANVAS_ATTRIBUTE_MATRIX "matrix" #define SKDEBUGCANVAS_ATTRIBUTE_COORDS "coords" @@ -63,7 +61,7 @@ #define SKDEBUGCANVAS_ATTRIBUTE_FILLTYPE "fillType" #define SKDEBUGCANVAS_ATTRIBUTE_VERBS "verbs" #define SKDEBUGCANVAS_ATTRIBUTE_NAME "name" -#define SKDEBUGCANVAS_ATTRIBUTE_BYTES "bytes" +#define SKDEBUGCANVAS_ATTRIBUTE_DATA "data" #define SKDEBUGCANVAS_ATTRIBUTE_SHADER "shader" #define SKDEBUGCANVAS_ATTRIBUTE_PATHEFFECT "pathEffect" #define SKDEBUGCANVAS_ATTRIBUTE_MASKFILTER "maskFilter" @@ -155,7 +153,7 @@ #define SKDEBUGCANVAS_FILTERQUALITY_MEDIUM "medium" #define SKDEBUGCANVAS_FILTERQUALITY_HIGH "high" -typedef SkDrawCommand* (*FROM_JSON)(Json::Value); +typedef SkDrawCommand* (*FROM_JSON)(Json::Value&, UrlDataManager&); // TODO(chudy): Refactor into non subclass model. @@ -214,7 +212,7 @@ SkString SkDrawCommand::toString() const { return SkString(GetCommandString(fOpType)); } -Json::Value SkDrawCommand::toJSON() const { +Json::Value SkDrawCommand::toJSON(UrlDataManager& urlDataManager) const { Json::Value result; result[SKDEBUGCANVAS_ATTRIBUTE_COMMAND] = this->GetCommandString(fOpType); return result; @@ -222,7 +220,7 @@ Json::Value SkDrawCommand::toJSON() const { #define INSTALL_FACTORY(name) factories.set(SkString(GetCommandString(k ## name ##_OpType)), \ (FROM_JSON) Sk ## name ## Command::fromJSON) -SkDrawCommand* SkDrawCommand::fromJSON(Json::Value& command) { +SkDrawCommand* SkDrawCommand::fromJSON(Json::Value& command, UrlDataManager& urlDataManager) { static SkTHashMap<SkString, FROM_JSON> factories; static bool initialized = false; if (!initialized) { @@ -261,7 +259,7 @@ SkDrawCommand* SkDrawCommand::fromJSON(Json::Value& command) { SkDebugf("no JSON factory for '%s'\n", name.c_str()); return nullptr; } - return (*factory)(command); + return (*factory)(command, urlDataManager); } namespace { @@ -582,64 +580,55 @@ static void store_bool(Json::Value* target, const char* key, bool value, bool de } } -static void encode_data(const void* data, size_t count, Json::Value* target) { - // just use a brain-dead JSON array for now, switch to base64 or something else smarter down the - // road - for (size_t i = 0; i < count; i++) { - target->append(((const uint8_t*)data)[i]); - } +static void encode_data(const void* bytes, size_t count, const char* contentType, + UrlDataManager& urlDataManager, Json::Value* target) { + SkAutoTUnref<SkData> data(SkData::NewWithCopy(bytes, count)); + SkString url = urlDataManager.addData(data, contentType); + *target = Json::Value(url.c_str()); } -static void flatten(const SkFlattenable* flattenable, Json::Value* target, bool sendBinaries) { - if (sendBinaries) { - SkWriteBuffer buffer; - flattenable->flatten(buffer); - void* data = sk_malloc_throw(buffer.bytesWritten()); - buffer.writeToMemory(data); - Json::Value bytes; - encode_data(data, buffer.bytesWritten(), &bytes); - Json::Value jsonFlattenable; - jsonFlattenable[SKDEBUGCANVAS_ATTRIBUTE_NAME] = Json::Value(flattenable->getTypeName()); - jsonFlattenable[SKDEBUGCANVAS_ATTRIBUTE_BYTES] = bytes; - (*target) = jsonFlattenable; - sk_free(data); - } else { - (*target)[SKDEBUGCANVAS_ATTRIBUTE_DESCRIPTION] = Json::Value(flattenable->getTypeName()); - } +static void flatten(const SkFlattenable* flattenable, Json::Value* target, + UrlDataManager& urlDataManager) { + SkWriteBuffer buffer; + flattenable->flatten(buffer); + void* data = sk_malloc_throw(buffer.bytesWritten()); + buffer.writeToMemory(data); + Json::Value jsonData; + encode_data(data, buffer.bytesWritten(), "application/octet-stream", urlDataManager, &jsonData); + Json::Value jsonFlattenable; + jsonFlattenable[SKDEBUGCANVAS_ATTRIBUTE_NAME] = Json::Value(flattenable->getTypeName()); + jsonFlattenable[SKDEBUGCANVAS_ATTRIBUTE_DATA] = jsonData; + (*target) = jsonFlattenable; + sk_free(data); } static bool SK_WARN_UNUSED_RESULT flatten(const SkImage& image, Json::Value* target, - bool sendBinaries) { - if (sendBinaries) { - SkData* encoded = image.encode(SkImageEncoder::kPNG_Type, 100); + UrlDataManager& urlDataManager) { + SkData* encoded = image.encode(SkImageEncoder::kPNG_Type, 100); + if (encoded == nullptr) { + // PNG encode doesn't necessarily support all color formats, convert to a different + // format + size_t rowBytes = 4 * image.width(); + void* buffer = sk_malloc_throw(rowBytes * image.height()); + SkImageInfo dstInfo = SkImageInfo::Make(image.width(), image.height(), + kN32_SkColorType, kPremul_SkAlphaType); + if (!image.readPixels(dstInfo, buffer, rowBytes, 0, 0)) { + SkDebugf("readPixels failed\n"); + return false; + } + SkImage* converted = SkImage::NewRasterCopy(dstInfo, buffer, rowBytes); + encoded = converted->encode(SkImageEncoder::kPNG_Type, 100); if (encoded == nullptr) { - // PNG encode doesn't necessarily support all color formats, convert to a different - // format - size_t rowBytes = 4 * image.width(); - void* buffer = sk_malloc_throw(rowBytes * image.height()); - SkImageInfo dstInfo = SkImageInfo::Make(image.width(), image.height(), - kN32_SkColorType, kPremul_SkAlphaType); - if (!image.readPixels(dstInfo, buffer, rowBytes, 0, 0)) { - SkDebugf("readPixels failed\n"); - return false; - } - SkImage* converted = SkImage::NewRasterCopy(dstInfo, buffer, rowBytes); - encoded = converted->encode(SkImageEncoder::kPNG_Type, 100); - if (encoded == nullptr) { - SkDebugf("image encode failed\n"); - return false; - } - sk_free(converted); - sk_free(buffer); + SkDebugf("image encode failed\n"); + return false; } - Json::Value bytes; - encode_data(encoded->data(), encoded->size(), &bytes); - (*target)[SKDEBUGCANVAS_ATTRIBUTE_BYTES] = bytes; - encoded->unref(); - } else { - SkString description = SkStringPrintf("%dx%d pixel image", image.width(), image.height()); - (*target)[SKDEBUGCANVAS_ATTRIBUTE_DESCRIPTION] = Json::Value(description.c_str()); + sk_free(converted); + sk_free(buffer); } + Json::Value jsonData; + encode_data(encoded->data(), encoded->size(), "image/png", urlDataManager, &jsonData); + (*target)[SKDEBUGCANVAS_ATTRIBUTE_DATA] = jsonData; + encoded->unref(); return true; } @@ -679,17 +668,21 @@ static const char* alpha_type_name(SkAlphaType alphaType) { } } -// note that the caller is responsible for freeing the pointer -static Json::ArrayIndex decode_data(Json::Value bytes, void** target) { - Json::ArrayIndex size = bytes.size(); - *target = sk_malloc_throw(size); - for (Json::ArrayIndex i = 0; i < size; i++) { - ((uint8_t*) *target)[i] = bytes[i].asInt(); +static Json::ArrayIndex decode_data(Json::Value data, UrlDataManager& urlDataManager, + const void** target) { + UrlDataManager::UrlData* urlData = urlDataManager.getDataFromUrl(SkString(data.asCString())); + if (urlData == nullptr) { + SkASSERT(false); + *target = nullptr; + return 0; } - return size; + *target = urlData->fData->data(); + // cast should be safe for any reasonably-sized object... + return (Json::ArrayIndex) urlData->fData->size(); } -static SkFlattenable* load_flattenable(Json::Value jsonFlattenable) { +static SkFlattenable* load_flattenable(Json::Value jsonFlattenable, + UrlDataManager& urlDataManager) { if (!jsonFlattenable.isMember(SKDEBUGCANVAS_ATTRIBUTE_NAME)) { return nullptr; } @@ -699,11 +692,10 @@ static SkFlattenable* load_flattenable(Json::Value jsonFlattenable) { SkDebugf("no factory for loading '%s'\n", name); return nullptr; } - void* data; - int size = decode_data(jsonFlattenable[SKDEBUGCANVAS_ATTRIBUTE_BYTES], &data); + const void* data; + int size = decode_data(jsonFlattenable[SKDEBUGCANVAS_ATTRIBUTE_DATA], urlDataManager, &data); SkValidatingReadBuffer buffer(data, size); SkFlattenable* result = factory(buffer); - sk_free(data); if (!buffer.isValid()) { SkDebugf("invalid buffer loading flattenable\n"); return nullptr; @@ -752,13 +744,13 @@ static SkBitmap* convert_colortype(SkBitmap* bitmap, SkColorType colorType) { } // caller is responsible for freeing return value -static SkBitmap* load_bitmap(const Json::Value& jsonBitmap) { - if (!jsonBitmap.isMember(SKDEBUGCANVAS_ATTRIBUTE_BYTES)) { +static SkBitmap* load_bitmap(const Json::Value& jsonBitmap, UrlDataManager& urlDataManager) { + if (!jsonBitmap.isMember(SKDEBUGCANVAS_ATTRIBUTE_DATA)) { SkDebugf("invalid bitmap\n"); return nullptr; } - void* data; - int size = decode_data(jsonBitmap[SKDEBUGCANVAS_ATTRIBUTE_BYTES], &data); + const void* data; + int size = decode_data(jsonBitmap[SKDEBUGCANVAS_ATTRIBUTE_DATA], urlDataManager, &data); SkMemoryStream stream(data, size); SkImageDecoder* decoder = SkImageDecoder::Factory(&stream); SkBitmap* bitmap = new SkBitmap(); @@ -766,7 +758,6 @@ static SkBitmap* load_bitmap(const Json::Value& jsonBitmap) { SkImageDecoder::kDecodePixels_Mode); sk_free(decoder); if (result != SkImageDecoder::kFailure) { - sk_free(data); if (jsonBitmap.isMember(SKDEBUGCANVAS_ATTRIBUTE_COLOR)) { const char* ctName = jsonBitmap[SKDEBUGCANVAS_ATTRIBUTE_COLOR].asCString(); SkColorType ct = colortype_from_name(ctName); @@ -777,12 +768,11 @@ static SkBitmap* load_bitmap(const Json::Value& jsonBitmap) { return bitmap; } SkDebugf("image decode failed\n"); - sk_free(data); return nullptr; } -static SkImage* load_image(const Json::Value& jsonImage) { - SkBitmap* bitmap = load_bitmap(jsonImage); +static SkImage* load_image(const Json::Value& jsonImage, UrlDataManager& urlDataManager) { + SkBitmap* bitmap = load_bitmap(jsonImage, urlDataManager); if (bitmap == nullptr) { return nullptr; } @@ -792,13 +782,13 @@ static SkImage* load_image(const Json::Value& jsonImage) { } static bool SK_WARN_UNUSED_RESULT flatten(const SkBitmap& bitmap, Json::Value* target, - bool sendBinaries) { + UrlDataManager& urlDataManager) { bitmap.lockPixels(); SkAutoTUnref<SkImage> image(SkImage::NewFromBitmap(bitmap)); bitmap.unlockPixels(); (*target)[SKDEBUGCANVAS_ATTRIBUTE_COLOR] = Json::Value(color_type_name(bitmap.colorType())); (*target)[SKDEBUGCANVAS_ATTRIBUTE_ALPHA] = Json::Value(alpha_type_name(bitmap.alphaType())); - bool success = flatten(*image, target, sendBinaries); + bool success = flatten(*image, target, urlDataManager); return success; } @@ -892,7 +882,8 @@ static void apply_paint_filterquality(const SkPaint& paint, Json::Value* target) } } -static void apply_paint_maskfilter(const SkPaint& paint, Json::Value* target, bool sendBinaries) { +static void apply_paint_maskfilter(const SkPaint& paint, Json::Value* target, + UrlDataManager& urlDataManager) { SkMaskFilter* maskFilter = paint.getMaskFilter(); if (maskFilter != nullptr) { SkMaskFilter::BlurRec blurRec; @@ -934,13 +925,14 @@ static void apply_paint_maskfilter(const SkPaint& paint, Json::Value* target, bo (*target)[SKDEBUGCANVAS_ATTRIBUTE_BLUR] = blur; } else { Json::Value jsonMaskFilter; - flatten(maskFilter, &jsonMaskFilter, sendBinaries); + flatten(maskFilter, &jsonMaskFilter, urlDataManager); (*target)[SKDEBUGCANVAS_ATTRIBUTE_MASKFILTER] = jsonMaskFilter; } } } -static void apply_paint_patheffect(const SkPaint& paint, Json::Value* target, bool sendBinaries) { +static void apply_paint_patheffect(const SkPaint& paint, Json::Value* target, + UrlDataManager& urlDataManager) { SkPathEffect* pathEffect = paint.getPathEffect(); if (pathEffect != nullptr) { SkPathEffect::DashInfo dashInfo; @@ -959,7 +951,7 @@ static void apply_paint_patheffect(const SkPaint& paint, Json::Value* target, bo (*target)[SKDEBUGCANVAS_ATTRIBUTE_DASHING] = dashing; } else { Json::Value jsonPathEffect; - flatten(pathEffect, &jsonPathEffect, sendBinaries); + flatten(pathEffect, &jsonPathEffect, urlDataManager); (*target)[SKDEBUGCANVAS_ATTRIBUTE_PATHEFFECT] = jsonPathEffect; } } @@ -983,70 +975,74 @@ static void apply_paint_textalign(const SkPaint& paint, Json::Value* target) { } static void apply_paint_typeface(const SkPaint& paint, Json::Value* target, - bool sendBinaries) { + UrlDataManager& urlDataManager) { SkTypeface* typeface = paint.getTypeface(); if (typeface != nullptr) { - if (sendBinaries) { - Json::Value jsonTypeface; - SkDynamicMemoryWStream buffer; - typeface->serialize(&buffer); - void* data = sk_malloc_throw(buffer.bytesWritten()); - buffer.copyTo(data); - Json::Value bytes; - encode_data(data, buffer.bytesWritten(), &bytes); - jsonTypeface[SKDEBUGCANVAS_ATTRIBUTE_BYTES] = bytes; - sk_free(data); - (*target)[SKDEBUGCANVAS_ATTRIBUTE_TYPEFACE] = jsonTypeface; - } + Json::Value jsonTypeface; + SkDynamicMemoryWStream buffer; + typeface->serialize(&buffer); + void* data = sk_malloc_throw(buffer.bytesWritten()); + buffer.copyTo(data); + Json::Value jsonData; + encode_data(data, buffer.bytesWritten(), "application/octet-stream", urlDataManager, + &jsonData); + jsonTypeface[SKDEBUGCANVAS_ATTRIBUTE_DATA] = jsonData; + sk_free(data); + (*target)[SKDEBUGCANVAS_ATTRIBUTE_TYPEFACE] = jsonTypeface; } } -static void apply_paint_shader(const SkPaint& paint, Json::Value* target, bool sendBinaries) { +static void apply_paint_shader(const SkPaint& paint, Json::Value* target, + UrlDataManager& urlDataManager) { SkFlattenable* shader = paint.getShader(); if (shader != nullptr) { Json::Value jsonShader; - flatten(shader, &jsonShader, sendBinaries); + flatten(shader, &jsonShader, urlDataManager); (*target)[SKDEBUGCANVAS_ATTRIBUTE_SHADER] = jsonShader; } } -static void apply_paint_xfermode(const SkPaint& paint, Json::Value* target, bool sendBinaries) { +static void apply_paint_xfermode(const SkPaint& paint, Json::Value* target, + UrlDataManager& urlDataManager) { SkFlattenable* xfermode = paint.getXfermode(); if (xfermode != nullptr) { Json::Value jsonXfermode; - flatten(xfermode, &jsonXfermode, sendBinaries); + flatten(xfermode, &jsonXfermode, urlDataManager); (*target)[SKDEBUGCANVAS_ATTRIBUTE_XFERMODE] = jsonXfermode; } } -static void apply_paint_imagefilter(const SkPaint& paint, Json::Value* target, bool sendBinaries) { +static void apply_paint_imagefilter(const SkPaint& paint, Json::Value* target, + UrlDataManager& urlDataManager) { SkFlattenable* imageFilter = paint.getImageFilter(); if (imageFilter != nullptr) { Json::Value jsonImageFilter; - flatten(imageFilter, &jsonImageFilter, sendBinaries); + flatten(imageFilter, &jsonImageFilter, urlDataManager); (*target)[SKDEBUGCANVAS_ATTRIBUTE_IMAGEFILTER] = jsonImageFilter; } } -static void apply_paint_colorfilter(const SkPaint& paint, Json::Value* target, bool sendBinaries) { +static void apply_paint_colorfilter(const SkPaint& paint, Json::Value* target, + UrlDataManager& urlDataManager) { SkFlattenable* colorFilter = paint.getColorFilter(); if (colorFilter != nullptr) { Json::Value jsonColorFilter; - flatten(colorFilter, &jsonColorFilter, sendBinaries); + flatten(colorFilter, &jsonColorFilter, urlDataManager); (*target)[SKDEBUGCANVAS_ATTRIBUTE_COLORFILTER] = jsonColorFilter; } } -static void apply_paint_looper(const SkPaint& paint, Json::Value* target, bool sendBinaries) { +static void apply_paint_looper(const SkPaint& paint, Json::Value* target, + UrlDataManager& urlDataManager) { SkFlattenable* looper = paint.getLooper(); if (looper != nullptr) { Json::Value jsonLooper; - flatten(looper, &jsonLooper, sendBinaries); + flatten(looper, &jsonLooper, urlDataManager); (*target)[SKDEBUGCANVAS_ATTRIBUTE_LOOPER] = jsonLooper; } } -Json::Value make_json_paint(const SkPaint& paint, bool sendBinaries) { +Json::Value make_json_paint(const SkPaint& paint, UrlDataManager& urlDataManager) { Json::Value result(Json::objectValue); store_scalar(&result, SKDEBUGCANVAS_ATTRIBUTE_STROKEWIDTH, paint.getStrokeWidth(), 0.0f); store_scalar(&result, SKDEBUGCANVAS_ATTRIBUTE_STROKEMITER, paint.getStrokeMiter(), @@ -1063,14 +1059,14 @@ Json::Value make_json_paint(const SkPaint& paint, bool sendBinaries) { apply_paint_join(paint, &result); apply_paint_filterquality(paint, &result); apply_paint_textalign(paint, &result); - apply_paint_patheffect(paint, &result, sendBinaries); - apply_paint_maskfilter(paint, &result, sendBinaries); - apply_paint_shader(paint, &result, sendBinaries); - apply_paint_xfermode(paint, &result, sendBinaries); - apply_paint_looper(paint, &result, sendBinaries); - apply_paint_imagefilter(paint, &result, sendBinaries); - apply_paint_colorfilter(paint, &result, sendBinaries); - apply_paint_typeface(paint, &result, sendBinaries); + apply_paint_patheffect(paint, &result, urlDataManager); + apply_paint_maskfilter(paint, &result, urlDataManager); + apply_paint_shader(paint, &result, urlDataManager); + apply_paint_xfermode(paint, &result, urlDataManager); + apply_paint_looper(paint, &result, urlDataManager); + apply_paint_imagefilter(paint, &result, urlDataManager); + apply_paint_colorfilter(paint, &result, urlDataManager); + apply_paint_typeface(paint, &result, urlDataManager); return result; } @@ -1088,10 +1084,11 @@ static void extract_json_paint_color(Json::Value& jsonPaint, SkPaint* target) { } } -static void extract_json_paint_shader(Json::Value& jsonPaint, SkPaint* target) { +static void extract_json_paint_shader(Json::Value& jsonPaint, UrlDataManager& urlDataManager, + SkPaint* target) { if (jsonPaint.isMember(SKDEBUGCANVAS_ATTRIBUTE_SHADER)) { Json::Value jsonShader = jsonPaint[SKDEBUGCANVAS_ATTRIBUTE_SHADER]; - SkShader* shader = (SkShader*) load_flattenable(jsonShader); + SkShader* shader = (SkShader*) load_flattenable(jsonShader, urlDataManager); if (shader != nullptr) { target->setShader(shader); shader->unref(); @@ -1099,10 +1096,11 @@ static void extract_json_paint_shader(Json::Value& jsonPaint, SkPaint* target) { } } -static void extract_json_paint_patheffect(Json::Value& jsonPaint, SkPaint* target) { +static void extract_json_paint_patheffect(Json::Value& jsonPaint, UrlDataManager& urlDataManager, + SkPaint* target) { if (jsonPaint.isMember(SKDEBUGCANVAS_ATTRIBUTE_PATHEFFECT)) { Json::Value jsonPathEffect = jsonPaint[SKDEBUGCANVAS_ATTRIBUTE_PATHEFFECT]; - SkPathEffect* pathEffect = (SkPathEffect*) load_flattenable(jsonPathEffect); + SkPathEffect* pathEffect = (SkPathEffect*) load_flattenable(jsonPathEffect, urlDataManager); if (pathEffect != nullptr) { target->setPathEffect(pathEffect); pathEffect->unref(); @@ -1110,10 +1108,11 @@ static void extract_json_paint_patheffect(Json::Value& jsonPaint, SkPaint* targe } } -static void extract_json_paint_maskfilter(Json::Value& jsonPaint, SkPaint* target) { +static void extract_json_paint_maskfilter(Json::Value& jsonPaint, UrlDataManager& urlDataManager, + SkPaint* target) { if (jsonPaint.isMember(SKDEBUGCANVAS_ATTRIBUTE_MASKFILTER)) { Json::Value jsonMaskFilter = jsonPaint[SKDEBUGCANVAS_ATTRIBUTE_MASKFILTER]; - SkMaskFilter* maskFilter = (SkMaskFilter*) load_flattenable(jsonMaskFilter); + SkMaskFilter* maskFilter = (SkMaskFilter*) load_flattenable(jsonMaskFilter, urlDataManager); if (maskFilter != nullptr) { target->setMaskFilter(maskFilter); maskFilter->unref(); @@ -1121,10 +1120,12 @@ static void extract_json_paint_maskfilter(Json::Value& jsonPaint, SkPaint* targe } } -static void extract_json_paint_colorfilter(Json::Value& jsonPaint, SkPaint* target) { +static void extract_json_paint_colorfilter(Json::Value& jsonPaint, UrlDataManager& urlDataManager, + SkPaint* target) { if (jsonPaint.isMember(SKDEBUGCANVAS_ATTRIBUTE_COLORFILTER)) { Json::Value jsonColorFilter = jsonPaint[SKDEBUGCANVAS_ATTRIBUTE_COLORFILTER]; - SkColorFilter* colorFilter = (SkColorFilter*) load_flattenable(jsonColorFilter); + SkColorFilter* colorFilter = (SkColorFilter*) load_flattenable(jsonColorFilter, + urlDataManager); if (colorFilter != nullptr) { target->setColorFilter(colorFilter); colorFilter->unref(); @@ -1132,10 +1133,11 @@ static void extract_json_paint_colorfilter(Json::Value& jsonPaint, SkPaint* targ } } -static void extract_json_paint_xfermode(Json::Value& jsonPaint, SkPaint* target) { +static void extract_json_paint_xfermode(Json::Value& jsonPaint, UrlDataManager& urlDataManager, + SkPaint* target) { if (jsonPaint.isMember(SKDEBUGCANVAS_ATTRIBUTE_XFERMODE)) { Json::Value jsonXfermode = jsonPaint[SKDEBUGCANVAS_ATTRIBUTE_XFERMODE]; - SkXfermode* xfermode = (SkXfermode*) load_flattenable(jsonXfermode); + SkXfermode* xfermode = (SkXfermode*) load_flattenable(jsonXfermode, urlDataManager); if (xfermode != nullptr) { target->setXfermode(xfermode); xfermode->unref(); @@ -1143,10 +1145,11 @@ static void extract_json_paint_xfermode(Json::Value& jsonPaint, SkPaint* target) } } -static void extract_json_paint_looper(Json::Value& jsonPaint, SkPaint* target) { +static void extract_json_paint_looper(Json::Value& jsonPaint, UrlDataManager& urlDataManager, + SkPaint* target) { if (jsonPaint.isMember(SKDEBUGCANVAS_ATTRIBUTE_LOOPER)) { Json::Value jsonLooper = jsonPaint[SKDEBUGCANVAS_ATTRIBUTE_LOOPER]; - SkDrawLooper* looper = (SkDrawLooper*) load_flattenable(jsonLooper); + SkDrawLooper* looper = (SkDrawLooper*) load_flattenable(jsonLooper, urlDataManager); if (looper != nullptr) { target->setLooper(looper); looper->unref(); @@ -1154,10 +1157,12 @@ static void extract_json_paint_looper(Json::Value& jsonPaint, SkPaint* target) { } } -static void extract_json_paint_imagefilter(Json::Value& jsonPaint, SkPaint* target) { +static void extract_json_paint_imagefilter(Json::Value& jsonPaint, UrlDataManager& urlDataManager, + SkPaint* target) { if (jsonPaint.isMember(SKDEBUGCANVAS_ATTRIBUTE_IMAGEFILTER)) { Json::Value jsonImageFilter = jsonPaint[SKDEBUGCANVAS_ATTRIBUTE_IMAGEFILTER]; - SkImageFilter* imageFilter = (SkImageFilter*) load_flattenable(jsonImageFilter); + SkImageFilter* imageFilter = (SkImageFilter*) load_flattenable(jsonImageFilter, + urlDataManager); if (imageFilter != nullptr) { target->setImageFilter(imageFilter); imageFilter->unref(); @@ -1165,6 +1170,19 @@ static void extract_json_paint_imagefilter(Json::Value& jsonPaint, SkPaint* targ } } +static void extract_json_paint_typeface(Json::Value& jsonPaint, UrlDataManager& urlDataManager, + SkPaint* target) { + if (jsonPaint.isMember(SKDEBUGCANVAS_ATTRIBUTE_TYPEFACE)) { + Json::Value jsonTypeface = jsonPaint[SKDEBUGCANVAS_ATTRIBUTE_TYPEFACE]; + Json::Value jsonData = jsonTypeface[SKDEBUGCANVAS_ATTRIBUTE_DATA]; + const void* data; + Json::ArrayIndex length = decode_data(jsonData, urlDataManager, &data); + SkMemoryStream buffer(data, length); + SkTypeface* typeface = SkTypeface::Deserialize(&buffer); + target->setTypeface(typeface); + } +} + static void extract_json_paint_style(Json::Value& jsonPaint, SkPaint* target) { if (jsonPaint.isMember(SKDEBUGCANVAS_ATTRIBUTE_STYLE)) { const char* style = jsonPaint[SKDEBUGCANVAS_ATTRIBUTE_STYLE].asCString(); @@ -1352,28 +1370,17 @@ static void extract_json_paint_textskewx(Json::Value& jsonPaint, SkPaint* target } } -static void extract_json_paint_typeface(Json::Value& jsonPaint, SkPaint* target) { - if (jsonPaint.isMember(SKDEBUGCANVAS_ATTRIBUTE_TYPEFACE)) { - Json::Value jsonTypeface = jsonPaint[SKDEBUGCANVAS_ATTRIBUTE_TYPEFACE]; - Json::Value bytes = jsonTypeface[SKDEBUGCANVAS_ATTRIBUTE_BYTES]; - void* data; - Json::ArrayIndex length = decode_data(bytes, &data); - SkMemoryStream buffer(data, length); - SkTypeface* typeface = SkTypeface::Deserialize(&buffer); - sk_free(data); - target->setTypeface(typeface); - } -} - -static void extract_json_paint(Json::Value& paint, SkPaint* result) { +static void extract_json_paint(Json::Value& paint, UrlDataManager& urlDataManager, + SkPaint* result) { extract_json_paint_color(paint, result); - extract_json_paint_shader(paint, result); - extract_json_paint_patheffect(paint, result); - extract_json_paint_maskfilter(paint, result); - extract_json_paint_colorfilter(paint, result); - extract_json_paint_xfermode(paint, result); - extract_json_paint_looper(paint, result); - extract_json_paint_imagefilter(paint, result); + extract_json_paint_shader(paint, urlDataManager, result); + extract_json_paint_patheffect(paint, urlDataManager, result); + extract_json_paint_maskfilter(paint, urlDataManager, result); + extract_json_paint_colorfilter(paint, urlDataManager, result); + extract_json_paint_xfermode(paint, urlDataManager, result); + extract_json_paint_looper(paint, urlDataManager, result); + extract_json_paint_imagefilter(paint, urlDataManager, result); + extract_json_paint_typeface(paint, urlDataManager, result); extract_json_paint_style(paint, result); extract_json_paint_strokewidth(paint, result); extract_json_paint_strokemiter(paint, result); @@ -1388,7 +1395,6 @@ static void extract_json_paint(Json::Value& paint, SkPaint* result) { extract_json_paint_textsize(paint, result); extract_json_paint_textscalex(paint, result); extract_json_paint_textskewx(paint, result); - extract_json_paint_typeface(paint, result); } static void extract_json_rect(Json::Value& rect, SkRect* result) { @@ -1507,13 +1513,13 @@ void SkClearCommand::execute(SkCanvas* canvas) const { canvas->clear(fColor); } -Json::Value SkClearCommand::toJSON() const { - Json::Value result = INHERITED::toJSON(); +Json::Value SkClearCommand::toJSON(UrlDataManager& urlDataManager) const { + Json::Value result = INHERITED::toJSON(urlDataManager); result[SKDEBUGCANVAS_ATTRIBUTE_COLOR] = make_json_color(fColor); return result; } - SkClearCommand* SkClearCommand::fromJSON(Json::Value& command) { + SkClearCommand* SkClearCommand::fromJSON(Json::Value& command, UrlDataManager& urlDataManager) { Json::Value color = command[SKDEBUGCANVAS_ATTRIBUTE_COLOR]; return new SkClearCommand(get_json_color(color)); } @@ -1538,15 +1544,16 @@ bool SkClipPathCommand::render(SkCanvas* canvas) const { return true; } -Json::Value SkClipPathCommand::toJSON() const { - Json::Value result = INHERITED::toJSON(); +Json::Value SkClipPathCommand::toJSON(UrlDataManager& urlDataManager) const { + Json::Value result = INHERITED::toJSON(urlDataManager); result[SKDEBUGCANVAS_ATTRIBUTE_PATH] = make_json_path(fPath); result[SKDEBUGCANVAS_ATTRIBUTE_REGIONOP] = make_json_regionop(fOp); result[SKDEBUGCANVAS_ATTRIBUTE_ANTIALIAS] = fDoAA; return result; } -SkClipPathCommand* SkClipPathCommand::fromJSON(Json::Value& command) { +SkClipPathCommand* SkClipPathCommand::fromJSON(Json::Value& command, + UrlDataManager& urlDataManager) { SkPath path; extract_json_path(command[SKDEBUGCANVAS_ATTRIBUTE_PATH], &path); return new SkClipPathCommand(path, get_json_regionop(command[SKDEBUGCANVAS_ATTRIBUTE_REGIONOP]), @@ -1566,14 +1573,15 @@ void SkClipRegionCommand::execute(SkCanvas* canvas) const { canvas->clipRegion(fRegion, fOp); } -Json::Value SkClipRegionCommand::toJSON() const { - Json::Value result = INHERITED::toJSON(); +Json::Value SkClipRegionCommand::toJSON(UrlDataManager& urlDataManager) const { + Json::Value result = INHERITED::toJSON(urlDataManager); result[SKDEBUGCANVAS_ATTRIBUTE_REGION] = make_json_region(fRegion); result[SKDEBUGCANVAS_ATTRIBUTE_REGIONOP] = make_json_regionop(fOp); return result; } -SkClipRegionCommand* SkClipRegionCommand::fromJSON(Json::Value& command) { +SkClipRegionCommand* SkClipRegionCommand::fromJSON(Json::Value& command, + UrlDataManager& urlDataManager) { SkASSERT(false); return nullptr; } @@ -1593,15 +1601,16 @@ void SkClipRectCommand::execute(SkCanvas* canvas) const { canvas->clipRect(fRect, fOp, fDoAA); } -Json::Value SkClipRectCommand::toJSON() const { - Json::Value result = INHERITED::toJSON(); +Json::Value SkClipRectCommand::toJSON(UrlDataManager& urlDataManager) const { + Json::Value result = INHERITED::toJSON(urlDataManager); result[SKDEBUGCANVAS_ATTRIBUTE_COORDS] = make_json_rect(fRect); result[SKDEBUGCANVAS_ATTRIBUTE_REGIONOP] = make_json_regionop(fOp); result[SKDEBUGCANVAS_ATTRIBUTE_ANTIALIAS] = Json::Value(fDoAA); return result; } -SkClipRectCommand* SkClipRectCommand::fromJSON(Json::Value& command) { +SkClipRectCommand* SkClipRectCommand::fromJSON(Json::Value& command, + UrlDataManager& urlDataManager) { SkRect rect; extract_json_rect(command[SKDEBUGCANVAS_ATTRIBUTE_COORDS], &rect); return new SkClipRectCommand(rect, get_json_regionop(command[SKDEBUGCANVAS_ATTRIBUTE_REGIONOP]), @@ -1628,15 +1637,16 @@ bool SkClipRRectCommand::render(SkCanvas* canvas) const { return true; } -Json::Value SkClipRRectCommand::toJSON() const { - Json::Value result = INHERITED::toJSON(); +Json::Value SkClipRRectCommand::toJSON(UrlDataManager& urlDataManager) const { + Json::Value result = INHERITED::toJSON(urlDataManager); result[SKDEBUGCANVAS_ATTRIBUTE_COORDS] = make_json_rrect(fRRect); result[SKDEBUGCANVAS_ATTRIBUTE_REGIONOP] = make_json_regionop(fOp); result[SKDEBUGCANVAS_ATTRIBUTE_ANTIALIAS] = Json::Value(fDoAA); return result; } -SkClipRRectCommand* SkClipRRectCommand::fromJSON(Json::Value& command) { +SkClipRRectCommand* SkClipRRectCommand::fromJSON(Json::Value& command, + UrlDataManager& urlDataManager) { SkRRect rrect; extract_json_rrect(command[SKDEBUGCANVAS_ATTRIBUTE_COORDS], &rrect); return new SkClipRRectCommand(rrect, @@ -1655,13 +1665,13 @@ void SkConcatCommand::execute(SkCanvas* canvas) const { canvas->concat(fMatrix); } -Json::Value SkConcatCommand::toJSON() const { - Json::Value result = INHERITED::toJSON(); +Json::Value SkConcatCommand::toJSON(UrlDataManager& urlDataManager) const { + Json::Value result = INHERITED::toJSON(urlDataManager); result[SKDEBUGCANVAS_ATTRIBUTE_MATRIX] = make_json_matrix(fMatrix); return result; } -SkConcatCommand* SkConcatCommand::fromJSON(Json::Value& command) { +SkConcatCommand* SkConcatCommand::fromJSON(Json::Value& command, UrlDataManager& urlDataManager) { SkMatrix matrix; extract_json_matrix(command[SKDEBUGCANVAS_ATTRIBUTE_MATRIX], &matrix); return new SkConcatCommand(matrix); @@ -1697,23 +1707,23 @@ bool SkDrawBitmapCommand::render(SkCanvas* canvas) const { return true; } -Json::Value SkDrawBitmapCommand::toJSON() const { - Json::Value result = INHERITED::toJSON(); +Json::Value SkDrawBitmapCommand::toJSON(UrlDataManager& urlDataManager) const { + Json::Value result = INHERITED::toJSON(urlDataManager); Json::Value encoded; - if (flatten(fBitmap, &encoded, SKDEBUGCANVAS_SEND_BINARIES)) { + if (flatten(fBitmap, &encoded, urlDataManager)) { Json::Value command(Json::objectValue); result[SKDEBUGCANVAS_ATTRIBUTE_BITMAP] = encoded; result[SKDEBUGCANVAS_ATTRIBUTE_COORDS] = make_json_point(fLeft, fTop); if (fPaintPtr != nullptr) { - result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(*fPaintPtr, - SKDEBUGCANVAS_SEND_BINARIES); + result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(*fPaintPtr, urlDataManager); } } return result; } -SkDrawBitmapCommand* SkDrawBitmapCommand::fromJSON(Json::Value& command) { - SkBitmap* bitmap = load_bitmap(command[SKDEBUGCANVAS_ATTRIBUTE_BITMAP]); +SkDrawBitmapCommand* SkDrawBitmapCommand::fromJSON(Json::Value& command, + UrlDataManager& urlDataManager) { + SkBitmap* bitmap = load_bitmap(command[SKDEBUGCANVAS_ATTRIBUTE_BITMAP], urlDataManager); if (bitmap == nullptr) { return nullptr; } @@ -1721,7 +1731,7 @@ SkDrawBitmapCommand* SkDrawBitmapCommand::fromJSON(Json::Value& command) { SkPaint* paintPtr; SkPaint paint; if (command.isMember(SKDEBUGCANVAS_ATTRIBUTE_PAINT)) { - extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], &paint); + extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], urlDataManager, &paint); paintPtr = &paint; } else { @@ -1764,23 +1774,23 @@ bool SkDrawBitmapNineCommand::render(SkCanvas* canvas) const { return true; } -Json::Value SkDrawBitmapNineCommand::toJSON() const { - Json::Value result = INHERITED::toJSON(); +Json::Value SkDrawBitmapNineCommand::toJSON(UrlDataManager& urlDataManager) const { + Json::Value result = INHERITED::toJSON(urlDataManager); Json::Value encoded; - if (flatten(fBitmap, &encoded, SKDEBUGCANVAS_SEND_BINARIES)) { + if (flatten(fBitmap, &encoded, urlDataManager)) { result[SKDEBUGCANVAS_ATTRIBUTE_BITMAP] = encoded; result[SKDEBUGCANVAS_ATTRIBUTE_CENTER] = make_json_irect(fCenter); result[SKDEBUGCANVAS_ATTRIBUTE_DST] = make_json_rect(fDst); if (fPaintPtr != nullptr) { - result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(*fPaintPtr, - SKDEBUGCANVAS_SEND_BINARIES); + result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(*fPaintPtr, urlDataManager); } } return result; } -SkDrawBitmapNineCommand* SkDrawBitmapNineCommand::fromJSON(Json::Value& command) { - SkBitmap* bitmap = load_bitmap(command[SKDEBUGCANVAS_ATTRIBUTE_BITMAP]); +SkDrawBitmapNineCommand* SkDrawBitmapNineCommand::fromJSON(Json::Value& command, + UrlDataManager& urlDataManager) { + SkBitmap* bitmap = load_bitmap(command[SKDEBUGCANVAS_ATTRIBUTE_BITMAP], urlDataManager); if (bitmap == nullptr) { return nullptr; } @@ -1791,7 +1801,7 @@ SkDrawBitmapNineCommand* SkDrawBitmapNineCommand::fromJSON(Json::Value& command) SkPaint* paintPtr; SkPaint paint; if (command.isMember(SKDEBUGCANVAS_ATTRIBUTE_PAINT)) { - extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], &paint); + extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], urlDataManager, &paint); paintPtr = &paint; } else { @@ -1842,18 +1852,17 @@ bool SkDrawBitmapRectCommand::render(SkCanvas* canvas) const { return true; } -Json::Value SkDrawBitmapRectCommand::toJSON() const { - Json::Value result = INHERITED::toJSON(); +Json::Value SkDrawBitmapRectCommand::toJSON(UrlDataManager& urlDataManager) const { + Json::Value result = INHERITED::toJSON(urlDataManager); Json::Value encoded; - if (flatten(fBitmap, &encoded, SKDEBUGCANVAS_SEND_BINARIES)) { + if (flatten(fBitmap, &encoded, urlDataManager)) { result[SKDEBUGCANVAS_ATTRIBUTE_BITMAP] = encoded; if (!fSrc.isEmpty()) { result[SKDEBUGCANVAS_ATTRIBUTE_SRC] = make_json_rect(fSrc); } result[SKDEBUGCANVAS_ATTRIBUTE_DST] = make_json_rect(fDst); if (fPaintPtr != nullptr) { - result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(*fPaintPtr, - SKDEBUGCANVAS_SEND_BINARIES); + result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(*fPaintPtr, urlDataManager); } if (fConstraint == SkCanvas::kStrict_SrcRectConstraint) { result[SKDEBUGCANVAS_ATTRIBUTE_STRICT] = Json::Value(true); @@ -1862,8 +1871,9 @@ Json::Value SkDrawBitmapRectCommand::toJSON() const { return result; } -SkDrawBitmapRectCommand* SkDrawBitmapRectCommand::fromJSON(Json::Value& command) { - SkBitmap* bitmap = load_bitmap(command[SKDEBUGCANVAS_ATTRIBUTE_BITMAP]); +SkDrawBitmapRectCommand* SkDrawBitmapRectCommand::fromJSON(Json::Value& command, + UrlDataManager& urlDataManager) { + SkBitmap* bitmap = load_bitmap(command[SKDEBUGCANVAS_ATTRIBUTE_BITMAP], urlDataManager); if (bitmap == nullptr) { return nullptr; } @@ -1872,7 +1882,7 @@ SkDrawBitmapRectCommand* SkDrawBitmapRectCommand::fromJSON(Json::Value& command) SkPaint* paintPtr; SkPaint paint; if (command.isMember(SKDEBUGCANVAS_ATTRIBUTE_PAINT)) { - extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], &paint); + extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], urlDataManager, &paint); paintPtr = &paint; } else { @@ -1933,22 +1943,22 @@ bool SkDrawImageCommand::render(SkCanvas* canvas) const { return true; } -Json::Value SkDrawImageCommand::toJSON() const { - Json::Value result = INHERITED::toJSON(); +Json::Value SkDrawImageCommand::toJSON(UrlDataManager& urlDataManager) const { + Json::Value result = INHERITED::toJSON(urlDataManager); Json::Value encoded; - if (flatten(*fImage, &encoded, SKDEBUGCANVAS_SEND_BINARIES)) { + if (flatten(*fImage, &encoded, urlDataManager)) { result[SKDEBUGCANVAS_ATTRIBUTE_IMAGE] = encoded; result[SKDEBUGCANVAS_ATTRIBUTE_COORDS] = make_json_point(fLeft, fTop); if (fPaint.isValid()) { - result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(*fPaint.get(), - SKDEBUGCANVAS_SEND_BINARIES); + result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(*fPaint.get(), urlDataManager); } } return result; } -SkDrawImageCommand* SkDrawImageCommand::fromJSON(Json::Value& command) { - SkImage* image = load_image(command[SKDEBUGCANVAS_ATTRIBUTE_IMAGE]); +SkDrawImageCommand* SkDrawImageCommand::fromJSON(Json::Value& command, + UrlDataManager& urlDataManager) { + SkImage* image = load_image(command[SKDEBUGCANVAS_ATTRIBUTE_IMAGE], urlDataManager); if (image == nullptr) { return nullptr; } @@ -1956,7 +1966,7 @@ SkDrawImageCommand* SkDrawImageCommand::fromJSON(Json::Value& command) { SkPaint* paintPtr; SkPaint paint; if (command.isMember(SKDEBUGCANVAS_ATTRIBUTE_PAINT)) { - extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], &paint); + extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], urlDataManager, &paint); paintPtr = &paint; } else { @@ -2010,18 +2020,17 @@ bool SkDrawImageRectCommand::render(SkCanvas* canvas) const { return true; } -Json::Value SkDrawImageRectCommand::toJSON() const { - Json::Value result = INHERITED::toJSON(); +Json::Value SkDrawImageRectCommand::toJSON(UrlDataManager& urlDataManager) const { + Json::Value result = INHERITED::toJSON(urlDataManager); Json::Value encoded; - if (flatten(*fImage.get(), &encoded, SKDEBUGCANVAS_SEND_BINARIES)) { + if (flatten(*fImage.get(), &encoded, urlDataManager)) { result[SKDEBUGCANVAS_ATTRIBUTE_BITMAP] = encoded; if (fSrc.isValid()) { result[SKDEBUGCANVAS_ATTRIBUTE_SRC] = make_json_rect(*fSrc.get()); } result[SKDEBUGCANVAS_ATTRIBUTE_DST] = make_json_rect(fDst); if (fPaint.isValid()) { - result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(*fPaint.get(), - SKDEBUGCANVAS_SEND_BINARIES); + result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(*fPaint.get(), urlDataManager); } if (fConstraint == SkCanvas::kStrict_SrcRectConstraint) { result[SKDEBUGCANVAS_ATTRIBUTE_STRICT] = Json::Value(true); @@ -2030,8 +2039,9 @@ Json::Value SkDrawImageRectCommand::toJSON() const { return result; } -SkDrawImageRectCommand* SkDrawImageRectCommand::fromJSON(Json::Value& command) { - SkImage* image = load_image(command[SKDEBUGCANVAS_ATTRIBUTE_IMAGE]); +SkDrawImageRectCommand* SkDrawImageRectCommand::fromJSON(Json::Value& command, + UrlDataManager& urlDataManager) { + SkImage* image = load_image(command[SKDEBUGCANVAS_ATTRIBUTE_IMAGE], urlDataManager); if (image == nullptr) { return nullptr; } @@ -2040,7 +2050,7 @@ SkDrawImageRectCommand* SkDrawImageRectCommand::fromJSON(Json::Value& command) { SkPaint* paintPtr; SkPaint paint; if (command.isMember(SKDEBUGCANVAS_ATTRIBUTE_PAINT)) { - extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], &paint); + extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], urlDataManager, &paint); paintPtr = &paint; } else { @@ -2098,18 +2108,19 @@ bool SkDrawOvalCommand::render(SkCanvas* canvas) const { return true; } -Json::Value SkDrawOvalCommand::toJSON() const { - Json::Value result = INHERITED::toJSON(); +Json::Value SkDrawOvalCommand::toJSON(UrlDataManager& urlDataManager) const { + Json::Value result = INHERITED::toJSON(urlDataManager); result[SKDEBUGCANVAS_ATTRIBUTE_COORDS] = make_json_rect(fOval); - result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(fPaint, SKDEBUGCANVAS_SEND_BINARIES); + result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(fPaint, urlDataManager); return result; } -SkDrawOvalCommand* SkDrawOvalCommand::fromJSON(Json::Value& command) { +SkDrawOvalCommand* SkDrawOvalCommand::fromJSON(Json::Value& command, + UrlDataManager& urlDataManager) { SkRect coords; extract_json_rect(command[SKDEBUGCANVAS_ATTRIBUTE_COORDS], &coords); SkPaint paint; - extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], &paint); + extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], urlDataManager, &paint); return new SkDrawOvalCommand(coords, paint); } @@ -2130,15 +2141,16 @@ bool SkDrawPaintCommand::render(SkCanvas* canvas) const { return true; } -Json::Value SkDrawPaintCommand::toJSON() const { - Json::Value result = INHERITED::toJSON(); - result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(fPaint, SKDEBUGCANVAS_SEND_BINARIES); +Json::Value SkDrawPaintCommand::toJSON(UrlDataManager& urlDataManager) const { + Json::Value result = INHERITED::toJSON(urlDataManager); + result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(fPaint, urlDataManager); return result; } -SkDrawPaintCommand* SkDrawPaintCommand::fromJSON(Json::Value& command) { +SkDrawPaintCommand* SkDrawPaintCommand::fromJSON(Json::Value& command, + UrlDataManager& urlDataManager) { SkPaint paint; - extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], &paint); + extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], urlDataManager, &paint); return new SkDrawPaintCommand(paint); } @@ -2160,18 +2172,19 @@ bool SkDrawPathCommand::render(SkCanvas* canvas) const { return true; } -Json::Value SkDrawPathCommand::toJSON() const { - Json::Value result = INHERITED::toJSON(); +Json::Value SkDrawPathCommand::toJSON(UrlDataManager& urlDataManager) const { + Json::Value result = INHERITED::toJSON(urlDataManager); result[SKDEBUGCANVAS_ATTRIBUTE_PATH] = make_json_path(fPath); - result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(fPaint, SKDEBUGCANVAS_SEND_BINARIES); + result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(fPaint, urlDataManager); return result; } -SkDrawPathCommand* SkDrawPathCommand::fromJSON(Json::Value& command) { +SkDrawPathCommand* SkDrawPathCommand::fromJSON(Json::Value& command, + UrlDataManager& urlDataManager) { SkPath path; extract_json_path(command[SKDEBUGCANVAS_ATTRIBUTE_PATH], &path); SkPaint paint; - extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], &paint); + extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], urlDataManager, &paint); return new SkDrawPathCommand(path, paint); } @@ -2281,19 +2294,20 @@ bool SkDrawPointsCommand::render(SkCanvas* canvas) const { return true; } -Json::Value SkDrawPointsCommand::toJSON() const { - Json::Value result = INHERITED::toJSON(); +Json::Value SkDrawPointsCommand::toJSON(UrlDataManager& urlDataManager) const { + Json::Value result = INHERITED::toJSON(urlDataManager); result[SKDEBUGCANVAS_ATTRIBUTE_MODE] = make_json_pointmode(fMode); Json::Value points(Json::arrayValue); for (size_t i = 0; i < fCount; i++) { points.append(make_json_point(fPts[i])); } result[SKDEBUGCANVAS_ATTRIBUTE_POINTS] = points; - result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(fPaint, SKDEBUGCANVAS_SEND_BINARIES); + result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(fPaint, urlDataManager); return result; } -SkDrawPointsCommand* SkDrawPointsCommand::fromJSON(Json::Value& command) { +SkDrawPointsCommand* SkDrawPointsCommand::fromJSON(Json::Value& command, + UrlDataManager& urlDataManager) { SkCanvas::PointMode mode; const char* jsonMode = command[SKDEBUGCANVAS_ATTRIBUTE_MODE].asCString(); if (!strcmp(jsonMode, SKDEBUGCANVAS_POINTMODE_POINTS)) { @@ -2316,7 +2330,7 @@ SkDrawPointsCommand* SkDrawPointsCommand::fromJSON(Json::Value& command) { points[i] = SkPoint::Make(jsonPoints[i][0].asFloat(), jsonPoints[i][1].asFloat()); } SkPaint paint; - extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], &paint); + extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], urlDataManager, &paint); SkDrawPointsCommand* result = new SkDrawPointsCommand(mode, count, points, paint); sk_free(points); return result; @@ -2346,8 +2360,8 @@ void SkDrawPosTextCommand::execute(SkCanvas* canvas) const { canvas->drawPosText(fText, fByteLength, fPos, fPaint); } -Json::Value SkDrawPosTextCommand::toJSON() const { - Json::Value result = INHERITED::toJSON(); +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); Json::Value coords(Json::arrayValue); @@ -2355,14 +2369,15 @@ Json::Value SkDrawPosTextCommand::toJSON() const { coords.append(make_json_point(fPos[i])); } result[SKDEBUGCANVAS_ATTRIBUTE_COORDS] = coords; - result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(fPaint, SKDEBUGCANVAS_SEND_BINARIES); + result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(fPaint, urlDataManager); return result; } -SkDrawPosTextCommand* SkDrawPosTextCommand::fromJSON(Json::Value& command) { +SkDrawPosTextCommand* SkDrawPosTextCommand::fromJSON(Json::Value& command, + UrlDataManager& urlDataManager) { const char* text = command[SKDEBUGCANVAS_ATTRIBUTE_TEXT].asCString(); SkPaint paint; - extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], &paint); + extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], urlDataManager, &paint); Json::Value coords = command[SKDEBUGCANVAS_ATTRIBUTE_COORDS]; int count = (int) coords.size(); SkPoint* points = (SkPoint*) sk_malloc_throw(count * sizeof(SkPoint)); @@ -2461,8 +2476,8 @@ bool SkDrawTextBlobCommand::render(SkCanvas* canvas) const { return true; } -Json::Value SkDrawTextBlobCommand::toJSON() const { - Json::Value result = INHERITED::toJSON(); +Json::Value SkDrawTextBlobCommand::toJSON(UrlDataManager& urlDataManager) const { + Json::Value result = INHERITED::toJSON(urlDataManager); Json::Value runs(Json::arrayValue); SkTextBlobRunIterator iter(fBlob.get()); while (!iter.done()) { @@ -2491,7 +2506,7 @@ Json::Value SkDrawTextBlobCommand::toJSON() const { run[SKDEBUGCANVAS_ATTRIBUTE_GLYPHS] = jsonGlyphs; SkPaint fontPaint; iter.applyFontToPaint(&fontPaint); - run[SKDEBUGCANVAS_ATTRIBUTE_FONT] = make_json_paint(fontPaint, SKDEBUGCANVAS_SEND_BINARIES); + run[SKDEBUGCANVAS_ATTRIBUTE_FONT] = make_json_paint(fontPaint, urlDataManager); run[SKDEBUGCANVAS_ATTRIBUTE_COORDS] = make_json_point(iter.offset()); runs.append(run); iter.next(); @@ -2499,18 +2514,19 @@ Json::Value SkDrawTextBlobCommand::toJSON() const { result[SKDEBUGCANVAS_ATTRIBUTE_RUNS] = runs; result[SKDEBUGCANVAS_ATTRIBUTE_X] = Json::Value(fXPos); result[SKDEBUGCANVAS_ATTRIBUTE_Y] = Json::Value(fYPos); - result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(fPaint, SKDEBUGCANVAS_SEND_BINARIES); + result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(fPaint, urlDataManager); return result; } -SkDrawTextBlobCommand* SkDrawTextBlobCommand::fromJSON(Json::Value& command) { +SkDrawTextBlobCommand* SkDrawTextBlobCommand::fromJSON(Json::Value& command, + UrlDataManager& urlDataManager) { SkTextBlobBuilder builder; Json::Value runs = command[SKDEBUGCANVAS_ATTRIBUTE_RUNS]; for (Json::ArrayIndex i = 0 ; i < runs.size(); i++) { Json::Value run = runs[i]; SkPaint font; font.setTextEncoding(SkPaint::kGlyphID_TextEncoding); - extract_json_paint(run[SKDEBUGCANVAS_ATTRIBUTE_FONT], &font); + extract_json_paint(run[SKDEBUGCANVAS_ATTRIBUTE_FONT], urlDataManager, &font); Json::Value glyphs = run[SKDEBUGCANVAS_ATTRIBUTE_GLYPHS]; int count = glyphs.size(); Json::Value coords = run[SKDEBUGCANVAS_ATTRIBUTE_COORDS]; @@ -2544,7 +2560,7 @@ SkDrawTextBlobCommand* SkDrawTextBlobCommand::fromJSON(Json::Value& command) { SkScalar x = command[SKDEBUGCANVAS_ATTRIBUTE_X].asFloat(); SkScalar y = command[SKDEBUGCANVAS_ATTRIBUTE_Y].asFloat(); SkPaint paint; - extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], &paint); + extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], urlDataManager, &paint); return new SkDrawTextBlobCommand(builder.build(), x, y, paint); } @@ -2577,8 +2593,8 @@ void SkDrawPatchCommand::execute(SkCanvas* canvas) const { canvas->drawPatch(fCubics, fColorsPtr, fTexCoordsPtr, fXfermode, fPaint); } -Json::Value SkDrawPatchCommand::toJSON() const { - Json::Value result = INHERITED::toJSON(); +Json::Value SkDrawPatchCommand::toJSON(UrlDataManager& urlDataManager) const { + Json::Value result = INHERITED::toJSON(urlDataManager); Json::Value cubics = Json::Value(Json::arrayValue); for (int i = 0; i < 12; i++) { cubics.append(make_json_point(fCubics[i])); @@ -2600,13 +2616,14 @@ Json::Value SkDrawPatchCommand::toJSON() const { } if (fXfermode.get() != nullptr) { Json::Value jsonXfermode; - flatten(fXfermode, &jsonXfermode, SKDEBUGCANVAS_SEND_BINARIES); + flatten(fXfermode, &jsonXfermode, urlDataManager); result[SKDEBUGCANVAS_ATTRIBUTE_XFERMODE] = jsonXfermode; } return result; } -SkDrawPatchCommand* SkDrawPatchCommand::fromJSON(Json::Value& command) { +SkDrawPatchCommand* SkDrawPatchCommand::fromJSON(Json::Value& command, + UrlDataManager& urlDataManager) { Json::Value jsonCubics = command[SKDEBUGCANVAS_ATTRIBUTE_CUBICS]; SkPoint cubics[12]; for (int i = 0; i < 12; i++) { @@ -2639,10 +2656,10 @@ SkDrawPatchCommand* SkDrawPatchCommand::fromJSON(Json::Value& command) { SkAutoTUnref<SkXfermode> xfermode; if (command.isMember(SKDEBUGCANVAS_ATTRIBUTE_XFERMODE)) { Json::Value jsonXfermode = command[SKDEBUGCANVAS_ATTRIBUTE_XFERMODE]; - xfermode.reset((SkXfermode*) load_flattenable(jsonXfermode)); + xfermode.reset((SkXfermode*) load_flattenable(jsonXfermode, urlDataManager)); } SkPaint paint; - extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], &paint); + extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], urlDataManager, &paint); return new SkDrawPatchCommand(cubics, colorsPtr, texCoordsPtr, xfermode, paint); } @@ -2659,18 +2676,19 @@ void SkDrawRectCommand::execute(SkCanvas* canvas) const { canvas->drawRect(fRect, fPaint); } -Json::Value SkDrawRectCommand::toJSON() const { - Json::Value result = INHERITED::toJSON(); +Json::Value SkDrawRectCommand::toJSON(UrlDataManager& urlDataManager) const { + Json::Value result = INHERITED::toJSON(urlDataManager); result[SKDEBUGCANVAS_ATTRIBUTE_COORDS] = make_json_rect(fRect); - result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(fPaint, SKDEBUGCANVAS_SEND_BINARIES); + result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(fPaint, urlDataManager); return result; } -SkDrawRectCommand* SkDrawRectCommand::fromJSON(Json::Value& command) { +SkDrawRectCommand* SkDrawRectCommand::fromJSON(Json::Value& command, + UrlDataManager& urlDataManager) { SkRect coords; extract_json_rect(command[SKDEBUGCANVAS_ATTRIBUTE_COORDS], &coords); SkPaint paint; - extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], &paint); + extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], urlDataManager, &paint); return new SkDrawRectCommand(coords, paint); } @@ -2692,18 +2710,19 @@ bool SkDrawRRectCommand::render(SkCanvas* canvas) const { return true; } -Json::Value SkDrawRRectCommand::toJSON() const { - Json::Value result = INHERITED::toJSON(); +Json::Value SkDrawRRectCommand::toJSON(UrlDataManager& urlDataManager) const { + Json::Value result = INHERITED::toJSON(urlDataManager); result[SKDEBUGCANVAS_ATTRIBUTE_COORDS] = make_json_rrect(fRRect); - result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(fPaint, SKDEBUGCANVAS_SEND_BINARIES); + result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(fPaint, urlDataManager); return result; } -SkDrawRRectCommand* SkDrawRRectCommand::fromJSON(Json::Value& command) { +SkDrawRRectCommand* SkDrawRRectCommand::fromJSON(Json::Value& command, + UrlDataManager& urlDataManager) { SkRRect coords; extract_json_rrect(command[SKDEBUGCANVAS_ATTRIBUTE_COORDS], &coords); SkPaint paint; - extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], &paint); + extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], urlDataManager, &paint); return new SkDrawRRectCommand(coords, paint); } @@ -2729,21 +2748,22 @@ bool SkDrawDRRectCommand::render(SkCanvas* canvas) const { return true; } -Json::Value SkDrawDRRectCommand::toJSON() const { - Json::Value result = INHERITED::toJSON(); +Json::Value SkDrawDRRectCommand::toJSON(UrlDataManager& urlDataManager) const { + Json::Value result = INHERITED::toJSON(urlDataManager); result[SKDEBUGCANVAS_ATTRIBUTE_OUTER] = make_json_rrect(fOuter); result[SKDEBUGCANVAS_ATTRIBUTE_INNER] = make_json_rrect(fInner); - result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(fPaint, SKDEBUGCANVAS_SEND_BINARIES); + result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(fPaint, urlDataManager); return result; } -SkDrawDRRectCommand* SkDrawDRRectCommand::fromJSON(Json::Value& command) { +SkDrawDRRectCommand* SkDrawDRRectCommand::fromJSON(Json::Value& command, + UrlDataManager& urlDataManager) { SkRRect outer; extract_json_rrect(command[SKDEBUGCANVAS_ATTRIBUTE_INNER], &outer); SkRRect inner; extract_json_rrect(command[SKDEBUGCANVAS_ATTRIBUTE_INNER], &inner); SkPaint paint; - extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], &paint); + extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], urlDataManager, &paint); return new SkDrawDRRectCommand(outer, inner, paint); } @@ -2767,20 +2787,21 @@ void SkDrawTextCommand::execute(SkCanvas* canvas) const { canvas->drawText(fText, fByteLength, fX, fY, fPaint); } -Json::Value SkDrawTextCommand::toJSON() const { - Json::Value result = INHERITED::toJSON(); +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); Json::Value coords(Json::arrayValue); result[SKDEBUGCANVAS_ATTRIBUTE_COORDS] = make_json_point(fX, fY); - result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(fPaint, SKDEBUGCANVAS_SEND_BINARIES); + result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(fPaint, urlDataManager); return result; } -SkDrawTextCommand* SkDrawTextCommand::fromJSON(Json::Value& command) { +SkDrawTextCommand* SkDrawTextCommand::fromJSON(Json::Value& command, + UrlDataManager& urlDataManager) { const char* text = command[SKDEBUGCANVAS_ATTRIBUTE_TEXT].asCString(); SkPaint paint; - extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], &paint); + extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], urlDataManager, &paint); Json::Value coords = command[SKDEBUGCANVAS_ATTRIBUTE_COORDS]; return new SkDrawTextCommand(text, strlen(text), coords[0].asFloat(), coords[1].asFloat(), paint); @@ -2815,8 +2836,8 @@ void SkDrawTextOnPathCommand::execute(SkCanvas* canvas) const { fPaint); } -Json::Value SkDrawTextOnPathCommand::toJSON() const { - Json::Value result = INHERITED::toJSON(); +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); Json::Value coords(Json::arrayValue); @@ -2824,14 +2845,15 @@ Json::Value SkDrawTextOnPathCommand::toJSON() const { if (!fMatrix.isIdentity()) { result[SKDEBUGCANVAS_ATTRIBUTE_MATRIX] = make_json_matrix(fMatrix); } - result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(fPaint, SKDEBUGCANVAS_SEND_BINARIES); + result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(fPaint, urlDataManager); return result; } -SkDrawTextOnPathCommand* SkDrawTextOnPathCommand::fromJSON(Json::Value& command) { +SkDrawTextOnPathCommand* SkDrawTextOnPathCommand::fromJSON(Json::Value& command, + UrlDataManager& urlDataManager) { const char* text = command[SKDEBUGCANVAS_ATTRIBUTE_TEXT].asCString(); SkPaint paint; - extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], &paint); + extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], urlDataManager, &paint); SkPath path; extract_json_path(command[SKDEBUGCANVAS_ATTRIBUTE_PATH], &path); SkMatrix* matrixPtr; @@ -2916,7 +2938,7 @@ void SkRestoreCommand::execute(SkCanvas* canvas) const { canvas->restore(); } -SkRestoreCommand* SkRestoreCommand::fromJSON(Json::Value& command) { +SkRestoreCommand* SkRestoreCommand::fromJSON(Json::Value& command, UrlDataManager& urlDataManager) { return new SkRestoreCommand(); } @@ -2928,7 +2950,7 @@ void SkSaveCommand::execute(SkCanvas* canvas) const { canvas->save(); } -SkSaveCommand* SkSaveCommand::fromJSON(Json::Value& command) { +SkSaveCommand* SkSaveCommand::fromJSON(Json::Value& command, UrlDataManager& urlDataManager) { return new SkSaveCommand(); } @@ -2980,18 +3002,18 @@ void SkSaveLayerCommand::vizExecute(SkCanvas* canvas) const { canvas->save(); } -Json::Value SkSaveLayerCommand::toJSON() const { - Json::Value result = INHERITED::toJSON(); +Json::Value SkSaveLayerCommand::toJSON(UrlDataManager& urlDataManager) const { + Json::Value result = INHERITED::toJSON(urlDataManager); if (!fBounds.isEmpty()) { result[SKDEBUGCANVAS_ATTRIBUTE_BOUNDS] = make_json_rect(fBounds); } if (fPaintPtr != nullptr) { result[SKDEBUGCANVAS_ATTRIBUTE_PAINT] = make_json_paint(*fPaintPtr, - SKDEBUGCANVAS_SEND_BINARIES); + urlDataManager); } if (fBackdrop != nullptr) { Json::Value jsonBackdrop; - flatten(fBackdrop, &jsonBackdrop, SKDEBUGCANVAS_SEND_BINARIES); + flatten(fBackdrop, &jsonBackdrop, urlDataManager); result[SKDEBUGCANVAS_ATTRIBUTE_BACKDROP] = jsonBackdrop; } if (fSaveLayerFlags != 0) { @@ -3001,7 +3023,8 @@ Json::Value SkSaveLayerCommand::toJSON() const { return result; } -SkSaveLayerCommand* SkSaveLayerCommand::fromJSON(Json::Value& command) { +SkSaveLayerCommand* SkSaveLayerCommand::fromJSON(Json::Value& command, + UrlDataManager& urlDataManager) { SkCanvas::SaveLayerRec rec; SkRect bounds; if (command.isMember(SKDEBUGCANVAS_ATTRIBUTE_BOUNDS)) { @@ -3010,12 +3033,12 @@ SkSaveLayerCommand* SkSaveLayerCommand::fromJSON(Json::Value& command) { } SkPaint paint; if (command.isMember(SKDEBUGCANVAS_ATTRIBUTE_PAINT)) { - extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], &paint); + extract_json_paint(command[SKDEBUGCANVAS_ATTRIBUTE_PAINT], urlDataManager, &paint); rec.fPaint = &paint; } if (command.isMember(SKDEBUGCANVAS_ATTRIBUTE_BACKDROP)) { Json::Value backdrop = command[SKDEBUGCANVAS_ATTRIBUTE_BACKDROP]; - rec.fBackdrop = (SkImageFilter*) load_flattenable(backdrop); + rec.fBackdrop = (SkImageFilter*) load_flattenable(backdrop, urlDataManager); } SkSaveLayerCommand* result = new SkSaveLayerCommand(rec); if (rec.fBackdrop != nullptr) { @@ -3040,13 +3063,14 @@ void SkSetMatrixCommand::execute(SkCanvas* canvas) const { canvas->setMatrix(temp); } -Json::Value SkSetMatrixCommand::toJSON() const { - Json::Value result = INHERITED::toJSON(); +Json::Value SkSetMatrixCommand::toJSON(UrlDataManager& urlDataManager) const { + Json::Value result = INHERITED::toJSON(urlDataManager); result[SKDEBUGCANVAS_ATTRIBUTE_MATRIX] = make_json_matrix(fMatrix); return result; } -SkSetMatrixCommand* SkSetMatrixCommand::fromJSON(Json::Value& command) { +SkSetMatrixCommand* SkSetMatrixCommand::fromJSON(Json::Value& command, + UrlDataManager& urlDataManager) { SkMatrix matrix; extract_json_matrix(command[SKDEBUGCANVAS_ATTRIBUTE_MATRIX], &matrix); return new SkSetMatrixCommand(matrix); diff --git a/tools/debugger/SkDrawCommand.h b/tools/debugger/SkDrawCommand.h index c0ab3a0a4e..ff1e1c5248 100644 --- a/tools/debugger/SkDrawCommand.h +++ b/tools/debugger/SkDrawCommand.h @@ -1,4 +1,3 @@ - /* * Copyright 2012 Google Inc. * @@ -16,6 +15,7 @@ #include "SkString.h" #include "SkTDArray.h" #include "SkJSONCPP.h" +#include "UrlDataManager.h" class SK_API SkDrawCommand { public: @@ -100,13 +100,13 @@ public: virtual bool render(SkCanvas* canvas) const { return false; } - virtual Json::Value toJSON() const; + virtual Json::Value toJSON(UrlDataManager& urlDataManager) const; /* Converts a JSON representation of a command into a newly-allocated SkDrawCommand object. It * is the caller's responsibility to delete this object. This method may return null if an error * occurs. */ - static SkDrawCommand* fromJSON(Json::Value& command); + static SkDrawCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); static const char* GetCommandString(OpType type); @@ -123,7 +123,7 @@ public: SkRestoreCommand(); void execute(SkCanvas* canvas) const override; Action action() const override { return kPopLayer_Action; } - static SkRestoreCommand* fromJSON(Json::Value& command); + static SkRestoreCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); private: typedef SkDrawCommand INHERITED; @@ -133,8 +133,8 @@ class SkClearCommand : public SkDrawCommand { public: SkClearCommand(SkColor color); void execute(SkCanvas* canvas) const override; - Json::Value toJSON() const override; - static SkClearCommand* fromJSON(Json::Value& command); + Json::Value toJSON(UrlDataManager& urlDataManager) const override; + static SkClearCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); private: SkColor fColor; @@ -147,8 +147,8 @@ public: SkClipPathCommand(const SkPath& path, SkRegion::Op op, bool doAA); void execute(SkCanvas* canvas) const override; bool render(SkCanvas* canvas) const override; - Json::Value toJSON() const override; - static SkClipPathCommand* fromJSON(Json::Value& command); + Json::Value toJSON(UrlDataManager& urlDataManager) const override; + static SkClipPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); private: SkPath fPath; @@ -162,8 +162,8 @@ class SkClipRegionCommand : public SkDrawCommand { public: SkClipRegionCommand(const SkRegion& region, SkRegion::Op op); void execute(SkCanvas* canvas) const override; - Json::Value toJSON() const override; - static SkClipRegionCommand* fromJSON(Json::Value& command); + Json::Value toJSON(UrlDataManager& urlDataManager) const override; + static SkClipRegionCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); private: SkRegion fRegion; @@ -176,8 +176,8 @@ class SkClipRectCommand : public SkDrawCommand { public: SkClipRectCommand(const SkRect& rect, SkRegion::Op op, bool doAA); void execute(SkCanvas* canvas) const override; - Json::Value toJSON() const override; - static SkClipRectCommand* fromJSON(Json::Value& command); + Json::Value toJSON(UrlDataManager& urlDataManager) const override; + static SkClipRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); const SkRect& rect() const { return fRect; } SkRegion::Op op() const { return fOp; } @@ -196,8 +196,8 @@ public: SkClipRRectCommand(const SkRRect& rrect, SkRegion::Op op, bool doAA); void execute(SkCanvas* canvas) const override; bool render(SkCanvas* canvas) const override; - Json::Value toJSON() const override; - static SkClipRRectCommand* fromJSON(Json::Value& command); + Json::Value toJSON(UrlDataManager& urlDataManager) const override; + static SkClipRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); const SkRRect& rrect() const { return fRRect; } SkRegion::Op op() const { return fOp; } @@ -215,8 +215,8 @@ class SkConcatCommand : public SkDrawCommand { public: SkConcatCommand(const SkMatrix& matrix); void execute(SkCanvas* canvas) const override; - Json::Value toJSON() const override; - static SkConcatCommand* fromJSON(Json::Value& command); + Json::Value toJSON(UrlDataManager& urlDataManager) const override; + static SkConcatCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); private: SkMatrix fMatrix; @@ -230,8 +230,8 @@ public: const SkPaint* paint); void execute(SkCanvas* canvas) const override; bool render(SkCanvas* canvas) const override; - Json::Value toJSON() const override; - static SkDrawBitmapCommand* fromJSON(Json::Value& command); + Json::Value toJSON(UrlDataManager& urlDataManager) const override; + static SkDrawBitmapCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); private: SkBitmap fBitmap; @@ -249,8 +249,8 @@ public: const SkRect& dst, const SkPaint* paint); void execute(SkCanvas* canvas) const override; bool render(SkCanvas* canvas) const override; - Json::Value toJSON() const override; - static SkDrawBitmapNineCommand* fromJSON(Json::Value& command); + Json::Value toJSON(UrlDataManager& urlDataManager) const override; + static SkDrawBitmapNineCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); private: SkBitmap fBitmap; @@ -269,8 +269,8 @@ public: SkCanvas::SrcRectConstraint); void execute(SkCanvas* canvas) const override; bool render(SkCanvas* canvas) const override; - Json::Value toJSON() const override; - static SkDrawBitmapRectCommand* fromJSON(Json::Value& command); + Json::Value toJSON(UrlDataManager& urlDataManager) const override; + static SkDrawBitmapRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); const SkBitmap& bitmap() const { return fBitmap; } @@ -308,8 +308,8 @@ public: SkDrawImageCommand(const SkImage* image, SkScalar left, SkScalar top, const SkPaint* paint); void execute(SkCanvas* canvas) const override; bool render(SkCanvas* canvas) const override; - Json::Value toJSON() const override; - static SkDrawImageCommand* fromJSON(Json::Value& command); + Json::Value toJSON(UrlDataManager& urlDataManager) const override; + static SkDrawImageCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); private: SkAutoTUnref<const SkImage> fImage; @@ -326,8 +326,8 @@ public: const SkPaint* paint, SkCanvas::SrcRectConstraint constraint); void execute(SkCanvas* canvas) const override; bool render(SkCanvas* canvas) const override; - Json::Value toJSON() const override; - static SkDrawImageRectCommand* fromJSON(Json::Value& command); + Json::Value toJSON(UrlDataManager& urlDataManager) const override; + static SkDrawImageRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); private: SkAutoTUnref<const SkImage> fImage; @@ -344,8 +344,8 @@ public: SkDrawOvalCommand(const SkRect& oval, const SkPaint& paint); void execute(SkCanvas* canvas) const override; bool render(SkCanvas* canvas) const override; - Json::Value toJSON() const override; - static SkDrawOvalCommand* fromJSON(Json::Value& command); + Json::Value toJSON(UrlDataManager& urlDataManager) const override; + static SkDrawOvalCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); private: SkRect fOval; @@ -359,8 +359,8 @@ public: SkDrawPaintCommand(const SkPaint& paint); void execute(SkCanvas* canvas) const override; bool render(SkCanvas* canvas) const override; - Json::Value toJSON() const override; - static SkDrawPaintCommand* fromJSON(Json::Value& command); + Json::Value toJSON(UrlDataManager& urlDataManager) const override; + static SkDrawPaintCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); private: SkPaint fPaint; @@ -373,8 +373,8 @@ public: SkDrawPathCommand(const SkPath& path, const SkPaint& paint); void execute(SkCanvas* canvas) const override; bool render(SkCanvas* canvas) const override; - Json::Value toJSON() const override; - static SkDrawPathCommand* fromJSON(Json::Value& command); + Json::Value toJSON(UrlDataManager& urlDataManager) const override; + static SkDrawPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); private: SkPath fPath; @@ -419,8 +419,8 @@ public: virtual ~SkDrawPointsCommand() { delete [] fPts; } void execute(SkCanvas* canvas) const override; bool render(SkCanvas* canvas) const override; - Json::Value toJSON() const override; - static SkDrawPointsCommand* fromJSON(Json::Value& command); + Json::Value toJSON(UrlDataManager& urlDataManager) const override; + static SkDrawPointsCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); private: SkCanvas::PointMode fMode; @@ -437,8 +437,8 @@ public: const SkPaint& paint); virtual ~SkDrawTextCommand() { delete [] fText; } void execute(SkCanvas* canvas) const override; - Json::Value toJSON() const override; - static SkDrawTextCommand* fromJSON(Json::Value& command); + Json::Value toJSON(UrlDataManager& urlDataManager) const override; + static SkDrawTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); private: char* fText; @@ -456,8 +456,8 @@ public: const SkPaint& paint); virtual ~SkDrawPosTextCommand() { delete [] fPos; delete [] fText; } void execute(SkCanvas* canvas) const override; - Json::Value toJSON() const override; - static SkDrawPosTextCommand* fromJSON(Json::Value& command); + Json::Value toJSON(UrlDataManager& urlDataManager) const override; + static SkDrawPosTextCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); private: char* fText; @@ -474,8 +474,8 @@ public: const SkMatrix* matrix, const SkPaint& paint); virtual ~SkDrawTextOnPathCommand() { delete [] fText; } void execute(SkCanvas* canvas) const override; - Json::Value toJSON() const override; - static SkDrawTextOnPathCommand* fromJSON(Json::Value& command); + Json::Value toJSON(UrlDataManager& urlDataManager) const override; + static SkDrawTextOnPathCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); private: char* fText; @@ -510,8 +510,8 @@ public: void execute(SkCanvas* canvas) const override; bool render(SkCanvas* canvas) const override; - Json::Value toJSON() const override; - static SkDrawTextBlobCommand* fromJSON(Json::Value& command); + Json::Value toJSON(UrlDataManager& urlDataManager) const override; + static SkDrawTextBlobCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); private: SkAutoTUnref<const SkTextBlob> fBlob; @@ -528,8 +528,8 @@ public: const SkPoint texCoords[4], SkXfermode* xmode, const SkPaint& paint); void execute(SkCanvas* canvas) const override; - Json::Value toJSON() const override; - static SkDrawPatchCommand* fromJSON(Json::Value& command); + Json::Value toJSON(UrlDataManager& urlDataManager) const override; + static SkDrawPatchCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); private: SkPoint fCubics[12]; @@ -548,8 +548,8 @@ class SkDrawRectCommand : public SkDrawCommand { public: SkDrawRectCommand(const SkRect& rect, const SkPaint& paint); void execute(SkCanvas* canvas) const override; - Json::Value toJSON() const override; - static SkDrawRectCommand* fromJSON(Json::Value& command); + Json::Value toJSON(UrlDataManager& urlDataManager) const override; + static SkDrawRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); const SkRect& rect() const { return fRect; } const SkPaint& paint() const { return fPaint; } @@ -565,8 +565,8 @@ public: SkDrawRRectCommand(const SkRRect& rrect, const SkPaint& paint); void execute(SkCanvas* canvas) const override; bool render(SkCanvas* canvas) const override; - Json::Value toJSON() const override; - static SkDrawRRectCommand* fromJSON(Json::Value& command); + Json::Value toJSON(UrlDataManager& urlDataManager) const override; + static SkDrawRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); private: SkRRect fRRect; @@ -581,8 +581,8 @@ public: const SkPaint& paint); void execute(SkCanvas* canvas) const override; bool render(SkCanvas* canvas) const override; - Json::Value toJSON() const override; - static SkDrawDRRectCommand* fromJSON(Json::Value& command); + Json::Value toJSON(UrlDataManager& urlDataManager) const override; + static SkDrawDRRectCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); private: SkRRect fOuter; @@ -621,7 +621,7 @@ public: SkSaveCommand(); void execute(SkCanvas* canvas) const override; Action action() const override { return kPushLayer_Action; } - static SkSaveCommand* fromJSON(Json::Value& command); + static SkSaveCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); private: typedef SkDrawCommand INHERITED; @@ -632,8 +632,8 @@ public: SkSaveLayerCommand(const SkCanvas::SaveLayerRec&); virtual ~SkSaveLayerCommand(); void execute(SkCanvas* canvas) const override; - Json::Value toJSON() const override; - static SkSaveLayerCommand* fromJSON(Json::Value& command); + Json::Value toJSON(UrlDataManager& urlDataManager) const override; + static SkSaveLayerCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); void vizExecute(SkCanvas* canvas) const override; Action action() const override{ return kPushLayer_Action; } void setActive(bool active) override { fActive = active; } @@ -658,8 +658,8 @@ public: SkSetMatrixCommand(const SkMatrix& matrix); void setUserMatrix(const SkMatrix&) override; void execute(SkCanvas* canvas) const override; - Json::Value toJSON() const override; - static SkSetMatrixCommand* fromJSON(Json::Value& command); + Json::Value toJSON(UrlDataManager& urlDataManager) const override; + static SkSetMatrixCommand* fromJSON(Json::Value& command, UrlDataManager& urlDataManager); private: SkMatrix fUserMatrix; |