SlideShare a Scribd company logo
View To Pixel
Britt Barak
26/6/2017
Wifi: GoogleGuestPSK
pass: pUp3EkaP
3
Jonathan
Yarkoni
Android Developer &
Advocate
Ironsource
Android Academy Staff
Yonatan Levin
Android
Google Developer
Expert
Yossi Segev
Android Developer
Colu
Shahar
Avigezer
Android Developer
Hello Heart
Britt Barak
Android Lead
Figure8
Britt Barak
Britt Barak
Adventures
Android Academy
Women Techmakers
The Largest
Android Community
Android Academy - TLV
TLV - Android Academy
Join Us:Fundamentals
Advanced
With designers
Hackathons
Mentors
 Advanced #2 - ui perf
 Advanced #2 - ui perf
Has this ever happened to you?
Why do we love apps?
Smooth Experience
How Is Motion Perceived?
How Is Motion Perceived?
Smooth
Motion
60
No
Difference
60+
Flip Book
12
Movies
Frames Per Second
Fluid Motion
24
+effects
We Have A Winner!
Smooth
Motion
60
No
Difference
60+
Flip Book
12
Movies
Frames Per Second
Fluid Motion
24
+effects
Smooth
Motion
60
Colt McAnlis: https://youtu.be/CaMTIgxCSqU
60 FPS
60 Frames / Second =
Frame / 16.666 Millisecond
But First Thing First
But First Thing First
Today’s Story
How Did My Code Become Pixels?
CPU
new
View()
Rasterization
From a high level object
into pixels on screen (or in texture).
https://en.wikipedia.org/wiki/Rasterisation
GPU - For The Rescue !
GPU - For The Rescue!
CPU
new
View()
GPU
GPU - For The Rescue!
CPU
new
View()
GPU
Polygons
Textures
GPU - For The Rescue!
CPU
new
View()
GPU
Polygons
Textures
DisplayList
GPU - For The Rescue!
CPU
new
View()
GPU
Polygons
Textures
DisplayList
What do we need to do in these 16ms?
Measure
CPU
new
View()
GPU
Layout
CPU GPU
Draw
CPU GPU
new
View()
DisplayList
Sync & Upload
CPU
new
View()
GPU
Polygons
Textures
DisplayList
Execute
CPU
new
View()
GPU
Polygons
Textures
DisplayList
Execute
CPU
new
View()
GPU
Polygons
Textures
DisplayList
Frame
Buffer
What happens if
What happens if
CPU GPU
What happens if
CPU GPU
What happens if
CPU GPU
 Advanced #2 - ui perf
