// 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 #include #include #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(key.frame_sink_id.hash()), key.sequence); } }; } // namespace cc #endif // CC_SURFACES_SURFACE_SEQUENCE_H_