1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
// 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 COMPONENTS_VIZ_COMMON_QUADS_FRAME_DEADLINE_H_
#define COMPONENTS_VIZ_COMMON_QUADS_FRAME_DEADLINE_H_
#include <optional>
#include <string>
#include "base/time/time.h"
#include "components/viz/common/frame_sinks/begin_frame_args.h"
#include "components/viz/common/viz_common_export.h"
namespace viz {
// FrameDeadline is a class that represents a CompositorFrame's deadline for
// activation. The deadline consists of three components: start time, deadline
// in frames, and frame interval. All three components are stored individually
// in this class in order to allow resolution of this deadline that incorporates
// a system default deadline in the Viz service. In particular, the computation
// to translate FrameDeadline into wall time is:
// if use system default lower bound deadline:
// start time + max(deadline in frames, default deadline) * frame interval
// else:
// start time + deadline in frames * frame interval
class VIZ_COMMON_EXPORT FrameDeadline {
public:
static FrameDeadline MakeZero();
FrameDeadline() = default;
FrameDeadline(base::TimeTicks frame_start_time,
uint32_t deadline_in_frames,
base::TimeDelta frame_interval,
bool use_default_lower_bound_deadline)
: frame_start_time_(frame_start_time),
deadline_in_frames_(deadline_in_frames),
frame_interval_(frame_interval),
use_default_lower_bound_deadline_(use_default_lower_bound_deadline) {}
FrameDeadline(const FrameDeadline& other) = default;
FrameDeadline& operator=(const FrameDeadline& other) = default;
// Converts this FrameDeadline object into a wall time given a system default
// deadline in frames.
base::TimeTicks ToWallTime(
std::optional<uint32_t> default_deadline_in_frames = std::nullopt) const;
friend bool operator==(const FrameDeadline&, const FrameDeadline&) = default;
base::TimeTicks frame_start_time() const { return frame_start_time_; }
uint32_t deadline_in_frames() const { return deadline_in_frames_; }
base::TimeDelta frame_interval() const { return frame_interval_; }
bool use_default_lower_bound_deadline() const {
return use_default_lower_bound_deadline_;
}
bool IsZero() const;
std::string ToString() const;
private:
base::TimeTicks frame_start_time_;
uint32_t deadline_in_frames_ = 0u;
base::TimeDelta frame_interval_ = BeginFrameArgs::DefaultInterval();
bool use_default_lower_bound_deadline_ = true;
};
VIZ_COMMON_EXPORT std::ostream& operator<<(std::ostream& out,
const FrameDeadline& frame_deadline);
} // namespace viz
#endif // COMPONENTS_VIZ_COMMON_QUADS_FRAME_DEADLINE_H_
|