视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
关于Layer组件的同步以及减少GPU带宽的问题
2020-11-27 19:58:10 责编:小OO
文档


本文主要为大家分享一篇P关于Layer组件的同步以及减少GPU带宽的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧。

问题:

1) Layer 之间能否进行单独更新,比如其中video 层上面弹出的状态栏场景如何优化;

初步构想每次仅更新video layer或则将video layer 绕过BQ 进行处理。

2)FW 以及GPU对video layer 的常见处理;

3)几个变量的理解;

(1)mCurrentTexture ,nextTextureImage;

(2)BufferItem,BufferQueue,mslots;slot,mqueuedframe,mqueuedItem;

(3)syncForReleaseLocked,updateAndReleaseLocked,releaseBufferLocked,releaseBuffer

(4)

/ acquireBuffer attempts to acquire ownership of the next pending buffer in the BufferQueue.
 // If no buffer is pending then it returns NO_BUFFER_AVAILABLE. If a buffer is successfully
 // acquired, the information about the buffer is returned in BufferItem.
 //
 // If the buffer returned had previously been acquired then the BufferItem::mGraphicBuffer field
 // of buffer is set to NULL and it is assumed that the consumer still holds a reference to the
 // buffer.
 //
 // If presentWhen is non-zero, it indicates the time when the buffer will be displayed on
 // screen. If the buffer's timestamp is farther in the future, the buffer won't be acquired, and
 // PRESENT_LATER will be returned. The presentation time is in nanoseconds, and the time base
 // is CLOCK_MONOTONIC.
 //
 // If maxFrameNumber is non-zero, it indicates that acquireBuffer should only return a buffer
 // with a frame number less than or equal to maxFrameNumber. If no such frame is available
 // (such as when a buffer has been replaced but the consumer has not received the
 // onFrameReplaced callback), then PRESENT_LATER will be returned.
 //
 // Return of NO_ERROR means the operation completed as normal.
 //
 // Return of a positive value means the operation could not be completed at this time, but the
 // user should try again later:
 // * NO_BUFFER_AVAILABLE - no buffer is pending (nothing queued by producer)
 // * PRESENT_LATER - the buffer's timestamp is farther in the future
 //
 // Return of a negative value means an error has occurred:
 // * INVALID_OPERATION - too many buffers have been acquired
 // Returned by releaseBuffer, after which the consumer must free any references to the
 // just-released buffer that it might have.
 STALE_BUFFER_SLOT = 1,
 // Returned by dequeueBuffer if there are no pending buffers available.
 NO_BUFFER_AVAILABLE,
 // Returned by dequeueBuffer if it's too early for the buffer to be acquired.
 PRESENT_LATER,

(5)mslots 与mframe 以及mframenumber 的区别

(6)onframavailable 和latchbuffer ,reject,updateteximage,的逻辑。

其中updateteximage;

(7)bufferitem 与mslots的区别

(8)bufferqueueconsumer 与bufferitemconsumer区别;

(9)acquirebuffer的fence 逻辑,fencefd是哪来的;

fence 相关接口定义参见ui/Fence.h

 status_t Fence::waitForever(const char* logname) { ATRACE_CALL();
 if (mFenceFd == -1) {
 return NO_ERROR;
 }
 int warningTimeout = 3000;
 int err = sync_wait(mFenceFd, warningTimeout);
 if (err < 0 && errno == ETIME) {
 ALOGE("%s: fence %d didn't signal in %u ms", logname, mFenceFd,
 warningTimeout);
 err = sync_wait(mFenceFd, TIMEOUT_NEVER);
 }
 return err < 0 ? -errno : status_t(NO_ERROR);
 }
 struct EglSlot {
 EglSlot() : mEglFence(EGL_NO_SYNC_KHR) {}
 // mEglImage is the EGLImage created from mGraphicBuffer.
 sp<EglImage> mEglImage;
 // mFence is the EGL sync object that must signal before the buffer
 // associated with this buffer slot may be dequeued. It is initialized
 // to EGL_NO_SYNC_KHR when the buffer is created and (optionally, based
 // on a compile-time option) set to a new sync object in updateTexImage.
 EGLSyncKHR mEglFence;
 };

(10)

updateAndReleaseLocked(item, &mPendingRelease),
updateAndReleaseLocked(item),
bindTextureImageLocked()

下载本文
显示全文
专题