transfer_cache_serialize_helper.cc 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // Copyright 2017 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "cc/paint/transfer_cache_serialize_helper.h"
  5. #include <utility>
  6. #include "base/check_op.h"
  7. namespace cc {
  8. TransferCacheSerializeHelper::TransferCacheSerializeHelper() = default;
  9. TransferCacheSerializeHelper::~TransferCacheSerializeHelper() = default;
  10. bool TransferCacheSerializeHelper::LockEntry(TransferCacheEntryType type,
  11. uint32_t id) {
  12. EntryKey key(type, id);
  13. // Entry already locked, so we don't need to process it.
  14. if (added_entries_.count(key) != 0)
  15. return true;
  16. bool success = LockEntryInternal(key);
  17. if (!success)
  18. return false;
  19. added_entries_.insert(key);
  20. return true;
  21. }
  22. uint32_t TransferCacheSerializeHelper::CreateEntry(
  23. const ClientTransferCacheEntry& entry,
  24. char* memory) {
  25. // We shouldn't be creating entries if they were already created or locked.
  26. EntryKey key(entry.Type(), entry.Id());
  27. DCHECK_EQ(added_entries_.count(key), 0u);
  28. added_entries_.insert(key);
  29. return CreateEntryInternal(entry, memory);
  30. }
  31. void TransferCacheSerializeHelper::FlushEntries() {
  32. FlushEntriesInternal(std::move(added_entries_));
  33. added_entries_.clear();
  34. }
  35. void TransferCacheSerializeHelper::AssertLocked(TransferCacheEntryType type,
  36. uint32_t id) {
  37. DCHECK_EQ(added_entries_.count(EntryKey(type, id)), 1u);
  38. }
  39. } // namespace cc