Loading services/surfaceflinger/BufferStateLayer.cpp +4 −11 Original line number Diff line number Diff line Loading @@ -549,19 +549,13 @@ bool BufferStateLayer::setSidebandStream(const sp<NativeHandle>& sidebandStream) } bool BufferStateLayer::setTransactionCompletedListeners( const std::vector<ListenerCallbacks>& listenerCallbacks, const sp<IBinder>& layerHandle) { const std::vector<sp<CallbackHandle>>& handles) { // If there is no handle, we will not send a callback so reset mReleasePreviousBuffer and return if (listenerCallbacks.empty()) { if (handles.empty()) { mReleasePreviousBuffer = false; return false; } std::vector<sp<CallbackHandle>> handles; handles.reserve(listenerCallbacks.size()); for (auto& [listener, callbackIds] : listenerCallbacks) { handles.emplace_back(new CallbackHandle(listener, callbackIds, layerHandle)); } const bool willPresent = willPresentCurrentTransaction(); for (const auto& handle : handles) { Loading @@ -577,10 +571,9 @@ bool BufferStateLayer::setTransactionCompletedListeners( // Store so latched time and release fence can be set mDrawingState.callbackHandles.push_back(handle); } else { // If this layer will NOT need to be relatched and presented this frame } else { // If this layer will NOT need to be relatched and presented this frame // Notify the transaction completed thread this handle is done mFlinger->getTransactionCallbackInvoker().addUnpresentedCallbackHandle(handle); mFlinger->getTransactionCallbackInvoker().registerUnpresentedCallbackHandle(handle); } } Loading services/surfaceflinger/BufferStateLayer.h +1 −2 Original line number Diff line number Diff line Loading @@ -65,8 +65,7 @@ public: bool setSurfaceDamageRegion(const Region& surfaceDamage) override; bool setApi(int32_t api) override; bool setSidebandStream(const sp<NativeHandle>& sidebandStream) override; bool setTransactionCompletedListeners(const std::vector<ListenerCallbacks>& handles, const sp<IBinder>& layerHandle) override; bool setTransactionCompletedListeners(const std::vector<sp<CallbackHandle>>& handles) override; bool addFrameEvent(const sp<Fence>& acquireFence, nsecs_t postedTime, nsecs_t requestedPresentTime) override; bool setPosition(float /*x*/, float /*y*/) override; Loading services/surfaceflinger/Layer.cpp +0 −11 Original line number Diff line number Diff line Loading @@ -2640,17 +2640,6 @@ bool Layer::setDropInputMode(gui::DropInputMode mode) { return true; } bool Layer::setTransactionCompletedListeners( const std::vector<ListenerCallbacks>& listenerCallbacks, const sp<IBinder>&) { if (listenerCallbacks.empty()) { return false; } for (auto& listener : listenerCallbacks) { mFlinger->getTransactionCallbackInvoker().addEmptyCallback(listener); } return false; } // --------------------------------------------------------------------------- std::ostream& operator<<(std::ostream& stream, const Layer::FrameRate& rate) { Loading services/surfaceflinger/Layer.h +4 −2 Original line number Diff line number Diff line Loading @@ -428,8 +428,10 @@ public: virtual bool setSurfaceDamageRegion(const Region& /*surfaceDamage*/) { return false; }; virtual bool setApi(int32_t /*api*/) { return false; }; virtual bool setSidebandStream(const sp<NativeHandle>& /*sidebandStream*/) { return false; }; virtual bool setTransactionCompletedListeners(const std::vector<ListenerCallbacks>& /*handles*/, const sp<IBinder>& /* layerHandle */); virtual bool setTransactionCompletedListeners( const std::vector<sp<CallbackHandle>>& /*handles*/) { return false; }; virtual bool addFrameEvent(const sp<Fence>& /*acquireFence*/, nsecs_t /*postedTime*/, nsecs_t /*requestedPresentTime*/) { return false; Loading services/surfaceflinger/SurfaceFlinger.cpp +12 −9 Original line number Diff line number Diff line Loading @@ -3795,10 +3795,11 @@ bool SurfaceFlinger::applyTransactionState(const FrameTimelineInfo& frameTimelin transactionFlags |= setDisplayStateLocked(display); } // Add listeners w/ surfaces so they can get their callback. Note that listeners with // SurfaceControls will start registration during setClientStateLocked below. // start and end registration for listeners w/ no surface so they can get their callback. Note // that listeners with SurfaceControls will start registration during setClientStateLocked // below. for (const auto& listener : listenerCallbacks) { mTransactionCallbackInvoker.addEmptyCallback(listener); mTransactionCallbackInvoker.addEmptyTransaction(listener); } uint32_t clientStateFlags = 0; Loading Loading @@ -3970,7 +3971,7 @@ uint32_t SurfaceFlinger::setClientStateLocked(const FrameTimelineInfo& frameTime } if (layer == nullptr) { for (auto& [listener, callbackIds] : s.listeners) { mTransactionCallbackInvoker.addUnpresentedCallbackHandle( mTransactionCallbackInvoker.registerUnpresentedCallbackHandle( new CallbackHandle(listener, callbackIds, s.surface)); } return 0; Loading Loading @@ -4241,6 +4242,12 @@ uint32_t SurfaceFlinger::setClientStateLocked(const FrameTimelineInfo& frameTime flags |= eTransactionNeeded | eTraversalNeeded; } } std::vector<sp<CallbackHandle>> callbackHandles; if ((what & layer_state_t::eHasListenerCallbacksChanged) && (!filteredListeners.empty())) { for (auto& [listener, callbackIds] : filteredListeners) { callbackHandles.emplace_back(new CallbackHandle(listener, callbackIds, s.surface)); } } if (what & layer_state_t::eBufferChanged && layer->setBuffer(s.bufferData, postTime, desiredPresentTime, isAutoTimestamp, Loading @@ -4250,11 +4257,7 @@ uint32_t SurfaceFlinger::setClientStateLocked(const FrameTimelineInfo& frameTime layer->setFrameTimelineVsyncForBufferlessTransaction(frameTimelineInfo, postTime); } if ((what & layer_state_t::eHasListenerCallbacksChanged) && (!filteredListeners.empty())) { if (layer->setTransactionCompletedListeners(filteredListeners, s.surface)) { flags |= eTraversalNeeded; } } if (layer->setTransactionCompletedListeners(callbackHandles)) flags |= eTraversalNeeded; // Do not put anything that updates layer state or modifies flags after // setTransactionCompletedListener return flags; Loading Loading
services/surfaceflinger/BufferStateLayer.cpp +4 −11 Original line number Diff line number Diff line Loading @@ -549,19 +549,13 @@ bool BufferStateLayer::setSidebandStream(const sp<NativeHandle>& sidebandStream) } bool BufferStateLayer::setTransactionCompletedListeners( const std::vector<ListenerCallbacks>& listenerCallbacks, const sp<IBinder>& layerHandle) { const std::vector<sp<CallbackHandle>>& handles) { // If there is no handle, we will not send a callback so reset mReleasePreviousBuffer and return if (listenerCallbacks.empty()) { if (handles.empty()) { mReleasePreviousBuffer = false; return false; } std::vector<sp<CallbackHandle>> handles; handles.reserve(listenerCallbacks.size()); for (auto& [listener, callbackIds] : listenerCallbacks) { handles.emplace_back(new CallbackHandle(listener, callbackIds, layerHandle)); } const bool willPresent = willPresentCurrentTransaction(); for (const auto& handle : handles) { Loading @@ -577,10 +571,9 @@ bool BufferStateLayer::setTransactionCompletedListeners( // Store so latched time and release fence can be set mDrawingState.callbackHandles.push_back(handle); } else { // If this layer will NOT need to be relatched and presented this frame } else { // If this layer will NOT need to be relatched and presented this frame // Notify the transaction completed thread this handle is done mFlinger->getTransactionCallbackInvoker().addUnpresentedCallbackHandle(handle); mFlinger->getTransactionCallbackInvoker().registerUnpresentedCallbackHandle(handle); } } Loading
services/surfaceflinger/BufferStateLayer.h +1 −2 Original line number Diff line number Diff line Loading @@ -65,8 +65,7 @@ public: bool setSurfaceDamageRegion(const Region& surfaceDamage) override; bool setApi(int32_t api) override; bool setSidebandStream(const sp<NativeHandle>& sidebandStream) override; bool setTransactionCompletedListeners(const std::vector<ListenerCallbacks>& handles, const sp<IBinder>& layerHandle) override; bool setTransactionCompletedListeners(const std::vector<sp<CallbackHandle>>& handles) override; bool addFrameEvent(const sp<Fence>& acquireFence, nsecs_t postedTime, nsecs_t requestedPresentTime) override; bool setPosition(float /*x*/, float /*y*/) override; Loading
services/surfaceflinger/Layer.cpp +0 −11 Original line number Diff line number Diff line Loading @@ -2640,17 +2640,6 @@ bool Layer::setDropInputMode(gui::DropInputMode mode) { return true; } bool Layer::setTransactionCompletedListeners( const std::vector<ListenerCallbacks>& listenerCallbacks, const sp<IBinder>&) { if (listenerCallbacks.empty()) { return false; } for (auto& listener : listenerCallbacks) { mFlinger->getTransactionCallbackInvoker().addEmptyCallback(listener); } return false; } // --------------------------------------------------------------------------- std::ostream& operator<<(std::ostream& stream, const Layer::FrameRate& rate) { Loading
services/surfaceflinger/Layer.h +4 −2 Original line number Diff line number Diff line Loading @@ -428,8 +428,10 @@ public: virtual bool setSurfaceDamageRegion(const Region& /*surfaceDamage*/) { return false; }; virtual bool setApi(int32_t /*api*/) { return false; }; virtual bool setSidebandStream(const sp<NativeHandle>& /*sidebandStream*/) { return false; }; virtual bool setTransactionCompletedListeners(const std::vector<ListenerCallbacks>& /*handles*/, const sp<IBinder>& /* layerHandle */); virtual bool setTransactionCompletedListeners( const std::vector<sp<CallbackHandle>>& /*handles*/) { return false; }; virtual bool addFrameEvent(const sp<Fence>& /*acquireFence*/, nsecs_t /*postedTime*/, nsecs_t /*requestedPresentTime*/) { return false; Loading
services/surfaceflinger/SurfaceFlinger.cpp +12 −9 Original line number Diff line number Diff line Loading @@ -3795,10 +3795,11 @@ bool SurfaceFlinger::applyTransactionState(const FrameTimelineInfo& frameTimelin transactionFlags |= setDisplayStateLocked(display); } // Add listeners w/ surfaces so they can get their callback. Note that listeners with // SurfaceControls will start registration during setClientStateLocked below. // start and end registration for listeners w/ no surface so they can get their callback. Note // that listeners with SurfaceControls will start registration during setClientStateLocked // below. for (const auto& listener : listenerCallbacks) { mTransactionCallbackInvoker.addEmptyCallback(listener); mTransactionCallbackInvoker.addEmptyTransaction(listener); } uint32_t clientStateFlags = 0; Loading Loading @@ -3970,7 +3971,7 @@ uint32_t SurfaceFlinger::setClientStateLocked(const FrameTimelineInfo& frameTime } if (layer == nullptr) { for (auto& [listener, callbackIds] : s.listeners) { mTransactionCallbackInvoker.addUnpresentedCallbackHandle( mTransactionCallbackInvoker.registerUnpresentedCallbackHandle( new CallbackHandle(listener, callbackIds, s.surface)); } return 0; Loading Loading @@ -4241,6 +4242,12 @@ uint32_t SurfaceFlinger::setClientStateLocked(const FrameTimelineInfo& frameTime flags |= eTransactionNeeded | eTraversalNeeded; } } std::vector<sp<CallbackHandle>> callbackHandles; if ((what & layer_state_t::eHasListenerCallbacksChanged) && (!filteredListeners.empty())) { for (auto& [listener, callbackIds] : filteredListeners) { callbackHandles.emplace_back(new CallbackHandle(listener, callbackIds, s.surface)); } } if (what & layer_state_t::eBufferChanged && layer->setBuffer(s.bufferData, postTime, desiredPresentTime, isAutoTimestamp, Loading @@ -4250,11 +4257,7 @@ uint32_t SurfaceFlinger::setClientStateLocked(const FrameTimelineInfo& frameTime layer->setFrameTimelineVsyncForBufferlessTransaction(frameTimelineInfo, postTime); } if ((what & layer_state_t::eHasListenerCallbacksChanged) && (!filteredListeners.empty())) { if (layer->setTransactionCompletedListeners(filteredListeners, s.surface)) { flags |= eTraversalNeeded; } } if (layer->setTransactionCompletedListeners(callbackHandles)) flags |= eTraversalNeeded; // Do not put anything that updates layer state or modifies flags after // setTransactionCompletedListener return flags; Loading