[Maintenance] Made the SkData object within URLDataManager const Make the SkData object (fData) within the UrlDataManager and UrlData classes const. This prevents the editing of the underlying data in the cache. Change-Id: Id8e7b32fa13f039eecf527e5f6f2a9f7c8b8375c Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1287516 Commit-Queue: Alexis Cruz-Ayala <alexisdavidc@google.com> Reviewed-by: Kaylee Lubick <kjlubick@google.com>
diff --git a/tools/UrlDataManager.cpp b/tools/UrlDataManager.cpp index 2730298..7b82f92 100644 --- a/tools/UrlDataManager.cpp +++ b/tools/UrlDataManager.cpp
@@ -12,15 +12,15 @@ UrlDataManager::UrlDataManager(SkString rootUrl) : fRootUrl(rootUrl), fDataId(0) {} -SkString UrlDataManager::addData(SkData* data, const char* contentType) { +SkString UrlDataManager::addData(sk_sp<const SkData> data, const char* contentType) { UrlData* urlData = fCache.find(*data); - if (fCache.find(*data)) { + if (urlData) { SkASSERT(data->equals(urlData->fData.get())); return urlData->fUrl; } urlData = new UrlData; - urlData->fData.reset(SkRef(data)); + urlData->fData = data; urlData->fContentType.set(contentType); urlData->fUrl.appendf("%s/%u", fRootUrl.c_str(), fDataId++);
diff --git a/tools/UrlDataManager.h b/tools/UrlDataManager.h index 7ba8217..bad0423 100644 --- a/tools/UrlDataManager.h +++ b/tools/UrlDataManager.h
@@ -26,12 +26,12 @@ * Adds a data blob to the cache with a particular content type. UrlDataManager will hash * the blob data to ensure uniqueness */ - SkString addData(SkData*, const char* contentType); + SkString addData(sk_sp<const SkData>, const char* contentType); struct UrlData : public SkRefCnt { SkString fUrl; SkString fContentType; - sk_sp<SkData> fData; + sk_sp<const SkData> fData; }; /*
diff --git a/tools/debugger/DrawCommand.cpp b/tools/debugger/DrawCommand.cpp index 03c090b..354ecb0 100644 --- a/tools/debugger/DrawCommand.cpp +++ b/tools/debugger/DrawCommand.cpp
@@ -599,8 +599,8 @@ } } -static SkString encode_data(SkData* data, - const char* contentType, +static SkString encode_data(sk_sp<const SkData> data, + const char* contentType, UrlDataManager& urlDataManager) { return urlDataManager.addData(data, contentType); } @@ -611,7 +611,7 @@ SkBinaryWriteBuffer buffer({}); // TODO(kjlubick, bungeman) feed SkSerialProcs through API flattenable->flatten(buffer); sk_sp<SkData> data = buffer.snapshotAsData(); - SkString url = encode_data(data.get(), "application/octet-stream", urlDataManager); + SkString url = encode_data(data, "application/octet-stream", urlDataManager); writer.appendCString(DEBUGCANVAS_ATTRIBUTE_NAME, flattenable->getTypeName()); writer.appendString(DEBUGCANVAS_ATTRIBUTE_DATA, url); @@ -675,7 +675,7 @@ writer.endObject(); return false; } - SkString url = encode_data(encoded.get(), "image/png", urlDataManager); + SkString url = encode_data(encoded, "image/png", urlDataManager); writer.appendString(DEBUGCANVAS_ATTRIBUTE_DATA, url); writer.endObject(); return true; @@ -875,7 +875,7 @@ } writer.beginObject(DEBUGCANVAS_ATTRIBUTE_TYPEFACE); sk_sp<SkData> data = buffer.detachAsData(); - SkString url = encode_data(data.get(), "application/octet-stream", urlDataManager); + SkString url = encode_data(data, "application/octet-stream", urlDataManager); writer.appendString(DEBUGCANVAS_ATTRIBUTE_DATA, url); writer.endObject(); }
diff --git a/tools/skp_parser.cpp b/tools/skp_parser.cpp index e3fb057..f21e921 100644 --- a/tools/skp_parser.cpp +++ b/tools/skp_parser.cpp
@@ -69,7 +69,7 @@ if (argc > 2) { if (UrlDataManager::UrlData* data = dataManager.getDataFromUrl(SkString(argv[2]))) { - SkData* skdata = data->fData.get(); + const SkData* skdata = data->fData.get(); SkASSERT(skdata); #ifdef SK_BUILD_FOR_WIN fflush(stdout);