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

Commit fb44e5fa authored by Jorim Jaggi's avatar Jorim Jaggi Committed by Android (Google) Code Review
Browse files

Merge "Change hwui jank detection to use deadline & gpu completion (2/2)" into sc-dev

parents ac95b626 c0086af0
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -152,6 +152,7 @@ bool DisplayEventDispatcher::processPendingEvents(nsecs_t* outTimestamp,
                    *outCount = ev.vsync.count;
                    *outCount = ev.vsync.count;
                    outVsyncEventData->id = ev.vsync.vsyncId;
                    outVsyncEventData->id = ev.vsync.vsyncId;
                    outVsyncEventData->deadlineTimestamp = ev.vsync.deadlineTimestamp;
                    outVsyncEventData->deadlineTimestamp = ev.vsync.deadlineTimestamp;
                    outVsyncEventData->frameInterval = ev.vsync.frameInterval;
                    break;
                    break;
                case DisplayEventReceiver::DISPLAY_EVENT_HOTPLUG:
                case DisplayEventReceiver::DISPLAY_EVENT_HOTPLUG:
                    dispatchHotplug(ev.header.timestamp, ev.header.displayId, ev.hotplug.connected);
                    dispatchHotplug(ev.header.timestamp, ev.header.displayId, ev.hotplug.connected);
+3 −0
Original line number Original line Diff line number Diff line
@@ -30,6 +30,9 @@ struct VsyncEventData {
    // The deadline in CLOCK_MONOTONIC that the app needs to complete its
    // The deadline in CLOCK_MONOTONIC that the app needs to complete its
    // frame by (both on the CPU and the GPU)
    // frame by (both on the CPU and the GPU)
    int64_t deadlineTimestamp = std::numeric_limits<int64_t>::max();
    int64_t deadlineTimestamp = std::numeric_limits<int64_t>::max();

    // The current frame interval in ns when this frame was scheduled.
    int64_t frameInterval = 0;
};
};


class DisplayEventDispatcher : public LooperCallback {
class DisplayEventDispatcher : public LooperCallback {
+1 −0
Original line number Original line Diff line number Diff line
@@ -75,6 +75,7 @@ public:
            uint32_t count;
            uint32_t count;
            nsecs_t expectedVSyncTimestamp __attribute__((aligned(8)));
            nsecs_t expectedVSyncTimestamp __attribute__((aligned(8)));
            nsecs_t deadlineTimestamp __attribute__((aligned(8)));
            nsecs_t deadlineTimestamp __attribute__((aligned(8)));
            nsecs_t frameInterval __attribute__((aligned(8)));
            int64_t vsyncId;
            int64_t vsyncId;
        };
        };


+2 −1
Original line number Original line Diff line number Diff line
@@ -34,7 +34,8 @@ TEST(DisplayEventStructLayoutTest, TestEventAlignment) {
    CHECK_OFFSET(DisplayEventReceiver::Event::VSync, count, 0);
    CHECK_OFFSET(DisplayEventReceiver::Event::VSync, count, 0);
    CHECK_OFFSET(DisplayEventReceiver::Event::VSync, expectedVSyncTimestamp, 8);
    CHECK_OFFSET(DisplayEventReceiver::Event::VSync, expectedVSyncTimestamp, 8);
    CHECK_OFFSET(DisplayEventReceiver::Event::VSync, deadlineTimestamp, 16);
    CHECK_OFFSET(DisplayEventReceiver::Event::VSync, deadlineTimestamp, 16);
    CHECK_OFFSET(DisplayEventReceiver::Event::VSync, vsyncId, 24);
    CHECK_OFFSET(DisplayEventReceiver::Event::VSync, frameInterval, 24);
    CHECK_OFFSET(DisplayEventReceiver::Event::VSync, vsyncId, 32);


    CHECK_OFFSET(DisplayEventReceiver::Event::Hotplug, connected, 0);
    CHECK_OFFSET(DisplayEventReceiver::Event::Hotplug, connected, 0);


+9 −1
Original line number Original line Diff line number Diff line
@@ -130,7 +130,7 @@ public:
    virtual ~Choreographer() override EXCLUDES(gChoreographers.lock);
    virtual ~Choreographer() override EXCLUDES(gChoreographers.lock);
    int64_t getVsyncId() const;
    int64_t getVsyncId() const;
    int64_t getFrameDeadline() const;
    int64_t getFrameDeadline() const;

    int64_t getFrameInterval() const;


private:
private:
    Choreographer(const Choreographer&) = delete;
    Choreographer(const Choreographer&) = delete;
@@ -418,6 +418,10 @@ int64_t Choreographer::getFrameDeadline() const {
    return mLastVsyncEventData.deadlineTimestamp;
    return mLastVsyncEventData.deadlineTimestamp;
}
}


int64_t Choreographer::getFrameInterval() const {
    return mLastVsyncEventData.frameInterval;
}

} // namespace android
} // namespace android
using namespace android;
using namespace android;


@@ -501,6 +505,10 @@ int64_t AChoreographer_getFrameDeadline(const AChoreographer* choreographer) {
    return AChoreographer_to_Choreographer(choreographer)->getFrameDeadline();
    return AChoreographer_to_Choreographer(choreographer)->getFrameDeadline();
}
}


int64_t AChoreographer_getFrameInterval(const AChoreographer* choreographer) {
    return AChoreographer_to_Choreographer(choreographer)->getFrameInterval();
}

} // namespace android
} // namespace android


/* Glue for the NDK interface */
/* Glue for the NDK interface */
Loading