aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/UrlDataManager.cpp
diff options
context:
space:
mode:
authorGravatar joshualitt <joshualitt@chromium.org>2016-02-08 07:08:21 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2016-02-08 07:08:21 -0800
commitcdad12f3b14e7cb4c1aa03990ea8044a3f204403 (patch)
tree8cf9f61c0866ece986b8dcccf2a80f0f2b0342a0 /tools/UrlDataManager.cpp
parentb9c61f7a6e32cf5b17c16da484b3fe5902ba92f0 (diff)
Create image cache for use by json canvas
Diffstat (limited to 'tools/UrlDataManager.cpp')
-rw-r--r--tools/UrlDataManager.cpp44
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();
+}