| // Copyright 2014 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_SURFACES_SURFACE_SEQUENCE_H_ |
| #define CC_SURFACES_SURFACE_SEQUENCE_H_ |
| |
| #include <stddef.h> |
| #include <stdint.h> |
| |
| #include <tuple> |
| |
| #include "base/hash.h" |
| #include "cc/surfaces/frame_sink_id.h" |
| |
| namespace cc { |
| |
| // A per-surface-namespace sequence number that's used to coordinate |
| // dependencies between frames. A sequence number may be satisfied once, and |
| // may be depended on once. |
| struct SurfaceSequence { |
| SurfaceSequence() : sequence(0u) {} |
| SurfaceSequence(const FrameSinkId& frame_sink_id, uint32_t sequence) |
| : frame_sink_id(frame_sink_id), sequence(sequence) {} |
| bool is_valid() const { return frame_sink_id.is_valid() && sequence > 0u; } |
| |
| FrameSinkId frame_sink_id; |
| uint32_t sequence; |
| }; |
| |
| inline bool operator==(const SurfaceSequence& a, const SurfaceSequence& b) { |
| return a.frame_sink_id == b.frame_sink_id && a.sequence == b.sequence; |
| } |
| |
| inline bool operator!=(const SurfaceSequence& a, const SurfaceSequence& b) { |
| return !(a == b); |
| } |
| |
| inline bool operator<(const SurfaceSequence& a, const SurfaceSequence& b) { |
| return std::tie(a.frame_sink_id, a.sequence) < |
| std::tie(b.frame_sink_id, b.sequence); |
| } |
| |
| struct SurfaceSequenceHash { |
| size_t operator()(SurfaceSequence key) const { |
| return base::HashInts(static_cast<uint64_t>(key.frame_sink_id.hash()), |
| key.sequence); |
| } |
| }; |
| |
| } // namespace cc |
| |
| #endif // CC_SURFACES_SURFACE_SEQUENCE_H_ |