33 std::unique_ptr<Recorder> recorder = context->makeRecorder();
34 ProxyCache* proxyCache = recorder->priv().proxyCache();
52 proxyCache->forceProcessInvalidKeyMsgs();
60 std::unique_ptr<Recorder> recorder1 = context->makeRecorder();
61 ProxyCache* proxyCache1 = recorder1->priv().proxyCache();
62 std::unique_ptr<Recorder> recorder2 = context->makeRecorder();
63 ProxyCache* proxyCache2 = recorder2->priv().proxyCache();
85 proxyCache1->forceProcessInvalidKeyMsgs();
86 proxyCache2->forceProcessInvalidKeyMsgs();
96 std::unique_ptr<Recorder> recorder = context->makeRecorder();
97 ProxyCache* proxyCache = recorder->priv().proxyCache();
138struct ProxyCacheSetup {
152ProxyCacheSetup setup_test(
Context* context,
158 ProxyCacheSetup
setup;
162 if (!success1 || !success2) {
168 setup.fProxy1 = proxyCache->findOrCreateCachedProxy(recorder,
setup.fBitmap1, Mipmapped::kNo);
173 auto recording = recorder->
snap();
174 context->insertRecording({ recording.get() });
178 std::this_thread::sleep_for(std::chrono::milliseconds(2));
179 setup.fTimeBetweenProxyCreation = skgpu::StdSteadyClock::now();
180 std::this_thread::sleep_for(std::chrono::milliseconds(2));
182 setup.fProxy2 = proxyCache->findOrCreateCachedProxy(recorder,
setup.fBitmap2, Mipmapped::kNo);
187 auto recording = recorder->
snap();
188 context->insertRecording({ recording.get() });
192 std::this_thread::sleep_for(std::chrono::milliseconds(2));
193 setup.fTimeAfterAllProxyCreation = skgpu::StdSteadyClock::now();
194 std::this_thread::sleep_for(std::chrono::milliseconds(2));
208 std::unique_ptr<Recorder> recorder = context->makeRecorder();
209 ProxyCache* proxyCache = recorder->priv().proxyCache();
211 ProxyCacheSetup
setup = setup_test(context, testContext, recorder.get(), r);
213 if (!
setup.valid()) {
217 proxyCache->forceFreeUniquelyHeld();
220 setup.fProxy1.reset();
221 proxyCache->forceFreeUniquelyHeld();
224 setup.fProxy2.reset();
225 proxyCache->forceFreeUniquelyHeld();
236 std::unique_ptr<Recorder> recorder = context->makeRecorder();
237 ProxyCache* proxyCache = recorder->priv().proxyCache();
239 ProxyCacheSetup
setup = setup_test(context, testContext, recorder.get(), r);
241 if (!
setup.valid()) {
248 proxyCache->forcePurgeProxiesNotUsedSince(
setup.fTimeBetweenProxyCreation);
256 proxyCache->forcePurgeProxiesNotUsedSince(
setup.fTimeAfterAllProxyCreation);
270 std::unique_ptr<Recorder> recorder = context->makeRecorder();
271 ProxyCache* proxyCache = recorder->priv().proxyCache();
273 ProxyCacheSetup
setup = setup_test(context, testContext, recorder.get(), r);
275 if (!
setup.valid()) {
287 std::this_thread::sleep_for(std::chrono::milliseconds(2));
288 auto timeAfterProxy1Update = skgpu::StdSteadyClock::now();
290 proxyCache->forcePurgeProxiesNotUsedSince(
setup.fTimeBetweenProxyCreation);
295 proxyCache->forcePurgeProxiesNotUsedSince(
setup.fTimeAfterAllProxyCreation);
300 test = proxyCache->find(
setup.fBitmap2, Mipmapped::kNo);
303 proxyCache->forcePurgeProxiesNotUsedSince(timeAfterProxy1Update);
316 std::unique_ptr<Recorder> recorder = context->makeRecorder();
317 ProxyCache* proxyCache = recorder->priv().proxyCache();
319 ProxyCacheSetup
setup = setup_test(context, testContext, recorder.get(), r);
321 if (!
setup.valid()) {
328 proxyCache->forcePurgeProxiesNotUsedSince(
setup.fTimeAfterAllProxyCreation);
341 std::unique_ptr<Recorder> recorder = context->makeRecorder();
342 ResourceCache* resourceCache = recorder->priv().resourceCache();
343 ProxyCache* proxyCache = recorder->priv().proxyCache();
345 resourceCache->setMaxBudget(0);
347 ProxyCacheSetup
setup = setup_test(context, testContext, recorder.get(), r);
349 if (!
setup.valid()) {
353 resourceCache->forcePurgeAsNeeded();
357 setup.fProxy1.reset();
358 proxyCache->forceProcessInvalidKeyMsgs();
365 resourceCache->forcePurgeAsNeeded();
368 test = proxyCache->find(
setup.fBitmap1, Mipmapped::kNo);
371 setup.fProxy2.reset();
372 proxyCache->forceProcessInvalidKeyMsgs();
375 test = proxyCache->find(
setup.fBitmap2, Mipmapped::kNo);
379 resourceCache->forcePurgeAsNeeded();
392 std::unique_ptr<Recorder> recorder = context->makeRecorder();
393 ResourceCache* resourceCache = recorder->priv().resourceCache();
394 ProxyCache* proxyCache = recorder->priv().proxyCache();
396 ProxyCacheSetup
setup = setup_test(context, testContext, recorder.get(), r);
398 if (!
setup.valid()) {
405 if (!
setup.fProxy1->texture() || !
setup.fProxy2->texture()) {
410 resourceCache->setMaxBudget(0);
411 resourceCache->setMaxBudget(256 * (1 << 20));
416 if (context->priv().caps()->bufferMapsAreAsync()) {
423 setup.fProxy2->texture()->refCommandBuffer();
427 setup.fProxy1.reset();
428 setup.fProxy2.reset();
431 auto timeAfterProxyCreation = skgpu::StdSteadyClock::now();
447 resourceCache->forceProcessReturnedResources();
sk_sp< TextureProxy > fProxy2
skgpu::StdSteadyClock::time_point fTimeAfterAllProxyCreation
skgpu::StdSteadyClock::time_point fTimeBetweenProxyCreation
sk_sp< TextureProxy > fProxy1
constexpr SkColor SK_ColorBLACK
#define DEF_GRAPHITE_TEST_FOR_ALL_CONTEXTS(name, reporter, graphite_ctx, ctsEnforcement)
#define DEF_CONDITIONAL_GRAPHITE_TEST_FOR_ALL_CONTEXTS(name, reporter, graphite_ctx, test_ctx, cond, ctsEnforcement)
#define REPORTER_ASSERT(r, cond,...)
sk_sp< TextureProxy > findOrCreateCachedProxy(Recorder *, const SkBitmap &, Mipmapped)
ProxyCache * proxyCache()
std::unique_ptr< Recording > snap()
void purgeResourcesNotUsedSince(StdSteadyClock::time_point purgeTime)
int getResourceCount() const
void unrefCommandBuffer() const
void syncedSubmit(skgpu::graphite::Context *)