Loading libs/gui/DisplayEventDispatcher.cpp +2 −19 Original line number Diff line number Diff line Loading @@ -126,7 +126,7 @@ int DisplayEventDispatcher::handleEvent(int, int events, void*) { ALOGV("dispatcher %p ~ Vsync pulse: timestamp=%" PRId64 ", displayId=%s, count=%d, vsyncId=%" PRId64, this, ns2ms(vsyncTimestamp), to_string(vsyncDisplayId).c_str(), vsyncCount, vsyncEventData.id); vsyncEventData.preferredVsyncId()); mWaitingForVsync = false; mLastVsyncCount = vsyncCount; dispatchVsync(vsyncTimestamp, vsyncDisplayId, vsyncCount, vsyncEventData); Loading @@ -146,18 +146,6 @@ int DisplayEventDispatcher::handleEvent(int, int events, void*) { return 1; // keep the callback } void DisplayEventDispatcher::populateFrameTimelines(const DisplayEventReceiver::Event& event, VsyncEventData* outVsyncEventData) const { for (size_t i = 0; i < VsyncEventData::kFrameTimelinesLength; i++) { DisplayEventReceiver::Event::VSync::FrameTimeline receiverTimeline = event.vsync.frameTimelines[i]; outVsyncEventData->frameTimelines[i] = VsyncEventData::FrameTimeline(receiverTimeline.vsyncId, receiverTimeline.deadlineTimestamp, receiverTimeline.expectedVSyncTimestamp); } } bool DisplayEventDispatcher::processPendingEvents(nsecs_t* outTimestamp, PhysicalDisplayId* outDisplayId, uint32_t* outCount, Loading @@ -178,12 +166,7 @@ bool DisplayEventDispatcher::processPendingEvents(nsecs_t* outTimestamp, *outTimestamp = ev.header.timestamp; *outDisplayId = ev.header.displayId; *outCount = ev.vsync.count; outVsyncEventData->id = ev.vsync.vsyncId; outVsyncEventData->deadlineTimestamp = ev.vsync.deadlineTimestamp; outVsyncEventData->frameInterval = ev.vsync.frameInterval; outVsyncEventData->preferredFrameTimelineIndex = ev.vsync.preferredFrameTimelineIndex; populateFrameTimelines(ev, outVsyncEventData); *outVsyncEventData = ev.vsync.vsyncData; break; case DisplayEventReceiver::DISPLAY_EVENT_HOTPLUG: dispatchHotplug(ev.header.timestamp, ev.header.displayId, ev.hotplug.connected); Loading libs/gui/DisplayEventReceiver.cpp +3 −4 Original line number Diff line number Diff line Loading @@ -85,15 +85,14 @@ status_t DisplayEventReceiver::requestNextVsync() { return mInitError.has_value() ? mInitError.value() : NO_INIT; } status_t DisplayEventReceiver::getLatestVsyncEventData(VsyncEventData* outVsyncEventData) const { status_t DisplayEventReceiver::getLatestVsyncEventData( ParcelableVsyncEventData* outVsyncEventData) const { if (mEventConnection != nullptr) { VsyncEventData vsyncEventData; auto status = mEventConnection->getLatestVsyncEventData(&vsyncEventData); auto status = mEventConnection->getLatestVsyncEventData(outVsyncEventData); if (!status.isOk()) { ALOGE("Failed to get latest vsync event data: %s", status.exceptionMessage().c_str()); return status.transactionError(); } *outVsyncEventData = vsyncEventData; return NO_ERROR; } return NO_INIT; Loading libs/gui/VsyncEventData.cpp +27 −33 Original line number Diff line number Diff line Loading @@ -23,52 +23,46 @@ namespace android::gui { status_t VsyncEventData::readFromParcel(const Parcel* parcel) { int64_t VsyncEventData::preferredVsyncId() const { return frameTimelines[preferredFrameTimelineIndex].vsyncId; } int64_t VsyncEventData::preferredDeadlineTimestamp() const { return frameTimelines[preferredFrameTimelineIndex].deadlineTimestamp; } int64_t VsyncEventData::preferredExpectedPresentationTime() const { return frameTimelines[preferredFrameTimelineIndex].expectedPresentationTime; } status_t ParcelableVsyncEventData::readFromParcel(const Parcel* parcel) { if (parcel == nullptr) { ALOGE("%s: Null parcel", __func__); return BAD_VALUE; } SAFE_PARCEL(parcel->readInt64, &id) SAFE_PARCEL(parcel->readInt64, &deadlineTimestamp); SAFE_PARCEL(parcel->readInt64, &frameInterval); SAFE_PARCEL(parcel->readInt64, &vsync.frameInterval); uint64_t uintPreferredFrameTimelineIndex; SAFE_PARCEL(parcel->readUint64, &uintPreferredFrameTimelineIndex); preferredFrameTimelineIndex = static_cast<size_t>(uintPreferredFrameTimelineIndex); vsync.preferredFrameTimelineIndex = static_cast<size_t>(uintPreferredFrameTimelineIndex); std::vector<FrameTimeline> timelines; SAFE_PARCEL(parcel->readParcelableVector, &timelines); std::copy_n(timelines.begin(), timelines.size(), frameTimelines.begin()); return OK; for (int i = 0; i < VsyncEventData::kFrameTimelinesLength; i++) { SAFE_PARCEL(parcel->readInt64, &vsync.frameTimelines[i].vsyncId); SAFE_PARCEL(parcel->readInt64, &vsync.frameTimelines[i].deadlineTimestamp); SAFE_PARCEL(parcel->readInt64, &vsync.frameTimelines[i].expectedPresentationTime); } status_t VsyncEventData::writeToParcel(Parcel* parcel) const { SAFE_PARCEL(parcel->writeInt64, id) SAFE_PARCEL(parcel->writeInt64, deadlineTimestamp); SAFE_PARCEL(parcel->writeInt64, frameInterval); SAFE_PARCEL(parcel->writeUint64, preferredFrameTimelineIndex); SAFE_PARCEL(parcel->writeParcelableVector, std::vector(frameTimelines.begin(), frameTimelines.end())); return OK; } status_t VsyncEventData::FrameTimeline::readFromParcel(const Parcel* parcel) { if (parcel == nullptr) { ALOGE("%s: Null parcel", __func__); return BAD_VALUE; } SAFE_PARCEL(parcel->readInt64, &id) SAFE_PARCEL(parcel->readInt64, &deadlineTimestamp); SAFE_PARCEL(parcel->readInt64, &expectedPresentTime); return OK; status_t ParcelableVsyncEventData::writeToParcel(Parcel* parcel) const { SAFE_PARCEL(parcel->writeInt64, vsync.frameInterval); SAFE_PARCEL(parcel->writeUint64, vsync.preferredFrameTimelineIndex); for (int i = 0; i < VsyncEventData::kFrameTimelinesLength; i++) { SAFE_PARCEL(parcel->writeInt64, vsync.frameTimelines[i].vsyncId); SAFE_PARCEL(parcel->writeInt64, vsync.frameTimelines[i].deadlineTimestamp); SAFE_PARCEL(parcel->writeInt64, vsync.frameTimelines[i].expectedPresentationTime); } status_t VsyncEventData::FrameTimeline::writeToParcel(Parcel* parcel) const { SAFE_PARCEL(parcel->writeInt64, id); SAFE_PARCEL(parcel->writeInt64, deadlineTimestamp); SAFE_PARCEL(parcel->writeInt64, expectedPresentTime); return OK; } Loading libs/gui/aidl/android/gui/IDisplayEventConnection.aidl +2 −2 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ package android.gui; import android.gui.BitTube; import android.gui.VsyncEventData; import android.gui.ParcelableVsyncEventData; /** @hide */ interface IDisplayEventConnection { Loading @@ -43,5 +43,5 @@ interface IDisplayEventConnection { /* * getLatestVsyncEventData() gets the latest vsync event data. */ VsyncEventData getLatestVsyncEventData(); ParcelableVsyncEventData getLatestVsyncEventData(); } libs/gui/aidl/android/gui/VsyncEventData.aidl→libs/gui/aidl/android/gui/ParcelableVsyncEventData.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -16,4 +16,4 @@ package android.gui; parcelable VsyncEventData cpp_header "gui/VsyncEventData.h"; parcelable ParcelableVsyncEventData cpp_header "gui/VsyncEventData.h"; Loading
libs/gui/DisplayEventDispatcher.cpp +2 −19 Original line number Diff line number Diff line Loading @@ -126,7 +126,7 @@ int DisplayEventDispatcher::handleEvent(int, int events, void*) { ALOGV("dispatcher %p ~ Vsync pulse: timestamp=%" PRId64 ", displayId=%s, count=%d, vsyncId=%" PRId64, this, ns2ms(vsyncTimestamp), to_string(vsyncDisplayId).c_str(), vsyncCount, vsyncEventData.id); vsyncEventData.preferredVsyncId()); mWaitingForVsync = false; mLastVsyncCount = vsyncCount; dispatchVsync(vsyncTimestamp, vsyncDisplayId, vsyncCount, vsyncEventData); Loading @@ -146,18 +146,6 @@ int DisplayEventDispatcher::handleEvent(int, int events, void*) { return 1; // keep the callback } void DisplayEventDispatcher::populateFrameTimelines(const DisplayEventReceiver::Event& event, VsyncEventData* outVsyncEventData) const { for (size_t i = 0; i < VsyncEventData::kFrameTimelinesLength; i++) { DisplayEventReceiver::Event::VSync::FrameTimeline receiverTimeline = event.vsync.frameTimelines[i]; outVsyncEventData->frameTimelines[i] = VsyncEventData::FrameTimeline(receiverTimeline.vsyncId, receiverTimeline.deadlineTimestamp, receiverTimeline.expectedVSyncTimestamp); } } bool DisplayEventDispatcher::processPendingEvents(nsecs_t* outTimestamp, PhysicalDisplayId* outDisplayId, uint32_t* outCount, Loading @@ -178,12 +166,7 @@ bool DisplayEventDispatcher::processPendingEvents(nsecs_t* outTimestamp, *outTimestamp = ev.header.timestamp; *outDisplayId = ev.header.displayId; *outCount = ev.vsync.count; outVsyncEventData->id = ev.vsync.vsyncId; outVsyncEventData->deadlineTimestamp = ev.vsync.deadlineTimestamp; outVsyncEventData->frameInterval = ev.vsync.frameInterval; outVsyncEventData->preferredFrameTimelineIndex = ev.vsync.preferredFrameTimelineIndex; populateFrameTimelines(ev, outVsyncEventData); *outVsyncEventData = ev.vsync.vsyncData; break; case DisplayEventReceiver::DISPLAY_EVENT_HOTPLUG: dispatchHotplug(ev.header.timestamp, ev.header.displayId, ev.hotplug.connected); Loading
libs/gui/DisplayEventReceiver.cpp +3 −4 Original line number Diff line number Diff line Loading @@ -85,15 +85,14 @@ status_t DisplayEventReceiver::requestNextVsync() { return mInitError.has_value() ? mInitError.value() : NO_INIT; } status_t DisplayEventReceiver::getLatestVsyncEventData(VsyncEventData* outVsyncEventData) const { status_t DisplayEventReceiver::getLatestVsyncEventData( ParcelableVsyncEventData* outVsyncEventData) const { if (mEventConnection != nullptr) { VsyncEventData vsyncEventData; auto status = mEventConnection->getLatestVsyncEventData(&vsyncEventData); auto status = mEventConnection->getLatestVsyncEventData(outVsyncEventData); if (!status.isOk()) { ALOGE("Failed to get latest vsync event data: %s", status.exceptionMessage().c_str()); return status.transactionError(); } *outVsyncEventData = vsyncEventData; return NO_ERROR; } return NO_INIT; Loading
libs/gui/VsyncEventData.cpp +27 −33 Original line number Diff line number Diff line Loading @@ -23,52 +23,46 @@ namespace android::gui { status_t VsyncEventData::readFromParcel(const Parcel* parcel) { int64_t VsyncEventData::preferredVsyncId() const { return frameTimelines[preferredFrameTimelineIndex].vsyncId; } int64_t VsyncEventData::preferredDeadlineTimestamp() const { return frameTimelines[preferredFrameTimelineIndex].deadlineTimestamp; } int64_t VsyncEventData::preferredExpectedPresentationTime() const { return frameTimelines[preferredFrameTimelineIndex].expectedPresentationTime; } status_t ParcelableVsyncEventData::readFromParcel(const Parcel* parcel) { if (parcel == nullptr) { ALOGE("%s: Null parcel", __func__); return BAD_VALUE; } SAFE_PARCEL(parcel->readInt64, &id) SAFE_PARCEL(parcel->readInt64, &deadlineTimestamp); SAFE_PARCEL(parcel->readInt64, &frameInterval); SAFE_PARCEL(parcel->readInt64, &vsync.frameInterval); uint64_t uintPreferredFrameTimelineIndex; SAFE_PARCEL(parcel->readUint64, &uintPreferredFrameTimelineIndex); preferredFrameTimelineIndex = static_cast<size_t>(uintPreferredFrameTimelineIndex); vsync.preferredFrameTimelineIndex = static_cast<size_t>(uintPreferredFrameTimelineIndex); std::vector<FrameTimeline> timelines; SAFE_PARCEL(parcel->readParcelableVector, &timelines); std::copy_n(timelines.begin(), timelines.size(), frameTimelines.begin()); return OK; for (int i = 0; i < VsyncEventData::kFrameTimelinesLength; i++) { SAFE_PARCEL(parcel->readInt64, &vsync.frameTimelines[i].vsyncId); SAFE_PARCEL(parcel->readInt64, &vsync.frameTimelines[i].deadlineTimestamp); SAFE_PARCEL(parcel->readInt64, &vsync.frameTimelines[i].expectedPresentationTime); } status_t VsyncEventData::writeToParcel(Parcel* parcel) const { SAFE_PARCEL(parcel->writeInt64, id) SAFE_PARCEL(parcel->writeInt64, deadlineTimestamp); SAFE_PARCEL(parcel->writeInt64, frameInterval); SAFE_PARCEL(parcel->writeUint64, preferredFrameTimelineIndex); SAFE_PARCEL(parcel->writeParcelableVector, std::vector(frameTimelines.begin(), frameTimelines.end())); return OK; } status_t VsyncEventData::FrameTimeline::readFromParcel(const Parcel* parcel) { if (parcel == nullptr) { ALOGE("%s: Null parcel", __func__); return BAD_VALUE; } SAFE_PARCEL(parcel->readInt64, &id) SAFE_PARCEL(parcel->readInt64, &deadlineTimestamp); SAFE_PARCEL(parcel->readInt64, &expectedPresentTime); return OK; status_t ParcelableVsyncEventData::writeToParcel(Parcel* parcel) const { SAFE_PARCEL(parcel->writeInt64, vsync.frameInterval); SAFE_PARCEL(parcel->writeUint64, vsync.preferredFrameTimelineIndex); for (int i = 0; i < VsyncEventData::kFrameTimelinesLength; i++) { SAFE_PARCEL(parcel->writeInt64, vsync.frameTimelines[i].vsyncId); SAFE_PARCEL(parcel->writeInt64, vsync.frameTimelines[i].deadlineTimestamp); SAFE_PARCEL(parcel->writeInt64, vsync.frameTimelines[i].expectedPresentationTime); } status_t VsyncEventData::FrameTimeline::writeToParcel(Parcel* parcel) const { SAFE_PARCEL(parcel->writeInt64, id); SAFE_PARCEL(parcel->writeInt64, deadlineTimestamp); SAFE_PARCEL(parcel->writeInt64, expectedPresentTime); return OK; } Loading
libs/gui/aidl/android/gui/IDisplayEventConnection.aidl +2 −2 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ package android.gui; import android.gui.BitTube; import android.gui.VsyncEventData; import android.gui.ParcelableVsyncEventData; /** @hide */ interface IDisplayEventConnection { Loading @@ -43,5 +43,5 @@ interface IDisplayEventConnection { /* * getLatestVsyncEventData() gets the latest vsync event data. */ VsyncEventData getLatestVsyncEventData(); ParcelableVsyncEventData getLatestVsyncEventData(); }
libs/gui/aidl/android/gui/VsyncEventData.aidl→libs/gui/aidl/android/gui/ParcelableVsyncEventData.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -16,4 +16,4 @@ package android.gui; parcelable VsyncEventData cpp_header "gui/VsyncEventData.h"; parcelable ParcelableVsyncEventData cpp_header "gui/VsyncEventData.h";