Only set acquire fences on overlay layers

Change-Id: I08e8173f83580de5a4e43a0ba5ea03e5ec6e8782
This commit is contained in:
Jesse Hall 2012-07-02 16:49:28 -07:00
parent dc5b485f74
commit c5c5a14c06
5 changed files with 26 additions and 7 deletions

View File

@ -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

View File

@ -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);

View File

@ -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;

View File

@ -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

View File

@ -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();