| // Copyright 2018 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_LAYERS_DEADLINE_POLICY_H_ |
| #define CC_LAYERS_DEADLINE_POLICY_H_ |
| |
| #include <cstdint> |
| |
| #include "base/logging.h" |
| #include "base/macros.h" |
| #include "base/optional.h" |
| #include "cc/cc_export.h" |
| |
| namespace cc { |
| |
| class CC_EXPORT DeadlinePolicy { |
| public: |
| enum Type { |
| kUseExistingDeadline, |
| kUseDefaultDeadline, |
| kUseSpecifiedDeadline, |
| kUseInfiniteDeadline |
| }; |
| |
| static DeadlinePolicy UseExistingDeadline(); |
| |
| static DeadlinePolicy UseDefaultDeadline(); |
| |
| static DeadlinePolicy UseSpecifiedDeadline(uint32_t deadline_in_frames); |
| |
| static DeadlinePolicy UseInfiniteDeadline(); |
| |
| DeadlinePolicy(const DeadlinePolicy& other); |
| |
| DeadlinePolicy& operator=(const DeadlinePolicy& other) = default; |
| |
| ~DeadlinePolicy() = default; |
| |
| bool use_existing_deadline() const { |
| return policy_type_ == DeadlinePolicy::kUseExistingDeadline; |
| } |
| |
| base::Optional<uint32_t> deadline_in_frames() const { |
| DCHECK(policy_type_ == Type::kUseDefaultDeadline || |
| policy_type_ == Type::kUseSpecifiedDeadline || |
| policy_type_ == Type::kUseInfiniteDeadline); |
| return deadline_in_frames_; |
| } |
| |
| Type policy_type() const { return policy_type_; } |
| |
| bool operator==(const DeadlinePolicy& other) const { |
| return other.policy_type_ == policy_type_ && |
| other.deadline_in_frames_ == deadline_in_frames_; |
| } |
| |
| bool operator!=(const DeadlinePolicy& other) const { |
| return !(*this == other); |
| } |
| |
| private: |
| explicit DeadlinePolicy( |
| Type policy_type, |
| base::Optional<uint32_t> deadline_in_frames = base::nullopt); |
| |
| Type policy_type_; |
| base::Optional<uint32_t> deadline_in_frames_; |
| }; |
| |
| } // namespace cc |
| |
| #endif // CC_LAYERS_DEADLINE_POLICY_H_ |