




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、skia 庫(kù)Skia庫(kù)是一個(gè)外部庫(kù),代碼位于external/skia/ 下面,生成的庫(kù)名稱(chēng)是。Skia庫(kù)負(fù)責(zé)2維圖形的繪制,繪制的結(jié)果最終一般以位圖的形式存放在內(nèi)存的一塊緩沖區(qū)中。我們可以從它里面幾個(gè)比較重要的類(lèi)來(lái)了解它到底完成什么功能。使用SkCanvas,可以將繪制(drawing)結(jié)果保存到一個(gè)設(shè)備如位圖( bitmap )中,這些繪 制操作包含一系列幾何圖形的繪制,如繪制點(diǎn)、線、矩形、多邊形、橢圓和圓弧等幾何圖形。調(diào) 用了 skia庫(kù)的API,有的調(diào)用僅僅是對(duì)SkCanvas的簡(jiǎn)單包裹。繪制的狀態(tài)(State )封裝在Paint類(lèi)中,如繪制的線條粗細(xì)、線條顏色、區(qū)域如何填充、線條形狀
2、等。SkBitmap是光柵位圖,它包含高度和寬度兩個(gè)整數(shù)以及格式(配置config規(guī)定),也可以通過(guò) getAddr()獲取存儲(chǔ)實(shí)際像素(pixel )塊的地址。一副圖形可以通過(guò)它的像素位圖來(lái)保存,也可以通過(guò)保存它的繪制過(guò) 程通過(guò)SkPicture 保存起來(lái),然后寫(xiě)到文件里,最后通過(guò)繪制過(guò)程恢復(fù)圖形。另外,skia也包括將YUV格式轉(zhuǎn)變?yōu)镴pg的編碼,見(jiàn)。Java部分通過(guò)JNI調(diào)用Skia關(guān)系如下,包括但不限于下圖中的四個(gè)類(lèi)。庫(kù)庫(kù)鏈接到應(yīng)用程序中, 也鏈接到server側(cè)(主要因?yàn)閘ayer state管理和內(nèi)存控制塊等類(lèi)), 因此,其大多數(shù)類(lèi)運(yùn)行在應(yīng)用程序所在進(jìn)程空間中,它通過(guò)Bin der
3、與與進(jìn)程sufacefl in ger 進(jìn)行交互。它的代碼位于 frameworks/base/libs/surfacefli nger_clie nt下面,SurfaceComposerClie nt/SurfaceC on trol女口 JNI 層章節(jié)所述,在創(chuàng)建 SurfaceSession ( Java )時(shí),會(huì)創(chuàng)建 SurfaceComposerClient 對(duì)象,并將 SurfaceComposerClient 對(duì)象指針保存到 SurfaceSession ( Java )的 mClient 中。 我們來(lái)看下創(chuàng)建 SurfaceComposerClie nt 對(duì)象時(shí)還發(fā)生了什么 S
4、urfaceComposerClie nt 繼承自 RefBase,所以在第一次初始化時(shí),會(huì)執(zhí)行其重載的onFirstRef 。在onFirstRef 中,會(huì)獲取Composer Service,也就是 SurfaceFlinger 在 client側(cè)的 binder -ISurfaceComposer ,接著使用它建立clie nt conn ection連接(實(shí)際上是分配一個(gè)用于兩側(cè)通訊的共享內(nèi)存塊),獲取ISurfaceComposerClient,最后創(chuàng)建layer_state_t ,保存窗口狀態(tài), 用于兩側(cè)的窗口狀態(tài)通訊。SurfaceComposerClie nt可以加入到列表中由
5、Composer來(lái)維護(hù)。SurfaceControl對(duì)象指針保存在 Surface(Java)中的 mSurfaceControl 。SurfaceControl借助于 SurfaceComposerClient,實(shí)現(xiàn)對(duì) UI 控件的一些操作:show/hide:顯示隱藏操作setSize/setPositio n:設(shè)置大小和位置SetLayer :設(shè)置圖層freeze/u nfreeze:凍結(jié)與去凍結(jié)操作,即是否更新屏幕SetAlpha :設(shè)置Alpha通道,即設(shè)置透明等級(jí)SetMatrix :設(shè)置平移矩陣setFlags :設(shè)置其它標(biāo)志這些SurfaceControl 類(lèi)的功能實(shí)現(xiàn)僅僅是對(duì)
6、 SurfaceComposerClient 的簡(jiǎn)單圭寸裝。可以通 過(guò)SurfaceComposerClient 的函數(shù)獲取 Display 的個(gè)數(shù)、高、寬、旋轉(zhuǎn)方向以及其它信息。它是通過(guò)ComposerService中的控制塊信息來(lái)實(shí)現(xiàn)的。ScreenshotClient 包含屏幕截屏寬 (mWidth)和高(mHeight)以及像素格式(PixelFormat ), 截圖數(shù)據(jù)保存在 IMemoryHeap 中(mHeap。它是調(diào)用 ISurfaceComposer 的 captureScreen 函數(shù) 來(lái)實(shí)現(xiàn)的。SurfaceSurface 類(lèi)繼承自 EGLNativeBase模板類(lèi),因此
7、它實(shí)際上一個(gè) ANativeWindow,只不過(guò)該模 板給它添加了引用計(jì)數(shù)功能,并可安全地進(jìn)行類(lèi)型轉(zhuǎn)換。class Surface:public EGLNativeBasevANativeWi ndow. Surface, RefBase上層應(yīng)用程序各有自己的surface,因此多個(gè)surface會(huì)同時(shí)存在,這些 surface在本側(cè)就是SurfaceComposerClient所代表,它們可以添加到Composer類(lèi)維護(hù)的列表中。SurfaceControl 會(huì)使用 SurfaceClient和 Surface 去完成相應(yīng)功能,SurfaceControl 的getSurface 函數(shù)會(huì)創(chuàng)建
8、 Surface,從而也會(huì)導(dǎo)致 SurfaceClient的創(chuàng)建,進(jìn)而相應(yīng)的ISurfaceClie ntComposer等會(huì)被創(chuàng)建。ISurfaceComposerISurfaceComposer 是 SurfaceFlinger在 client 側(cè)的一個(gè) binder ,提供的接口用于對(duì)整個(gè)屏幕的全局性的管理,如方向旋轉(zhuǎn)、屏幕快照、屏幕事件、屏幕更新的凍結(jié)與去凍結(jié)等。它提供 的接口對(duì)應(yīng)的枚舉類(lèi)型有:enum BOOT_FINISHED = IBi nder:FIRST_CALL_TRANSACTION,CREATE_CONNECTION,CREATE_CLIENT_CONNECTION,G
9、ET_CBLK,OPEN_GLOBAL_TRANSACTION,CLOSE_GLOBAL_TRANSACTION,SET_ORIENTATION,FREEZE_DISPLAY,UNFREEZE_DISPLAY,SIGNAL,CAPTURE_SCREEN,TURN_ELECTRON_BEAM_OFF,TURN_ELECTRON_BEAM_ON;它是通過(guò) Binder進(jìn)行IPC通訊的接口, BpSurfaceComposer是client 側(cè),BnSurfaceComposer 是 service 一側(cè)。它們都繼承自各自的模板類(lèi) BpInterface 和 Bnlnterface , 這兩個(gè)模板類(lèi)
10、完成雙重繼承的功能,一個(gè)繼承IPC通訊的API接口,一個(gè)繼承 Binder功能。RefBase 用于索引計(jì)數(shù),類(lèi) IInterface和 ISurface 定義了 IPC 通訊的接口 API ,IBinder/BBinder使雙方具備Binder通訊功能。其中 CREATE_CONNECTIONREATE_CLIENT_CONNECTIO打開(kāi)關(guān)閉一個(gè) Transaction ,在打開(kāi)和關(guān)閉的過(guò)程中,可以設(shè)置狀態(tài),實(shí)現(xiàn)窗口管理。狀態(tài)變化更改是在一個(gè)事務(wù)(tra nsacti on )中進(jìn)行的。其類(lèi)繼承關(guān)系如下:根據(jù)Binder繼承關(guān)系規(guī)則,client 側(cè)的接口調(diào)用通過(guò)最終是由 可以知道它的它動(dòng)
11、態(tài)的調(diào)用關(guān)系如下,左側(cè)的調(diào)用者一般可以通過(guò)指向 能指針將操作將調(diào)用到SurfaceFli nger類(lèi)的成員函數(shù)。Bn側(cè)的子類(lèi)完成。我們就ISurfaceComposer 的智ComposerService 對(duì) IsurfaceComposer 進(jìn)行了包裹,使用它的getComposerService 函數(shù)可以獲取 IsurfaceComposer 。另外,ComposerService 還包含了 surface_flinger_cblk_t控制硬件信息填充塊信息,該內(nèi)存塊位于Ashem內(nèi)存上,由 SurfaceFlinger申請(qǐng),并依據(jù) display字段值。clie nt端程序通過(guò)讀取它,即
12、可得到各display 的信息。struct display_cblk_tNone of this is supported yet).const GraphicPla ne& pla ne(graphicPla ne(dpy);const DisplayHardware& hw =();co nst ui nt32_t w =();co nst ui nt32_t h =();co nst ui nt32_t f =();();“ Initializing graphics H/W ”);None of this is supported yet).const GraphicPla ne&
13、pla ne(graphicPla ne(dpy);const DisplayHardware& hw =();co nst ui nt32_t w =();co nst ui nt32_t h =();co nst ui nt32_t f =();();n ew(ctrlblk) SharedClie nt;SharedClie nt: represe nts a clie nt with several stacks SharedBufferStack: represe nts a stack of buffersSharedBufferClie nt: man ipulates the
14、SharedBufferStack from the clie nt side SharedBufferServer: mani pulates the SharedBufferStack from the server side Buffers can be dequeued un til there are none available, they can be locked unl ess they are in use by the server, which is only the case for the last dequeue-able buffer. Whe n these
15、various con diti ons are not met, the caller waits un til the con diti on is met.我們先來(lái)看一下比較重要的一個(gè)類(lèi)SharedBufferStackclass SharedBufferStack/省略部分代碼struct SmallRect /定義了一個(gè)矩形:左上角和右下角的坐標(biāo)uin t16_t l, t, r, b;;/定義了一個(gè)平面區(qū)域,包含了若干(不超過(guò)5個(gè))矩形struct FlatRegion / 52 bytes = 4 * (1 + 2*N)static con st un sig ned int N
16、UM_RECT_MAX = 5;uin t32_t cou nt;SmallRect rectsNUM_RECT_MAX;struct BufferData /64BytesFlatRegio n dirtyRegio n;/5個(gè)矩形區(qū)域SmallRect crop;/1個(gè)剪切矩形區(qū)uin t8_t tran sform;uin t8_t reserved3;/省略部分代碼/雙方同步/ these attributes are part of the con diti on s/updatesvolatile int32_t head; / server s current front buf
17、fervolatile in t32_t available; / n umber of dequeue-able buffersvolatile in t32_t queued; / n umber of buffers wait ing for postvolatile in t32_t reserved1;volatile status_t status; / surface s status code/ not part of the con diti onsvolatile in t32_t reallocMask;volatile in t8_t in dexNUM_BUFFER_
18、MAX;int32_t identity; / surface s identity (const)int32_t token; / surface s token (for debugging)Statistics stats;in t8_t headBuf; / last retired bufferuin t8_t reservedBytes3;in t32_t reserved;BufferData buffersNUM_BUFFER_MAX; / 16個(gè)數(shù)組元素;可見(jiàn)SharedBufferStack里面定義了幾個(gè)結(jié)構(gòu)體,用于保存矩形區(qū)域。如果我們把16塊區(qū)則包含BufferData 所保存的區(qū)域稱(chēng)為一塊區(qū)域的話,那么SharedBufferStack 里可以包含多達(dá)域。在 An droid 系統(tǒng)里,一個(gè) Surface 對(duì)應(yīng)一個(gè) SharedBufferStack 。而 SharedClie nt 了 31 個(gè) SharedBufferStack :/ 32 KB maxclass Share
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全生產(chǎn)責(zé)任制在安全生產(chǎn)標(biāo)準(zhǔn)化中的應(yīng)用
- 2025至2030年防彈玻璃項(xiàng)目投資價(jià)值分析報(bào)告
- 2025至2030年鍍鎳燈鉤項(xiàng)目投資價(jià)值分析報(bào)告
- 安全專(zhuān)項(xiàng)施工方案內(nèi)容
- 2025至2030年螺旋鋼板筒倉(cāng)項(xiàng)目投資價(jià)值分析報(bào)告
- 青春期教育指南
- 《數(shù)據(jù)庫(kù)原理及應(yīng)用教程-MySQL8.0》課件匯 尹志宇 第6-13章 數(shù)據(jù)庫(kù)查詢(xún)-數(shù)據(jù)庫(kù)的備份與恢復(fù)
- 時(shí)間管理培訓(xùn)教材
- 西餐面點(diǎn)制作課件 單元六 冷凍甜品制作
- 2025至2030年組合式袋收塵器項(xiàng)目投資價(jià)值分析報(bào)告
- 行政復(fù)議法-形考作業(yè)4-國(guó)開(kāi)(ZJ)-參考資料
- 2024北京市大興初二(下)期中數(shù)學(xué)試卷及答案
- 石子的檢驗(yàn)報(bào)告
- 吉林交通職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試參考試題庫(kù)(含答案)
- 家長(zhǎng)有遠(yuǎn)見(jiàn)孩子有格局
- 《第七課沈從文:逆境也是生活的恩賜》課件(黑龍江縣級(jí)優(yōu)課)
- 高墩(40m高)安全專(zhuān)項(xiàng)施工方案(專(zhuān)家)
- 臨時(shí)用電申請(qǐng)審批表
- 水庫(kù)導(dǎo)流洞工程土建及安裝工程重要施工方案和特殊施工工序的安全控制措施
- 生育服務(wù)證辦理承諾書(shū)
- 地下室頂板預(yù)留洞口施工方案標(biāo)準(zhǔn)版
評(píng)論
0/150
提交評(píng)論