diff options
author | joshualitt <joshualitt@chromium.org> | 2016-02-08 07:08:21 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-02-08 07:08:21 -0800 |
commit | cdad12f3b14e7cb4c1aa03990ea8044a3f204403 (patch) | |
tree | 8cf9f61c0866ece986b8dcccf2a80f0f2b0342a0 /tools/UrlDataManager.cpp | |
parent | b9c61f7a6e32cf5b17c16da484b3fe5902ba92f0 (diff) |
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
Diffstat (limited to 'tools/UrlDataManager.cpp')
-rw-r--r-- | tools/UrlDataManager.cpp | 44 |
1 files changed, 44 insertions, 0 deletions
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<UrlData, SkData, LookupTrait>::Iter iter(&fCache); + while (!iter.done()) { + UrlData* urlData = &(*iter); + urlData->unref(); + ++iter; + } + + fCache.rewind(); +} |