Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
third_party
skia
bench
GrResourceCacheBench.cpp
Go to the documentation of this file.
1
/*
2
* Copyright 2013 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 "
bench/Benchmark.h
"
9
10
#include "
include/core/SkCanvas.h
"
11
#include "
include/gpu/GrDirectContext.h
"
12
#include "
src/gpu/ganesh/GrDirectContextPriv.h
"
13
#include "
src/gpu/ganesh/GrGpu.h
"
14
#include "
src/gpu/ganesh/GrGpuResource.h
"
15
#include "
src/gpu/ganesh/GrGpuResourcePriv.h
"
16
#include "
src/gpu/ganesh/GrResourceCache.h
"
17
18
enum
{
19
CACHE_SIZE_COUNT
= 4096,
20
};
21
22
class
BenchResource
:
public
GrGpuResource
{
23
public
:
24
BenchResource
(
GrGpu
* gpu, std::string_view label)
25
:
INHERITED
(gpu, label) {
26
this->
registerWithCache
(
skgpu::Budgeted::kYes
);
27
}
28
29
static
void
ComputeKey
(
int
i,
int
keyData32Count,
skgpu::UniqueKey
*
key
) {
30
static
skgpu::UniqueKey::Domain
kDomain =
skgpu::UniqueKey::GenerateDomain
();
31
skgpu::UniqueKey::Builder
builder(
key
, kDomain, keyData32Count);
32
for
(
int
j = 0; j < keyData32Count; ++j) {
33
builder[j] = i + j;
34
}
35
}
36
37
private
:
38
size_t
onGpuMemorySize
()
const override
{
return
100; }
39
void
onSetLabel
()
override
{}
40
const
char
*
getResourceType
()
const override
{
return
"bench"
; }
41
using
INHERITED =
GrGpuResource
;
42
};
43
44
static
void
populate_cache
(
GrGpu
* gpu,
int
resourceCount,
int
keyData32Count) {
45
for
(
int
i = 0; i < resourceCount; ++i) {
46
skgpu::UniqueKey
key
;
47
BenchResource::ComputeKey
(i, keyData32Count, &
key
);
48
GrGpuResource
* resource =
new
BenchResource
(gpu,
/*label=*/
"BenchResource"
);
49
resource->
resourcePriv
().
setUniqueKey
(
key
);
50
resource->
unref
();
51
}
52
}
53
54
class
GrResourceCacheBenchAdd
:
public
Benchmark
{
55
public
:
56
GrResourceCacheBenchAdd
(
int
keyData32Count)
57
: fFullName(
"grresourcecache_add"
)
58
, fKeyData32Count(keyData32Count) {
59
if
(keyData32Count > 1) {
60
fFullName.
appendf
(
"_%d"
, fKeyData32Count);
61
}
62
}
63
64
bool
isSuitableFor
(
Backend
backend)
override
{
65
return
backend
==
Backend::kNonRendering
;
66
}
67
protected
:
68
const
char
*
onGetName
()
override
{
69
return
fFullName.
c_str
();
70
}
71
72
void
onDraw
(
int
loops,
SkCanvas
* canvas)
override
{
73
sk_sp<GrDirectContext>
context(
GrDirectContext::MakeMock
(
nullptr
));
74
if
(
nullptr
== context) {
75
return
;
76
}
77
// Set the cache budget to be very large so no purging occurs.
78
context->setResourceCacheLimits(
CACHE_SIZE_COUNT
, 1 << 30);
79
80
GrResourceCache
* cache = context->priv().getResourceCache();
81
82
// Make sure the cache is empty.
83
cache->purgeUnlockedResources(
GrPurgeResourceOptions::kAllResources
);
84
SkASSERT
(0 == cache->getResourceCount() && 0 == cache->getResourceBytes());
85
86
GrGpu
* gpu = context->priv().getGpu();
87
88
for
(
int
i = 0; i < loops; ++i) {
89
populate_cache
(gpu,
CACHE_SIZE_COUNT
, fKeyData32Count);
90
SkASSERT
(
CACHE_SIZE_COUNT
== cache->getResourceCount());
91
}
92
}
93
94
private
:
95
SkString
fFullName;
96
int
fKeyData32Count;
97
using
INHERITED =
Benchmark
;
98
};
99
100
class
GrResourceCacheBenchFind
:
public
Benchmark
{
101
public
:
102
GrResourceCacheBenchFind
(
int
keyData32Count)
103
: fFullName(
"grresourcecache_find"
)
104
, fKeyData32Count(keyData32Count) {
105
if
(keyData32Count > 1) {
106
fFullName.
appendf
(
"_%d"
, fKeyData32Count);
107
}
108
}
109
110
bool
isSuitableFor
(
Backend
backend)
override
{
111
return
backend
==
Backend::kNonRendering
;
112
}
113
protected
:
114
const
char
*
onGetName
()
override
{
115
return
fFullName.
c_str
();
116
}
117
118
void
onDelayedSetup
()
override
{
119
fContext =
GrDirectContext::MakeMock
(
nullptr
);
120
if
(!fContext) {
121
return
;
122
}
123
// Set the cache budget to be very large so no purging occurs.
124
fContext->
setResourceCacheLimits
(
CACHE_SIZE_COUNT
, 1 << 30);
125
126
GrResourceCache
* cache = fContext->
priv
().
getResourceCache
();
127
128
// Make sure the cache is empty.
129
cache->purgeUnlockedResources(
GrPurgeResourceOptions::kAllResources
);
130
SkASSERT
(0 == cache->getResourceCount() && 0 == cache->getResourceBytes());
131
132
GrGpu
* gpu = fContext->
priv
().
getGpu
();
133
134
populate_cache
(gpu,
CACHE_SIZE_COUNT
, fKeyData32Count);
135
}
136
137
void
onDraw
(
int
loops,
SkCanvas
* canvas)
override
{
138
if
(!fContext) {
139
return
;
140
}
141
GrResourceCache
* cache = fContext->
priv
().
getResourceCache
();
142
SkASSERT
(
CACHE_SIZE_COUNT
== cache->getResourceCount());
143
for
(
int
i = 0; i < loops; ++i) {
144
for
(
int
k = 0; k <
CACHE_SIZE_COUNT
; ++k) {
145
skgpu::UniqueKey
key
;
146
BenchResource::ComputeKey
(k, fKeyData32Count, &
key
);
147
sk_sp<GrGpuResource>
resource(cache->findAndRefUniqueResource(
key
));
148
SkASSERT
(resource);
149
}
150
}
151
}
152
153
private
:
154
sk_sp<GrDirectContext>
fContext;
155
SkString
fFullName;
156
int
fKeyData32Count;
157
using
INHERITED =
Benchmark
;
158
};
159
160
DEF_BENCH
(
return
new
GrResourceCacheBenchAdd
(1); )
161
#ifdef SK_RELEASE
162
// Only on release because on debug the SkTDynamicHash validation is too slow.
163
DEF_BENCH
(
return
new
GrResourceCacheBenchAdd
(2); )
164
DEF_BENCH
(
return
new
GrResourceCacheBenchAdd
(3); )
165
DEF_BENCH
(
return
new
GrResourceCacheBenchAdd
(4); )
166
DEF_BENCH
(
return
new
GrResourceCacheBenchAdd
(5); )
167
DEF_BENCH
(
return
new
GrResourceCacheBenchAdd
(10); )
168
DEF_BENCH
(
return
new
GrResourceCacheBenchAdd
(25); )
169
DEF_BENCH
(
return
new
GrResourceCacheBenchAdd
(54); )
170
DEF_BENCH
(
return
new
GrResourceCacheBenchAdd
(55); )
171
DEF_BENCH
(
return
new
GrResourceCacheBenchAdd
(56); )
172
#endif
173
174
DEF_BENCH
(
return
new
GrResourceCacheBenchFind
(1); )
175
#ifdef SK_RELEASE
176
DEF_BENCH
(
return
new
GrResourceCacheBenchFind
(2); )
177
DEF_BENCH
(
return
new
GrResourceCacheBenchFind
(3); )
178
DEF_BENCH
(
return
new
GrResourceCacheBenchFind
(4); )
179
DEF_BENCH
(
return
new
GrResourceCacheBenchFind
(5); )
180
DEF_BENCH
(
return
new
GrResourceCacheBenchFind
(10); )
181
DEF_BENCH
(
return
new
GrResourceCacheBenchFind
(25); )
182
DEF_BENCH
(
return
new
GrResourceCacheBenchFind
(54); )
183
DEF_BENCH
(
return
new
GrResourceCacheBenchFind
(55); )
184
DEF_BENCH
(
return
new
GrResourceCacheBenchFind
(56); )
185
#endif
Benchmark.h
DEF_BENCH
#define DEF_BENCH(code)
Definition
Benchmark.h:20
backend
const char * backend
Definition
CommonFlagsConfig.cpp:42
GrDirectContextPriv.h
GrDirectContext.h
GrGpuResourcePriv.h
GrGpuResource.h
GrGpu.h
populate_cache
static void populate_cache(GrGpu *gpu, int resourceCount, int keyData32Count)
Definition
GrResourceCacheBench.cpp:44
CACHE_SIZE_COUNT
@ CACHE_SIZE_COUNT
Definition
GrResourceCacheBench.cpp:19
GrResourceCache.h
GrPurgeResourceOptions::kAllResources
@ kAllResources
SkASSERT
#define SkASSERT(cond)
Definition
SkAssert.h:116
SkCanvas.h
BenchResource
Definition
GrResourceCacheBench.cpp:22
BenchResource::BenchResource
BenchResource(GrGpu *gpu, std::string_view label)
Definition
GrResourceCacheBench.cpp:24
BenchResource::ComputeKey
static void ComputeKey(int i, int keyData32Count, skgpu::UniqueKey *key)
Definition
GrResourceCacheBench.cpp:29
BenchResource::onSetLabel
void onSetLabel() override
Definition
GrResourceCacheBench.cpp:39
BenchResource::onGpuMemorySize
size_t onGpuMemorySize() const override
Definition
GrResourceCacheBench.cpp:38
BenchResource::getResourceType
const char * getResourceType() const override
Definition
GrResourceCacheBench.cpp:40
Benchmark
Definition
Benchmark.h:36
Benchmark::Backend
Backend
Definition
Benchmark.h:44
Benchmark::Backend::kNonRendering
@ kNonRendering
Benchmark::Benchmark
Benchmark()
Definition
Benchmark.cpp:16
GrDirectContextPriv::getGpu
GrGpu * getGpu()
Definition
GrDirectContextPriv.h:105
GrDirectContextPriv::getResourceCache
GrResourceCache * getResourceCache()
Definition
GrDirectContextPriv.h:103
GrDirectContext::setResourceCacheLimits
void setResourceCacheLimits(int maxResources, size_t maxResourceBytes)
Definition
GrDirectContext.cpp:335
GrDirectContext::MakeMock
static sk_sp< GrDirectContext > MakeMock(const GrMockOptions *, const GrContextOptions &)
Definition
GrDirectContext.cpp:1169
GrDirectContext::priv
GrDirectContextPriv priv()
Definition
GrDirectContextPriv.h:186
GrGpuResource::ResourcePriv::setUniqueKey
void setUniqueKey(const skgpu::UniqueKey &key)
Definition
GrGpuResourcePriv.h:25
GrGpuResource
Definition
GrGpuResource.h:126
GrGpuResource::registerWithCache
void registerWithCache(skgpu::Budgeted)
Definition
GrGpuResource.cpp:32
GrGpuResource::resourcePriv
ResourcePriv resourcePriv()
Definition
GrGpuResourcePriv.h:91
GrGpu
Definition
GrGpu.h:62
GrIORef::unref
void unref() const
Definition
GrGpuResource.h:62
GrResourceCacheBenchAdd
Definition
GrResourceCacheBench.cpp:54
GrResourceCacheBenchAdd::isSuitableFor
bool isSuitableFor(Backend backend) override
Definition
GrResourceCacheBench.cpp:64
GrResourceCacheBenchAdd::onGetName
const char * onGetName() override
Definition
GrResourceCacheBench.cpp:68
GrResourceCacheBenchAdd::onDraw
void onDraw(int loops, SkCanvas *canvas) override
Definition
GrResourceCacheBench.cpp:72
GrResourceCacheBenchAdd::GrResourceCacheBenchAdd
GrResourceCacheBenchAdd(int keyData32Count)
Definition
GrResourceCacheBench.cpp:56
GrResourceCacheBenchFind
Definition
GrResourceCacheBench.cpp:100
GrResourceCacheBenchFind::onGetName
const char * onGetName() override
Definition
GrResourceCacheBench.cpp:114
GrResourceCacheBenchFind::GrResourceCacheBenchFind
GrResourceCacheBenchFind(int keyData32Count)
Definition
GrResourceCacheBench.cpp:102
GrResourceCacheBenchFind::onDelayedSetup
void onDelayedSetup() override
Definition
GrResourceCacheBench.cpp:118
GrResourceCacheBenchFind::isSuitableFor
bool isSuitableFor(Backend backend) override
Definition
GrResourceCacheBench.cpp:110
GrResourceCacheBenchFind::onDraw
void onDraw(int loops, SkCanvas *canvas) override
Definition
GrResourceCacheBench.cpp:137
GrResourceCache
Definition
GrResourceCache.h:53
SkCanvas
Definition
SkCanvas.h:106
SkString
Definition
SkString.h:118
SkString::c_str
const char * c_str() const
Definition
SkString.h:133
SkString::appendf
void void void appendf(const char format[],...) SK_PRINTF_LIKE(2
Definition
SkString.cpp:550
sk_sp
Definition
SkRefCnt.h:220
skgpu::UniqueKey::Builder
Definition
ResourceKey.h:280
skgpu::UniqueKey
Definition
ResourceKey.h:241
skgpu::UniqueKey::GenerateDomain
static Domain GenerateDomain()
Definition
ResourceKey.cpp:27
skgpu::UniqueKey::Domain
uint32_t Domain
Definition
ResourceKey.h:243
key
int key
Definition
keyboard_key_handler_unittests.cc:114
skgpu::Budgeted::kYes
@ kYes
Generated on Fri Apr 26 2024 06:15:25 for Flutter Engine by
1.9.8