diff options
author | 2016-07-21 05:27:24 +0000 | |
---|---|---|
committer | 2016-07-21 05:27:24 +0000 | |
commit | d16f6ae2bd1083ee29717829a39e93908bba2bf5 (patch) | |
tree | 7134883e1e5d0a6eb22e6c35087cbffd526aedf6 | |
parent | f42ca4da5be95b67747055f8d9d96c2323863e60 (diff) | |
parent | c5da271eec001da9e11a2786f2618a45257439c3 (diff) |
Merge "HWC2: Add properties to revert latching changes" into nyc-mr1-dev
-rw-r--r-- | services/surfaceflinger/Layer.cpp | 20 | ||||
-rw-r--r-- | services/surfaceflinger/Layer.h | 3 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 6 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.h | 3 |
4 files changed, 31 insertions, 1 deletions
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index 548b048e29..30a4d79c5b 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -51,6 +51,8 @@ #include "RenderEngine/RenderEngine.h" +#include <mutex> + #define DEBUG_RESIZE 0 namespace android { @@ -1091,6 +1093,20 @@ uint32_t Layer::getProducerStickyTransform() const { return static_cast<uint32_t>(producerStickyTransform); } +bool Layer::latchUnsignaledBuffers() { + static bool propertyLoaded = false; + static bool latch = false; + static std::mutex mutex; + std::lock_guard<std::mutex> lock(mutex); + if (!propertyLoaded) { + char value[PROPERTY_VALUE_MAX] = {}; + property_get("debug.sf.latch_unsignaled", value, "0"); + latch = atoi(value); + propertyLoaded = true; + } + return latch; +} + uint64_t Layer::getHeadFrameNumber() const { Mutex::Autolock lock(mQueueItemLock); if (!mQueueItems.empty()) { @@ -1102,6 +1118,10 @@ uint64_t Layer::getHeadFrameNumber() const { bool Layer::headFenceHasSignaled() const { #ifdef USE_HWC2 + if (latchUnsignaledBuffers()) { + return true; + } + Mutex::Autolock lock(mQueueItemLock); if (mQueueItems.empty()) { return true; diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h index 78a842784f..c070539da8 100644 --- a/services/surfaceflinger/Layer.h +++ b/services/surfaceflinger/Layer.h @@ -465,6 +465,9 @@ private: // Temporary - Used only for LEGACY camera mode. uint32_t getProducerStickyTransform() const; + // Loads the corresponding system property once per process + static bool latchUnsignaledBuffers(); + // ----------------------------------------------------------------------- class SyncPoint diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 3050d1cd7a..4d82c1ca7a 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -179,6 +179,10 @@ SurfaceFlinger::SurfaceFlinger() } ALOGI_IF(mDebugRegion, "showupdates enabled"); ALOGI_IF(mDebugDDMS, "DDMS debugging enabled"); + + property_get("debug.sf.disable_backpressure", value, "0"); + mPropagateBackpressure = !atoi(value); + ALOGI_IF(!mPropagateBackpressure, "Disabling backpressure propagation"); } void SurfaceFlinger::onFirstRef() @@ -1009,7 +1013,7 @@ void SurfaceFlinger::onMessageReceived(int32_t what) { mPreviousPresentFence != Fence::NO_FENCE && mPreviousPresentFence->getSignalTime() == INT64_MAX; ATRACE_INT("FrameMissed", static_cast<int>(frameMissed)); - if (frameMissed) { + if (mPropagateBackpressure && frameMissed) { signalLayerUpdate(); break; } diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h index 5cb99027b4..f50f9e7918 100644 --- a/services/surfaceflinger/SurfaceFlinger.h +++ b/services/surfaceflinger/SurfaceFlinger.h @@ -526,6 +526,9 @@ private: bool mBootFinished; bool mForceFullDamage; FenceTracker mFenceTracker; +#ifdef USE_HWC2 + bool mPropagateBackpressure = true; +#endif // these are thread safe mutable MessageQueue mEventQueue; |