Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
third_party
skia
src
gpu
RefCntedCallback.h
Go to the documentation of this file.
1
/*
2
* Copyright 2022 Google LLC
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
#ifndef skgpu_RefCntedCallback_DEFINED
9
#define skgpu_RefCntedCallback_DEFINED
10
11
#include "
include/core/SkRefCnt.h
"
12
#include "
include/gpu/GpuTypes.h
"
13
14
namespace
skgpu
{
15
/**
16
* Ref-counted object that calls a callback from its destructor.
17
*/
18
class
RefCntedCallback
:
public
SkNVRefCnt
<RefCntedCallback> {
19
public
:
20
using
Context
=
void
*;
21
using
Callback
= void (*)(
Context
);
22
using
ResultCallback
= void (*)(
Context
,
CallbackResult
);
23
24
static
sk_sp<RefCntedCallback>
Make
(
Callback
proc,
Context
ctx) {
25
if
(!proc) {
26
return
nullptr
;
27
}
28
return
sk_sp<RefCntedCallback>
(
new
RefCntedCallback
(proc, ctx));
29
}
30
31
static
sk_sp<RefCntedCallback>
Make
(
ResultCallback
proc,
Context
ctx) {
32
if
(!proc) {
33
return
nullptr
;
34
}
35
return
sk_sp<RefCntedCallback>
(
new
RefCntedCallback
(proc, ctx));
36
}
37
38
~RefCntedCallback
() {
39
if
(fReleaseProc) {
40
SkASSERT
(!fResultReleaseProc);
41
fReleaseProc(fReleaseCtx);
42
}
else
{
43
SkASSERT
(fResultReleaseProc);
44
fResultReleaseProc(fReleaseCtx, fResult);
45
}
46
}
47
48
Context
context
()
const
{
return
fReleaseCtx; }
49
50
void
setFailureResult
() {
51
SkASSERT
(fResultReleaseProc);
52
// Shouldn't really be calling this multiple times.
53
SkASSERT
(fResult ==
CallbackResult::kSuccess
);
54
fResult =
CallbackResult::kFailed
;
55
}
56
57
private
:
58
RefCntedCallback
(
Callback
proc,
Context
ctx) : fReleaseProc(proc), fReleaseCtx(ctx) {}
59
RefCntedCallback(
ResultCallback
proc,
Context
ctx)
60
: fResultReleaseProc(proc), fReleaseCtx(ctx) {}
61
RefCntedCallback(
const
RefCntedCallback&) =
delete
;
62
RefCntedCallback(RefCntedCallback&&) =
delete
;
63
RefCntedCallback& operator=(
const
RefCntedCallback&) =
delete
;
64
RefCntedCallback& operator=(RefCntedCallback&&) =
delete
;
65
66
Callback
fReleaseProc =
nullptr
;
67
ResultCallback
fResultReleaseProc =
nullptr
;
68
Context
fReleaseCtx;
69
CallbackResult
fResult =
CallbackResult::kSuccess
;
70
};
71
72
}
// namespace skgpu
73
74
#endif
// skgpu_RefCntedCallback_DEFINED
75
GpuTypes.h
SkASSERT
#define SkASSERT(cond)
Definition
SkAssert.h:116
SkRefCnt.h
SkNVRefCnt
Definition
SkRefCnt.h:160
sk_sp
Definition
SkRefCnt.h:220
skgpu::RefCntedCallback
Definition
RefCntedCallback.h:18
skgpu::RefCntedCallback::ResultCallback
void(*)(Context, CallbackResult) ResultCallback
Definition
RefCntedCallback.h:22
skgpu::RefCntedCallback::setFailureResult
void setFailureResult()
Definition
RefCntedCallback.h:50
skgpu::RefCntedCallback::context
Context context() const
Definition
RefCntedCallback.h:48
skgpu::RefCntedCallback::Make
static sk_sp< RefCntedCallback > Make(Callback proc, Context ctx)
Definition
RefCntedCallback.h:24
skgpu::RefCntedCallback::Make
static sk_sp< RefCntedCallback > Make(ResultCallback proc, Context ctx)
Definition
RefCntedCallback.h:31
skgpu::RefCntedCallback::Callback
void(*)(Context) Callback
Definition
RefCntedCallback.h:21
skgpu::RefCntedCallback::Context
void * Context
Definition
RefCntedCallback.h:20
skgpu::RefCntedCallback::~RefCntedCallback
~RefCntedCallback()
Definition
RefCntedCallback.h:38
skgpu
Definition
GpuTools.h:21
skgpu::CallbackResult
CallbackResult
Definition
GpuTypes.h:45
skgpu::CallbackResult::kSuccess
@ kSuccess
skgpu::CallbackResult::kFailed
@ kFailed
Context
Definition
SerialProcsTest.cpp:126
Generated on Fri Apr 26 2024 06:17:21 for Flutter Engine by
1.9.8