Drive for better visionProcessStateMarch, 2012                      Himax Media                      Solutions            ...
概述 - 1        功能             維護 process 中所有的 service proxy             打開 /dev/binder 裝置,並作 memory mapping      每個 pro...
概述 - 2           兩個 process A,B 當需要通信時,打開 ProcessState ,建立            與 /dev/binder 之間的對映           當 A 需要傳訊給 B 時,用 ioct...
self()             功能:                   產生唯一的 ProcessState 物件實體             實作                   static function ,無論有...
Vector<handle_entry> mHandleToObject             功能:                   ProcessState 會將所有的 IBinder 放在此資料結構中             ...
getStrongProxyForHandle(handle)             功能                   傳回一個與 handle 溝通的 sp<IBinder>             實作           ...
getWeakProxyForHandle(handle)             功能                   傳回一個與 handle 溝通的 wp<IBinder>             實作             ...
expungeHandle(handle, IBinder* binder)             功能                   將 handle 、 binder 符合的項目從 Vector 中刪除             ...
startThreadPool()             功能                   要使用 ProcessState 的函式,會在初始化之後呼叫,產生 main                    thread     ...
Drive for better vision
Upcoming SlideShare
Loading in …5
×

09 process state

555 views
510 views

Published on

Published in: Technology, Business, Travel
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
555
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

09 process state

  1. 1. Drive for better visionProcessStateMarch, 2012 Himax Media Solutions 承景科技股份有限公司
  2. 2. 概述 - 1  功能  維護 process 中所有的 service proxy  打開 /dev/binder 裝置,並作 memory mapping  每個 process 只會有一個 ProcessState 物件  繼承 RefBase ,所以可透過 strong pointer 存取  當 strong pointer 都斷開後,會自動刪除物件Himax Media Solutions Proprietary & Confidential 2
  3. 3. 概述 - 2  兩個 process A,B 當需要通信時,打開 ProcessState ,建立 與 /dev/binder 之間的對映  當 A 需要傳訊給 B 時,用 ioctl 操作 /dev/binder  /dev/binder 會配置記憶體來放 A 傳來的資料,然後將這段記憶 體映射到 B XXX XXX /dev/ A binder B XXXHimax Media Solutions Proprietary & Confidential 3
  4. 4. self()  功能:  產生唯一的 ProcessState 物件實體  實作  static function ,無論有沒有 instance 存在都可以呼叫  呼叫後如果 instance 存在,傳回指標  如果 instance 不存在,呼叫 constructor ProcessState() ,物 件創造成功後再傳回指標  constructor 打開 /dev/binder 並設定 memory mappingHimax Media Solutions Proprietary & Confidential 4
  5. 5. Vector<handle_entry> mHandleToObject  功能:  ProcessState 會將所有的 IBinder 放在此資料結構中  mHandleToObject.insertAt(e, pos, num)  從位置 pos 開始,連續插入 num 個 handle_entry e  mHandleToObject.editItemAt(handle)  傳回 index=handle 所在的物件 handle_entry handle [0] [1] [2] [3] index IBinder * A -- -- CHimax Media Solutions Proprietary & Confidential 5
  6. 6. getStrongProxyForHandle(handle)  功能  傳回一個與 handle 溝通的 sp<IBinder>  實作  檢查 mHandleToObject ,找到對應的 (handle, IBinder)  如果 IBinder 不存在,則產生 BpBinder(handle) 並傳回指標  如果 IBinder 存在  試著將 weak ref 加 1 ,如果失敗,表示物件一定已被刪除,重新產生 BpBinder(handle)  如果成功,就由另一個 strong pointer 參考 BpBinder ,傳回 sp<IBinder> ,並將 weak ref 減 1 ProcessState [0] NULL [1] pointer handle [2] pointer mHandleToObjectHimax Media Solutions Proprietary & Confidential 6
  7. 7. getWeakProxyForHandle(handle)  功能  傳回一個與 handle 溝通的 wp<IBinder>  實作  檢查 mHandleToObject ,找到對應的 (handle, IBinder)  如果 IBinder 不存在,則產生 BpBinder(handle) 並傳回指標  如果 IBinder 存在  試著將 weak ref 加 1 ,如果失敗,表示物件一定已被刪除,重新產生 BpBinder(handle)  如果成功,就由另一個 weak pointer 參考 BpBinder ,傳回 wp<IBinder> ,並將 weak ref 減 1 ProcessState [0] NULL [1] pointer handle [2] pointer mHandleToObjectHimax Media Solutions Proprietary & Confidential 7
  8. 8. expungeHandle(handle, IBinder* binder)  功能  將 handle 、 binder 符合的項目從 Vector 中刪除  BpBinder 刪除時會自動呼叫Himax Media Solutions Proprietary & Confidential 8
  9. 9. startThreadPool()  功能  要使用 ProcessState 的函式,會在初始化之後呼叫,產生 main thread  main thread 會產生 IPCThreadState 實體,並執行 joinThreadPool() ,開始存取 binderHimax Media Solutions Proprietary & Confidential 9
  10. 10. Drive for better vision

×