>  기사  >  웹 프론트엔드  >  레이어 구성 요소의 동기화 및 GPU 대역폭 감소 관련

레이어 구성 요소의 동기화 및 GPU 대역폭 감소 관련

零到壹度
零到壹度원래의
2018-03-28 13:24:142474검색

이 기사는 주로 레이어 구성 요소의 동기화 및 GPU 대역폭 감소 문제에 대한 기사를 공유하며 좋은 참고 가치가 있으며 모든 사람에게 도움이 되기를 바랍니다. 편집자를 따라가서 살펴보겠습니다.

질문:

1) 비디오 레이어에 나타나는 상태 표시줄 장면을 최적화하는 방법과 같이 레이어를 독립적으로 업데이트할 수 있나요?

초기 아이디어는 매번 비디오 레이어만 업데이트하거나 BQ를 우회하는 것입니다. 비디오 레이어를 처리합니다.

2) FW 및 GPU에 의한 비디오 레이어의 공통 처리;

(1) mCurrentTexture, nextTextureImage; BufferItem, BufferQueue, mslots;

(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 및 래치 버퍼, 거부, updateteximage의 논리.

그 중 updateteximage;

(7) bufferitem과 mslots의 차이점

(8) bufferqueueconsumer와 bufferitemconsumer의 차이점

(9) Fencefd는 어디서 오는지; 관련 인터페이스 정의 ui

/

Fence.h

 status_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 didn&#39;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()
를 참조하세요.

위 내용은 레이어 구성 요소의 동기화 및 GPU 대역폭 감소 관련의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.