Only set acquire fences on overlay layers
Change-Id: I08e8173f83580de5a4e43a0ba5ea03e5ec6e8782
This commit is contained in:
parent
dc5b485f74
commit
c5c5a14c06
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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…
Reference in New Issue