#ifndef CC_METRICS_FRAME_INFO_H_
#define CC_METRICS_FRAME_INFO_H_
#include "base/time/time.h"
#include "cc/cc_export.h"
namespace cc {
struct CC_EXPORT FrameInfo {
FrameInfo();
FrameInfo(const FrameInfo& other);
~FrameInfo();
enum class FrameFinalState {
kNoUpdateDesired,
kDropped,
kPresentedAll,
kPresentedPartialOldMain,
kPresentedPartialNewMain,
kPresentedPartialWithoutWaiting,
};
FrameFinalState final_state = FrameFinalState::kNoUpdateDesired;
FrameFinalState final_state_v4 = FrameFinalState::kNoUpdateDesired;
FrameFinalState final_state_raster_property =
FrameFinalState::kNoUpdateDesired;
FrameFinalState final_state_raster_scroll = FrameFinalState::kNoUpdateDesired;
enum class SmoothThread {
kSmoothNone,
kSmoothRaster,
kSmoothCompositor,
kSmoothMain,
kSmoothBoth
};
SmoothThread smooth_thread = SmoothThread::kSmoothNone;
SmoothThread smooth_thread_raster_property = SmoothThread::kSmoothNone;
enum class MainThreadResponse {
kIncluded,
kMissing,
};
MainThreadResponse main_thread_response = MainThreadResponse::kIncluded;
enum class SmoothEffectDrivingThread {
kMain = 0,
kCompositor = 1,
kRaster = 2,
kUnknown = 3,
kMaxValue = kUnknown,
};
SmoothEffectDrivingThread scroll_thread = SmoothEffectDrivingThread::kUnknown;
bool checkerboarded_needs_raster = false;
bool checkerboarded_needs_record = false;
bool did_raster_inducing_scroll = false;
base::TimeTicks termination_time;
uint64_t sequence_number = 0u;
bool IsDroppedAffectingSmoothness() const;
void MergeWith(const FrameInfo& info);
bool Validate() const;
bool WasSmoothCompositorUpdateDropped() const;
bool WasSmoothRasterPropertyUpdateDropped() const;
bool WasSmoothRasterScrollUpdateDropped() const;
bool WasSmoothMainUpdateDropped() const;
bool WasSmoothMainUpdateDroppedV4() const;
bool WasSmoothMainUpdateExpected() const;
bool IsScrollPrioritizeFrameDropped() const;
FrameFinalState GetFinalStateForThread(
SmoothEffectDrivingThread thread) const;
base::TimeTicks GetTerminationTimeForThread(
SmoothEffectDrivingThread thread) const;
private:
bool was_merged = false;
bool compositor_update_was_dropped = false;
bool raster_property_was_dropped = false;
bool raster_scroll_was_dropped = false;
bool main_update_was_dropped = false;
bool main_update_was_dropped_v4 = false;
FrameFinalState compositor_final_state = FrameFinalState::kNoUpdateDesired;
FrameFinalState main_final_state = FrameFinalState::kNoUpdateDesired;
base::TimeTicks compositor_termination_time;
base::TimeTicks main_termination_time;
};
}
#endif