/* * 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 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