Loading services/surfaceflinger/Scheduler/Scheduler.cpp +2 −1 Original line number Original line Diff line number Diff line Loading @@ -28,10 +28,10 @@ #include <ftl/enum.h> #include <ftl/enum.h> #include <ftl/fake_guard.h> #include <ftl/fake_guard.h> #include <ftl/small_map.h> #include <ftl/small_map.h> #include <gui/TraceUtils.h> #include <gui/WindowInfo.h> #include <gui/WindowInfo.h> #include <system/window.h> #include <system/window.h> #include <utils/Timers.h> #include <utils/Timers.h> #include <utils/Trace.h> #include <FrameTimeline/FrameTimeline.h> #include <FrameTimeline/FrameTimeline.h> #include <scheduler/interface/ICompositor.h> #include <scheduler/interface/ICompositor.h> Loading Loading @@ -171,6 +171,7 @@ bool Scheduler::isVsyncValid(TimePoint expectedVsyncTimestamp, uid_t uid) const return true; return true; } } ATRACE_FORMAT("%s uid: %d frameRate: %s", __func__, uid, to_string(*frameRate).c_str()); return mVsyncSchedule->getTracker().isVSyncInPhase(expectedVsyncTimestamp.ns(), *frameRate); return mVsyncSchedule->getTracker().isVSyncInPhase(expectedVsyncTimestamp.ns(), *frameRate); } } Loading services/surfaceflinger/Scheduler/VSyncPredictor.cpp +11 −1 Original line number Original line Diff line number Diff line Loading @@ -31,8 +31,8 @@ #include <android-base/stringprintf.h> #include <android-base/stringprintf.h> #include <cutils/compiler.h> #include <cutils/compiler.h> #include <cutils/properties.h> #include <cutils/properties.h> #include <gui/TraceUtils.h> #include <utils/Log.h> #include <utils/Log.h> #include <utils/Trace.h> #include "RefreshRateSelector.h" #include "RefreshRateSelector.h" #include "VSyncPredictor.h" #include "VSyncPredictor.h" Loading Loading @@ -282,6 +282,13 @@ bool VSyncPredictor::isVSyncInPhase(nsecs_t timePoint, Fps frameRate) const { } } bool VSyncPredictor::isVSyncInPhaseLocked(nsecs_t timePoint, unsigned divisor) const { bool VSyncPredictor::isVSyncInPhaseLocked(nsecs_t timePoint, unsigned divisor) const { const TimePoint now = TimePoint::now(); const auto getTimePointIn = [](TimePoint now, nsecs_t timePoint) -> float { return ticks<std::milli, float>(TimePoint::fromNs(timePoint) - now); }; ATRACE_FORMAT("%s timePoint in: %.2f divisor: %zu", __func__, getTimePointIn(now, timePoint), divisor); struct VsyncError { struct VsyncError { nsecs_t vsyncTimestamp; nsecs_t vsyncTimestamp; float error; float error; Loading @@ -304,6 +311,7 @@ bool VSyncPredictor::isVSyncInPhaseLocked(nsecs_t timePoint, unsigned divisor) c if (knownTimestampIter == mRateDivisorKnownTimestampMap.end()) { if (knownTimestampIter == mRateDivisorKnownTimestampMap.end()) { const auto vsync = nextAnticipatedVSyncTimeFromLocked(justBeforeTimePoint); const auto vsync = nextAnticipatedVSyncTimeFromLocked(justBeforeTimePoint); mRateDivisorKnownTimestampMap[dividedPeriod] = vsync; mRateDivisorKnownTimestampMap[dividedPeriod] = vsync; ATRACE_FORMAT_INSTANT("(first) knownVsync in: %.2f", getTimePointIn(now, vsync)); return true; return true; } } Loading @@ -323,6 +331,8 @@ bool VSyncPredictor::isVSyncInPhaseLocked(nsecs_t timePoint, unsigned divisor) c const auto minVsyncError = std::min_element(vsyncs.begin(), vsyncs.end()); const auto minVsyncError = std::min_element(vsyncs.begin(), vsyncs.end()); mRateDivisorKnownTimestampMap[dividedPeriod] = minVsyncError->vsyncTimestamp; mRateDivisorKnownTimestampMap[dividedPeriod] = minVsyncError->vsyncTimestamp; ATRACE_FORMAT_INSTANT("knownVsync in: %.2f", getTimePointIn(now, minVsyncError->vsyncTimestamp)); return std::abs(minVsyncError->vsyncTimestamp - timePoint) < period / 2; return std::abs(minVsyncError->vsyncTimestamp - timePoint) < period / 2; } } Loading Loading
services/surfaceflinger/Scheduler/Scheduler.cpp +2 −1 Original line number Original line Diff line number Diff line Loading @@ -28,10 +28,10 @@ #include <ftl/enum.h> #include <ftl/enum.h> #include <ftl/fake_guard.h> #include <ftl/fake_guard.h> #include <ftl/small_map.h> #include <ftl/small_map.h> #include <gui/TraceUtils.h> #include <gui/WindowInfo.h> #include <gui/WindowInfo.h> #include <system/window.h> #include <system/window.h> #include <utils/Timers.h> #include <utils/Timers.h> #include <utils/Trace.h> #include <FrameTimeline/FrameTimeline.h> #include <FrameTimeline/FrameTimeline.h> #include <scheduler/interface/ICompositor.h> #include <scheduler/interface/ICompositor.h> Loading Loading @@ -171,6 +171,7 @@ bool Scheduler::isVsyncValid(TimePoint expectedVsyncTimestamp, uid_t uid) const return true; return true; } } ATRACE_FORMAT("%s uid: %d frameRate: %s", __func__, uid, to_string(*frameRate).c_str()); return mVsyncSchedule->getTracker().isVSyncInPhase(expectedVsyncTimestamp.ns(), *frameRate); return mVsyncSchedule->getTracker().isVSyncInPhase(expectedVsyncTimestamp.ns(), *frameRate); } } Loading
services/surfaceflinger/Scheduler/VSyncPredictor.cpp +11 −1 Original line number Original line Diff line number Diff line Loading @@ -31,8 +31,8 @@ #include <android-base/stringprintf.h> #include <android-base/stringprintf.h> #include <cutils/compiler.h> #include <cutils/compiler.h> #include <cutils/properties.h> #include <cutils/properties.h> #include <gui/TraceUtils.h> #include <utils/Log.h> #include <utils/Log.h> #include <utils/Trace.h> #include "RefreshRateSelector.h" #include "RefreshRateSelector.h" #include "VSyncPredictor.h" #include "VSyncPredictor.h" Loading Loading @@ -282,6 +282,13 @@ bool VSyncPredictor::isVSyncInPhase(nsecs_t timePoint, Fps frameRate) const { } } bool VSyncPredictor::isVSyncInPhaseLocked(nsecs_t timePoint, unsigned divisor) const { bool VSyncPredictor::isVSyncInPhaseLocked(nsecs_t timePoint, unsigned divisor) const { const TimePoint now = TimePoint::now(); const auto getTimePointIn = [](TimePoint now, nsecs_t timePoint) -> float { return ticks<std::milli, float>(TimePoint::fromNs(timePoint) - now); }; ATRACE_FORMAT("%s timePoint in: %.2f divisor: %zu", __func__, getTimePointIn(now, timePoint), divisor); struct VsyncError { struct VsyncError { nsecs_t vsyncTimestamp; nsecs_t vsyncTimestamp; float error; float error; Loading @@ -304,6 +311,7 @@ bool VSyncPredictor::isVSyncInPhaseLocked(nsecs_t timePoint, unsigned divisor) c if (knownTimestampIter == mRateDivisorKnownTimestampMap.end()) { if (knownTimestampIter == mRateDivisorKnownTimestampMap.end()) { const auto vsync = nextAnticipatedVSyncTimeFromLocked(justBeforeTimePoint); const auto vsync = nextAnticipatedVSyncTimeFromLocked(justBeforeTimePoint); mRateDivisorKnownTimestampMap[dividedPeriod] = vsync; mRateDivisorKnownTimestampMap[dividedPeriod] = vsync; ATRACE_FORMAT_INSTANT("(first) knownVsync in: %.2f", getTimePointIn(now, vsync)); return true; return true; } } Loading @@ -323,6 +331,8 @@ bool VSyncPredictor::isVSyncInPhaseLocked(nsecs_t timePoint, unsigned divisor) c const auto minVsyncError = std::min_element(vsyncs.begin(), vsyncs.end()); const auto minVsyncError = std::min_element(vsyncs.begin(), vsyncs.end()); mRateDivisorKnownTimestampMap[dividedPeriod] = minVsyncError->vsyncTimestamp; mRateDivisorKnownTimestampMap[dividedPeriod] = minVsyncError->vsyncTimestamp; ATRACE_FORMAT_INSTANT("knownVsync in: %.2f", getTimePointIn(now, minVsyncError->vsyncTimestamp)); return std::abs(minVsyncError->vsyncTimestamp - timePoint) < period / 2; return std::abs(minVsyncError->vsyncTimestamp - timePoint) < period / 2; } } Loading