Android GUI系統之SurfaceFlinger(18) postFramebuffer

來源:互聯網
上載者:User

1.1.1 postFramebuffer

在多緩衝區機制中,只有把顯示資料寫入framebuffer才能真正在物理螢幕上顯示。前面幾個小節的輸出都是backbuffers,我們還需要最後一步——postFramebuffer。

void SurfaceFlinger::postFramebuffer()

{…    

   const DisplayHardware&hw(graphicPlane(0).displayHardware());

   …

   hw.flip(mSwapRegion);//交換前後台buffer

   size_t numLayers =mVisibleLayersSortedByZ.size();

   for (size_t i = 0; i <numLayers; i++) {

      mVisibleLayersSortedByZ[i]->onLayerDisplayed();

   }

   …

}

先從opengl本地視窗的角度來想一下:

queueBuffer

一旦“生產者”完成生產後,它需要把當前的buffer重新入隊,以使“消費者”可以做接下來的處理

dequeueBuffer

為了“生產者”可以繼續下一輪的工作,它會重新deque

基本的思路就是這樣子,不過Android系統將一些步驟封裝到了DisplayHardware中,我們稍後會看到。

DisplayHardware::flip完成後,分別通知各可見Layer它們的內容已經顯示出來了。

void DisplayHardware::flip(const Region& dirty) const

{…

   mPageFlipCount++;//flip計數

   if (mHwc->initCheck()== NO_ERROR) {

       mHwc->commit();

   } else {

       eglSwapBuffers(dpy, surface);

   }

   …

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.