154 {
156 if (!this->isOnGPUThread()) {
158 }
159 bool success = make_fuzz_t<bool>(fFuzz);
160 State prior = promiseImage.
fState.exchange(State::kTriedToFulfill, std::memory_order_relaxed);
161 if (prior != State::kInitial || promiseImage.
fTexture !=
nullptr) {
163 }
164 if (!success) {
165 return nullptr;
166 }
167
168
169 if (!fReusableTextures.empty() && make_fuzz_t<bool>(fFuzz)) {
170 promiseImage.
fTexture = std::move(fReusableTextures.front());
171 fReusableTextures.pop();
173 }
174
175 bool finishedBECreate = false;
176 auto markFinished = [](void* context) {
177 *(bool*)context = true;
178 };
179
185 skgpu::Mipmapped::kNo,
186 GrRenderable::kYes,
187 GrProtected::kNo,
188 markFinished,
189 &finishedBECreate,
190 "DDLFuzzer_FulFillPromiseImage");
192 while (!finishedBECreate) {
194 }
195
197
199}
#define SkASSERT_RELEASE(cond)
void checkAsyncWorkCompletion()
GrBackendTexture createBackendTexture(int width, int height, const GrBackendFormat &, skgpu::Mipmapped, GrRenderable, GrProtected=GrProtected::kNo, std::string_view label={})
static sk_sp< GrPromiseImageTexture > Make(const GrBackendTexture &backendTexture)
std::atomic< State > fState
sk_sp< GrPromiseImageTexture > fTexture
constexpr int32_t width() const
constexpr int32_t height() const