| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CC_PAINT_TRANSFER_CACHE_SERIALIZE_HELPER_H_ |
| #define CC_PAINT_TRANSFER_CACHE_SERIALIZE_HELPER_H_ |
| |
| #include <set> |
| #include <vector> |
| |
| #include "cc/paint/paint_export.h" |
| #include "cc/paint/transfer_cache_entry.h" |
| |
| namespace cc { |
| |
| class CC_PAINT_EXPORT TransferCacheSerializeHelper { |
| public: |
| TransferCacheSerializeHelper(); |
| virtual ~TransferCacheSerializeHelper(); |
| |
| bool LockEntry(TransferCacheEntryType type, uint32_t id); |
| // The PaintOpWriter passes the address where the transfer cache may inline |
| // this entry. The size returned is the memory used if the entry is inlined, |
| // or 0u if no data is inlined. |
| uint32_t CreateEntry(const ClientTransferCacheEntry& entry, char* memory); |
| void FlushEntries(); |
| |
| void AssertLocked(TransferCacheEntryType type, uint32_t id); |
| |
| protected: |
| using EntryKey = std::pair<TransferCacheEntryType, uint32_t>; |
| |
| virtual bool LockEntryInternal(const EntryKey& key) = 0; |
| virtual uint32_t CreateEntryInternal(const ClientTransferCacheEntry& entry, |
| char* memory) = 0; |
| virtual void FlushEntriesInternal(std::set<EntryKey> keys) = 0; |
| |
| private: |
| std::set<EntryKey> added_entries_; |
| }; |
| |
| } // namespace cc |
| |
| #endif // CC_PAINT_TRANSFER_CACHE_SERIALIZE_HELPER_H_ |