2014-02-18 29 views

回答

0

這只是一條建議性信息。它是從nativeUnblankDisplay()android_view_SurfaceControl.cpp(406行)發出的。

(代碼不明顯 - ALOGD_IF_SLOW在堆棧上創建一個對象,檢查構造函數和析構函數中的時間。當對象超出作用域時,即此函數返回時,析構函數會檢查以查看如果已經過了很多時間,並且記錄消息(如果有的話)。)

unblankDisplay()調用正在向SurfaceFlinger發送一個IPC請求,並將其轉發給硬件組合器(如果存在)。

+0

嗯......在這種情況下,你會知道當我恢復時會發送什麼消息嗎? 'E/BufferQueue(177):[com.ace.engine/android.app.NativeActivity] dequeueBuffer:BufferQueue已被放棄! W/Adreno200-EGL(8167)::GL_OUT_OF_MEMORY W/Adreno200-EGGL(8167)::出隊本機緩衝區失敗:無此類設備 W/Adreno200- ::EGL_BAD_ALLOC W/Adreno200-EGL(8167)::EGL_BAD_SURFACE' – OvertCurrent

+0

'BufferQueue'具有生產者端和消費者端。消費者已經放棄了隊列,所以生產者方面失敗了。 「BufferQueue」是EGL表面的基礎,所以其餘的消息只是GL/EGL試圖說「我無法獲得一個緩衝區來繪製」,使用任何錯誤代碼都很方便。我假設這裏的用戶是SurfaceFlinger(系統圖形合成器)。聽起來像窗口管理器正在放棄你的表面。如果更改設備方向,您的代碼是否可以工作? – fadden

+0

不,我們沒有處理方向變化,我們被鎖定到橫向方向。 然而,這似乎與所發生的事情相匹配。我在代碼中的當前問題是,當我恢復一個應用程序時,我標記可以在我的另一個線程上渲染,但是在我開始渲染後不久,窗口就被銷燬了。 – OvertCurrent

相關問題