What do we do?
Double buffer
CPU
new
View()
GPU
Polygons
Textures
DisplayList
Back
Buffer
Frame
Buffer
CPU
new
View()
GPU
Polygons
Textures
DisplayList
Back
Buffer
Frame
Buffer
CPU
new
View()
GPU
Polygons
Textures
DisplayList
Back
Buffer
Frame
Buffer
CPU
new
View()
GPU
Polygons
Textures
DisplayList
Back
Buffer
Frame
Buffer
vsync
So What Does That Mean?
Measure/ Layout
Draw
Sync & Upload
Execute
Swap Buffers
VSync/Misc
actually...
input
animation
Invalidation
requestLayout
When Things Change...
E.g. text, color, size, padding, margin...
A view notifies the system, by calling:
Invalidate - which will call the onDraw again, or
requestLayout - which will call the entire process again.
When Is Request Layout Called?
View1 View2
When Is Request Layout Called?
View2View1
When Is Request Layout Called?
View2View1
●Adds a flag
●Recreate displaylist in next frame
invalidate()
requestLayout()
Bubble up to the root view.
Heavy for deep view hierarchy.
Called once a frame.
cheographer
The all-mighty LogCat
I/Choreographer(1378): Skipped 55 frames! The application may be doing too much work
on its main thread.
Order Is Guaranteed
VSync/Misc
Input
Animation
Measure/ Layout
Draw
Sync & Upload
Command Issue
Swap Buffers
So What Does That Mean?
Questions?
Reminder
Measure Layout Draw!
Step 1: Measure
Goal: obtain view size,
including its descendants size,
agreed by its parent.
REF: http://developer.android.com/reference/android/view/View.html#onMeasure(int, int)
ViewGroup.LayoutParams
How big the View wants to be
For each dimension, it can specify one of:
an exact number
MATCH_PARENT
WRAP_CONTENT
*Might be subclassed, like in RelativeLayout
MeasureSpec
Parent requirement for child
UNSPECIFIED: as child wants
EXACTLY: exact size
AT MOST: maximum size
Multiple measure() Calls
measure() may be called more than once
For example:
- Call once with UNSPECIFIED
- If size too big/small- evaluate
- Call with exact size
View.getWidth() == 0…
What’s up with that?!
Step 1: Measure - What’s View SIZE?
- width & height (aka: drawing width & drawing height) -
- Actual size on screen, at drawing time and after layout.
REF: http://developer.android.com/reference/android/view/View.html#onMeasure(int, int)
Step 1: Measure - What’s View SIZE?
- width & height (aka: drawing width & drawing height) -
- Actual size on screen, at drawing time and after layout.
- measured width & measured height
- how big a view wants to be within its parent
REF: http://developer.android.com/reference/android/view/View.html#onMeasure(int, int)
What if we want the
size during an animation?
ViewTreeObserver
●Provided by the view hierarchy
●Use to register listeners to view tree global changes
○ For example: layout of the whole tree, beginning of the drawing, touch mode
change....
●Use with getViewTreeObserver()
https://developer.android.com/reference/android/view/ViewTreeObserver.html
onPreDrawListener
Any Questions?
The Steps
Measure Layout Draw!
Step 2: Layout
Goal : set position for view
and all its children,
respect parent’s constraints.
REF: http://developer.android.com/reference/android/view/View.html#onLayout(boolean, int, int, int, int)
How many layout passes are there?
Root View : RelativeLayout
2 passes per change:
1)By views’ requests
a)Then relativeLayout calculates by relations & weights
2)Determine the final positions for rendering.
Root View : RelativeLayout
Example:
●Every view is RelativeLayout
●Per Leaf change:
2*2*2 = 8 traversals
X2
X2
X2
Root View : LinearLayout
●measureWithLargestChild(true)
○ Children with weights will have minimum size of largest child
●Nested weights
Root View : GridLayout
Allows relative positioning,
while preprocessing the child view relationships.
Root View : GridLayout
Generally issues 1 layout request
Unless:
●Layout_gravity: fill*
●Wrong weights
This is called
Double Layout Taxation
It Usually Works Fine… But...
●Root elements
●Deep view hierarchy
●Too many (i.e. list)
Can hurt.
What can we do?
●Flatten hierarchy :
Removing unneeded views
Merge on include
flatter layout
Beware double layout taxation
Minimize layout requests
Cool Tool
Hierarchy Viewer
Hierarchy Viewer
Tools→ Android → Android Device Monitor → Hierarchy Viewer
Display complete view hierarchy
Access to all the views’ properties
Get performance stats
Hierarchy Viewer
Hierarchy Viewer
- Green dot : in the faster 50%
of all the View objects
- Yellow : in the slower than 50%
- Red: the slowest
- requestLayout:
Any Questions?
Ok ok ,
but which layout should I choose??
Simple VS Complex Layouts
●Simple : LinearLayout, FrameLayout, TableLayout
●Complex : RelativeLayout , GridLayout
Simple VS Complex Layouts
●Simple : LinearLayout, FrameLayout, TableLayout
○ → Nesting → Performance Problems
●Complex : RelativeLayout , GridLayout
○ → hard to use & maintain
○ → shouldn’t be @ top hierarchy
Isn’t there anything
smarter we can do??
Constraint Layout
Constraint Layout
●Api 9+
●Performance oriented:
○ Reduce nesting
○ Improve measure/layout
○ Best practice : top level, without nesting layouts
User friendly:
Expressive
New Layout Editor
Designed for
ConstraintLayout -
but not only!
Concept
Similar to RelativeLayout :
Position a view relative to other layout elements.
Yet more expressive & powerful
Getting Started
Design Mode Blueprint Mode
 Advanced #2 - ui perf
