Trace PredictionState for Surface and Display Frames
PredictionState can provide more details about the frame and can be
handy while looking at frames with missing predictions.
Bug: 181053470
Test: libsurfaceflinger_unittest
Change-Id: Ic24950f2e56a51ac7215b03cc30636ca0ebc8cf7
diff --git a/services/surfaceflinger/FrameTimeline/FrameTimeline.cpp b/services/surfaceflinger/FrameTimeline/FrameTimeline.cpp
index 7515872..03e38f3 100644
--- a/services/surfaceflinger/FrameTimeline/FrameTimeline.cpp
+++ b/services/surfaceflinger/FrameTimeline/FrameTimeline.cpp
@@ -207,6 +207,17 @@
}
}
+FrameTimelineEvent::PredictionType toProto(PredictionState predictionState) {
+ switch (predictionState) {
+ case PredictionState::Valid:
+ return FrameTimelineEvent::PREDICTION_VALID;
+ case PredictionState::Expired:
+ return FrameTimelineEvent::PREDICTION_EXPIRED;
+ case PredictionState::None:
+ return FrameTimelineEvent::PREDICTION_UNKNOWN;
+ }
+}
+
int32_t jankTypeBitmaskToProto(int32_t jankType) {
if (jankType == JankType::None) {
return FrameTimelineEvent::JANK_NONE;
@@ -628,6 +639,7 @@
FrameReadyMetadata::OnTimeFinish);
actualSurfaceFrameStartEvent->set_gpu_composition(mGpuComposition);
actualSurfaceFrameStartEvent->set_jank_type(jankTypeBitmaskToProto(mJankType));
+ actualSurfaceFrameStartEvent->set_prediction_type(toProto(mPredictionState));
});
// Actual timeline end
@@ -968,6 +980,7 @@
FrameReadyMetadata::OnTimeFinish);
actualDisplayFrameStartEvent->set_gpu_composition(mGpuComposition);
actualDisplayFrameStartEvent->set_jank_type(jankTypeBitmaskToProto(mJankType));
+ actualDisplayFrameStartEvent->set_prediction_type(toProto(mPredictionState));
});
// Actual timeline end