From cdad12f3b14e7cb4c1aa03990ea8044a3f204403 Mon Sep 17 00:00:00 2001 From: joshualitt Date: Mon, 8 Feb 2016 07:08:21 -0800 Subject: Create image cache for use by json canvas BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1670153005 Review URL: https://codereview.chromium.org/1670153005 --- tools/UrlDataManager.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 tools/UrlDataManager.cpp (limited to 'tools/UrlDataManager.cpp') diff --git a/tools/UrlDataManager.cpp b/tools/UrlDataManager.cpp new file mode 100644 index 0000000000..a30d8ba23e --- /dev/null +++ b/tools/UrlDataManager.cpp @@ -0,0 +1,44 @@ +/* + * Copyright 2016 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "UrlDataManager.h" + +bool operator==(const SkData& a, const SkData& b) { + return a.equals(&b); +} + +UrlDataManager::UrlDataManager(SkString rootUrl) : fRootUrl(rootUrl), fDataId(0) {} + +SkString UrlDataManager::addData(SkData* data, const char* contentType) { + UrlData* urlData = fCache.find(*data); + if (fCache.find(*data)) { + SkASSERT(data->equals(urlData->fData.get())); + return urlData->fUrl; + } + + urlData = new UrlData; + urlData->fData.reset(SkRef(data)); + urlData->fContentType.set(contentType); + urlData->fUrl.appendf("%s/%d", fRootUrl.c_str(), fDataId++); + + fCache.add(urlData); + + SkASSERT(!fUrlLookup.find(urlData->fUrl)); + fUrlLookup.add(urlData); + return urlData->fUrl; +} + +void UrlDataManager::reset() { + SkTDynamicHash::Iter iter(&fCache); + while (!iter.done()) { + UrlData* urlData = &(*iter); + urlData->unref(); + ++iter; + } + + fCache.rewind(); +} -- cgit v1.2.3