Among Capabilities
- Bias
- Ratio
- Center
- ConstraintSet
Possible Attributes
layout_constraintX_toYOf 
X and Y can be replaced with:
a. Top
b. Bottom
c. Left
d. Right
e. Start
f. End
g. Baseline
Converting To ConstraintLayout
1.Open layout on editor
2.right-click the layout → Convert <layout> to ConstraintLayout.
Well, that’s about it!
Not officially released, but quite stable.
Give it a try :)
https://codelabs.developers.google.com/codelabs/constraint-layout/index.html
Any Questions?
The Steps
Measure Layout Draw!
- View draws itself with size and position from previous steps.
- onDraw(Canvas) is called
- Canvas object generates (or Updates) a list of OpenGL-ES
commands (displayList) to send to the GPU.
Step 3: Draw (AKA Update)
REF: http://developer.android.com/reference/android/view/View.html#onDraw(android.graphics.Canvas)
Guide: http://developer.android.com/training/custom-views/custom-drawing.html
What Can Go Wrong?
Allocating objects (new XXX()) might cause a GC (blocking)
So you might drop a frame.
Allocations in onDraw()
But it goes much deeper. See Ian Ni-Lewis: https://youtu.be/HAK5acHQ53E
B
The number of files that a given pixel is
drawn in a frame.
Overdraw
Colt McAnlis: https://youtu.be/T52v50r-JfE
Detecting Overdraw
Detecting Overdraw
https://developer.android.com/studio/profile/dev-options-
Codelab: https://io2015codelabs.appspot.com/codelabs/android-
Fixing Overdraw
There are 2 common reasons for overdraw:
- Redundant backgrounds / Redundant transparency
- Wasteful onDraw
- Things that aren’t visible at all gets drawn (not using quickReject)
- Things that will be overdrawn gets drawn (not using clipRect)
Colt McAnlis: https://youtu.be/vkTn3Ule4Ps
QuickReject
A method to tell if something can be not drawn at all.
Call quickReject to see if you can skip drawing of things that will be
off screen.
REF: https://developer.android.com/reference/android/graphics/Canvas.html
ClipRect
ClipRect is a way to avoid OverDraw,
By keeping your GPU from drawing pixels that you know that will be
obscured by other stuff,
you refrain from overdraw.
Step 1:
quickReject
Step 2:
clipRect
ClipRect vs. QuickReject
Method return type: Detects... Helps to...
QuickReject boolean Fully invisible stuff Avoid redundant
calls to drawXXX(),
Keeping the
drawlist short.
ClipRect void Fully and Partially
invisible stuff
Avoid drawing
pixels,
but still executing
the draw-list!
boolean
But is usually used
as void
Any Questions?
Profiling tools
VSync/Misc
Input
Animation
Measure/ Layout
Draw
Sync & Upload
Command Issue
Swap Buffers
So What Does That Mean?
GPU Profiling Tool
GPU Profiling
● A graph per visible app
● A bar per frame
● Render time corresponds height
● 16 millis benchmark (green)
● Crossing = skipping frame
https://developer.android.com/studio/profile/dev-options-rendering.html
16ms line
Dropped
Frames :(
14
accented
if >16ms
Shiney
colors!
GPU Monitor (Android Studio)
systrace
 Advanced #2 - ui perf
 Advanced #2 - ui perf
 Advanced #2 - ui perf
 Advanced #2 - ui perf
Vitals dashboard
 Advanced #2 - ui perf
Frame Metrics
On Android N+
- Per Frame data:
- Windos.OnFrameMetricsAvailableListener()
- Aggregated
- FrameMetricsAggregator (Support lib v26)
https://developer.android.com/reference/android/view/FrameMet
VSync/Misc
Input
Animation
Measure/ Layout
Draw
Sync & Upload
Command Issue
Swap Buffers
So What Does That Mean?
Vsync / Misc Time
Misc = (vsync timestamp) - (timestamp when received)
→ work on the UI thread between two consecutive frames
● Choreographer log : “Missed vsync by XX ms skipping XX frames”
High? move work off UI Thread
VSync/
Misc
Input
Animation
Measure/
Layout
Draw
Sync &
Upload
Command
Issue
Swap
Buffers
Input Handling
App code inside an input event callback.
High? optimize/offload processing input
VSync/
Misc
Input
Animation
Measure/
Layout
Draw
Sync &
Upload
Command
Issue
Swap
Buffers
Animation
Evaluate all running animators
Often : object animator, view property animator, and transitions
High?(2milis+) check custom animators / unintended work
VSync/
Misc
Input
Animation
Measure/
Layout
Draw
Sync &
Upload
Command
Issue
Swap
Buffers
Measure / Layout
Executing layout and measure callbacks for needed view.
More on that in a few slides :)
VSync/
Misc
Input
Animation
Measure/
Layout
Draw
Sync &
Upload
Command
Issue
Swap
Buffers
Draw
update (/creates) all display lists
+ cache.
High?
complex onDraw() logic
many views invalidated
VSync/
Misc
Input
Animation
Measure/
Layout
Draw
Sync &
Upload
Command
Issue
Swap
Buffers
Sync & Upload
Upload bitmap to the GPU.
High?
Too many images
Too big of an image
VSync/
Misc
Input
Animation
Measure/
Layout
Draw
Sync &
Upload
Command
Issue
Swap
Buffers
Command Issue
Execution: Android's 2D renderer issuing commands to OpenGL to draw and
redraw all display lists
High?
●Complex view (custom?)
●Many views redrawing:
○ Invalidation
○ animationVSync/
Misc
Input
Animation
Measure/
Layout
Draw
Sync &
Upload
Command
Issue
Swap
Buffers
Swap Buffers
CPU done rendering and wait for GPU ack.
High?
A lot of GPU work
VSync/
Misc
Input
Animation
Measure/
Layout
Draw
Sync &
Upload
Command
Issue
Swap
Buffers
Any Questions?
What Happened Here Today?
How Does A View Display On Screen?
ScreenGPU
Polygons
Textures
CPU
new
Button()
DisplayList
tools
- Hierarchy viewer
- Gpu overdraw
- Gpu profiler
- Systrace
- Vitals dashboard
Any Questions?
Thank You !
Community announcements

