Loading services/surfaceflinger/CompositionEngine/tests/MockHWComposer.h +1 −0 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ public: MOCK_METHOD1(disconnectDisplay, void(HalDisplayId)); MOCK_CONST_METHOD1(hasDeviceComposition, bool(const std::optional<DisplayId>&)); MOCK_CONST_METHOD1(getPresentFence, sp<Fence>(HalDisplayId)); MOCK_METHOD(nsecs_t, getPresentTimestamp, (PhysicalDisplayId), (const, override)); MOCK_CONST_METHOD2(getLayerReleaseFence, sp<Fence>(HalDisplayId, HWC2::Layer*)); MOCK_METHOD3(setOutputBuffer, status_t(HalVirtualDisplayId, const sp<Fence>&, const sp<GraphicBuffer>&)); Loading services/surfaceflinger/DisplayDevice.cpp +0 −10 Original line number Diff line number Diff line Loading @@ -238,16 +238,6 @@ nsecs_t DisplayDevice::getVsyncPeriodFromHWC() const { return refreshRateConfigs().getActiveModePtr()->getVsyncPeriod(); } nsecs_t DisplayDevice::getRefreshTimestamp() const { const nsecs_t now = systemTime(CLOCK_MONOTONIC); const auto vsyncPeriodNanos = getVsyncPeriodFromHWC(); return now - ((now - mLastHwVsync) % vsyncPeriodNanos); } void DisplayDevice::onVsync(nsecs_t timestamp) { mLastHwVsync = timestamp; } ui::Dataspace DisplayDevice::getCompositionDataSpace() const { return mCompositionDisplay->getState().dataspace; } Loading services/surfaceflinger/DisplayDevice.h +0 −4 Original line number Diff line number Diff line Loading @@ -233,9 +233,7 @@ public: bool onKernelTimerChanged(std::optional<DisplayModeId>, bool timerExpired); void animateRefreshRateOverlay(); void onVsync(nsecs_t timestamp); nsecs_t getVsyncPeriodFromHWC() const; nsecs_t getRefreshTimestamp() const; status_t setRefreshRatePolicy( const std::optional<scheduler::RefreshRateConfigs::Policy>& policy, Loading Loading @@ -273,8 +271,6 @@ private: std::optional<float> mStagedBrightness; float mBrightness = -1.f; std::atomic<nsecs_t> mLastHwVsync = 0; // TODO(b/182939859): Remove special cases for primary display. const bool mIsPrimary; Loading services/surfaceflinger/DisplayHardware/HWC2.h +1 −1 Original line number Diff line number Diff line Loading @@ -70,7 +70,7 @@ namespace hal = android::hardware::graphics::composer::hal; struct ComposerCallback { virtual void onComposerHalHotplug(hal::HWDisplayId, hal::Connection) = 0; virtual void onComposerHalRefresh(hal::HWDisplayId) = 0; virtual void onComposerHalVsync(hal::HWDisplayId, int64_t timestamp, virtual void onComposerHalVsync(hal::HWDisplayId, nsecs_t timestamp, std::optional<hal::VsyncPeriodNanos>) = 0; virtual void onComposerHalVsyncPeriodTimingChanged(hal::HWDisplayId, const hal::VsyncPeriodChangeTimeline&) = 0; Loading services/surfaceflinger/DisplayHardware/HWComposer.cpp +8 −3 Original line number Diff line number Diff line Loading @@ -144,7 +144,7 @@ bool HWComposer::updatesDeviceProductInfoOnHotplugReconnect() const { return mUpdateDeviceProductInfoOnHotplugReconnect; } bool HWComposer::onVsync(hal::HWDisplayId hwcDisplayId, int64_t timestamp) { bool HWComposer::onVsync(hal::HWDisplayId hwcDisplayId, nsecs_t timestamp) { const auto displayId = toPhysicalDisplayId(hwcDisplayId); if (!displayId) { LOG_HWC_DISPLAY_ERROR(hwcDisplayId, "Invalid HWC display"); Loading @@ -160,13 +160,13 @@ bool HWComposer::onVsync(hal::HWDisplayId hwcDisplayId, int64_t timestamp) { // with the same timestamp when turning the display off and on. This // is a bug in the HWC implementation, but filter the extra events // out here so they don't cause havoc downstream. if (timestamp == displayData.lastHwVsync) { if (timestamp == displayData.lastPresentTimestamp) { ALOGW("Ignoring duplicate VSYNC event from HWC for display %s (t=%" PRId64 ")", to_string(*displayId).c_str(), timestamp); return false; } displayData.lastHwVsync = timestamp; displayData.lastPresentTimestamp = timestamp; } const auto tag = "HW_VSYNC_" + to_string(*displayId); Loading Loading @@ -485,6 +485,11 @@ sp<Fence> HWComposer::getPresentFence(HalDisplayId displayId) const { return mDisplayData.at(displayId).lastPresentFence; } nsecs_t HWComposer::getPresentTimestamp(PhysicalDisplayId displayId) const { RETURN_IF_INVALID_DISPLAY(displayId, 0); return mDisplayData.at(displayId).lastPresentTimestamp; } sp<Fence> HWComposer::getLayerReleaseFence(HalDisplayId displayId, HWC2::Layer* layer) const { RETURN_IF_INVALID_DISPLAY(displayId, Fence::NO_FENCE); const auto& displayFences = mDisplayData.at(displayId).releaseFences; Loading Loading
services/surfaceflinger/CompositionEngine/tests/MockHWComposer.h +1 −0 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ public: MOCK_METHOD1(disconnectDisplay, void(HalDisplayId)); MOCK_CONST_METHOD1(hasDeviceComposition, bool(const std::optional<DisplayId>&)); MOCK_CONST_METHOD1(getPresentFence, sp<Fence>(HalDisplayId)); MOCK_METHOD(nsecs_t, getPresentTimestamp, (PhysicalDisplayId), (const, override)); MOCK_CONST_METHOD2(getLayerReleaseFence, sp<Fence>(HalDisplayId, HWC2::Layer*)); MOCK_METHOD3(setOutputBuffer, status_t(HalVirtualDisplayId, const sp<Fence>&, const sp<GraphicBuffer>&)); Loading
services/surfaceflinger/DisplayDevice.cpp +0 −10 Original line number Diff line number Diff line Loading @@ -238,16 +238,6 @@ nsecs_t DisplayDevice::getVsyncPeriodFromHWC() const { return refreshRateConfigs().getActiveModePtr()->getVsyncPeriod(); } nsecs_t DisplayDevice::getRefreshTimestamp() const { const nsecs_t now = systemTime(CLOCK_MONOTONIC); const auto vsyncPeriodNanos = getVsyncPeriodFromHWC(); return now - ((now - mLastHwVsync) % vsyncPeriodNanos); } void DisplayDevice::onVsync(nsecs_t timestamp) { mLastHwVsync = timestamp; } ui::Dataspace DisplayDevice::getCompositionDataSpace() const { return mCompositionDisplay->getState().dataspace; } Loading
services/surfaceflinger/DisplayDevice.h +0 −4 Original line number Diff line number Diff line Loading @@ -233,9 +233,7 @@ public: bool onKernelTimerChanged(std::optional<DisplayModeId>, bool timerExpired); void animateRefreshRateOverlay(); void onVsync(nsecs_t timestamp); nsecs_t getVsyncPeriodFromHWC() const; nsecs_t getRefreshTimestamp() const; status_t setRefreshRatePolicy( const std::optional<scheduler::RefreshRateConfigs::Policy>& policy, Loading Loading @@ -273,8 +271,6 @@ private: std::optional<float> mStagedBrightness; float mBrightness = -1.f; std::atomic<nsecs_t> mLastHwVsync = 0; // TODO(b/182939859): Remove special cases for primary display. const bool mIsPrimary; Loading
services/surfaceflinger/DisplayHardware/HWC2.h +1 −1 Original line number Diff line number Diff line Loading @@ -70,7 +70,7 @@ namespace hal = android::hardware::graphics::composer::hal; struct ComposerCallback { virtual void onComposerHalHotplug(hal::HWDisplayId, hal::Connection) = 0; virtual void onComposerHalRefresh(hal::HWDisplayId) = 0; virtual void onComposerHalVsync(hal::HWDisplayId, int64_t timestamp, virtual void onComposerHalVsync(hal::HWDisplayId, nsecs_t timestamp, std::optional<hal::VsyncPeriodNanos>) = 0; virtual void onComposerHalVsyncPeriodTimingChanged(hal::HWDisplayId, const hal::VsyncPeriodChangeTimeline&) = 0; Loading
services/surfaceflinger/DisplayHardware/HWComposer.cpp +8 −3 Original line number Diff line number Diff line Loading @@ -144,7 +144,7 @@ bool HWComposer::updatesDeviceProductInfoOnHotplugReconnect() const { return mUpdateDeviceProductInfoOnHotplugReconnect; } bool HWComposer::onVsync(hal::HWDisplayId hwcDisplayId, int64_t timestamp) { bool HWComposer::onVsync(hal::HWDisplayId hwcDisplayId, nsecs_t timestamp) { const auto displayId = toPhysicalDisplayId(hwcDisplayId); if (!displayId) { LOG_HWC_DISPLAY_ERROR(hwcDisplayId, "Invalid HWC display"); Loading @@ -160,13 +160,13 @@ bool HWComposer::onVsync(hal::HWDisplayId hwcDisplayId, int64_t timestamp) { // with the same timestamp when turning the display off and on. This // is a bug in the HWC implementation, but filter the extra events // out here so they don't cause havoc downstream. if (timestamp == displayData.lastHwVsync) { if (timestamp == displayData.lastPresentTimestamp) { ALOGW("Ignoring duplicate VSYNC event from HWC for display %s (t=%" PRId64 ")", to_string(*displayId).c_str(), timestamp); return false; } displayData.lastHwVsync = timestamp; displayData.lastPresentTimestamp = timestamp; } const auto tag = "HW_VSYNC_" + to_string(*displayId); Loading Loading @@ -485,6 +485,11 @@ sp<Fence> HWComposer::getPresentFence(HalDisplayId displayId) const { return mDisplayData.at(displayId).lastPresentFence; } nsecs_t HWComposer::getPresentTimestamp(PhysicalDisplayId displayId) const { RETURN_IF_INVALID_DISPLAY(displayId, 0); return mDisplayData.at(displayId).lastPresentTimestamp; } sp<Fence> HWComposer::getLayerReleaseFence(HalDisplayId displayId, HWC2::Layer* layer) const { RETURN_IF_INVALID_DISPLAY(displayId, Fence::NO_FENCE); const auto& displayFences = mDisplayData.at(displayId).releaseFences; Loading