Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1703644b authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Trace PredictionState for Surface and Display Frames" into sc-dev

parents c3435c0e 78e58afb
Loading
Loading
Loading
Loading
+13 −0
Original line number Original line Diff line number Diff line
@@ -207,6 +207,17 @@ FrameTimelineEvent::PresentType toProto(FramePresentMetadata presentMetadata) {
    }
    }
}
}


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) {
int32_t jankTypeBitmaskToProto(int32_t jankType) {
    if (jankType == JankType::None) {
    if (jankType == JankType::None) {
        return FrameTimelineEvent::JANK_NONE;
        return FrameTimelineEvent::JANK_NONE;
@@ -628,6 +639,7 @@ void SurfaceFrame::traceActuals(int64_t displayFrameToken) const {
                                                         FrameReadyMetadata::OnTimeFinish);
                                                         FrameReadyMetadata::OnTimeFinish);
        actualSurfaceFrameStartEvent->set_gpu_composition(mGpuComposition);
        actualSurfaceFrameStartEvent->set_gpu_composition(mGpuComposition);
        actualSurfaceFrameStartEvent->set_jank_type(jankTypeBitmaskToProto(mJankType));
        actualSurfaceFrameStartEvent->set_jank_type(jankTypeBitmaskToProto(mJankType));
        actualSurfaceFrameStartEvent->set_prediction_type(toProto(mPredictionState));
    });
    });


    // Actual timeline end
    // Actual timeline end
@@ -968,6 +980,7 @@ void FrameTimeline::DisplayFrame::traceActuals(pid_t surfaceFlingerPid) const {
                                                         FrameReadyMetadata::OnTimeFinish);
                                                         FrameReadyMetadata::OnTimeFinish);
        actualDisplayFrameStartEvent->set_gpu_composition(mGpuComposition);
        actualDisplayFrameStartEvent->set_gpu_composition(mGpuComposition);
        actualDisplayFrameStartEvent->set_jank_type(jankTypeBitmaskToProto(mJankType));
        actualDisplayFrameStartEvent->set_jank_type(jankTypeBitmaskToProto(mJankType));
        actualDisplayFrameStartEvent->set_prediction_type(toProto(mPredictionState));
    });
    });


    // Actual timeline end
    // Actual timeline end
+19 −7
Original line number Original line Diff line number Diff line
@@ -40,6 +40,7 @@ using ProtoActualSurfaceFrameStart = perfetto::protos::FrameTimelineEvent_Actual
using ProtoFrameEnd = perfetto::protos::FrameTimelineEvent_FrameEnd;
using ProtoFrameEnd = perfetto::protos::FrameTimelineEvent_FrameEnd;
using ProtoPresentType = perfetto::protos::FrameTimelineEvent_PresentType;
using ProtoPresentType = perfetto::protos::FrameTimelineEvent_PresentType;
using ProtoJankType = perfetto::protos::FrameTimelineEvent_JankType;
using ProtoJankType = perfetto::protos::FrameTimelineEvent_JankType;
using ProtoPredictionType = perfetto::protos::FrameTimelineEvent_PredictionType;


