Loading services/surfaceflinger/Android.mk +1 −1 Original line number Diff line number Diff line Loading @@ -40,7 +40,7 @@ LOCAL_SRC_FILES := \ LOCAL_CFLAGS := -DLOG_TAG=\"SurfaceFlinger\" LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES -DEGL_EGLEXT_PROTOTYPES #LOCAL_CFLAGS += -DENABLE_FENCE_TRACKING USE_HWC2 := false ifeq ($(USE_HWC2),true) Loading services/surfaceflinger/FenceTracker.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -14,9 +14,12 @@ * limitations under the License. */ #define ATRACE_TAG ATRACE_TAG_GRAPHICS #include <inttypes.h> #include "FenceTracker.h" #include "Layer.h" #include <utils/Trace.h> namespace android { Loading Loading @@ -78,6 +81,7 @@ static inline bool isValidTimestamp(nsecs_t time) { } void FenceTracker::checkFencesForCompletion() { ATRACE_CALL(); for (auto& frame : mFrames) { if (frame.retireFence != Fence::NO_FENCE) { nsecs_t time = frame.retireFence->getSignalTime(); Loading Loading @@ -115,6 +119,7 @@ void FenceTracker::checkFencesForCompletion() { void FenceTracker::addFrame(nsecs_t refreshStartTime, sp<Fence> retireFence, const Vector<sp<Layer>>& layers, sp<Fence> glDoneFence) { ATRACE_CALL(); Mutex::Autolock lock(mMutex); FrameRecord& frame = mFrames[mOffset]; FrameRecord& prevFrame = mFrames[(mOffset + MAX_FRAME_HISTORY - 1) % Loading services/surfaceflinger/SurfaceFlinger.cpp +12 −0 Original line number Diff line number Diff line Loading @@ -910,7 +910,11 @@ bool SurfaceFlinger::handleMessageInvalidate() { void SurfaceFlinger::handleMessageRefresh() { ATRACE_CALL(); #ifdef ENABLE_FENCE_TRACKING nsecs_t refreshStartTime = systemTime(SYSTEM_TIME_MONOTONIC); #else nsecs_t refreshStartTime = 0; #endif static nsecs_t previousExpectedPresent = 0; nsecs_t expectedPresent = mPrimaryDispSync.computeNextRefresh(0); static bool previousFrameMissed = false; Loading Loading @@ -1000,7 +1004,11 @@ void SurfaceFlinger::preComposition() } } #ifdef ENABLE_FENCE_TRACKING void SurfaceFlinger::postComposition(nsecs_t refreshStartTime) #else void SurfaceFlinger::postComposition(nsecs_t /*refreshStartTime*/) #endif { ATRACE_CALL(); ALOGV("postComposition"); Loading Loading @@ -1028,8 +1036,10 @@ void SurfaceFlinger::postComposition(nsecs_t refreshStartTime) } } #ifdef ENABLE_FENCE_TRACKING mFenceTracker.addFrame(refreshStartTime, presentFence, hw->getVisibleLayersSortedByZ(), hw->getClientTargetAcquireFence()); #endif if (mAnimCompositionPending) { mAnimCompositionPending = false; Loading Loading @@ -2548,12 +2558,14 @@ status_t SurfaceFlinger::dump(int fd, const Vector<String16>& args) dumpAll = false; } #ifdef ENABLE_FENCE_TRACKING if ((index < numArgs) && (args[index] == String16("--fences"))) { index++; mFenceTracker.dump(&result); dumpAll = false; } #endif } if (dumpAll) { Loading services/surfaceflinger/SurfaceFlinger_hwc1.cpp +12 −0 Original line number Diff line number Diff line Loading @@ -927,7 +927,11 @@ bool SurfaceFlinger::handleMessageInvalidate() { void SurfaceFlinger::handleMessageRefresh() { ATRACE_CALL(); #ifdef ENABLE_FENCE_TRACKING nsecs_t refreshStartTime = systemTime(SYSTEM_TIME_MONOTONIC); #else nsecs_t refreshStartTime = 0; #endif static nsecs_t previousExpectedPresent = 0; nsecs_t expectedPresent = mPrimaryDispSync.computeNextRefresh(0); static bool previousFrameMissed = false; Loading Loading @@ -1009,7 +1013,11 @@ void SurfaceFlinger::preComposition() } } #ifdef ENABLE_FENCE_TRACKING void SurfaceFlinger::postComposition(nsecs_t refreshStartTime) #else void SurfaceFlinger::postComposition(nsecs_t /*refreshStartTime*/) #endif { const LayerVector& layers(mDrawingState.layersSortedByZ); const size_t count = layers.size(); Loading @@ -1035,8 +1043,10 @@ void SurfaceFlinger::postComposition(nsecs_t refreshStartTime) } } #ifdef ENABLE_FENCE_TRACKING mFenceTracker.addFrame(refreshStartTime, presentFence, hw->getVisibleLayersSortedByZ(), hw->getClientTargetAcquireFence()); #endif if (mAnimCompositionPending) { mAnimCompositionPending = false; Loading Loading @@ -2586,12 +2596,14 @@ status_t SurfaceFlinger::dump(int fd, const Vector<String16>& args) dumpAll = false; } #ifdef ENABLE_FENCE_TRACKING if ((index < numArgs) && (args[index] == String16("--fences"))) { index++; mFenceTracker.dump(&result); dumpAll = false; } #endif } if (dumpAll) { Loading Loading
services/surfaceflinger/Android.mk +1 −1 Original line number Diff line number Diff line Loading @@ -40,7 +40,7 @@ LOCAL_SRC_FILES := \ LOCAL_CFLAGS := -DLOG_TAG=\"SurfaceFlinger\" LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES -DEGL_EGLEXT_PROTOTYPES #LOCAL_CFLAGS += -DENABLE_FENCE_TRACKING USE_HWC2 := false ifeq ($(USE_HWC2),true) Loading
services/surfaceflinger/FenceTracker.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -14,9 +14,12 @@ * limitations under the License. */ #define ATRACE_TAG ATRACE_TAG_GRAPHICS #include <inttypes.h> #include "FenceTracker.h" #include "Layer.h" #include <utils/Trace.h> namespace android { Loading Loading @@ -78,6 +81,7 @@ static inline bool isValidTimestamp(nsecs_t time) { } void FenceTracker::checkFencesForCompletion() { ATRACE_CALL(); for (auto& frame : mFrames) { if (frame.retireFence != Fence::NO_FENCE) { nsecs_t time = frame.retireFence->getSignalTime(); Loading Loading @@ -115,6 +119,7 @@ void FenceTracker::checkFencesForCompletion() { void FenceTracker::addFrame(nsecs_t refreshStartTime, sp<Fence> retireFence, const Vector<sp<Layer>>& layers, sp<Fence> glDoneFence) { ATRACE_CALL(); Mutex::Autolock lock(mMutex); FrameRecord& frame = mFrames[mOffset]; FrameRecord& prevFrame = mFrames[(mOffset + MAX_FRAME_HISTORY - 1) % Loading
services/surfaceflinger/SurfaceFlinger.cpp +12 −0 Original line number Diff line number Diff line Loading @@ -910,7 +910,11 @@ bool SurfaceFlinger::handleMessageInvalidate() { void SurfaceFlinger::handleMessageRefresh() { ATRACE_CALL(); #ifdef ENABLE_FENCE_TRACKING nsecs_t refreshStartTime = systemTime(SYSTEM_TIME_MONOTONIC); #else nsecs_t refreshStartTime = 0; #endif static nsecs_t previousExpectedPresent = 0; nsecs_t expectedPresent = mPrimaryDispSync.computeNextRefresh(0); static bool previousFrameMissed = false; Loading Loading @@ -1000,7 +1004,11 @@ void SurfaceFlinger::preComposition() } } #ifdef ENABLE_FENCE_TRACKING void SurfaceFlinger::postComposition(nsecs_t refreshStartTime) #else void SurfaceFlinger::postComposition(nsecs_t /*refreshStartTime*/) #endif { ATRACE_CALL(); ALOGV("postComposition"); Loading Loading @@ -1028,8 +1036,10 @@ void SurfaceFlinger::postComposition(nsecs_t refreshStartTime) } } #ifdef ENABLE_FENCE_TRACKING mFenceTracker.addFrame(refreshStartTime, presentFence, hw->getVisibleLayersSortedByZ(), hw->getClientTargetAcquireFence()); #endif if (mAnimCompositionPending) { mAnimCompositionPending = false; Loading Loading @@ -2548,12 +2558,14 @@ status_t SurfaceFlinger::dump(int fd, const Vector<String16>& args) dumpAll = false; } #ifdef ENABLE_FENCE_TRACKING if ((index < numArgs) && (args[index] == String16("--fences"))) { index++; mFenceTracker.dump(&result); dumpAll = false; } #endif } if (dumpAll) { Loading
services/surfaceflinger/SurfaceFlinger_hwc1.cpp +12 −0 Original line number Diff line number Diff line Loading @@ -927,7 +927,11 @@ bool SurfaceFlinger::handleMessageInvalidate() { void SurfaceFlinger::handleMessageRefresh() { ATRACE_CALL(); #ifdef ENABLE_FENCE_TRACKING nsecs_t refreshStartTime = systemTime(SYSTEM_TIME_MONOTONIC); #else nsecs_t refreshStartTime = 0; #endif static nsecs_t previousExpectedPresent = 0; nsecs_t expectedPresent = mPrimaryDispSync.computeNextRefresh(0); static bool previousFrameMissed = false; Loading Loading @@ -1009,7 +1013,11 @@ void SurfaceFlinger::preComposition() } } #ifdef ENABLE_FENCE_TRACKING void SurfaceFlinger::postComposition(nsecs_t refreshStartTime) #else void SurfaceFlinger::postComposition(nsecs_t /*refreshStartTime*/) #endif { const LayerVector& layers(mDrawingState.layersSortedByZ); const size_t count = layers.size(); Loading @@ -1035,8 +1043,10 @@ void SurfaceFlinger::postComposition(nsecs_t refreshStartTime) } } #ifdef ENABLE_FENCE_TRACKING mFenceTracker.addFrame(refreshStartTime, presentFence, hw->getVisibleLayersSortedByZ(), hw->getClientTargetAcquireFence()); #endif if (mAnimCompositionPending) { mAnimCompositionPending = false; Loading Loading @@ -2586,12 +2596,14 @@ status_t SurfaceFlinger::dump(int fd, const Vector<String16>& args) dumpAll = false; } #ifdef ENABLE_FENCE_TRACKING if ((index < numArgs) && (args[index] == String16("--fences"))) { index++; mFenceTracker.dump(&result); dumpAll = false; } #endif } if (dumpAll) { Loading