// Copyright 2017 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef GPU_COMMAND_BUFFER_COMMON_DISCARDABLE_HANDLE_H_ #define GPU_COMMAND_BUFFER_COMMON_DISCARDABLE_HANDLE_H_ #include "base/memory/ref_counted.h" #include "base/types/id_type.h" #include "gpu/gpu_export.h" namespace gpu { class Buffer; struct SerializableSkiaHandle { … }; // DiscardableHandleBase is the base class for the discardable handle // implementation. In order to facilitate transfering handles across the // command buffer, DiscardableHandleBase is backed by a gpu::Buffer and an // offset into that buffer. It uses a single uint32_t of data at the given // offset. // // DiscardableHandleBase is never used directly, but is instead modified by the // Client/ServiceDiscardableHandle subclasses. These subclasses implement the // Lock/Unlock/Delete functionality, making it explicit which operations occur // in which process. // // Via these subclasses, a discardable handle can be transitioned between one // of three states: // ╔════════════╗ ╔════════════╗ ╔═══════════╗ // ║ Locked ║ ──────> ║ Unlocked ║ ──────> ║ Deleted ║ // ╚════════════╝ ╚════════════╝ ╚═══════════╝ // └───────────<──────────┘ // // Note that a handle can be locked multiple times, and stores a lock-count. class GPU_EXPORT DiscardableHandleBase { … }; // ClientDiscardableHandle enables the instantiation of a new discardable // handle (via the constructor), and can Lock an existing handle. class GPU_EXPORT ClientDiscardableHandle : public DiscardableHandleBase { … }; // ServiceDiscardableHandle can wrap an existing handle (via the constructor), // and can unlock and delete this handle. class GPU_EXPORT ServiceDiscardableHandle : public DiscardableHandleBase { … }; } // namespace gpu #endif // GPU_COMMAND_BUFFER_COMMON_DISCARDABLE_HANDLE_H_