More Related Content

Similar to Advanced #2 - ui perf (20)

PDF
Android howto hellowidget
Hiron Das
 
PPT
Beginning Native Android Apps
Gil Irizarry
 
PDF
Building a game engine with jQuery
Paul Bakaus
 
PDF
Fast Fashion… How Missguided revolutionised their approach to site performanc...
Andy Davies
 
PPTX
Lecture #1 Creating your first android project
Vitali Pekelis
 
KEY
Mobile optimization
purplecabbage
 
PPTX
Performence #2 gpu
Vitali Pekelis
 
PDF
Appcelerator Titanium Kinetic practices part 1
フ乇丂ひ丂
 
PPTX
Advanced #4 GPU & Animations
Vitali Pekelis
 
PDF
Designing with Code
Adityo Pratomo
 
PPTX
Réaliser un jeu cross plateformes avec WebGL et babylon.js
davrous
 
PDF
Droidcon Paris 2015
Renaud Boulard
 
PPTX
Responsive Design from problem to production
David Douglas
 
PPTX
GEE Juli 2023.pptx
duabelaspkwu
 
PDF
Yeoman AngularJS and D3 - A solid stack for web apps
climboid
 
PPTX
Performance Quality Metrics for Mobile Web and Mobile Native - Agile Testing ...
Andreas Grabner
 
