自己做網(wǎng)站處理圖片用什么軟件下載寧德市人力資源和社會保障局
背景:
上一篇blog已經(jīng)對mirror模式顯示鏡像屏幕內(nèi)容進行了詳細(xì)講解:
安卓VirtualDisplay虛擬屏幕如何實現(xiàn)沒有內(nèi)容顯示mirror屏幕內(nèi)容
不過這個分析版本是基于aosp13,在這個發(fā)布后,有學(xué)員在aosp14上進行驗證,發(fā)現(xiàn)還是有較大的差異相比文章。我這邊也親自試了一下,發(fā)現(xiàn)原理其實相差不大,本質(zhì)都還是一樣的對layerStack進行過濾匹配,不過相比aosp13來說只是變化layerStack對象變變化了。
剖析aosp14相關(guān)原理
1 先看看鏡像模式:
這個時候進行dumpsys SurfaceFlinger
主要看以下兩個部分
1、看看虛擬display對象的layerStack
可以看到,這個aosp14版本上這里Virtual Display的layerStack在鏡像模式就是2,而aosp13版本時候在鏡像模式layerStack是0。這里就是很多同學(xué)想問的差異點,不理解這里mirror模式就是2,那還怎么讓鏡像屏幕內(nèi)容顯示在Virtual Display上。
這里就是上面我提到的變化的是layerStack的對象,原來aosp13上面變化是Display的layerStack值,但是在aosp14上面變化的是Layer對應(yīng)的layerStack
看看Layer的變化:
這里面主屏幕的Layer都會在虛擬屏幕有一個對應(yīng)的Mirror Layer即直接對主屏幕的每一個layer進行了Mirror,再看看這些Mirror Layer的layerStack都是2,這樣就可以和Virtual Display的layerStack進行完全的匹配。
到這里大家應(yīng)該清楚了aosp14相比aosp13來說本質(zhì)就是layerStack的對象變換了一下,原來aosp13變換一直是Display為對象,aosp14上面變化的對象是Layer,這樣就實現(xiàn)了沒有內(nèi)容時候可以顯示另一個屏幕的內(nèi)容。
2 在看看非鏡像模式,自己屏幕有內(nèi)容情況
虛擬屏幕展示是時鐘app,和主屏幕展示不一樣
同樣要通過dumpsys SurfaceFlinger來分析調(diào)研
先看Virtual Display的layerStack情況:
看到一樣是2
再看看顯示圖層Layer情況:
可以看到上面的DeskClock的圖層已經(jīng)沒有了Mirror字樣,因為他本身就是只屬于Virtual Display的圖層
到此也就清楚aosp14和aosp13這一部分的差異,其實本質(zhì)上就是對layerStack的對象主體從Display到layer這樣過程而已。
ps:注意如果在dumpsys SurfaceFlinger時候發(fā)現(xiàn)了沒辦法顯示虛擬屏幕layer時候需要去surfaceflinger中修改以下代碼放開dump
本文章更多詳細(xì)代碼和資料需要購買課程獲取
hal+perfetto+surfaceflinger
https://mp.weixin.qq.com/s/LbVLnu1udqExHVKxd74ILg
私聊作者+v(androidframework007)
其他課程七件套專題:
點擊這里
https://mp.weixin.qq.com/s/Qv8zjgQ0CkalKmvi8tMGaw
視頻試看:
https://www.bilibili.com/video/BV1wc41117L4/