More Related Content
Similar to 20分で理解するdisplaysystem
Similar to 20分で理解するdisplaysystem (20)
More from magoroku Yamamoto
More from magoroku Yamamoto (20)
20分で理解するdisplaysystem
- 2. ふーあむあい
� 源氏名 @magoroku15 名古屋在住
� OS屋さん出身の組み込み屋さん
� 2009年より@androidzaurusに師事し、日本のIT勉強会で必須と
されるサブカルチャを学ぶ
� 今年はFPGAでpdp11を動かすのが目標だった
� UST検定 初段
� ぐだ生(土曜)、名古屋geekbar(月曜)を配信中
� magorokutv で検索 / 現在までに9770人が視聴
� ミキサー4台 大人買い
� 名古屋つくる部 配信係り
� よーするに 塚田部長のパシリ、 @gabu怖い
� 名古屋geekbar 早番店員
� よーするに 塚田店長のパシリ、 @gabu怖い
- 3. display subsystemって何
� HWから見ると
� FrameBuffer 1ピクセルが1ドット
� Blit処理 矩形転送
� SWから見ると
� アプリ画面、システム画面の合成
� 画面間の重なりの管理と描画の更新
� 広義にはOSの一部
� 1つのリソースを複数のアプリが利用
� 1つのコンポーネントがアプリの要求を調停
� display susbsystem
- 4. *unixの場合
デーモン サーバー アプリケーション
X-Window
System
VFS
Socket
Kernel
VFAT
UDF
ext3
driver
Frame
Buffer
- 5. Windowsの場合
システムプロセス サービス アプリケーション
NTDLL.DLL
システムサービスディスパッチャ
IFS USER GDI
KERNEL
VFAT
NTFS
UDF
Frame
HAL Buffer
- 6. 今日話すこと
AndroidのDisplay subsystemの概要を説明
� skia
� ashmem
� native binder
� ashmem
引用する資料
Google I/O 2009
Noisy Androids
Mastering the Android Media Framework
Google I/O 2008
Android Anatomy and Physiology
- 17. SurfaceFlinger::composeSurfaces
frameworks/base/libs/surfaceflinger/SurfaceFlinger.cpp
905 void SurfaceFlinger::composeSurfaces(const Region& dirty)
906 {
912 const SurfaceFlinger& flinger(*this);
913 const LayerVector& drawingLayers(mDrawingState.layersSortedByZ);
914 const size_t count = drawingLayers.size();
915 sp<LayerBase> const* const layers = drawingLayers.array();
916 for (size_t i=0 ; i<count ; ++i) {
917 const sp<LayerBase>& layer = layers[i];
918 const Region& visibleRegion(layer->visibleRegionScreen);
919 if (!visibleRegion.isEmpty()) {
920 const Region clip(dirty.intersect(visibleRegion));
921 if (!clip.isEmpty()) {
922 layer->draw(clip);
923 }
924 }
925 }
926 }
- 18. Androidの場合
SystemServer アプリケーション
binder
surfaceflinger
Kernel ashmem
driver
Frame
Buffer