PDF
Professional JavaScript: AntiPatterns
Mike Wilcox
 
PPTX
Optimizing apps for better performance extended
Elif Boncuk
 
PDF
React Native and the future of web technology (Mark Wilcox) - GreeceJS #15
GreeceJS
 
PPT
Visibility Optimization for Games
Umbra
 
Android howto hellowidget
Hiron Das
 
Beginning Native Android Apps
Gil Irizarry
 
Building a game engine with jQuery
Paul Bakaus
 
Fast Fashion… How Missguided revolutionised their approach to site performanc...
Andy Davies
 
Lecture #1 Creating your first android project
Vitali Pekelis
 
Mobile optimization
purplecabbage
 
Performence #2 gpu
Vitali Pekelis
 
Appcelerator Titanium Kinetic practices part 1
フ乇丂ひ丂
 
Advanced #4 GPU & Animations
Vitali Pekelis
 
Designing with Code
Adityo Pratomo
 
Réaliser un jeu cross plateformes avec WebGL et babylon.js
davrous
 
Droidcon Paris 2015
Renaud Boulard
 
Responsive Design from problem to production
David Douglas
 
GEE Juli 2023.pptx
duabelaspkwu
 
Yeoman AngularJS and D3 - A solid stack for web apps
climboid
 
Performance Quality Metrics for Mobile Web and Mobile Native - Agile Testing ...
Andreas Grabner
 
Professional JavaScript: AntiPatterns
Mike Wilcox
 
Optimizing apps for better performance extended
Elif Boncuk
 
React Native and the future of web technology (Mark Wilcox) - GreeceJS #15
GreeceJS
 
Visibility Optimization for Games
Umbra
 

More from Vitali Pekelis (20)

PDF
Droidkaigi2019thagikura 190208135940
Vitali Pekelis
 
PDF
Droidkaigi 2019
Vitali Pekelis
 
PPTX
Google i o &amp; android q changes 2019
Vitali Pekelis
 
PPTX
Android Q 2019
Vitali Pekelis
 
PPTX
Advanced #6 clean architecture
Vitali Pekelis
 
PDF
Advanced #2 networking
Vitali Pekelis
 
PPTX
Advanced #2 threading
Vitali Pekelis
 
PPTX
Advanced #1 cpu, memory
Vitali Pekelis
 
PPTX
All the support you need. Support libs in Android
Vitali Pekelis
 
PPTX
How to build Sdk? Best practices
Vitali Pekelis
 
PPTX
Di &amp; dagger
Vitali Pekelis
 
PPTX
Android design patterns
Vitali Pekelis
 
PPTX
Advanced #3 threading
Vitali Pekelis
 
PPTX
Mobile ui fruit or delicious sweets
Vitali Pekelis
 
PPTX
Lecture #4 c loaders and co.
Vitali Pekelis
 
PPTX
Session #4 b content providers
Vitali Pekelis
 
PDF
Android meetup
Vitali Pekelis
 
PPTX
Android design lecture #3
Vitali Pekelis
 
PPTX
From newbie to ...
Vitali Pekelis
 
PDF
Working better together designers &amp; developers
Vitali Pekelis
 
Droidkaigi2019thagikura 190208135940
Vitali Pekelis
 
Droidkaigi 2019
Vitali Pekelis
 
Google i o &amp; android q changes 2019
Vitali Pekelis
 
Android Q 2019
Vitali Pekelis
 
Advanced #6 clean architecture
Vitali Pekelis
 
Advanced #2 networking
Vitali Pekelis
 
Advanced #2 threading
Vitali Pekelis
 
Advanced #1 cpu, memory
Vitali Pekelis
 
All the support you need. Support libs in Android
Vitali Pekelis
 
How to build Sdk? Best practices
Vitali Pekelis
 
Di &amp; dagger
Vitali Pekelis
 
Android design patterns
Vitali Pekelis
 
Advanced #3 threading
Vitali Pekelis
 
Mobile ui fruit or delicious sweets
Vitali Pekelis
 
