好看动漫网替代网站,建设网站网站首页,福鼎网页设计,宁波网站关键词优化排名本文主要为大家分享一篇P关于Layer组件的同步以及减少GPU带宽的问题#xff0c;具有很好的参考价值#xff0c;希望对大家有所帮助。一起跟随小编过来看看吧。问题#xff1a;1) Layer 之间能否进行单独更新#xff0c;比如其中video 层上面弹出的状态栏场景如何优化#…本文主要为大家分享一篇P关于Layer组件的同步以及减少GPU带宽的问题具有很好的参考价值希望对大家有所帮助。一起跟随小编过来看看吧。问题1) Layer 之间能否进行单独更新比如其中video 层上面弹出的状态栏场景如何优化初步构想每次仅更新video layer或则将video layer 绕过BQ 进行处理。2)FW 以及GPU对video layer 的常见处理3)几个变量的理解(1)mCurrentTexture nextTextureImage(2)BufferItemBufferQueue,mslotsslotmqueuedframemqueuedItem(3)syncForReleaseLockedupdateAndReleaseLockedreleaseBufferLockedreleaseBuffer(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 buffers timestamp is farther in the future, the buffer wont 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 buffers 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 its too early for the buffer to be acquired.PRESENT_LATER,(5)mslots 与mframe 以及mframenumber 的区别(6)onframavailable 和latchbuffer rejectupdateteximage的逻辑。其中updateteximage(7)bufferitem 与mslots的区别(8)bufferqueueconsumer 与bufferitemconsumer区别(9)acquirebuffer的fence 逻辑fencefd是哪来的fence 相关接口定义参见ui/Fence.hstatus_t Fence::waitForever(const char* logname) {64 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 didnt 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 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()