| /* |
| * 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<uint32_t> SkPromiseImageTexture::gUniqueID{1}; |
| |
| SkPromiseImageTexture::SkPromiseImageTexture(const GrBackendTexture& backendTexture) { |
| SkASSERT(backendTexture.isValid()); |
| fBackendTexture = backendTexture; |
| fUniqueID = gUniqueID++; |
| } |
| |
| SkPromiseImageTexture::~SkPromiseImageTexture() { |
| for (const auto& msg : fMessages) { |
| SkMessageBus<GrUniqueKeyInvalidatedMessage>::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<GrUniqueKey> SkPromiseImageTexture::testingOnly_uniqueKeysToInvalidate() const { |
| SkTArray<GrUniqueKey> results; |
| for (const auto& msg : fMessages) { |
| results.push_back(msg.key()); |
| } |
| return results; |
| } |
| #endif |
| |
| #endif |