| /* | |
| * Copyright 2018 Google Inc. | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #include "MemoryCache.h" | |
| #include "SkBase64.h" | |
| // Change this to 1 to log cache hits/misses/stores using SkDebugf. | |
| #define LOG_MEMORY_CACHE 0 | |
| static SkString data_to_str(const SkData& data) { | |
| size_t encodeLength = SkBase64::Encode(data.data(), data.size(), nullptr); | |
| SkString str; | |
| str.resize(encodeLength); | |
| SkBase64::Encode(data.data(), data.size(), str.writable_str()); | |
| static constexpr size_t kMaxLength = 60; | |
| static constexpr char kTail[] = "..."; | |
| static const size_t kTailLen = strlen(kTail); | |
| bool overlength = encodeLength > kMaxLength; | |
| if (overlength) { | |
| str = SkString(str.c_str(), kMaxLength - kTailLen); | |
| str.append(kTail); | |
| } | |
| return str; | |
| } | |
| namespace sk_gpu_test { | |
| sk_sp<SkData> MemoryCache::load(const SkData& key) { | |
| auto result = fMap.find(key); | |
| if (result == fMap.end()) { | |
| if (LOG_MEMORY_CACHE) { | |
| SkDebugf("Load Key: %s\n\tNot Found.\n\n", data_to_str(key).c_str()); | |
| } | |
| ++fCacheMissCnt; | |
| return nullptr; | |
| } | |
| if (LOG_MEMORY_CACHE) { | |
| SkDebugf("Load Key: %s\n\tFound Data: %s\n\n", data_to_str(key).c_str(), | |
| data_to_str(*result->second).c_str()); | |
| } | |
| return result->second; | |
| } | |
| void MemoryCache::store(const SkData& key, const SkData& data) { | |
| if (LOG_MEMORY_CACHE) { | |
| SkDebugf("Store Key: %s\n\tData: %s\n\n", data_to_str(key).c_str(), | |
| data_to_str(data).c_str()); | |
| } | |
| fMap[Key(key)] = SkData::MakeWithCopy(data.data(), data.size()); | |
| } | |
| } // namespace sk_gpu_test |