20分で理解するdisplaysystem

6,123 views

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,123
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
58
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

20分で理解するdisplaysystem

  1. 1. 20分で理解するandroidの構造 display subsystem 編 横浜Android勉強会 2011/4/29 @magoroku15
  2. 2. ふーあむあい� 源氏名 @magoroku15 名古屋在住 � OS屋さん出身の組み込み屋さん � 2009年より@androidzaurusに師事し、日本のIT勉強会で必須と されるサブカルチャを学ぶ � 今年はFPGAでpdp11を動かすのが目標だった� UST検定 初段 � ぐだ生(土曜)、名古屋geekbar(月曜)を配信中 � magorokutv で検索 / 現在までに9770人が視聴 � ミキサー4台 大人買い� 名古屋つくる部 配信係り  � よーするに 塚田部長のパシリ、 @gabu怖い� 名古屋geekbar 早番店員  � よーするに 塚田店長のパシリ、 @gabu怖い
  3. 3. display subsystemって何� HWから見ると � FrameBuffer 1ピクセルが1ドット � Blit処理 矩形転送 � SWから見ると � アプリ画面、システム画面の合成 � 画面間の重なりの管理と描画の更新� 広義にはOSの一部 � 1つのリソースを複数のアプリが利用 � 1つのコンポーネントがアプリの要求を調停 � display susbsystem
  4. 4. *unixの場合 デーモン サーバー アプリケーション X-Window System VFS Socket Kernel VFAT UDFext3 driver Frame Buffer
  5. 5. Windowsの場合システムプロセス サービス アプリケーション NTDLL.DLL システムサービスディスパッチャ IFS USER GDI KERNEL VFATNTFS UDF Frame HAL Buffer
  6. 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
  7. 7. Applications
  8. 8. How about this?ApplicationApplicationFrameworkLibrariesLinux
  9. 9. Canvasでの描画 前準備Application ApplicationApplicationFramework SystemServerLibraries surfaceflinger LayerLinux ashmem
  10. 10. Canvasでの描画 SkCanvasApplication ApplicationApplicationFramework SystemServerLibraries surfaceflinger Skia Layer SkCanvasLinux ashmem
  11. 11. Canvasでの描画 surfaceflingerApplicationApplicationFramework SystemServerLibraries surfaceflinger Layer thread Layer bufffer Layer LayerLinux
  12. 12. SurfaceFlinger::threadLoopframeworks/base/libs/surfaceflinger/SurfaceFlinger.cpp 476 bool SurfaceFlinger::threadLoop() 477 { 498 if (LIKELY(hw.canDraw() && !isFrozen())) { 499 // repaint the framebuffer (if needed) 500 handleRepaint(); 509 } else { 510 // pretend we did the post 511 unlockClients(); 512 usleep(16667); // 60 fps period 513 } 514 return true;
  13. 13. SurfaceFlinger::composeSurfacesframeworks/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 }
  14. 14. Androidの場合 SystemServer アプリケーション binder surfaceflingerKernel ashmemdriver Frame Buffer
  15. 15. おしまい

×