Loading services/surfaceflinger/BufferLayer.cpp +33 −33 Original line number Original line Diff line number Diff line Loading @@ -53,7 +53,7 @@ namespace android { BufferLayer::BufferLayer(SurfaceFlinger* flinger, const sp<Client>& client, const String8& name, BufferLayer::BufferLayer(SurfaceFlinger* flinger, const sp<Client>& client, const String8& name, uint32_t w, uint32_t h, uint32_t flags) uint32_t w, uint32_t h, uint32_t flags) : Layer(flinger, client, name, w, h, flags), : Layer(flinger, client, name, w, h, flags), mSurfaceFlingerConsumer(nullptr), mConsumer(nullptr), mTextureName(UINT32_MAX), mTextureName(UINT32_MAX), mFormat(PIXEL_FORMAT_NONE), mFormat(PIXEL_FORMAT_NONE), mCurrentScalingMode(NATIVE_WINDOW_SCALING_MODE_FREEZE), mCurrentScalingMode(NATIVE_WINDOW_SCALING_MODE_FREEZE), Loading Loading @@ -89,7 +89,7 @@ void BufferLayer::useSurfaceDamage() { if (mFlinger->mForceFullDamage) { if (mFlinger->mForceFullDamage) { surfaceDamageRegion = Region::INVALID_REGION; surfaceDamageRegion = Region::INVALID_REGION; } else { } else { surfaceDamageRegion = mSurfaceFlingerConsumer->getSurfaceDamage(); surfaceDamageRegion = mConsumer->getSurfaceDamage(); } } } } Loading Loading @@ -129,9 +129,9 @@ status_t BufferLayer::setBuffers(uint32_t w, uint32_t h, PixelFormat format, uin mProtectedByApp = (flags & ISurfaceComposerClient::eProtectedByApp) ? true : false; mProtectedByApp = (flags & ISurfaceComposerClient::eProtectedByApp) ? true : false; mCurrentOpacity = getOpacityForFormat(format); mCurrentOpacity = getOpacityForFormat(format); mSurfaceFlingerConsumer->setDefaultBufferSize(w, h); mConsumer->setDefaultBufferSize(w, h); mSurfaceFlingerConsumer->setDefaultBufferFormat(format); mConsumer->setDefaultBufferFormat(format); mSurfaceFlingerConsumer->setConsumerUsageBits(getEffectiveUsage(0)); mConsumer->setConsumerUsageBits(getEffectiveUsage(0)); return NO_ERROR; return NO_ERROR; } } Loading Loading @@ -190,7 +190,7 @@ void BufferLayer::onDraw(const RenderArea& renderArea, const Region& clip, // Bind the current buffer to the GL texture, and wait for it to be // Bind the current buffer to the GL texture, and wait for it to be // ready for us to draw into. // ready for us to draw into. status_t err = mSurfaceFlingerConsumer->bindTextureImage(); status_t err = mConsumer->bindTextureImage(); if (err != NO_ERROR) { if (err != NO_ERROR) { ALOGW("onDraw: bindTextureImage failed (err=%d)", err); ALOGW("onDraw: bindTextureImage failed (err=%d)", err); // Go ahead and draw the buffer anyway; no matter what we do the screen // Go ahead and draw the buffer anyway; no matter what we do the screen Loading @@ -207,8 +207,8 @@ void BufferLayer::onDraw(const RenderArea& renderArea, const Region& clip, // Query the texture matrix given our current filtering mode. // Query the texture matrix given our current filtering mode. float textureMatrix[16]; float textureMatrix[16]; mSurfaceFlingerConsumer->setFilteringEnabled(useFiltering); mConsumer->setFilteringEnabled(useFiltering); mSurfaceFlingerConsumer->getTransformMatrix(textureMatrix); mConsumer->getTransformMatrix(textureMatrix); if (getTransformToDisplayInverse()) { if (getTransformToDisplayInverse()) { /* /* Loading Loading @@ -253,11 +253,11 @@ void BufferLayer::onDraw(const RenderArea& renderArea, const Region& clip, } } void BufferLayer::onLayerDisplayed(const sp<Fence>& releaseFence) { void BufferLayer::onLayerDisplayed(const sp<Fence>& releaseFence) { mSurfaceFlingerConsumer->setReleaseFence(releaseFence); mConsumer->setReleaseFence(releaseFence); } } void BufferLayer::abandon() { void BufferLayer::abandon() { mSurfaceFlingerConsumer->abandon(); mConsumer->abandon(); } } bool BufferLayer::shouldPresentNow(const DispSync& dispSync) const { bool BufferLayer::shouldPresentNow(const DispSync& dispSync) const { Loading @@ -270,7 +270,7 @@ bool BufferLayer::shouldPresentNow(const DispSync& dispSync) const { return false; return false; } } auto timestamp = mQueueItems[0].mTimestamp; auto timestamp = mQueueItems[0].mTimestamp; nsecs_t expectedPresent = mSurfaceFlingerConsumer->computeExpectedPresent(dispSync); nsecs_t expectedPresent = mConsumer->computeExpectedPresent(dispSync); // Ignore timestamps more than a second in the future // Ignore timestamps more than a second in the future bool isPlausible = timestamp < (expectedPresent + s2ns(1)); bool isPlausible = timestamp < (expectedPresent + s2ns(1)); Loading @@ -284,7 +284,7 @@ bool BufferLayer::shouldPresentNow(const DispSync& dispSync) const { } } void BufferLayer::setTransformHint(uint32_t orientation) const { void BufferLayer::setTransformHint(uint32_t orientation) const { mSurfaceFlingerConsumer->setTransformHint(orientation); mConsumer->setTransformHint(orientation); } } bool BufferLayer::onPreComposition(nsecs_t refreshStartTime) { bool BufferLayer::onPreComposition(nsecs_t refreshStartTime) { Loading Loading @@ -312,10 +312,10 @@ bool BufferLayer::onPostComposition(const std::shared_ptr<FenceTime>& glDoneFenc } } // Update mFrameTracker. // Update mFrameTracker. nsecs_t desiredPresentTime = mSurfaceFlingerConsumer->getTimestamp(); nsecs_t desiredPresentTime = mConsumer->getTimestamp(); mFrameTracker.setDesiredPresentTime(desiredPresentTime); mFrameTracker.setDesiredPresentTime(desiredPresentTime); std::shared_ptr<FenceTime> frameReadyFence = mSurfaceFlingerConsumer->getCurrentFenceTime(); std::shared_ptr<FenceTime> frameReadyFence = mConsumer->getCurrentFenceTime(); if (frameReadyFence->isValid()) { if (frameReadyFence->isValid()) { mFrameTracker.setFrameReadyFence(std::move(frameReadyFence)); mFrameTracker.setFrameReadyFence(std::move(frameReadyFence)); } else { } else { Loading @@ -340,7 +340,7 @@ bool BufferLayer::onPostComposition(const std::shared_ptr<FenceTime>& glDoneFenc std::vector<OccupancyTracker::Segment> BufferLayer::getOccupancyHistory(bool forceFlush) { std::vector<OccupancyTracker::Segment> BufferLayer::getOccupancyHistory(bool forceFlush) { std::vector<OccupancyTracker::Segment> history; std::vector<OccupancyTracker::Segment> history; status_t result = mSurfaceFlingerConsumer->getOccupancyHistory(forceFlush, &history); status_t result = mConsumer->getOccupancyHistory(forceFlush, &history); if (result != NO_ERROR) { if (result != NO_ERROR) { ALOGW("[%s] Failed to obtain occupancy history (%d)", mName.string(), result); ALOGW("[%s] Failed to obtain occupancy history (%d)", mName.string(), result); return {}; return {}; Loading @@ -349,16 +349,16 @@ std::vector<OccupancyTracker::Segment> BufferLayer::getOccupancyHistory(bool for } } bool BufferLayer::getTransformToDisplayInverse() const { bool BufferLayer::getTransformToDisplayInverse() const { return mSurfaceFlingerConsumer->getTransformToDisplayInverse(); return mConsumer->getTransformToDisplayInverse(); } } void BufferLayer::releasePendingBuffer(nsecs_t dequeueReadyTime) { void BufferLayer::releasePendingBuffer(nsecs_t dequeueReadyTime) { if (!mSurfaceFlingerConsumer->releasePendingBuffer()) { if (!mConsumer->releasePendingBuffer()) { return; return; } } auto releaseFenceTime = auto releaseFenceTime = std::make_shared<FenceTime>(mSurfaceFlingerConsumer->getPrevFinalReleaseFence()); std::make_shared<FenceTime>(mConsumer->getPrevFinalReleaseFence()); mReleaseTimeline.updateSignalTimes(); mReleaseTimeline.updateSignalTimes(); mReleaseTimeline.push(releaseFenceTime); mReleaseTimeline.push(releaseFenceTime); Loading @@ -374,7 +374,7 @@ Region BufferLayer::latchBuffer(bool& recomputeVisibleRegions, nsecs_t latchTime if (android_atomic_acquire_cas(true, false, &mSidebandStreamChanged) == 0) { if (android_atomic_acquire_cas(true, false, &mSidebandStreamChanged) == 0) { // mSidebandStreamChanged was true // mSidebandStreamChanged was true mSidebandStream = mSurfaceFlingerConsumer->getSidebandStream(); mSidebandStream = mConsumer->getSidebandStream(); // replicated in LayerBE until FE/BE is ready to be synchronized // replicated in LayerBE until FE/BE is ready to be synchronized getBE().compositionInfo.hwc.sidebandStream = mSidebandStream; getBE().compositionInfo.hwc.sidebandStream = mSidebandStream; if (getBE().compositionInfo.hwc.sidebandStream != NULL) { if (getBE().compositionInfo.hwc.sidebandStream != NULL) { Loading Loading @@ -427,7 +427,7 @@ Region BufferLayer::latchBuffer(bool& recomputeVisibleRegions, nsecs_t latchTime getProducerStickyTransform() != 0, mName.string(), getProducerStickyTransform() != 0, mName.string(), mOverrideScalingMode, mFreezeGeometryUpdates); mOverrideScalingMode, mFreezeGeometryUpdates); status_t updateResult = status_t updateResult = mSurfaceFlingerConsumer->updateTexImage(&r, mFlinger->mPrimaryDispSync, mConsumer->updateTexImage(&r, mFlinger->mPrimaryDispSync, &mAutoRefresh, &queuedBuffer, &mAutoRefresh, &queuedBuffer, mLastFrameNumberReceived); mLastFrameNumberReceived); if (updateResult == BufferQueue::PRESENT_LATER) { if (updateResult == BufferQueue::PRESENT_LATER) { Loading Loading @@ -466,7 +466,7 @@ Region BufferLayer::latchBuffer(bool& recomputeVisibleRegions, nsecs_t latchTime if (queuedBuffer) { if (queuedBuffer) { // Autolock scope // Autolock scope auto currentFrameNumber = mSurfaceFlingerConsumer->getFrameNumber(); auto currentFrameNumber = mConsumer->getFrameNumber(); Mutex::Autolock lock(mQueueItemLock); Mutex::Autolock lock(mQueueItemLock); Loading @@ -489,7 +489,7 @@ Region BufferLayer::latchBuffer(bool& recomputeVisibleRegions, nsecs_t latchTime // update the active buffer // update the active buffer getBE().compositionInfo.mBuffer = getBE().compositionInfo.mBuffer = mSurfaceFlingerConsumer->getCurrentBuffer(&getBE().compositionInfo.mBufferSlot); mConsumer->getCurrentBuffer(&getBE().compositionInfo.mBufferSlot); // replicated in LayerBE until FE/BE is ready to be synchronized // replicated in LayerBE until FE/BE is ready to be synchronized mActiveBuffer = getBE().compositionInfo.mBuffer; mActiveBuffer = getBE().compositionInfo.mBuffer; if (getBE().compositionInfo.mBuffer == NULL) { if (getBE().compositionInfo.mBuffer == NULL) { Loading @@ -499,7 +499,7 @@ Region BufferLayer::latchBuffer(bool& recomputeVisibleRegions, nsecs_t latchTime mBufferLatched = true; mBufferLatched = true; mPreviousFrameNumber = mCurrentFrameNumber; mPreviousFrameNumber = mCurrentFrameNumber; mCurrentFrameNumber = mSurfaceFlingerConsumer->getFrameNumber(); mCurrentFrameNumber = mConsumer->getFrameNumber(); { { Mutex::Autolock lock(mFrameEventHistoryMutex); Mutex::Autolock lock(mFrameEventHistoryMutex); Loading @@ -514,11 +514,11 @@ Region BufferLayer::latchBuffer(bool& recomputeVisibleRegions, nsecs_t latchTime recomputeVisibleRegions = true; recomputeVisibleRegions = true; } } setDataSpace(mSurfaceFlingerConsumer->getCurrentDataSpace()); setDataSpace(mConsumer->getCurrentDataSpace()); Rect crop(mSurfaceFlingerConsumer->getCurrentCrop()); Rect crop(mConsumer->getCurrentCrop()); const uint32_t transform(mSurfaceFlingerConsumer->getCurrentTransform()); const uint32_t transform(mConsumer->getCurrentTransform()); const uint32_t scalingMode(mSurfaceFlingerConsumer->getCurrentScalingMode()); const uint32_t scalingMode(mConsumer->getCurrentScalingMode()); if ((crop != mCurrentCrop) || if ((crop != mCurrentCrop) || (transform != mCurrentTransform) || (transform != mCurrentTransform) || (scalingMode != mCurrentScalingMode)) { (scalingMode != mCurrentScalingMode)) { Loading Loading @@ -573,7 +573,7 @@ Region BufferLayer::latchBuffer(bool& recomputeVisibleRegions, nsecs_t latchTime } } void BufferLayer::setDefaultBufferSize(uint32_t w, uint32_t h) { void BufferLayer::setDefaultBufferSize(uint32_t w, uint32_t h) { mSurfaceFlingerConsumer->setDefaultBufferSize(w, h); mConsumer->setDefaultBufferSize(w, h); } } void BufferLayer::setPerFrameData(const sp<const DisplayDevice>& displayDevice) { void BufferLayer::setPerFrameData(const sp<const DisplayDevice>& displayDevice) { Loading Loading @@ -633,7 +633,7 @@ void BufferLayer::setPerFrameData(const sp<const DisplayDevice>& displayDevice) hwcInfo.bufferCache.getHwcBuffer(getBE().compositionInfo.mBufferSlot, hwcInfo.bufferCache.getHwcBuffer(getBE().compositionInfo.mBufferSlot, getBE().compositionInfo.mBuffer, &hwcSlot, &hwcBuffer); getBE().compositionInfo.mBuffer, &hwcSlot, &hwcBuffer); auto acquireFence = mSurfaceFlingerConsumer->getCurrentFence(); auto acquireFence = mConsumer->getCurrentFence(); error = hwcLayer->setBuffer(hwcSlot, hwcBuffer, acquireFence); error = hwcLayer->setBuffer(hwcSlot, hwcBuffer, acquireFence); if (error != HWC2::Error::None) { if (error != HWC2::Error::None) { ALOGE("[%s] Failed to set buffer %p: %s (%d)", mName.string(), ALOGE("[%s] Failed to set buffer %p: %s (%d)", mName.string(), Loading @@ -660,11 +660,11 @@ void BufferLayer::onFirstRef() { sp<IGraphicBufferConsumer> consumer; sp<IGraphicBufferConsumer> consumer; BufferQueue::createBufferQueue(&producer, &consumer, true); BufferQueue::createBufferQueue(&producer, &consumer, true); mProducer = new MonitoredProducer(producer, mFlinger, this); mProducer = new MonitoredProducer(producer, mFlinger, this); mSurfaceFlingerConsumer = new BufferLayerConsumer(consumer, mConsumer = new BufferLayerConsumer(consumer, mFlinger->getRenderEngine(), mTextureName, this); mFlinger->getRenderEngine(), mTextureName, this); mSurfaceFlingerConsumer->setConsumerUsageBits(getEffectiveUsage(0)); mConsumer->setConsumerUsageBits(getEffectiveUsage(0)); mSurfaceFlingerConsumer->setContentsChangedListener(this); mConsumer->setContentsChangedListener(this); mSurfaceFlingerConsumer->setName(mName); mConsumer->setName(mName); if (mFlinger->isLayerTripleBufferingDisabled()) { if (mFlinger->isLayerTripleBufferingDisabled()) { mProducer->setMaxDequeuedBufferCount(2); mProducer->setMaxDequeuedBufferCount(2); Loading services/surfaceflinger/BufferLayer.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -170,7 +170,7 @@ public: sp<IGraphicBufferProducer> getProducer() const; sp<IGraphicBufferProducer> getProducer() const; private: private: sp<BufferLayerConsumer> mSurfaceFlingerConsumer; sp<BufferLayerConsumer> mConsumer; // Check all of the local sync points to ensure that all transactions // Check all of the local sync points to ensure that all transactions // which need to have been applied prior to the frame which is about to // which need to have been applied prior to the frame which is about to Loading Loading
services/surfaceflinger/BufferLayer.cpp +33 −33 Original line number Original line Diff line number Diff line Loading @@ -53,7 +53,7 @@ namespace android { BufferLayer::BufferLayer(SurfaceFlinger* flinger, const sp<Client>& client, const String8& name, BufferLayer::BufferLayer(SurfaceFlinger* flinger, const sp<Client>& client, const String8& name, uint32_t w, uint32_t h, uint32_t flags) uint32_t w, uint32_t h, uint32_t flags) : Layer(flinger, client, name, w, h, flags), : Layer(flinger, client, name, w, h, flags), mSurfaceFlingerConsumer(nullptr), mConsumer(nullptr), mTextureName(UINT32_MAX), mTextureName(UINT32_MAX), mFormat(PIXEL_FORMAT_NONE), mFormat(PIXEL_FORMAT_NONE), mCurrentScalingMode(NATIVE_WINDOW_SCALING_MODE_FREEZE), mCurrentScalingMode(NATIVE_WINDOW_SCALING_MODE_FREEZE), Loading Loading @@ -89,7 +89,7 @@ void BufferLayer::useSurfaceDamage() { if (mFlinger->mForceFullDamage) { if (mFlinger->mForceFullDamage) { surfaceDamageRegion = Region::INVALID_REGION; surfaceDamageRegion = Region::INVALID_REGION; } else { } else { surfaceDamageRegion = mSurfaceFlingerConsumer->getSurfaceDamage(); surfaceDamageRegion = mConsumer->getSurfaceDamage(); } } } } Loading Loading @@ -129,9 +129,9 @@ status_t BufferLayer::setBuffers(uint32_t w, uint32_t h, PixelFormat format, uin mProtectedByApp = (flags & ISurfaceComposerClient::eProtectedByApp) ? true : false; mProtectedByApp = (flags & ISurfaceComposerClient::eProtectedByApp) ? true : false; mCurrentOpacity = getOpacityForFormat(format); mCurrentOpacity = getOpacityForFormat(format); mSurfaceFlingerConsumer->setDefaultBufferSize(w, h); mConsumer->setDefaultBufferSize(w, h); mSurfaceFlingerConsumer->setDefaultBufferFormat(format); mConsumer->setDefaultBufferFormat(format); mSurfaceFlingerConsumer->setConsumerUsageBits(getEffectiveUsage(0)); mConsumer->setConsumerUsageBits(getEffectiveUsage(0)); return NO_ERROR; return NO_ERROR; } } Loading Loading @@ -190,7 +190,7 @@ void BufferLayer::onDraw(const RenderArea& renderArea, const Region& clip, // Bind the current buffer to the GL texture, and wait for it to be // Bind the current buffer to the GL texture, and wait for it to be // ready for us to draw into. // ready for us to draw into. status_t err = mSurfaceFlingerConsumer->bindTextureImage(); status_t err = mConsumer->bindTextureImage(); if (err != NO_ERROR) { if (err != NO_ERROR) { ALOGW("onDraw: bindTextureImage failed (err=%d)", err); ALOGW("onDraw: bindTextureImage failed (err=%d)", err); // Go ahead and draw the buffer anyway; no matter what we do the screen // Go ahead and draw the buffer anyway; no matter what we do the screen Loading @@ -207,8 +207,8 @@ void BufferLayer::onDraw(const RenderArea& renderArea, const Region& clip, // Query the texture matrix given our current filtering mode. // Query the texture matrix given our current filtering mode. float textureMatrix[16]; float textureMatrix[16]; mSurfaceFlingerConsumer->setFilteringEnabled(useFiltering); mConsumer->setFilteringEnabled(useFiltering); mSurfaceFlingerConsumer->getTransformMatrix(textureMatrix); mConsumer->getTransformMatrix(textureMatrix); if (getTransformToDisplayInverse()) { if (getTransformToDisplayInverse()) { /* /* Loading Loading @@ -253,11 +253,11 @@ void BufferLayer::onDraw(const RenderArea& renderArea, const Region& clip, } } void BufferLayer::onLayerDisplayed(const sp<Fence>& releaseFence) { void BufferLayer::onLayerDisplayed(const sp<Fence>& releaseFence) { mSurfaceFlingerConsumer->setReleaseFence(releaseFence); mConsumer->setReleaseFence(releaseFence); } } void BufferLayer::abandon() { void BufferLayer::abandon() { mSurfaceFlingerConsumer->abandon(); mConsumer->abandon(); } } bool BufferLayer::shouldPresentNow(const DispSync& dispSync) const { bool BufferLayer::shouldPresentNow(const DispSync& dispSync) const { Loading @@ -270,7 +270,7 @@ bool BufferLayer::shouldPresentNow(const DispSync& dispSync) const { return false; return false; } } auto timestamp = mQueueItems[0].mTimestamp; auto timestamp = mQueueItems[0].mTimestamp; nsecs_t expectedPresent = mSurfaceFlingerConsumer->computeExpectedPresent(dispSync); nsecs_t expectedPresent = mConsumer->computeExpectedPresent(dispSync); // Ignore timestamps more than a second in the future // Ignore timestamps more than a second in the future bool isPlausible = timestamp < (expectedPresent + s2ns(1)); bool isPlausible = timestamp < (expectedPresent + s2ns(1)); Loading @@ -284,7 +284,7 @@ bool BufferLayer::shouldPresentNow(const DispSync& dispSync) const { } } void BufferLayer::setTransformHint(uint32_t orientation) const { void BufferLayer::setTransformHint(uint32_t orientation) const { mSurfaceFlingerConsumer->setTransformHint(orientation); mConsumer->setTransformHint(orientation); } } bool BufferLayer::onPreComposition(nsecs_t refreshStartTime) { bool BufferLayer::onPreComposition(nsecs_t refreshStartTime) { Loading Loading @@ -312,10 +312,10 @@ bool BufferLayer::onPostComposition(const std::shared_ptr<FenceTime>& glDoneFenc } } // Update mFrameTracker. // Update mFrameTracker. nsecs_t desiredPresentTime = mSurfaceFlingerConsumer->getTimestamp(); nsecs_t desiredPresentTime = mConsumer->getTimestamp(); mFrameTracker.setDesiredPresentTime(desiredPresentTime); mFrameTracker.setDesiredPresentTime(desiredPresentTime); std::shared_ptr<FenceTime> frameReadyFence = mSurfaceFlingerConsumer->getCurrentFenceTime(); std::shared_ptr<FenceTime> frameReadyFence = mConsumer->getCurrentFenceTime(); if (frameReadyFence->isValid()) { if (frameReadyFence->isValid()) { mFrameTracker.setFrameReadyFence(std::move(frameReadyFence)); mFrameTracker.setFrameReadyFence(std::move(frameReadyFence)); } else { } else { Loading @@ -340,7 +340,7 @@ bool BufferLayer::onPostComposition(const std::shared_ptr<FenceTime>& glDoneFenc std::vector<OccupancyTracker::Segment> BufferLayer::getOccupancyHistory(bool forceFlush) { std::vector<OccupancyTracker::Segment> BufferLayer::getOccupancyHistory(bool forceFlush) { std::vector<OccupancyTracker::Segment> history; std::vector<OccupancyTracker::Segment> history; status_t result = mSurfaceFlingerConsumer->getOccupancyHistory(forceFlush, &history); status_t result = mConsumer->getOccupancyHistory(forceFlush, &history); if (result != NO_ERROR) { if (result != NO_ERROR) { ALOGW("[%s] Failed to obtain occupancy history (%d)", mName.string(), result); ALOGW("[%s] Failed to obtain occupancy history (%d)", mName.string(), result); return {}; return {}; Loading @@ -349,16 +349,16 @@ std::vector<OccupancyTracker::Segment> BufferLayer::getOccupancyHistory(bool for } } bool BufferLayer::getTransformToDisplayInverse() const { bool BufferLayer::getTransformToDisplayInverse() const { return mSurfaceFlingerConsumer->getTransformToDisplayInverse(); return mConsumer->getTransformToDisplayInverse(); } } void BufferLayer::releasePendingBuffer(nsecs_t dequeueReadyTime) { void BufferLayer::releasePendingBuffer(nsecs_t dequeueReadyTime) { if (!mSurfaceFlingerConsumer->releasePendingBuffer()) { if (!mConsumer->releasePendingBuffer()) { return; return; } } auto releaseFenceTime = auto releaseFenceTime = std::make_shared<FenceTime>(mSurfaceFlingerConsumer->getPrevFinalReleaseFence()); std::make_shared<FenceTime>(mConsumer->getPrevFinalReleaseFence()); mReleaseTimeline.updateSignalTimes(); mReleaseTimeline.updateSignalTimes(); mReleaseTimeline.push(releaseFenceTime); mReleaseTimeline.push(releaseFenceTime); Loading @@ -374,7 +374,7 @@ Region BufferLayer::latchBuffer(bool& recomputeVisibleRegions, nsecs_t latchTime if (android_atomic_acquire_cas(true, false, &mSidebandStreamChanged) == 0) { if (android_atomic_acquire_cas(true, false, &mSidebandStreamChanged) == 0) { // mSidebandStreamChanged was true // mSidebandStreamChanged was true mSidebandStream = mSurfaceFlingerConsumer->getSidebandStream(); mSidebandStream = mConsumer->getSidebandStream(); // replicated in LayerBE until FE/BE is ready to be synchronized // replicated in LayerBE until FE/BE is ready to be synchronized getBE().compositionInfo.hwc.sidebandStream = mSidebandStream; getBE().compositionInfo.hwc.sidebandStream = mSidebandStream; if (getBE().compositionInfo.hwc.sidebandStream != NULL) { if (getBE().compositionInfo.hwc.sidebandStream != NULL) { Loading Loading @@ -427,7 +427,7 @@ Region BufferLayer::latchBuffer(bool& recomputeVisibleRegions, nsecs_t latchTime getProducerStickyTransform() != 0, mName.string(), getProducerStickyTransform() != 0, mName.string(), mOverrideScalingMode, mFreezeGeometryUpdates); mOverrideScalingMode, mFreezeGeometryUpdates); status_t updateResult = status_t updateResult = mSurfaceFlingerConsumer->updateTexImage(&r, mFlinger->mPrimaryDispSync, mConsumer->updateTexImage(&r, mFlinger->mPrimaryDispSync, &mAutoRefresh, &queuedBuffer, &mAutoRefresh, &queuedBuffer, mLastFrameNumberReceived); mLastFrameNumberReceived); if (updateResult == BufferQueue::PRESENT_LATER) { if (updateResult == BufferQueue::PRESENT_LATER) { Loading Loading @@ -466,7 +466,7 @@ Region BufferLayer::latchBuffer(bool& recomputeVisibleRegions, nsecs_t latchTime if (queuedBuffer) { if (queuedBuffer) { // Autolock scope // Autolock scope auto currentFrameNumber = mSurfaceFlingerConsumer->getFrameNumber(); auto currentFrameNumber = mConsumer->getFrameNumber(); Mutex::Autolock lock(mQueueItemLock); Mutex::Autolock lock(mQueueItemLock); Loading @@ -489,7 +489,7 @@ Region BufferLayer::latchBuffer(bool& recomputeVisibleRegions, nsecs_t latchTime // update the active buffer // update the active buffer getBE().compositionInfo.mBuffer = getBE().compositionInfo.mBuffer = mSurfaceFlingerConsumer->getCurrentBuffer(&getBE().compositionInfo.mBufferSlot); mConsumer->getCurrentBuffer(&getBE().compositionInfo.mBufferSlot); // replicated in LayerBE until FE/BE is ready to be synchronized // replicated in LayerBE until FE/BE is ready to be synchronized mActiveBuffer = getBE().compositionInfo.mBuffer; mActiveBuffer = getBE().compositionInfo.mBuffer; if (getBE().compositionInfo.mBuffer == NULL) { if (getBE().compositionInfo.mBuffer == NULL) { Loading @@ -499,7 +499,7 @@ Region BufferLayer::latchBuffer(bool& recomputeVisibleRegions, nsecs_t latchTime mBufferLatched = true; mBufferLatched = true; mPreviousFrameNumber = mCurrentFrameNumber; mPreviousFrameNumber = mCurrentFrameNumber; mCurrentFrameNumber = mSurfaceFlingerConsumer->getFrameNumber(); mCurrentFrameNumber = mConsumer->getFrameNumber(); { { Mutex::Autolock lock(mFrameEventHistoryMutex); Mutex::Autolock lock(mFrameEventHistoryMutex); Loading @@ -514,11 +514,11 @@ Region BufferLayer::latchBuffer(bool& recomputeVisibleRegions, nsecs_t latchTime recomputeVisibleRegions = true; recomputeVisibleRegions = true; } } setDataSpace(mSurfaceFlingerConsumer->getCurrentDataSpace()); setDataSpace(mConsumer->getCurrentDataSpace()); Rect crop(mSurfaceFlingerConsumer->getCurrentCrop()); Rect crop(mConsumer->getCurrentCrop()); const uint32_t transform(mSurfaceFlingerConsumer->getCurrentTransform()); const uint32_t transform(mConsumer->getCurrentTransform()); const uint32_t scalingMode(mSurfaceFlingerConsumer->getCurrentScalingMode()); const uint32_t scalingMode(mConsumer->getCurrentScalingMode()); if ((crop != mCurrentCrop) || if ((crop != mCurrentCrop) || (transform != mCurrentTransform) || (transform != mCurrentTransform) || (scalingMode != mCurrentScalingMode)) { (scalingMode != mCurrentScalingMode)) { Loading Loading @@ -573,7 +573,7 @@ Region BufferLayer::latchBuffer(bool& recomputeVisibleRegions, nsecs_t latchTime } } void BufferLayer::setDefaultBufferSize(uint32_t w, uint32_t h) { void BufferLayer::setDefaultBufferSize(uint32_t w, uint32_t h) { mSurfaceFlingerConsumer->setDefaultBufferSize(w, h); mConsumer->setDefaultBufferSize(w, h); } } void BufferLayer::setPerFrameData(const sp<const DisplayDevice>& displayDevice) { void BufferLayer::setPerFrameData(const sp<const DisplayDevice>& displayDevice) { Loading Loading @@ -633,7 +633,7 @@ void BufferLayer::setPerFrameData(const sp<const DisplayDevice>& displayDevice) hwcInfo.bufferCache.getHwcBuffer(getBE().compositionInfo.mBufferSlot, hwcInfo.bufferCache.getHwcBuffer(getBE().compositionInfo.mBufferSlot, getBE().compositionInfo.mBuffer, &hwcSlot, &hwcBuffer); getBE().compositionInfo.mBuffer, &hwcSlot, &hwcBuffer); auto acquireFence = mSurfaceFlingerConsumer->getCurrentFence(); auto acquireFence = mConsumer->getCurrentFence(); error = hwcLayer->setBuffer(hwcSlot, hwcBuffer, acquireFence); error = hwcLayer->setBuffer(hwcSlot, hwcBuffer, acquireFence); if (error != HWC2::Error::None) { if (error != HWC2::Error::None) { ALOGE("[%s] Failed to set buffer %p: %s (%d)", mName.string(), ALOGE("[%s] Failed to set buffer %p: %s (%d)", mName.string(), Loading @@ -660,11 +660,11 @@ void BufferLayer::onFirstRef() { sp<IGraphicBufferConsumer> consumer; sp<IGraphicBufferConsumer> consumer; BufferQueue::createBufferQueue(&producer, &consumer, true); BufferQueue::createBufferQueue(&producer, &consumer, true); mProducer = new MonitoredProducer(producer, mFlinger, this); mProducer = new MonitoredProducer(producer, mFlinger, this); mSurfaceFlingerConsumer = new BufferLayerConsumer(consumer, mConsumer = new BufferLayerConsumer(consumer, mFlinger->getRenderEngine(), mTextureName, this); mFlinger->getRenderEngine(), mTextureName, this); mSurfaceFlingerConsumer->setConsumerUsageBits(getEffectiveUsage(0)); mConsumer->setConsumerUsageBits(getEffectiveUsage(0)); mSurfaceFlingerConsumer->setContentsChangedListener(this); mConsumer->setContentsChangedListener(this); mSurfaceFlingerConsumer->setName(mName); mConsumer->setName(mName); if (mFlinger->isLayerTripleBufferingDisabled()) { if (mFlinger->isLayerTripleBufferingDisabled()) { mProducer->setMaxDequeuedBufferCount(2); mProducer->setMaxDequeuedBufferCount(2); Loading
services/surfaceflinger/BufferLayer.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -170,7 +170,7 @@ public: sp<IGraphicBufferProducer> getProducer() const; sp<IGraphicBufferProducer> getProducer() const; private: private: sp<BufferLayerConsumer> mSurfaceFlingerConsumer; sp<BufferLayerConsumer> mConsumer; // Check all of the local sync points to ensure that all transactions // Check all of the local sync points to ensure that all transactions // which need to have been applied prior to the frame which is about to // which need to have been applied prior to the frame which is about to Loading