1. Outline
Building Blocks
Under the Hood
Get Dirty
Q&A
Introduction to Android Window System
Chia-I Wu
olv@0xlab.org
May 15, 2009
Chia-I Wu olv@0xlab.org Introduction to Android Window System
2. Outline
Building Blocks
Under the Hood
Get Dirty
Q&A
Building Blocks
Overview
Interested Components
Under the Hood
Random Topics
Get Dirty
Development
Code
Q&A
Chia-I Wu olv@0xlab.org Introduction to Android Window System
3. Outline
Building Blocks
Overview
Under the Hood
Interested Components
Get Dirty
Q&A
Outline
Building Blocks
Overview
Interested Components
Under the Hood
Random Topics
Get Dirty
Development
Code
Q&A
Chia-I Wu olv@0xlab.org Introduction to Android Window System
4. Outline
Building Blocks
Overview
Under the Hood
Interested Components
Get Dirty
Q&A
System Architecture
Chia-I Wu olv@0xlab.org Introduction to Android Window System
5. Outline
Building Blocks
Overview
Under the Hood
Interested Components
Get Dirty
Q&A
System Architecture
Chia-I Wu olv@0xlab.org Introduction to Android Window System
6. Outline
Building Blocks
Overview
Under the Hood
Interested Components
Get Dirty
Q&A
System Architecture
Chia-I Wu olv@0xlab.org Introduction to Android Window System
7. Outline
Building Blocks
Overview
Under the Hood
Interested Components
Get Dirty
Q&A
Building Blocks
There are more, but we focus on
SurfaceManager
WindowManager
ActivityManager
Chia-I Wu olv@0xlab.org Introduction to Android Window System
8. Outline
Building Blocks
Overview
Under the Hood
Interested Components
Get Dirty
Q&A
SurfaceManager
frameworks/base/libs/surfaceflinger/
a.k.a SurfaceFlinger
Allocate surfaces. Backed by ashmem/pmem/?
Composite surfaces
Chia-I Wu olv@0xlab.org Introduction to Android Window System
9. Outline
Building Blocks
Overview
Under the Hood
Interested Components
Get Dirty
Q&A
WindowManager
frameworks/base/services/java/
com/android/server/WindowManagerService.java
About 9000 SLOC in one ļ¬le. Poorly documented, bad
namings, ...
(Ask SurfaceManager to) create/layout surfaces on behalf of
the clients
Dispatch input events to clients
Transition animation
WindowManagerPolicy
Chia-I Wu olv@0xlab.org Introduction to Android Window System
10. Outline
Building Blocks
Overview
Under the Hood
Interested Components
Get Dirty
Q&A
ActivityManager
frameworks/base/services/java/
com/android/server/am/
Manage lifecycles of activities
Manage stacking of activities
Dispatch intents
Spawn processes
Chia-I Wu olv@0xlab.org Introduction to Android Window System
11. Outline
Building Blocks
Overview
Under the Hood
Interested Components
Get Dirty
Q&A
Confusions
An activity has one or more windows (e.g. dialogs)
A window has one or more surfaces (e.g. surface views)
However, in window manager, a window is called a session
A surface is called a window
And an activity becomes roughly a token
Chia-I Wu olv@0xlab.org Introduction to Android Window System
12. Outline
Building Blocks
Overview
Under the Hood
Interested Components
Get Dirty
Q&A
Special Keys
HOME key
BACK key
Chia-I Wu olv@0xlab.org Introduction to Android Window System
13. Outline
Building Blocks
Under the Hood Random Topics
Get Dirty
Q&A
Outline
Building Blocks
Overview
Interested Components
Under the Hood
Random Topics
Get Dirty
Development
Code
Q&A
Chia-I Wu olv@0xlab.org Introduction to Android Window System
14. Outline
Building Blocks
Under the Hood Random Topics
Get Dirty
Q&A
Process View
SurfaceManager, WindowManager, and SurfaceManager are
threads of a single process (system server)
Every application is usually a process of itself
Chia-I Wu olv@0xlab.org Introduction to Android Window System
15. Outline
Building Blocks
Under the Hood Random Topics
Get Dirty
Q&A
Zygote
Is a process started on system initialization
Preloads java classes and resources
Forks system server
Listens silently on /dev/socket/zygote
Chia-I Wu olv@0xlab.org Introduction to Android Window System
16. Outline
Building Blocks
Under the Hood Random Topics
Get Dirty
Q&A
Binder
Early in the lifetime of an application process, thread(s) are
created and blocked on /dev/binder
Binder is used mainly for RPC
Fragile
Chia-I Wu olv@0xlab.org Introduction to Android Window System
17. Outline
Building Blocks
Development
Under the Hood
Code
Get Dirty
Q&A
Outline
Building Blocks
Overview
Interested Components
Under the Hood
Random Topics
Get Dirty
Development
Code
Q&A
Chia-I Wu olv@0xlab.org Introduction to Android Window System
18. Outline
Building Blocks
Development
Under the Hood
Code
Get Dirty
Q&A
Build System
build/core/core/build-system.html
. build/envsetup.sh
showcommands
export ANDROID JAVA HOME if non-standard
Chia-I Wu olv@0xlab.org Introduction to Android Window System
19. Outline
Building Blocks
Development
Under the Hood
Code
Get Dirty
Q&A
adb
ADBHOST for transport over TCP/IP
kill-server
remount
pull/push
logcat
shell
Chia-I Wu olv@0xlab.org Introduction to Android Window System
20. Outline
Building Blocks
Development
Under the Hood
Code
Get Dirty
Q&A
hierarchyviewer
Display view hierarchy
Display view
Invalidate/Relayout
Chia-I Wu olv@0xlab.org Introduction to Android Window System
21. Outline
Building Blocks
Development
Under the Hood
Code
Get Dirty
Q&A
Graphics: Memory Management
SurfaceFlinger has a SurfaceHeapManager
Every client has a MemoryDealer, as returned by
SurfaceHeapManager
Every surface of a client also has dealer(s), from client or GPU
Chia-I Wu olv@0xlab.org Introduction to Android Window System
22. Outline
Building Blocks
Development
Under the Hood
Code
Get Dirty
Q&A
Graphics: Memory Management cont.
A dealer consists of a heap and an allocator
A heap represents a sharable big chunk of memory
An allocator is an algorithm
Small chunks of memory from the heap are returned
Chia-I Wu olv@0xlab.org Introduction to Android Window System
23. Outline
Building Blocks
Development
Under the Hood
Code
Get Dirty
Q&A
Graphics: Memory Management cont.
Real ļ¬ow
A client asks for a new surface, createSurface
Chia-I Wu olv@0xlab.org Introduction to Android Window System
24. Outline
Building Blocks
Development
Under the Hood
Code
Get Dirty
Q&A
Graphics: Memory Management cont.
Real ļ¬ow
A client asks for a new surface, createSurface
createSurface calls createNormalSurfaceLocked
Chia-I Wu olv@0xlab.org Introduction to Android Window System
25. Outline
Building Blocks
Development
Under the Hood
Code
Get Dirty
Q&A
Graphics: Memory Management cont.
Real ļ¬ow
A client asks for a new surface, createSurface
createSurface calls createNormalSurfaceLocked
A layer is created and setBuļ¬ers is called to allocate buļ¬ers
Chia-I Wu olv@0xlab.org Introduction to Android Window System
26. Outline
Building Blocks
Development
Under the Hood
Code
Get Dirty
Q&A
Graphics: Memory Management cont.
Real ļ¬ow
A client asks for a new surface, createSurface
createSurface calls createNormalSurfaceLocked
A layer is created and setBuļ¬ers is called to allocate buļ¬ers
Two dealers are created from client, one for front buļ¬er and
one for back buļ¬er
Chia-I Wu olv@0xlab.org Introduction to Android Window System
27. Outline
Building Blocks
Development
Under the Hood
Code
Get Dirty
Q&A
Graphics: Memory Management cont.
Real ļ¬ow
A client asks for a new surface, createSurface
createSurface calls createNormalSurfaceLocked
A layer is created and setBuļ¬ers is called to allocate buļ¬ers
Two dealers are created from client, one for front buļ¬er and
one for back buļ¬er
Two LayerBitmaps are created, initialized with the two dealers
Chia-I Wu olv@0xlab.org Introduction to Android Window System
28. Outline
Building Blocks
Development
Under the Hood
Code
Get Dirty
Q&A
Graphics: Memory Management cont.
Real ļ¬ow
A client asks for a new surface, createSurface
createSurface calls createNormalSurfaceLocked
A layer is created and setBuļ¬ers is called to allocate buļ¬ers
Two dealers are created from client, one for front buļ¬er and
one for back buļ¬er
Two LayerBitmaps are created, initialized with the two dealers
Heaps of dealers along with info about the layer are returned
Chia-I Wu olv@0xlab.org Introduction to Android Window System
29. Outline
Building Blocks
Development
Under the Hood
Code
Get Dirty
Q&A
Hello World
http://people.debian.org.tw/Ėolv/surfaceļ¬inger/demo.tar.gz
Chia-I Wu olv@0xlab.org Introduction to Android Window System
30. Outline
Building Blocks
Development
Under the Hood
Code
Get Dirty
Q&A
Many Buļ¬ers
Surface is double buļ¬ered
EGLDisplaySurface is double buļ¬ered
Same technique; Diļ¬erent code pathes, diļ¬erent purposes
Chia-I Wu olv@0xlab.org Introduction to Android Window System
31. Outline
Building Blocks
Development
Under the Hood
Code
Get Dirty
Q&A
Double Buļ¬ering
Sofware v.s. Hardware
Memory copy
Page ļ¬ipping
Chia-I Wu olv@0xlab.org Introduction to Android Window System
32. Outline
Building Blocks
Development
Under the Hood
Code
Get Dirty
Q&A
Dirty Region
Associate buļ¬ers with dirty regions
Copy back
Chia-I Wu olv@0xlab.org Introduction to Android Window System
33. Outline
Building Blocks
Development
Under the Hood
Code
Get Dirty
Q&A
Frame 0
Chia-I Wu olv@0xlab.org Introduction to Android Window System
34. Outline
Building Blocks
Development
Under the Hood
Code
Get Dirty
Q&A
Frame 1
Chia-I Wu olv@0xlab.org Introduction to Android Window System
35. Outline
Building Blocks
Development
Under the Hood
Code
Get Dirty
Q&A
Frame 2
Chia-I Wu olv@0xlab.org Introduction to Android Window System
36. Outline
Building Blocks
Under the Hood
Get Dirty
Q&A
Outline
Building Blocks
Overview
Interested Components
Under the Hood
Random Topics
Get Dirty
Development
Code
Q&A
Chia-I Wu olv@0xlab.org Introduction to Android Window System
37. Outline
Building Blocks
Under the Hood
Get Dirty
Q&A
Q&A
Questions?
Chia-I Wu olv@0xlab.org Introduction to Android Window System