Loading include/gui/ConsumerBase.h +5 −1 Original line number Diff line number Diff line Loading @@ -180,7 +180,7 @@ protected: // Derived classes should override this method to perform any cleanup that // must take place when a buffer is released back to the BufferQueue. If // it is overridden the derived class's implementation must call // ConsumerBase::releaseBufferLocked.e // ConsumerBase::releaseBufferLocked. virtual status_t releaseBufferLocked(int slot, const sp<GraphicBuffer> graphicBuffer, EGLDisplay display, EGLSyncKHR eglFence); Loading Loading @@ -244,6 +244,10 @@ protected: // if none is supplied sp<IGraphicBufferConsumer> mConsumer; // The final release fence of the most recent buffer released by // releaseBufferLocked. sp<Fence> mPrevFinalReleaseFence; // mMutex is the mutex used to prevent concurrent access to the member // variables of ConsumerBase objects. It must be locked whenever the // member variables are accessed or when any of the *Locked methods are Loading include/gui/GLConsumer.h +1 −1 Original line number Diff line number Diff line Loading @@ -250,7 +250,7 @@ protected: // mEglSlots array in addition to the ConsumerBase. virtual status_t releaseBufferLocked(int slot, const sp<GraphicBuffer> graphicBuffer, EGLDisplay display, EGLSyncKHR eglFence); EGLDisplay display, EGLSyncKHR eglFence) override; status_t releaseBufferLocked(int slot, const sp<GraphicBuffer> graphicBuffer, EGLSyncKHR eglFence) { Loading libs/gui/ConsumerBase.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -56,7 +56,8 @@ static int32_t createProcessUniqueId() { ConsumerBase::ConsumerBase(const sp<IGraphicBufferConsumer>& bufferQueue, bool controlledByApp) : mAbandoned(false), mConsumer(bufferQueue) { mConsumer(bufferQueue), mPrevFinalReleaseFence(Fence::NO_FENCE) { // Choose a name using the PID and a process-unique ID. mName = String8::format("unnamed-%d-%d", getpid(), createProcessUniqueId()); Loading Loading @@ -366,6 +367,7 @@ status_t ConsumerBase::releaseBufferLocked( freeBufferLocked(slot); } mPrevFinalReleaseFence = mSlots[slot].mFence; mSlots[slot].mFence = Fence::NO_FENCE; return err; Loading services/surfaceflinger/FenceTracker.cpp +7 −28 Original line number Diff line number Diff line Loading @@ -158,38 +158,17 @@ void FenceTracker::addFrame(nsecs_t refreshStartTime, sp<Fence> presentFence, layers[i]->getFenceData(&name, &frameNumber, &glesComposition, &requestedPresentTime, &acquireFence, &prevReleaseFence); #ifdef USE_HWC2 if (glesComposition) { frame.layers.emplace(std::piecewise_construct, std::forward_as_tuple(layerId), std::forward_as_tuple(name, frameNumber, glesComposition, requestedPresentTime, 0, 0, acquireFence, prevReleaseFence)); wasGlesCompositionDone = true; } else { frame.layers.emplace(std::piecewise_construct, std::forward_as_tuple(layerId), std::forward_as_tuple(name, frameNumber, glesComposition, requestedPresentTime, 0, 0, acquireFence, Fence::NO_FENCE)); auto prevLayer = prevFrame.layers.find(layerId); if (prevLayer != prevFrame.layers.end()) { if (frameNumber != prevLayer->second.frameNumber) { prevLayer->second.releaseFence = prevReleaseFence; } } #else frame.layers.emplace(std::piecewise_construct, std::forward_as_tuple(layerId), std::forward_as_tuple(name, frameNumber, glesComposition, requestedPresentTime, 0, 0, acquireFence, glesComposition ? Fence::NO_FENCE : prevReleaseFence)); if (glesComposition) { wasGlesCompositionDone = true; } #endif frame.layers.emplace(std::piecewise_construct, std::forward_as_tuple(layerId), std::forward_as_tuple(name, frameNumber, glesComposition, requestedPresentTime, 0, 0, acquireFence, prevReleaseFence)); } frame.frameId = mFrameCounter; Loading services/surfaceflinger/Layer.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -2173,7 +2173,7 @@ void Layer::getFenceData(String8* outName, uint64_t* outFrameNumber, #endif *outRequestedPresentTime = mSurfaceFlingerConsumer->getTimestamp(); *outAcquireFence = mSurfaceFlingerConsumer->getCurrentFence(); *outPrevReleaseFence = mSurfaceFlingerConsumer->getPrevReleaseFence(); *outPrevReleaseFence = mSurfaceFlingerConsumer->getPrevFinalReleaseFence(); } std::vector<OccupancyTracker::Segment> Layer::getOccupancyHistory( Loading Loading
include/gui/ConsumerBase.h +5 −1 Original line number Diff line number Diff line Loading @@ -180,7 +180,7 @@ protected: // Derived classes should override this method to perform any cleanup that // must take place when a buffer is released back to the BufferQueue. If // it is overridden the derived class's implementation must call // ConsumerBase::releaseBufferLocked.e // ConsumerBase::releaseBufferLocked. virtual status_t releaseBufferLocked(int slot, const sp<GraphicBuffer> graphicBuffer, EGLDisplay display, EGLSyncKHR eglFence); Loading Loading @@ -244,6 +244,10 @@ protected: // if none is supplied sp<IGraphicBufferConsumer> mConsumer; // The final release fence of the most recent buffer released by // releaseBufferLocked. sp<Fence> mPrevFinalReleaseFence; // mMutex is the mutex used to prevent concurrent access to the member // variables of ConsumerBase objects. It must be locked whenever the // member variables are accessed or when any of the *Locked methods are Loading
include/gui/GLConsumer.h +1 −1 Original line number Diff line number Diff line Loading @@ -250,7 +250,7 @@ protected: // mEglSlots array in addition to the ConsumerBase. virtual status_t releaseBufferLocked(int slot, const sp<GraphicBuffer> graphicBuffer, EGLDisplay display, EGLSyncKHR eglFence); EGLDisplay display, EGLSyncKHR eglFence) override; status_t releaseBufferLocked(int slot, const sp<GraphicBuffer> graphicBuffer, EGLSyncKHR eglFence) { Loading
libs/gui/ConsumerBase.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -56,7 +56,8 @@ static int32_t createProcessUniqueId() { ConsumerBase::ConsumerBase(const sp<IGraphicBufferConsumer>& bufferQueue, bool controlledByApp) : mAbandoned(false), mConsumer(bufferQueue) { mConsumer(bufferQueue), mPrevFinalReleaseFence(Fence::NO_FENCE) { // Choose a name using the PID and a process-unique ID. mName = String8::format("unnamed-%d-%d", getpid(), createProcessUniqueId()); Loading Loading @@ -366,6 +367,7 @@ status_t ConsumerBase::releaseBufferLocked( freeBufferLocked(slot); } mPrevFinalReleaseFence = mSlots[slot].mFence; mSlots[slot].mFence = Fence::NO_FENCE; return err; Loading
services/surfaceflinger/FenceTracker.cpp +7 −28 Original line number Diff line number Diff line Loading @@ -158,38 +158,17 @@ void FenceTracker::addFrame(nsecs_t refreshStartTime, sp<Fence> presentFence, layers[i]->getFenceData(&name, &frameNumber, &glesComposition, &requestedPresentTime, &acquireFence, &prevReleaseFence); #ifdef USE_HWC2 if (glesComposition) { frame.layers.emplace(std::piecewise_construct, std::forward_as_tuple(layerId), std::forward_as_tuple(name, frameNumber, glesComposition, requestedPresentTime, 0, 0, acquireFence, prevReleaseFence)); wasGlesCompositionDone = true; } else { frame.layers.emplace(std::piecewise_construct, std::forward_as_tuple(layerId), std::forward_as_tuple(name, frameNumber, glesComposition, requestedPresentTime, 0, 0, acquireFence, Fence::NO_FENCE)); auto prevLayer = prevFrame.layers.find(layerId); if (prevLayer != prevFrame.layers.end()) { if (frameNumber != prevLayer->second.frameNumber) { prevLayer->second.releaseFence = prevReleaseFence; } } #else frame.layers.emplace(std::piecewise_construct, std::forward_as_tuple(layerId), std::forward_as_tuple(name, frameNumber, glesComposition, requestedPresentTime, 0, 0, acquireFence, glesComposition ? Fence::NO_FENCE : prevReleaseFence)); if (glesComposition) { wasGlesCompositionDone = true; } #endif frame.layers.emplace(std::piecewise_construct, std::forward_as_tuple(layerId), std::forward_as_tuple(name, frameNumber, glesComposition, requestedPresentTime, 0, 0, acquireFence, prevReleaseFence)); } frame.frameId = mFrameCounter; Loading
services/surfaceflinger/Layer.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -2173,7 +2173,7 @@ void Layer::getFenceData(String8* outName, uint64_t* outFrameNumber, #endif *outRequestedPresentTime = mSurfaceFlingerConsumer->getTimestamp(); *outAcquireFence = mSurfaceFlingerConsumer->getCurrentFence(); *outPrevReleaseFence = mSurfaceFlingerConsumer->getPrevReleaseFence(); *outPrevReleaseFence = mSurfaceFlingerConsumer->getPrevFinalReleaseFence(); } std::vector<OccupancyTracker::Segment> Layer::getOccupancyHistory( Loading