SkPromiseImageTexture.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /*
  2. * Copyright 2017 Google Inc.
  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. #include "include/core/SkPromiseImageTexture.h"
  8. #include "src/core/SkMessageBus.h"
  9. #if SK_SUPPORT_GPU
  10. std::atomic<uint32_t> SkPromiseImageTexture::gUniqueID{1};
  11. SkPromiseImageTexture::SkPromiseImageTexture(const GrBackendTexture& backendTexture) {
  12. SkASSERT(backendTexture.isValid());
  13. fBackendTexture = backendTexture;
  14. fUniqueID = gUniqueID++;
  15. }
  16. SkPromiseImageTexture::~SkPromiseImageTexture() {
  17. for (const auto& msg : fMessages) {
  18. SkMessageBus<GrUniqueKeyInvalidatedMessage>::Post(msg);
  19. }
  20. }
  21. void SkPromiseImageTexture::addKeyToInvalidate(uint32_t contextID, const GrUniqueKey& key) {
  22. SkASSERT(contextID != SK_InvalidUniqueID);
  23. SkASSERT(key.isValid());
  24. for (const auto& msg : fMessages) {
  25. if (msg.contextID() == contextID && msg.key() == key) {
  26. return;
  27. }
  28. }
  29. fMessages.emplace_back(key, contextID);
  30. }
  31. #if GR_TEST_UTILS
  32. SkTArray<GrUniqueKey> SkPromiseImageTexture::testingOnly_uniqueKeysToInvalidate() const {
  33. SkTArray<GrUniqueKey> results;
  34. for (const auto& msg : fMessages) {
  35. results.push_back(msg.key());
  36. }
  37. return results;
  38. }
  39. #endif
  40. #endif