SlideShare a Scribd company logo
Inside Android's UI
 Android Builders Summit 2013

       Karim Yaghmour
       @karimyaghmour

  karim.yaghmour@opersys.com


                           1
These slides are made available to you under a Creative Commons Share-              Delivered and/or customized by
Alike 3.0 license. The full terms of this license are here:
https://creativecommons.org/licenses/by-sa/3.0/


Attribution requirements and misc., PLEASE READ:
●   This slide must remain as-is in this specific location (slide #2), everything
    else you are free to change; including the logo :-)
●   Use of figures in other documents must feature the below “Originals at”
    URL immediately under that figure and the below copyright notice where
    appropriate.
●   You are free to fill in the “Delivered and/or customized by” space on the
    right as you see fit.
●   You are FORBIDEN from using the default “About” slide as-is or any of its
    contents.
●
    You are FORBIDEN from using any content provided by 3rd parties without
    the EXPLICIT consent from those parties.


(C) Copyright 2013, Opersys inc.
These slides created by: Karim Yaghmour
Originals at: www.opersys.com/community/docs

                                                                                             2
About
●   Author of:




●   Introduced Linux Trace Toolkit in 1999
●   Originated Adeos and relayfs (kernel/relay.c)
●   Training, Custom Dev, Consulting, ...
                                              3
Agenda
●   Android's UI, what's that?
●   Architecture Basics
●   Display Core
●   OpenGL
●   Input Layer
●   Relevant Apps and Services
●   System Startup
●   References and Pointers
                                 4
1. Android's UI, what's that?



                       ●SoC / GPU
                ???    ●Touch input

                       ●LCD

                       ●Keyboard




                           5
1.1. What I'm NOT covering
●   Media layer
●   StageFright
●   Video playback
●   Camera
●   DRM
●   Etc.



                              6
2. Architecture Basics
●   Hardware used to run Android
●   AOSP
●   Binder
●   System Services
●   HAL




                                      7
8
9
10
11
12
/frameworks/base/core/...


                  /frameworks/base/services/java/...
AOSP-provided
    ASL
                  /frameworks/base/services/jni/


                  /hardware/libhardware/

                  /device/[MANUF.]/[DEVICE]
Manuf.-provided   /sdk/emulator/
Manuf. license
                  Kernel or module
Manuf.-provided
 GPL-license




                            13
3. Display Core
●   Display Hardware
●   Classic Linux display stack
●   Display stack in Android
●   Kernel driver
●   HAL definition
●   HAL module
●   Surface Flinger
●   Window Manager
●   Walkthrough
                                       14
3.1. Display Hardware


 MMU




IOMMU




                    15
3.2. Classic Linux display stack




                          16
3.3. Display stack in Android




                         17
18
3.4. Kernel driver
●
    Video memory management
●
    Mode setting
●   Checking of parameters
●   Motorola Xoom:
    ●
        /dev/nvhdcp1
    ●   /dev/nvhost-ctrl
    ●   /dev/nvhost-display
    ●   /dev/nvhost-dsi
    ●
        /dev/nvhost-gr2d
    ●   /dev/nvhost-gr3d
    ●
        /dev/nvhost-isp
    ●
        /dev/nvhost-mpe
    ●   /dev/nvhost-vi
    ●   /dev/nvmap
    ●   /dev/tegra-crypto
    ●
        /dev/tegra_avp
    ●
        /dev/tegra_camera
    ●
        /dev/tegra_fuse
    ●   /dev/tegra_rpc
    ●   /dev/tegra_sema
●   ... whatever hides in hwcomposer HAL module    19
3.5. HAL Definition
●   /hardware/libhardware/include/hardware/hwcomposer.h
●   struct hwc_procs:
    ●   invalidate()
    ●   vsync()
●   struct hwc_composer_device:
    ●   prepare()
    ●   set()
    ●   dump()
    ●   registerProcs()
    ●   query()
    ●   *()
                                                      20
3.6. HAL module
●   Skeleton /hardware/libhardware/modules/hwcomposer.cpp
●   /system/lib/hw/hwcomposer.BOARD.so
●   /system/lib/hw/gralloc.BOARD.so
●   Ex. - Mot Xoom:
    ●   hwcomposer.tegra.so
    ●   gralloc.tegra.so
●   Surface Flinger hook:
    ●   /frameworks/native/services/surfaceflinger/DisplayHardware
        –   HWComposer.cpp
        –   Provides fake vsync if none is provided in HW



                                                            21
