/* * Copyright 2017 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "include/core/SkPromiseImageTexture.h" #include "src/core/SkMessageBus.h" #if SK_SUPPORT_GPU std::atomic SkPromiseImageTexture::gUniqueID{1}; SkPromiseImageTexture::SkPromiseImageTexture(const GrBackendTexture& backendTexture) { SkASSERT(backendTexture.isValid()); fBackendTexture = backendTexture; fUniqueID = gUniqueID++; } SkPromiseImageTexture::~SkPromiseImageTexture() { for (const auto& msg : fMessages) { SkMessageBus::Post(msg); } } void SkPromiseImageTexture::addKeyToInvalidate(uint32_t contextID, const GrUniqueKey& key) { SkASSERT(contextID != SK_InvalidUniqueID); SkASSERT(key.isValid()); for (const auto& msg : fMessages) { if (msg.contextID() == contextID && msg.key() == key) { return; } } fMessages.emplace_back(key, contextID); } #if GR_TEST_UTILS SkTArray SkPromiseImageTexture::testingOnly_uniqueKeysToInvalidate() const { SkTArray results; for (const auto& msg : fMessages) { results.push_back(msg.key()); } return results; } #endif #endif