android4.0 休眠喚醒會出現之前介面

來源:互聯網
上載者:User

android4.0 休眠喚醒會出現之前介面,我們通過案頭遠程工具可以看到在休眠時候,系統已經進入解鎖介面。可是我們喚醒機器的時候,系統會閃一下之前操作的介面,再進入解鎖介面。所以判斷應該是休眠時候沒有把解鎖介面寫入framebuffer,找到寫framebuffer地方:

if (LIKELY(hw.canDraw())) {        // repaint the framebuffer (if needed)        const int index = hw.getCurrentBufferIndex();        GraphicLog& logger(GraphicLog::getInstance());        logger.log(GraphicLog::SF_REPAINT, index);        handleRepaint();        // inform the h/w that we're done compositing        logger.log(GraphicLog::SF_COMPOSITION_COMPLETE, index);        hw.compositionComplete();        logger.log(GraphicLog::SF_SWAP_BUFFERS, index);        postFramebuffer();        logger.log(GraphicLog::SF_REPAINT_DONE, index);    } else {        // pretend we did the post        hw.compositionComplete();        usleep(16667); // 60 fps period    }

可以看到,是根據hw.canDraw()函數的傳回值跳到不同的入口,再找到hw.canDraw()函數的實現:

bool DisplayHardwareBase::canDraw() const{    return mScreenAcquired;}

所以把操作mScreenAcquired的值的相關代碼去掉就可以了:

--- a/services/surfaceflinger/DisplayHardware/DisplayHardwareBase.cpp+++ b/services/surfaceflinger/DisplayHardware/DisplayHardwareBase.cpp@@ -80,11 +80,13 @@ bool DisplayHardwareBase::DisplayEventThread::threadLoop()     if (err >= 0) {         sp<SurfaceFlinger> flinger = mFlinger.promote();         LOGD("About to give-up screen, flinger = %p", flinger.get());+        /*         if (flinger != 0) {             mBarrier.close();             flinger->screenReleased(0);             mBarrier.wait();         }+        */     }     fd = open(kWakeFileName, O_RDONLY, 0);     do {@@ -95,8 +97,10 @@ bool DisplayHardwareBase::DisplayEventThread::threadLoop()     if (err >= 0) {         sp<SurfaceFlinger> flinger = mFlinger.promote();         LOGD("Screen about to return, flinger = %p", flinger.get());+        /*         if (flinger != 0)             flinger->screenAcquired(0);+        */     }     return true; }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.