3.7. Surface Flinger
●   Actual server:
    ●   /frameworks/native/services/surfaceflinger
●   Client side:
    ●   /frameworks/native/libs/gui
●   Client / Server interface:
    ●   ISurfaceComposerClient.cpp
    ●   ISurfaceComposer.cpp
●   This is NOT an aidl'ed service
●   All communication is manually
    marshalled/unmarshalled
                                                     22
3.8. Window Manager
●   Server side:
    ●   /frameworks/base/services/java/com/android/server/wm/
         –   WindowManagerService.java
         –   Session.java
●   Client side:
    ●   /frameworks/base/core/java/android/view/
         –   WindowManager.java
         –   WindowManagerImpl.java
         –   ViewRootImpl.java
●   Interfaces:
    ●   IWindowManager.aidl
    ●   IWindowSession.aidl
●   Parameters (incl. z-order):
    ●   See WindowManager.java

                                                                23
3.9. Walkthrough
●   Activity Manager relies on Activity Thread
●   AT calls on attach() and makeVisible()
●   makeVisible does wm.addView()
●   wm.addView() - this also called by StatusBar to display itself
    ●   Creates a new ViewRootImpl
    ●   Call on its setView()
●   setView() calls on mWindowSession.addToDisplay(...)
●   This results in call to WM's addWindow()
●   ViewRootImpl's performTraversals()
    ●   Calls on relayoutWindow()
    ●   Calls to WM session's relayout()
    ●   Call to WM's relayoutWindow()
    ●   Call to createSurfaceLocked()
    ●   new Surface(...)

                                                                     24
frameworks/base/core/java/android/*/*
LocalActivityManager.java: startActivity()
- moveToState()
  - startActivityNow()
ActivityThread.java: startActivityNow()
- performLaunchActivity()
  - attach() -- gets AM handle and ties to it
- handleResumeActivity()
  - makeVisible()
Activity.java: makeVisible()
  - wm.addView()
WindowManagerGlobal.java: addView()
  - root = new ViewRootImpl()
  - root.setView()
ViewRootImpl.java: setView()
  - mWindowSession.addToDisplay()
IWindowSession.aidl: addToDisplay()
                                                25
frameworks/base/services/java/com/android/server/wm/*
Session.java: addToDisplay()
- mService.addWindow()
WindowManagerService.java: addWindow()
...

frameworks/base/core/java/android/*/*
ViewRootImpl.java: performTraversals()
- relayoutWindow()
  - mWindowSession.relayout()