Lecture #4 c loaders and co.
Vitali Pekelis
 
Session #4 b content providers
Vitali Pekelis
 
Android meetup
Vitali Pekelis
 
Android design lecture #3
Vitali Pekelis
 
From newbie to ...
Vitali Pekelis
 
Working better together designers &amp; developers
Vitali Pekelis
 
Ad

Recently uploaded (20)

PPTX
Milwaukee Marketo User Group - Summer Road Trip: Mapping and Personalizing Yo...
bbedford2
 
PPTX
Help for Correlations in IBM SPSS Statistics.pptx
Version 1 Analytics
 
PPTX
Home Care Tools: Benefits, features and more
Third Rock Techkno
 
PDF
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
PPTX
Agentic Automation: Build & Deploy Your First UiPath Agent
klpathrudu
 
PDF
Open Chain Q2 Steering Committee Meeting - 2025-06-25
Shane Coughlan
 
PPTX
Hardware(Central Processing Unit ) CU and ALU
RizwanaKalsoom2
 
PPTX
Customise Your Correlation Table in IBM SPSS Statistics.pptx
Version 1 Analytics
 
PDF
MiniTool Partition Wizard 12.8 Crack License Key LATEST
hashhshs786
 
PPTX
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
PPTX
ChiSquare Procedure in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PPTX
Foundations of Marketo Engage - Powering Campaigns with Marketo Personalization
bbedford2
 
PDF
[Solution] Why Choose the VeryPDF DRM Protector Custom-Built Solution for You...
Lingwen1998
 
PDF
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
PPTX
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
PDF
Technical-Careers-Roadmap-in-Software-Market.pdf
Hussein Ali
 
PPTX
Finding Your License Details in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
Driver Easy Pro 6.1.1 Crack Licensce key 2025 FREE
utfefguu
 
PDF
iTop VPN With Crack Lifetime Activation Key-CODE
utfefguu
 
PPTX
Homogeneity of Variance Test Options IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Milwaukee Marketo User Group - Summer Road Trip: Mapping and Personalizing Yo...
bbedford2
 
Help for Correlations in IBM SPSS Statistics.pptx
Version 1 Analytics
 
Home Care Tools: Benefits, features and more
Third Rock Techkno
 
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
Agentic Automation: Build & Deploy Your First UiPath Agent
klpathrudu
 
Open Chain Q2 Steering Committee Meeting - 2025-06-25
Shane Coughlan
 
Hardware(Central Processing Unit ) CU and ALU
RizwanaKalsoom2
 
Customise Your Correlation Table in IBM SPSS Statistics.pptx
Version 1 Analytics
 
MiniTool Partition Wizard 12.8 Crack License Key LATEST
hashhshs786
 
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
ChiSquare Procedure in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Foundations of Marketo Engage - Powering Campaigns with Marketo Personalization
bbedford2
 
[Solution] Why Choose the VeryPDF DRM Protector Custom-Built Solution for You...
Lingwen1998
 
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
Technical-Careers-Roadmap-in-Software-Market.pdf
Hussein Ali
 
Finding Your License Details in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Driver Easy Pro 6.1.1 Crack Licensce key 2025 FREE
utfefguu
 
iTop VPN With Crack Lifetime Activation Key-CODE
utfefguu
 
Homogeneity of Variance Test Options IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Ad

Advanced #2 - ui perf

Editor's Notes

  • #17: https://en.wikipedia.org/wiki/Rasterisation
  • #118: https://developer.android.com/studio/profile/dev-options-rendering.html || Colt McAnlis https://youtu.be/VzYkVL1n4M8
  • #120: https://developer.android.com/studio/profile/am-gpu.html
  • #121: Systrace has traces on method android team added. If they had added alot of traces - it would slow the app.
  • #136: upload bitmap information to the GPU. The UI thread passes all the resources to the RenderThread. RenderThread (added in L) is a thread helping the busy UI thread with the conversion of display lists to OpenGL commands, and sends them to the GPU. During which, the UI thread can start processing next frame.