Loading services/surfaceflinger/Layer.cpp +5 −4 Original line number Diff line number Diff line Loading @@ -300,20 +300,21 @@ void Layer::setPerFrameData(HWComposer::HWCLayerInterface& layer) { // NOTE: buffer can be NULL if the client never drew into this // layer yet, or if we ran out of memory layer.setBuffer(buffer); } void Layer::setAcquireFence(HWComposer::HWCLayerInterface& layer) { int fenceFd = -1; if (mNeedHwcFence) { sp<Fence> fence = mSurfaceTexture->getCurrentFence(); if (fence.get()) { int fenceFd = fence->dup(); fenceFd = fence->dup(); if (fenceFd == -1) { ALOGW("failed to dup layer fence, skipping sync: %d", errno); } layer.setAcquireFenceFd(fenceFd); } mNeedHwcFence = false; } else { layer.setAcquireFenceFd(-1); } layer.setAcquireFenceFd(fenceFd); } void Layer::onDraw(const DisplayHardware& hw, const Region& clip) const Loading services/surfaceflinger/Layer.h +1 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,7 @@ public: // LayerBase interface virtual void setGeometry(HWComposer::HWCLayerInterface& layer); virtual void setPerFrameData(HWComposer::HWCLayerInterface& layer); virtual void setAcquireFence(HWComposer::HWCLayerInterface& layer); virtual void onDraw(const DisplayHardware& hw, const Region& clip) const; virtual uint32_t doTransaction(uint32_t transactionFlags); virtual void lockPageFlip(bool& recomputeVisibleRegions); Loading services/surfaceflinger/LayerBase.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -299,6 +299,10 @@ void LayerBase::setPerFrameData(HWComposer::HWCLayerInterface& layer) { layer.setBuffer(0); } void LayerBase::setAcquireFence(HWComposer::HWCLayerInterface& layer) { layer.setAcquireFenceFd(-1); } void LayerBase::setFiltering(bool filtering) { mFiltering = filtering; Loading services/surfaceflinger/LayerBase.h +1 −1 Original line number Diff line number Diff line Loading @@ -115,7 +115,7 @@ public: virtual void setGeometry(HWComposer::HWCLayerInterface& layer); virtual void setPerFrameData(HWComposer::HWCLayerInterface& layer); virtual void setAcquireFence(HWComposer::HWCLayerInterface& layer); /** * draw - performs some global clipping optimizations Loading services/surfaceflinger/SurfaceFlinger.cpp +15 −2 Original line number Diff line number Diff line Loading @@ -528,12 +528,25 @@ void SurfaceFlinger::postFramebuffer() // h/w composer. const DisplayHardware& hw(getDefaultDisplayHardware()); HWComposer& hwc(hw.getHwComposer()); size_t numLayers = mVisibleLayersSortedByZ.size(); const nsecs_t now = systemTime(); mDebugInSwapBuffers = now; if (hwc.initCheck() == NO_ERROR) { HWComposer::LayerListIterator cur = hwc.begin(); const HWComposer::LayerListIterator end = hwc.end(); for (size_t i = 0; cur != end && i < numLayers; ++i, ++cur) { if (cur->getCompositionType() == HWC_OVERLAY) { mVisibleLayersSortedByZ[i]->setAcquireFence(*cur); } else { cur->setAcquireFenceFd(-1); } } } hw.flip(mSwapRegion); size_t numLayers = mVisibleLayersSortedByZ.size(); HWComposer& hwc(hw.getHwComposer()); if (hwc.initCheck() == NO_ERROR) { HWComposer::LayerListIterator cur = hwc.begin(); const HWComposer::LayerListIterator end = hwc.end(); Loading Loading
services/surfaceflinger/Layer.cpp +5 −4 Original line number Diff line number Diff line Loading @@ -300,20 +300,21 @@ void Layer::setPerFrameData(HWComposer::HWCLayerInterface& layer) { // NOTE: buffer can be NULL if the client never drew into this // layer yet, or if we ran out of memory layer.setBuffer(buffer); } void Layer::setAcquireFence(HWComposer::HWCLayerInterface& layer) { int fenceFd = -1; if (mNeedHwcFence) { sp<Fence> fence = mSurfaceTexture->getCurrentFence(); if (fence.get()) { int fenceFd = fence->dup(); fenceFd = fence->dup(); if (fenceFd == -1) { ALOGW("failed to dup layer fence, skipping sync: %d", errno); } layer.setAcquireFenceFd(fenceFd); } mNeedHwcFence = false; } else { layer.setAcquireFenceFd(-1); } layer.setAcquireFenceFd(fenceFd); } void Layer::onDraw(const DisplayHardware& hw, const Region& clip) const Loading
services/surfaceflinger/Layer.h +1 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,7 @@ public: // LayerBase interface virtual void setGeometry(HWComposer::HWCLayerInterface& layer); virtual void setPerFrameData(HWComposer::HWCLayerInterface& layer); virtual void setAcquireFence(HWComposer::HWCLayerInterface& layer); virtual void onDraw(const DisplayHardware& hw, const Region& clip) const; virtual uint32_t doTransaction(uint32_t transactionFlags); virtual void lockPageFlip(bool& recomputeVisibleRegions); Loading
services/surfaceflinger/LayerBase.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -299,6 +299,10 @@ void LayerBase::setPerFrameData(HWComposer::HWCLayerInterface& layer) { layer.setBuffer(0); } void LayerBase::setAcquireFence(HWComposer::HWCLayerInterface& layer) { layer.setAcquireFenceFd(-1); } void LayerBase::setFiltering(bool filtering) { mFiltering = filtering; Loading
services/surfaceflinger/LayerBase.h +1 −1 Original line number Diff line number Diff line Loading @@ -115,7 +115,7 @@ public: virtual void setGeometry(HWComposer::HWCLayerInterface& layer); virtual void setPerFrameData(HWComposer::HWCLayerInterface& layer); virtual void setAcquireFence(HWComposer::HWCLayerInterface& layer); /** * draw - performs some global clipping optimizations Loading
services/surfaceflinger/SurfaceFlinger.cpp +15 −2 Original line number Diff line number Diff line Loading @@ -528,12 +528,25 @@ void SurfaceFlinger::postFramebuffer() // h/w composer. const DisplayHardware& hw(getDefaultDisplayHardware()); HWComposer& hwc(hw.getHwComposer()); size_t numLayers = mVisibleLayersSortedByZ.size(); const nsecs_t now = systemTime(); mDebugInSwapBuffers = now; if (hwc.initCheck() == NO_ERROR) { HWComposer::LayerListIterator cur = hwc.begin(); const HWComposer::LayerListIterator end = hwc.end(); for (size_t i = 0; cur != end && i < numLayers; ++i, ++cur) { if (cur->getCompositionType() == HWC_OVERLAY) { mVisibleLayersSortedByZ[i]->setAcquireFence(*cur); } else { cur->setAcquireFenceFd(-1); } } } hw.flip(mSwapRegion); size_t numLayers = mVisibleLayersSortedByZ.size(); HWComposer& hwc(hw.getHwComposer()); if (hwc.initCheck() == NO_ERROR) { HWComposer::LayerListIterator cur = hwc.begin(); const HWComposer::LayerListIterator end = hwc.end(); Loading