frameworks/base/services/java/com/android/server/wm/*
Session.java: relayoutWindow()
- mService.relayoutWindow()
WindowManagerService.java: relayoutWindow()
- surface = winAnimator.createSurfaceLocked();
WindowStateAnimator.java: createSurfaceLocked()
- new Surface();

                                                        26
4. OpenGL
●   What's OpenGL?
●   What's in a modern-day GPU?
●   Software layers involved
●   Kernel driver
●   EGL libs
●   Native interface
●   Java interface
●   Software GL implementation

                                   27
4.1. What's OpenGL?
●   It's just an API ... nothing but an API ...
●   Check out Wikipedia
●   Multiple versions out
●   “ES” versions for embedded use
●   Up to ES 3.0
●   Android support up to ES 2.0



                                             28
4.2. What's in a modern-day GPU?
●   A tremendous amount of parallel processing units
●   “SIMD”-like instruction set
●   Video decoding/encoding capabilities
●   ...




                                           29
4.3. Software layers involved
●   Kernel driver
●   GL libraries
●   Native GL API
●   Java GL API




                                30
4.4. Kernel driver




            Y
         AR
      ET
    RI
  OP
PR



                       31
4.5. EGL libs
●   /frameworks/base/native/opengl/libs
●   Entry point: /system/lib/libEGL.so
●
    Looks for /system/lib/egl/egl.cfg
●   /system/lib/egl - Mot Xoom:
    ●   egl.cfg
    ●   libEGL_perfhud.so
    ●   libEGL_tegra.so
    ●   libGLES_android.so
    ●   libGLESv1_CM_perfhud.so
    ●   libGLESv1_CM_tegra.so
    ●   libGLESv2_perfhud.so
    ●   libGLESv2_tegra.so
●
    elg.cfg:
               0 0 tegra



                                                32
4.6. Native interface
●   /frameworks/native/opengl/include
    ●   EGL
    ●   ETC1
    ●   GLES
    ●   GLES2
    ●   KHR




                                        33
4.7. Java interface
●   GL libs required by libandroid_runtime.so
●   /frameworks/base/opengl/java/android/opengl:
    ●   ...




                                         34
4.8. Software GL implementation
●   /frameworks/native/opengl/libagl




                                       35
5. Input Layer
●   Kernel side - “std” Linux input layer:
    ●   /dev/input/*
●   No HAL use
●   Native lib:
    ●   libinput
    ●   /frameworks/base/services/input
●   Input Manager Service:
    ●   /frameworks/base/services/java/com/android/server/input
    ●   Started and directly tied to Window Manager
●   Specific config files (see source.android.com)
●   Soft keyboard:
    ●   /frameworks/base/core/java/android/inputmethodservice
●   Input methods:
    ●   /packages/inputmehods
    ●   http://developer.android.com/guide/topics/text/creating-input-method.html

                                                                                    36
6. Relevant Apps and Services
●   Launcher
●   StatusBar
●   Wallpaper Manager Service
●   Notification Service
●   App Widgets




                                37
6.1. Launcher
●   An app like any other
●   See /packages/app/Launcher2




                                  38
6.2. StatusBar
●   A unique app
●   See /frameworks/base/packages/SystemUI
●   Connects to Status Bar Manager and gives an
    interface it can use to call back into Status Bar
●   Can use setIcon() to display icons on the right
●   Provides a CPU usage add-on that renders
    straight on rest of display using higher z-order


                                           39
6.3. Wallpaper Manager Service
●   See
    /frameworks/base/services/java/com/android/se
    rver/WallpaperManagerService.java




                                       40
6.4. Notification Service
●   Toasts
●   Status bar notifications
●   Gets handle to Status Bar Service at
    instantiation
●   Uses handle to communicate with Status Bar




                                           41
6.5. App Widgets
●   See
    /frameworks/base/services/java/com/android/se
    rver/AppWidgetService.java




                                       42
7. System Startup
●   Kernel
●   Init
●   Boot animation
●   Launcher




                                   43
7.1. Boot animation
●   Started by Surface Flinger
●   “bootanim” binary
●   /frameworks/base/cmds/bootanimation
●   Relies on bootanimation.zip w/ PNGs (nothing but)
●   See
    https://github.com/CyanogenMod/android_vendor_cm/tree/jellybean/pre
    built/common/bootanimatino
●   Must contain a desc.txt:
           <width> <height> <fps>
           p <count> <pause> <path>
           p <count> <pause> <path>


                                                        44
8. References and Pointers
●   “Use the source, Luke”
●   Jim Huang's “Android Graphics”
●   Benjamin Zores' “Linux Magazine / France” articles
●   MIPS article on graphics internals:
     http://developer.mips.com/2012/04/11/learning-about-
     android-graphics-subsystem/
●   Stéphane Marchesin's “Linux Graphics Drivers: an
    Introduction”
     http://source.android.com/tech/input/index.html


                                                45
Thank you ...

karim.yaghmour@opersys.com




                         46

More Related Content

PDF
Headless Android at AnDevCon3
PDF
Inside Android's UI at AnDevCon VI
PDF
Headless Android
PDF
Inside Android's UI at AnDevCon IV
PDF
Working with the AOSP - Linaro Connect Asia 2013
PDF
Inside Android's UI
PDF
Running Code in the Android Stack at ABS 2014
PDF
Inside Android's UI at AnDevCon V
Headless Android at AnDevCon3
Inside Android's UI at AnDevCon VI
Headless Android
Inside Android's UI at AnDevCon IV
Working with the AOSP - Linaro Connect Asia 2013
Inside Android's UI
Running Code in the Android Stack at ABS 2014
Inside Android's UI at AnDevCon V

What's hot (20)

PDF
Android Variants, Hacks, Tricks and Resources
PDF
Android Platform Debugging and Development
PDF
Android Internals at Linaro Connect Asia 2013
PDF
Leveraging Android's Linux Heritage at AnDevCon VI
PDF
Memory Management in Android
PDF
Android Platform Debugging and Development
PDF
Android Platform Debugging & Development
PDF
Using and Customizing the Android Framework / part 4 of Embedded Android Work...
PDF
Android Security, From the Ground Up
PDF
Leveraging Android's Linux Heritage at AnDevCon3
PDF
Android Jumpstart ESC SV 2012 Part I
PDF
Memory Management in Android
PDF
Native Android Userspace part of the Embedded Android Workshop at Linaro Conn...
PDF
Android Platform Debugging and Development
PDF
Leveraging Android's Linux Heritage
PDF
Embedded Android Workshop at ELC Europe
PDF
BeagleBoard Workshop ESC Boston 2011
PDF
Android Hacks, Variants, Tricks and Resources ESC SV 2012
ODP
Enhancing and modifying_the_core_android_os
PDF
Android Internals
Android Variants, Hacks, Tricks and Resources
Android Platform Debugging and Development
Android Internals at Linaro Connect Asia 2013
Leveraging Android's Linux Heritage at AnDevCon VI
Memory Management in Android
Android Platform Debugging and Development
Android Platform Debugging & Development
Using and Customizing the Android Framework / part 4 of Embedded Android Work...
Android Security, From the Ground Up
Leveraging Android's Linux Heritage at AnDevCon3
Android Jumpstart ESC SV 2012 Part I
Memory Management in Android
Native Android Userspace part of the Embedded Android Workshop at Linaro Conn...
Android Platform Debugging and Development
Leveraging Android's Linux Heritage
Embedded Android Workshop at ELC Europe
BeagleBoard Workshop ESC Boston 2011
Android Hacks, Variants, Tricks and Resources ESC SV 2012
Enhancing and modifying_the_core_android_os
Android Internals
Ad

Viewers also liked (7)

PDF
Embedded Android Workshop at Embedded World Conference 2013
PDF
Open, But Not As Usual.
PDF
0xlab’s Perspectives on Android System Development
PDF
Android Boot Time Optimization
PDF
Implement Checkpointing for Android (ELCE2012)
PDF
Improve Android System Component Performance
PDF
Scheduling in Android
Embedded Android Workshop at Embedded World Conference 2013
Open, But Not As Usual.
0xlab’s Perspectives on Android System Development
Android Boot Time Optimization
Implement Checkpointing for Android (ELCE2012)
Improve Android System Component Performance
Scheduling in Android
Ad

Similar to Inside Android's UI / ABS 2013 (20)

PDF
Android for Embedded Linux Developers
PDF
Customizing Android's UI
PDF
Customizing Android's UI
PDF
Android Platform Debugging and Development
PDF
Android Platform Debugging and Development
PDF
Customizing Android's UI
PDF
Android Internals
PDF
Android Variants, Hacks, Tricks and Resources presented at AnDevConII
PDF
Android Platform Debugging and Development
PDF
Leveraging Android's Linux Heritage at AnDevCon IV
PDF
Android Platform Debugging and Development
PDF
Android's Multimedia Framework
PDF
Android Platform Debugging and Development
PDF
Android Platform Debugging and Development
PDF
Android Attacks
PDF
Extending Android's Platform Toolsuite
PDF
Leveraging Android's Linux Heritage at AnDevCon V
PDF
Unmanned Aerial Vehicles: Exploit Automation with the Metasploit Framework
PDF
Developing Android Platform Tools
PDF
Leveraging Android's Linux Heritage at ELC-E 2011
Android for Embedded Linux Developers
Customizing Android's UI
Customizing Android's UI
Android Platform Debugging and Development
Android Platform Debugging and Development
Customizing Android's UI
Android Internals
Android Variants, Hacks, Tricks and Resources presented at AnDevConII
Android Platform Debugging and Development
Leveraging Android's Linux Heritage at AnDevCon IV
Android Platform Debugging and Development
Android's Multimedia Framework
Android Platform Debugging and Development
Android Platform Debugging and Development
Android Attacks
Extending Android's Platform Toolsuite
Leveraging Android's Linux Heritage at AnDevCon V
Unmanned Aerial Vehicles: Exploit Automation with the Metasploit Framework
Developing Android Platform Tools
Leveraging Android's Linux Heritage at ELC-E 2011

More from Opersys inc. (20)

PDF
Android Automotive
PDF
Android 10 Internals Update
PDF
Android Security Internals
PDF
Embedded Android Workshop with Pie
PDF
Android's HIDL: Treble in the HAL
PDF
Android Treble: Blessing or Trouble?
PDF
Embedded Android Workshop with Oreo
PDF
Scheduling in Android
PDF
Android Things Internals
PDF
Embedded Android Workshop with Nougat
PDF
Embedded Android Workshop with Nougat
PDF
Android Things: Android for IoT
PDF
Android Things Internals
PDF
Brillo / Weave Internals
PDF
Embedded Android Workshop with Nougat
PDF
Brillo / Weave Internals
PDF
Project Ara
PDF
Brillo/Weave Internals
PDF
Embedded Android Workshop with Marshmallow
PDF
Embedded Android Workshop with Marshmallow
Android Automotive
Android 10 Internals Update
Android Security Internals
Embedded Android Workshop with Pie
Android's HIDL: Treble in the HAL
Android Treble: Blessing or Trouble?
Embedded Android Workshop with Oreo
Scheduling in Android
Android Things Internals
Embedded Android Workshop with Nougat
Embedded Android Workshop with Nougat
Android Things: Android for IoT
Android Things Internals
Brillo / Weave Internals
Embedded Android Workshop with Nougat
Brillo / Weave Internals
Project Ara
Brillo/Weave Internals
Embedded Android Workshop with Marshmallow
Embedded Android Workshop with Marshmallow

Recently uploaded (20)

PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Machine learning based COVID-19 study performance prediction
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
Cloud computing and distributed systems.
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Approach and Philosophy of On baking technology
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Spectral efficient network and resource selection model in 5G networks
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPTX
MYSQL Presentation for SQL database connectivity
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
The Rise and Fall of 3GPP – Time for a Sabbatical?
Diabetes mellitus diagnosis method based random forest with bat algorithm
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Machine learning based COVID-19 study performance prediction
Per capita expenditure prediction using model stacking based on satellite ima...
The AUB Centre for AI in Media Proposal.docx
Mobile App Security Testing_ A Comprehensive Guide.pdf
Building Integrated photovoltaic BIPV_UPV.pdf
Cloud computing and distributed systems.
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Encapsulation_ Review paper, used for researhc scholars
Approach and Philosophy of On baking technology
Dropbox Q2 2025 Financial Results & Investor Presentation
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Spectral efficient network and resource selection model in 5G networks
20250228 LYD VKU AI Blended-Learning.pptx
MYSQL Presentation for SQL database connectivity
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Unlocking AI with Model Context Protocol (MCP)
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx

Inside Android's UI / ABS 2013

  • 1. Inside Android's UI Android Builders Summit 2013 Karim Yaghmour @karimyaghmour karim.yaghmour@opersys.com 1
  • 2. These slides are made available to you under a Creative Commons Share- Delivered and/or customized by Alike 3.0 license. The full terms of this license are here: https://creativecommons.org/licenses/by-sa/3.0/ Attribution requirements and misc., PLEASE READ: ● This slide must remain as-is in this specific location (slide #2), everything else you are free to change; including the logo :-) ● Use of figures in other documents must feature the below “Originals at” URL immediately under that figure and the below copyright notice where appropriate. ● You are free to fill in the “Delivered and/or customized by” space on the right as you see fit. ● You are FORBIDEN from using the default “About” slide as-is or any of its contents. ● You are FORBIDEN from using any content provided by 3rd parties without the EXPLICIT consent from those parties. (C) Copyright 2013, Opersys inc. These slides created by: Karim Yaghmour Originals at: www.opersys.com/community/docs 2
  • 3. About ● Author of: ● Introduced Linux Trace Toolkit in 1999 ● Originated Adeos and relayfs (kernel/relay.c) ● Training, Custom Dev, Consulting, ... 3
  • 4. Agenda ● Android's UI, what's that? ● Architecture Basics ● Display Core ● OpenGL ● Input Layer ● Relevant Apps and Services ● System Startup ● References and Pointers 4
  • 5. 1. Android's UI, what's that? ●SoC / GPU ??? ●Touch input ●LCD ●Keyboard 5
  • 6. 1.1. What I'm NOT covering ● Media layer ● StageFright ● Video playback ● Camera ● DRM ● Etc. 6
  • 7. 2. Architecture Basics ● Hardware used to run Android ● AOSP ● Binder ● System Services ● HAL 7
  • 8. 8
  • 9. 9
  • 10. 10
  • 11. 11
  • 12. 12
  • 13. /frameworks/base/core/... /frameworks/base/services/java/... AOSP-provided ASL /frameworks/base/services/jni/ /hardware/libhardware/ /device/[MANUF.]/[DEVICE] Manuf.-provided /sdk/emulator/ Manuf. license Kernel or module Manuf.-provided GPL-license 13
  • 14. 3. Display Core ● Display Hardware ● Classic Linux display stack ● Display stack in Android ● Kernel driver ● HAL definition ● HAL module ● Surface Flinger ● Window Manager ● Walkthrough 14
  • 15. 3.1. Display Hardware MMU IOMMU 15
  • 16. 3.2. Classic Linux display stack 16
  • 17. 3.3. Display stack in Android 17
  • 18. 18
  • 19. 3.4. Kernel driver ● Video memory management ● Mode setting ● Checking of parameters ● Motorola Xoom: ● /dev/nvhdcp1 ● /dev/nvhost-ctrl ● /dev/nvhost-display ● /dev/nvhost-dsi ● /dev/nvhost-gr2d ● /dev/nvhost-gr3d ● /dev/nvhost-isp ● /dev/nvhost-mpe ● /dev/nvhost-vi ● /dev/nvmap ● /dev/tegra-crypto ● /dev/tegra_avp ● /dev/tegra_camera ● /dev/tegra_fuse ● /dev/tegra_rpc ● /dev/tegra_sema ● ... whatever hides in hwcomposer HAL module 19
  • 20. 3.5. HAL Definition ● /hardware/libhardware/include/hardware/hwcomposer.h ● struct hwc_procs: ● invalidate() ● vsync() ● struct hwc_composer_device: ● prepare() ● set() ● dump() ● registerProcs() ● query() ● *() 20
  • 21. 3.6. HAL module ● Skeleton /hardware/libhardware/modules/hwcomposer.cpp ● /system/lib/hw/hwcomposer.BOARD.so ● /system/lib/hw/gralloc.BOARD.so ● Ex. - Mot Xoom: ● hwcomposer.tegra.so ● gralloc.tegra.so ● Surface Flinger hook: ● /frameworks/native/services/surfaceflinger/DisplayHardware – HWComposer.cpp – Provides fake vsync if none is provided in HW 21
  • 22. 3.7. Surface Flinger ● Actual server: ● /frameworks/native/services/surfaceflinger ● Client side: ● /frameworks/native/libs/gui ● Client / Server interface: ● ISurfaceComposerClient.cpp ● ISurfaceComposer.cpp ● This is NOT an aidl'ed service ● All communication is manually marshalled/unmarshalled 22
  • 23. 3.8. Window Manager ● Server side: ● /frameworks/base/services/java/com/android/server/wm/ – WindowManagerService.java – Session.java ● Client side: ● /frameworks/base/core/java/android/view/ – WindowManager.java – WindowManagerImpl.java – ViewRootImpl.java ● Interfaces: ● IWindowManager.aidl ● IWindowSession.aidl ● Parameters (incl. z-order): ● See WindowManager.java 23
  • 24. 3.9. Walkthrough ● Activity Manager relies on Activity Thread ● AT calls on attach() and makeVisible() ● makeVisible does wm.addView() ● wm.addView() - this also called by StatusBar to display itself ● Creates a new ViewRootImpl ● Call on its setView() ● setView() calls on mWindowSession.addToDisplay(...) ● This results in call to WM's addWindow() ● ViewRootImpl's performTraversals() ● Calls on relayoutWindow() ● Calls to WM session's relayout() ● Call to WM's relayoutWindow() ● Call to createSurfaceLocked() ● new Surface(...) 24
  • 25. frameworks/base/core/java/android/*/* LocalActivityManager.java: startActivity() - moveToState() - startActivityNow() ActivityThread.java: startActivityNow() - performLaunchActivity() - attach() -- gets AM handle and ties to it - handleResumeActivity() - makeVisible() Activity.java: makeVisible() - wm.addView() WindowManagerGlobal.java: addView() - root = new ViewRootImpl() - root.setView() ViewRootImpl.java: setView() - mWindowSession.addToDisplay() IWindowSession.aidl: addToDisplay() 25
  • 26. frameworks/base/services/java/com/android/server/wm/* Session.java: addToDisplay() - mService.addWindow() WindowManagerService.java: addWindow() ... frameworks/base/core/java/android/*/* ViewRootImpl.java: performTraversals() - relayoutWindow() - mWindowSession.relayout() frameworks/base/services/java/com/android/server/wm/* Session.java: relayoutWindow() - mService.relayoutWindow() WindowManagerService.java: relayoutWindow() - surface = winAnimator.createSurfaceLocked(); WindowStateAnimator.java: createSurfaceLocked() - new Surface(); 26
  • 27. 4. OpenGL ● What's OpenGL? ● What's in a modern-day GPU? ● Software layers involved ● Kernel driver ● EGL libs ● Native interface ● Java interface ● Software GL implementation 27
  • 28. 4.1. What's OpenGL? ● It's just an API ... nothing but an API ... ● Check out Wikipedia ● Multiple versions out ● “ES” versions for embedded use ● Up to ES 3.0 ● Android support up to ES 2.0 28
  • 29. 4.2. What's in a modern-day GPU? ● A tremendous amount of parallel processing units ● “SIMD”-like instruction set ● Video decoding/encoding capabilities ● ... 29
  • 30. 4.3. Software layers involved ● Kernel driver ● GL libraries ● Native GL API ● Java GL API 30
  • 31. 4.4. Kernel driver Y AR ET RI OP PR 31
  • 32. 4.5. EGL libs ● /frameworks/base/native/opengl/libs ● Entry point: /system/lib/libEGL.so ● Looks for /system/lib/egl/egl.cfg ● /system/lib/egl - Mot Xoom: ● egl.cfg ● libEGL_perfhud.so ● libEGL_tegra.so ● libGLES_android.so ● libGLESv1_CM_perfhud.so ● libGLESv1_CM_tegra.so ● libGLESv2_perfhud.so ● libGLESv2_tegra.so ● elg.cfg: 0 0 tegra 32
  • 33. 4.6. Native interface ● /frameworks/native/opengl/include ● EGL ● ETC1 ● GLES ● GLES2 ● KHR 33
  • 34. 4.7. Java interface ● GL libs required by libandroid_runtime.so ● /frameworks/base/opengl/java/android/opengl: ● ... 34
  • 35. 4.8. Software GL implementation ● /frameworks/native/opengl/libagl 35
  • 36. 5. Input Layer ● Kernel side - “std” Linux input layer: ● /dev/input/* ● No HAL use ● Native lib: ● libinput ● /frameworks/base/services/input ● Input Manager Service: ● /frameworks/base/services/java/com/android/server/input ● Started and directly tied to Window Manager ● Specific config files (see source.android.com) ● Soft keyboard: ● /frameworks/base/core/java/android/inputmethodservice ● Input methods: ● /packages/inputmehods ● http://developer.android.com/guide/topics/text/creating-input-method.html 36
  • 37. 6. Relevant Apps and Services ● Launcher ● StatusBar ● Wallpaper Manager Service ● Notification Service ● App Widgets 37
  • 38. 6.1. Launcher ● An app like any other ● See /packages/app/Launcher2 38
  • 39. 6.2. StatusBar ● A unique app ● See /frameworks/base/packages/SystemUI ● Connects to Status Bar Manager and gives an interface it can use to call back into Status Bar ● Can use setIcon() to display icons on the right ● Provides a CPU usage add-on that renders straight on rest of display using higher z-order 39
  • 40. 6.3. Wallpaper Manager Service ● See /frameworks/base/services/java/com/android/se rver/WallpaperManagerService.java 40
  • 41. 6.4. Notification Service ● Toasts ● Status bar notifications ● Gets handle to Status Bar Service at instantiation ● Uses handle to communicate with Status Bar 41
  • 42. 6.5. App Widgets ● See /frameworks/base/services/java/com/android/se rver/AppWidgetService.java 42
  • 43. 7. System Startup ● Kernel ● Init ● Boot animation ● Launcher 43
  • 44. 7.1. Boot animation ● Started by Surface Flinger ● “bootanim” binary ● /frameworks/base/cmds/bootanimation ● Relies on bootanimation.zip w/ PNGs (nothing but) ● See https://github.com/CyanogenMod/android_vendor_cm/tree/jellybean/pre built/common/bootanimatino ● Must contain a desc.txt: <width> <height> <fps> p <count> <pause> <path> p <count> <pause> <path> 44
  • 45. 8. References and Pointers ● “Use the source, Luke” ● Jim Huang's “Android Graphics” ● Benjamin Zores' “Linux Magazine / France” articles ● MIPS article on graphics internals: http://developer.mips.com/2012/04/11/learning-about- android-graphics-subsystem/ ● Stéphane Marchesin's “Linux Graphics Drivers: an Introduction” http://source.android.com/tech/input/index.html 45