Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android GUI系統之SurfaceFlinger(16) handleRefresh

Android GUI系統之SurfaceFlinger(16) handleRefresh

編輯:Android開發教程

1.1.1 handleRefresh

從名稱上看,這個函數處理“刷新”。經過比對新老版本的差異,我們覺得這個地方應該是老版本遺留下來的“廢料”。換句話說,它對MessageQueue::REFRESH事件的處理沒有起到作用。

void SurfaceFlinger::handleRefresh()

{

bool needInvalidate =false;

const LayerVector&currentLayers(mDrawingState.layersSortedByZ);

const size_t count =currentLayers.size();

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

   constsp<LayerBase>& layer(currentLayers[i]);

   if (layer->onPreComposition()) {

       needInvalidate =true;

   }

}

if (needInvalidate) {

   signalLayerUpdate();

}

}

這個函數很簡單,首先調用每個layer的onPreComposition,判斷是否需要needInvalidate,條件就是Layer:: mQueuedFrames>0。

在函數的最後,它調用signalLayerUpdate:

void SurfaceFlinger::signalLayerUpdate() {

  mEventQueue.invalidate();

}

可見它只是直接使用了MessageQueue::invalidate():

void MessageQueue::invalidate() {

mEvents->requestNextVsync();

}

最後的requestNextVsync用於安排下一次的VSYNC事件,這個函數只在vsync rate為0時才有效。也就是說只有當我們關閉了VSYNC的主動上報後才有作用,這和之前的分析是不符合的。因而我們可以忽略handleRefresh,相信在下一個版本中它會得到清理。

出處:From LXS. http://blog.csdn.net/uiop78uiop78/

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved