blob: d8dde206ad818d52c210ed1ece2ee1bda112f161 [file] [log] [blame]
Robert Phillips26f3aeb2020-09-16 10:57:32 -04001/*
2 * Copyright 2020 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "src/gpu/GrThreadSafeUniquelyKeyedProxyViewCache.h"
9
10GrThreadSafeUniquelyKeyedProxyViewCache::GrThreadSafeUniquelyKeyedProxyViewCache() {}
11
12GrThreadSafeUniquelyKeyedProxyViewCache::~GrThreadSafeUniquelyKeyedProxyViewCache() {
13 fUniquelyKeyedProxyViews.foreach([](const GrUniqueKey&k, Entry** v) { delete *v; });
14}
15
16#if GR_TEST_UTILS
17int GrThreadSafeUniquelyKeyedProxyViewCache::numEntries() const {
18 SkAutoSpinlock lock{fSpinLock};
19
20 return fUniquelyKeyedProxyViews.count();
21}
22
23size_t GrThreadSafeUniquelyKeyedProxyViewCache::approxBytesUsed() const {
24 SkAutoSpinlock lock{fSpinLock};
25
26 return fUniquelyKeyedProxyViews.approxBytesUsed();
27}
28#endif
29
30void GrThreadSafeUniquelyKeyedProxyViewCache::dropAllRefs() {
31 SkAutoSpinlock lock{fSpinLock};
32
33 fUniquelyKeyedProxyViews.reset();
34}
35
Robert Phillips12d06a32020-09-16 12:31:34 -040036void GrThreadSafeUniquelyKeyedProxyViewCache::dropAllUniqueRefs() {
37 SkAutoSpinlock lock{fSpinLock};
38
39 fUniquelyKeyedProxyViews.foreach([](const GrUniqueKey&k, Entry** v) {
40 // problematic
41 });
42}
43
Robert Phillips26f3aeb2020-09-16 10:57:32 -040044GrSurfaceProxyView GrThreadSafeUniquelyKeyedProxyViewCache::find(const GrUniqueKey& key) {
45 SkAutoSpinlock lock{fSpinLock};
46
47 Entry** tmp = fUniquelyKeyedProxyViews.find(const_cast<GrUniqueKey&>(key));
48 if (tmp) {
49 return (*tmp)->fView;
50 }
51
52 return {};
53}
54
55GrSurfaceProxyView GrThreadSafeUniquelyKeyedProxyViewCache::internalAdd(
56 const GrUniqueKey& key,
57 const GrSurfaceProxyView& view) {
58 Entry** tmp = fUniquelyKeyedProxyViews.find(const_cast<GrUniqueKey&>(key));
59 if (!tmp) {
60 // TODO: block allocate here?
61 Entry* newT = new Entry(key, view);
62 tmp = fUniquelyKeyedProxyViews.set(newT->fKey, newT);
63 }
64
65 return (*tmp)->fView;
66}
67
68GrSurfaceProxyView GrThreadSafeUniquelyKeyedProxyViewCache::add(const GrUniqueKey& key,
69 const GrSurfaceProxyView& view) {
70 SkAutoSpinlock lock{fSpinLock};
71
72 return this->internalAdd(key, view);
73}