namespace android::frametimeline {
namespace android::frametimeline {


@@ -717,7 +718,7 @@ ProtoExpectedDisplayFrameStart createProtoExpectedDisplayFrameStart(int64_t cook


ProtoActualDisplayFrameStart createProtoActualDisplayFrameStart(
ProtoActualDisplayFrameStart createProtoActualDisplayFrameStart(
        int64_t cookie, int64_t token, pid_t pid, ProtoPresentType presentType, bool onTimeFinish,
        int64_t cookie, int64_t token, pid_t pid, ProtoPresentType presentType, bool onTimeFinish,
        bool gpuComposition, ProtoJankType jankType) {
        bool gpuComposition, ProtoJankType jankType, ProtoPredictionType predictionType) {
    ProtoActualDisplayFrameStart proto;
    ProtoActualDisplayFrameStart proto;
    proto.set_cookie(cookie);
    proto.set_cookie(cookie);
    proto.set_token(token);
    proto.set_token(token);
@@ -726,6 +727,7 @@ ProtoActualDisplayFrameStart createProtoActualDisplayFrameStart(
    proto.set_on_time_finish(onTimeFinish);
    proto.set_on_time_finish(onTimeFinish);
    proto.set_gpu_composition(gpuComposition);
    proto.set_gpu_composition(gpuComposition);
    proto.set_jank_type(jankType);
    proto.set_jank_type(jankType);
    proto.set_prediction_type(predictionType);
    return proto;
    return proto;
}
}


@@ -745,7 +747,7 @@ ProtoExpectedSurfaceFrameStart createProtoExpectedSurfaceFrameStart(int64_t cook
ProtoActualSurfaceFrameStart createProtoActualSurfaceFrameStart(
ProtoActualSurfaceFrameStart createProtoActualSurfaceFrameStart(
        int64_t cookie, int64_t token, int64_t displayFrameToken, pid_t pid, std::string layerName,
        int64_t cookie, int64_t token, int64_t displayFrameToken, pid_t pid, std::string layerName,
        ProtoPresentType presentType, bool onTimeFinish, bool gpuComposition,
        ProtoPresentType presentType, bool onTimeFinish, bool gpuComposition,
        ProtoJankType jankType) {
        ProtoJankType jankType, ProtoPredictionType predictionType) {
    ProtoActualSurfaceFrameStart proto;
    ProtoActualSurfaceFrameStart proto;
    proto.set_cookie(cookie);
    proto.set_cookie(cookie);
    proto.set_token(token);
    proto.set_token(token);
@@ -756,6 +758,7 @@ ProtoActualSurfaceFrameStart createProtoActualSurfaceFrameStart(
    proto.set_on_time_finish(onTimeFinish);
    proto.set_on_time_finish(onTimeFinish);
    proto.set_gpu_composition(gpuComposition);
    proto.set_gpu_composition(gpuComposition);
    proto.set_jank_type(jankType);
    proto.set_jank_type(jankType);
    proto.set_prediction_type(predictionType);
    return proto;
    return proto;
}
}


@@ -796,6 +799,8 @@ void validateTraceEvent(const ProtoActualDisplayFrameStart& received,
    EXPECT_EQ(received.gpu_composition(), source.gpu_composition());
    EXPECT_EQ(received.gpu_composition(), source.gpu_composition());
    ASSERT_TRUE(received.has_jank_type());
    ASSERT_TRUE(received.has_jank_type());
    EXPECT_EQ(received.jank_type(), source.jank_type());
    EXPECT_EQ(received.jank_type(), source.jank_type());
    ASSERT_TRUE(received.has_prediction_type());
    EXPECT_EQ(received.prediction_type(), source.prediction_type());
}
}


void validateTraceEvent(const ProtoExpectedSurfaceFrameStart& received,
void validateTraceEvent(const ProtoExpectedSurfaceFrameStart& received,
@@ -841,6 +846,8 @@ void validateTraceEvent(const ProtoActualSurfaceFrameStart& received,
    EXPECT_EQ(received.gpu_composition(), source.gpu_composition());
    EXPECT_EQ(received.gpu_composition(), source.gpu_composition());
    ASSERT_TRUE(received.has_jank_type());
    ASSERT_TRUE(received.has_jank_type());
    EXPECT_EQ(received.jank_type(), source.jank_type());
    EXPECT_EQ(received.jank_type(), source.jank_type());
    ASSERT_TRUE(received.has_prediction_type());
    EXPECT_EQ(received.prediction_type(), source.prediction_type());
}
}


void validateTraceEvent(const ProtoFrameEnd& received, const ProtoFrameEnd& source) {
void validateTraceEvent(const ProtoFrameEnd& received, const ProtoFrameEnd& source) {
@@ -869,7 +876,8 @@ TEST_F(FrameTimelineTest, traceDisplayFrame_emitsValidTracePacket) {
            createProtoActualDisplayFrameStart(traceCookie + 2, displayFrameToken1,
            createProtoActualDisplayFrameStart(traceCookie + 2, displayFrameToken1,
                                               kSurfaceFlingerPid,
                                               kSurfaceFlingerPid,
                                               FrameTimelineEvent::PRESENT_ON_TIME, true, false,
                                               FrameTimelineEvent::PRESENT_ON_TIME, true, false,
                                               FrameTimelineEvent::JANK_NONE);
                                               FrameTimelineEvent::JANK_NONE,
                                               FrameTimelineEvent::PREDICTION_VALID);
    auto protoActualDisplayFrameEnd = createProtoFrameEnd(traceCookie + 2);
    auto protoActualDisplayFrameEnd = createProtoFrameEnd(traceCookie + 2);


    addEmptyDisplayFrame();
    addEmptyDisplayFrame();
@@ -944,7 +952,8 @@ TEST_F(FrameTimelineTest, traceDisplayFrame_predictionExpiredDoesNotTraceExpecte
            createProtoActualDisplayFrameStart(traceCookie + 1, displayFrameToken1,
            createProtoActualDisplayFrameStart(traceCookie + 1, displayFrameToken1,
                                               kSurfaceFlingerPid,
                                               kSurfaceFlingerPid,
                                               FrameTimelineEvent::PRESENT_UNSPECIFIED, false,
                                               FrameTimelineEvent::PRESENT_UNSPECIFIED, false,
                                               false, FrameTimelineEvent::JANK_UNKNOWN);
                                               false, FrameTimelineEvent::JANK_UNKNOWN,
                                               FrameTimelineEvent::PREDICTION_EXPIRED);
    auto protoActualDisplayFrameEnd = createProtoFrameEnd(traceCookie + 1);
    auto protoActualDisplayFrameEnd = createProtoFrameEnd(traceCookie + 1);


    addEmptyDisplayFrame();
    addEmptyDisplayFrame();
@@ -1014,7 +1023,8 @@ TEST_F(FrameTimelineTest, traceSurfaceFrame_emitsValidTracePacket) {
            createProtoActualSurfaceFrameStart(traceCookie + 2, surfaceFrameToken,
            createProtoActualSurfaceFrameStart(traceCookie + 2, surfaceFrameToken,
                                               displayFrameToken1, sPidOne, sLayerNameOne,
                                               displayFrameToken1, sPidOne, sLayerNameOne,
                                               FrameTimelineEvent::PRESENT_DROPPED, false, false,
                                               FrameTimelineEvent::PRESENT_DROPPED, false, false,
                                               FrameTimelineEvent::JANK_NONE);
                                               FrameTimelineEvent::JANK_NONE,
                                               FrameTimelineEvent::PREDICTION_VALID);
    auto protoDroppedSurfaceFrameActualEnd = createProtoFrameEnd(traceCookie + 2);
    auto protoDroppedSurfaceFrameActualEnd = createProtoFrameEnd(traceCookie + 2);


    auto protoPresentedSurfaceFrameExpectedStart =
    auto protoPresentedSurfaceFrameExpectedStart =
@@ -1025,7 +1035,8 @@ TEST_F(FrameTimelineTest, traceSurfaceFrame_emitsValidTracePacket) {
            createProtoActualSurfaceFrameStart(traceCookie + 4, surfaceFrameToken,
            createProtoActualSurfaceFrameStart(traceCookie + 4, surfaceFrameToken,
                                               displayFrameToken1, sPidOne, sLayerNameOne,
                                               displayFrameToken1, sPidOne, sLayerNameOne,
                                               FrameTimelineEvent::PRESENT_ON_TIME, true, false,
                                               FrameTimelineEvent::PRESENT_ON_TIME, true, false,
                                               FrameTimelineEvent::JANK_NONE);
                                               FrameTimelineEvent::JANK_NONE,
                                               FrameTimelineEvent::PREDICTION_VALID);
    auto protoPresentedSurfaceFrameActualEnd = createProtoFrameEnd(traceCookie + 4);
    auto protoPresentedSurfaceFrameActualEnd = createProtoFrameEnd(traceCookie + 4);


    // Set up the display frame
    // Set up the display frame
@@ -1167,7 +1178,8 @@ TEST_F(FrameTimelineTest, traceSurfaceFrame_predictionExpiredDoesNotTraceExpecte
            createProtoActualSurfaceFrameStart(traceCookie + 1, surfaceFrameToken,
            createProtoActualSurfaceFrameStart(traceCookie + 1, surfaceFrameToken,
                                               displayFrameToken, sPidOne, sLayerNameOne,
                                               displayFrameToken, sPidOne, sLayerNameOne,
                                               FrameTimelineEvent::PRESENT_UNSPECIFIED, false,
                                               FrameTimelineEvent::PRESENT_UNSPECIFIED, false,
                                               false, FrameTimelineEvent::JANK_UNKNOWN);
                                               false, FrameTimelineEvent::JANK_UNKNOWN,
                                               FrameTimelineEvent::PREDICTION_EXPIRED);
    auto protoActualSurfaceFrameEnd = createProtoFrameEnd(traceCookie + 1);
    auto protoActualSurfaceFrameEnd = createProtoFrameEnd(traceCookie + 1);


    // Set up the display frame
    // Set up the display frame