SlideShare a Scribd company logo
First,
Refael Ozeri
CEO @ Hero Apps
Android Academy
> 3500 members
Largest Android Active
Community
Android Academy Staff
Yonatan Levin
Google Developer
Expert &
CTO @ KolGene
Yossi Segev
Mobile Engineer
Tech Lead @ Kik
Refael Ozeri
Founder & CEO
Hero Apps
Eden Bugdary
Mobile developer @
AppNext
Fundamentals Squad
Artyom Okun
Mobile Dev @ Colu
Timor Surkis
Android Dev @ Gini Apps
What Do We Do?
● Android Fundamentals
● Android UI / UX
● Community Hackathon
● Android Advanced
● Mentors Program
● Active community
Moscow
Mentors program
NOW!
https://bit.ly/2Nn9dAf
Logistics
Android Advanced Course
22.8 - UI, GPU, Animations
16.9 - Clean Architecture
3.7 - CPU & Memory
31.7 - Threads & Network
facebook.com/groups/android.academy.ils/
https://bit.ly/2MWtigC
Why do we love apps?
Smooth Experience
Google Play Store
Houzz
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
Rendering?
Rendering
Turning a UI description into pixels on the
screen.
How Did My Code Become Pixels?
CPU
new
View()
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
Wait…
DisplayList?! OpenGL?!
WHAT?
DisplayList
A sequence of graphics commands needed to be executed to render a specific view
These commands are a mixture of statements that can be directly mapped to OpenGL
commands
OpenGL
OpenGL is a cross-language, cross-platform API for rendering
2D and 3D vector graphics. The API is typically used to
interact with a GPU, to achieve hardware-accelerated
rendering.
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
So, we have a frame buffer that loads our
graphics, what can go wrong?
Bonus Question..
Anyone knows the
name of this game?
Dead Rising
First..
let’s understand how our hardware actually
works!
Remember this?
Remember this?
That’s 25 frames
per second
Remember this?
That’s 25 frames
per second
Bonus question:
What’s the difference between PAL / NTSC ?
Bonus question:
What’s the difference between PAL / NTSC ?
PAL (common in Europe and parts of Asia) delivers a frame
rate of 25 fps (frames per second) with 625 lines, while NTSC
(used in the U.S. and Canada) delivers a frame rate of 30 fps
using 525 lines.
Let’s go SLOW..
Real SLOW!
That’s our TV on
1,600 frames per
second !
Even SLOWER?!
GO MARIO!
That’s our TV on
146,727 frames
per second !
What happens if
CPU GPU
What happens if
CPU GPU
What happens if
CPU GPU
The solution?
The solution?
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
Performance boost!
The all new RenderThread
(Lollipop & above)
Google I/O 2018 - Drawn out lecture - https://youtu.be/zdQRIYOST64
Layout Inspector
(Formerly Hierarchy Viewer)
Android Studio 3.1+
Layout Inspector
Tools→ Layout Inspector
● Display complete view hierarchy
● Access to all the views’ properties
● Get performance stats
Hierarchy Viewer
B
The number of times that a given pixel is
drawn in a frame.
Overdraw
Colt McAnlis: https://youtu.be/T52v50r-JfE
Understanding Overdraw
Understanding Overdraw
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.
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)
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
Choreographer
Choreographer
Coordinates the timing of animations, input
and drawing.
Ever seen this?
06-29 23:11:17.796: I/Choreographer(691):
Skipped 647 frames! The application may be doing too much
work on its main thread.
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
VSync/Misc
Input
Animation
Measure/ Layout
Draw
Sync & Upload
Command Issue
Swap Buffers
So What Does That Mean?
systrace
Vitals dashboard
What did we talked about?
How Does A View Display On Screen?
ScreenGPU
Polygons
Textures
CPU
new
Button()
DisplayList
Animations
Animations
- View Animation
- Property Animation
- Drawable Animation
- Transition Framework
- Constraint & Motion Layout Animations
- Animated Vector Drawable
View Animation
available since API 1.
Has 4 types of animation capabilities:
Alpha.
View Animation
available since API 1.
Has 4 types of animation capabilities:
Alpha, Scale.
View Animation
available since API 1.
Has 4 types of animation capabilities:
Alpha, Scale, Rotate.
View Animation
available since API 1.
Has 4 types of animation capabilities:
Alpha, Scale, Rotate, Translate.
Property Animation
Property Animation - available since API 11.
Much more capable.
Now it’s not just VIEW, we can animate the property itself.
Drawable Animation
Drawable Animation
Drawable Animation
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<item android:duration="500" android:drawable="@drawable/ic_heart_0"/>
<item android:duration="500" android:drawable="@drawable/ic_heart_25"/>
<item android:duration="500" android:drawable="@drawable/ic_heart_50"/>
<item android:duration="500" android:drawable="@drawable/ic_heart_75"/>
<item android:duration="500" android:drawable="@drawable/ic_heart_100"/>
</animation-list>
Transition Framework
Transition sets, shared elements, change bounds/transform/clipBounds/imageTransform
Transition Framework
Transition sets, shared elements, change bounds/transform/clipBounds/imageTransform
Constraint & Motion Layout Animations
Full example -> https://android.jlelse.eu/build-awesome-animations-with-7-lines-of-code-using-constraintlayout-854e8fd3ad93
Constraint & Motion Layout Animations
Full example -> https://android.jlelse.eu/build-awesome-animations-with-7-lines-of-code-using-constraintlayout-854e8fd3ad93
This animation is created with two different layouts file:
circuit.xml and circuit_detail.xml
Constraint & Motion Layout Animations
Full example -> https://android.jlelse.eu/build-awesome-animations-with-7-lines-of-code-using-constraintlayout-854e8fd3ad93
private fun showComponents() {
val constraintSet = ConstraintSet()
constraintSet.clone(this, R.layout.circuit_detail)
val transition = ChangeBounds()
transition.interpolator = AnticipateOvershootInterpolator(1.0f)
transition.duration = 1200
TransitionManager.beginDelayedTransition(constraint, transition)
constraintSet.applyTo(constraint)
}
Constraint & Motion Layout Animations
Full example -> https://medium.com/google-developers/introduction-to-motionlayout-part-iii-47cd64d51a5
Let’s touch a bit on the new motion layout :)
Constraint & Motion Layout Animations
Full example -> https://medium.com/google-developers/introduction-to-motionlayout-part-iii-47cd64d51a5
Keep in mind, motion layout can only provide its capabilities to its direct children
MotionLayout with CoordinatorLayout
Constraint & Motion Layout Animations
Full example -> https://medium.com/google-developers/introduction-to-motionlayout-part-iii-47cd64d51a5
Keep in mind, motion layout can only provide its capabilities to its direct children
With NavigationDrawer
Constraint & Motion Layout Animations
Full example -> https://medium.com/google-developers/introduction-to-motionlayout-part-iii-47cd64d51a5
Keep in mind, motion layout can only provide its capabilities to its direct children
With ViewPager
Quote of the day
“Making a beautiful app is easy,
Making it fun and easy to ride for a first timer is
the real challenge.”
Quote of the day
“Making a beautiful app is easy,
Making it fun and easy to ride for a first timer is
the real challenge.”
Refael Ozeri, 12.2.2018
Vector Drawables
Vector Drawables !
Vector Drawables
Vector Drawables !
Vector Drawables
Vector Drawables !
Amazing benefit?
It’s density independent which is
both convenient and efficient..
And also leads to smaller APK
size which is always good!
Vector Drawables
How? There are 5 topics we have to cover!
Vector Drawables
How? There are 5 topics we have to cover!
● Drawing paths
Vector Drawables
How? There are 5 topics we have to cover!
● Drawing paths
● Transforming groups of paths
Vector Drawables
How? There are 5 topics we have to cover!
● Drawing paths
● Transforming groups of paths
● Trimming stroked paths
Vector Drawables
How? There are 5 topics we have to cover!
● Drawing paths
● Transforming groups of paths
● Trimming stroked paths
● Morphing paths
Vector Drawables
How? There are 5 topics we have to cover!
● Drawing paths
● Transforming groups of paths
● Trimming stroked paths
● Morphing paths
● Clipping paths
Drawing paths
Drawing paths
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportHeight="12"
android:viewportWidth="12">
<!-- This path draws an orange triangular play icon. -->
<path
android:fillColor="#FF9800"
android:pathData="M 4,2.5 L 4,9.5 L 9.5,6 Z"/>
</vector>
Drawing paths
Command Description
M x,y Begin a new subpath by moving to (x,y).
Drawing paths
Command Description
M x,y Begin a new subpath by moving to (x,y).
L x,y Draw a line to (x,y).
Drawing paths
Command Description
M x,y Begin a new subpath by moving to (x,y).
L x,y Draw a line to (x,y).
C x1,y1 x2,y2 x,y Draw a cubic bezier curve to (x,y) using control points
Drawing paths
Command Description
M x,y Begin a new subpath by moving to (x,y).
L x,y Draw a line to (x,y).
C x1,y1 x2,y2 x,y Draw a cubic bezier curve to (x,y) using control points
Z Close the path by drawing a line back to the beginning of
the current subpath
Drawing paths
Property name Element type Value type Min Max
android:fillAlpha <path> float 0 1
Drawing paths
Property name Element type Value type Min Max
android:fillAlpha <path> float 0 1
android:fillColor <path> integer --- ---
Drawing paths
Property name Element type Value type Min Max
android:fillAlpha <path> float 0 1
android:fillColor <path> integer --- ---
android:strokeAlpha <path> float 0 1
Drawing paths
Property name Element type Value type Min Max
android:fillAlpha <path> float 0 1
android:fillColor <path> integer --- ---
android:strokeAlpha <path> float 0 1
android:strokeColor <path> integer --- ---
Drawing paths
Property name Element type Value type Min Max
android:fillAlpha <path> float 0 1
android:fillColor <path> integer --- ---
android:strokeAlpha <path> float 0 1
android:strokeColor <path> integer --- ---
android:strokeWidth <path> float 0 1
Drawing paths
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportHeight="12"
android:viewportWidth="12">
<!-- This path draws an orange triangular play icon. -->
<path
android:fillColor="#FF9800"
android:pathData="M 4,2.5 L 4,9.5 L 9.5,6 Z"/>
</vector>
Drawing paths
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportHeight="12"
android:viewportWidth="12">
<!-- This path draws an orange triangular play icon. -->
<path
android:fillColor="#FF9800"
android:pathData="M 4,2.5 L 4,9.5 L 9.5,6 Z"/>
</vector>
1. M 4,2.5
Drawing paths
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportHeight="12"
android:viewportWidth="12">
<!-- This path draws an orange triangular play icon. -->
<path
android:fillColor="#FF9800"
android:pathData="M 4,2.5 L 4,9.5 L 9.5,6 Z"/>
</vector>
1. M 4,2.5
2. L 4,9.5
Drawing paths
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportHeight="12"
android:viewportWidth="12">
<!-- This path draws an orange triangular play icon. -->
<path
android:fillColor="#FF9800"
android:pathData="M 4,2.5 L 4,9.5 L 9.5,6 Z"/>
</vector>
1. M 4,2.5
2. L 4,9.5
3. L 9.5,6
Drawing paths
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportHeight="12"
android:viewportWidth="12">
<!-- This path draws an orange triangular play icon. -->
<path
android:fillColor="#FF9800"
android:pathData="M 4,2.5 L 4,9.5 L 9.5,6 Z"/>
</vector>
1. M 4,2.5
2. L 4,9.5
3. L 9.5,6
4. Z
Drawing paths
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportHeight="12"
android:viewportWidth="12">
<path
android:pathData="M 4,2.5 L 4,9.5 M 8,2.5 L 8,9.5"
android:strokeColor="#0F9D58"
android:strokeWidth="2"/>
</vector>
Drawing paths
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportHeight="12"
android:viewportWidth="12">
<!-- This path draws two green stroked vertical pause bars. -->
<path
android:pathData="M 4,2.5 L 4,9.5 M 8,2.5 L 8,9.5"
android:strokeColor="#0F9D58"
android:strokeWidth="2"/>
</vector>
Drawing paths
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportHeight="12"
android:viewportWidth="12">
<!-- This path draws two green stroked vertical pause bars. -->
<path
android:pathData="M 4,2.5 L 4,9.5 M 8,2.5 L 8,9.5"
android:strokeColor="#0F9D58"
android:strokeWidth="2"/>
</vector>
1. M 4,2.5
Drawing paths
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportHeight="12"
android:viewportWidth="12">
<!-- This path draws two green stroked vertical pause bars. -->
<path
android:pathData="M 4,2.5 L 4,9.5 M 8,2.5 L 8,9.5"
android:strokeColor="#0F9D58"
android:strokeWidth="2"/>
</vector>
1. M 4,2.5
2. L 4,9.5
Drawing paths
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportHeight="12"
android:viewportWidth="12">
<!-- This path draws two green stroked vertical pause bars. -->
<path
android:pathData="M 4,2.5 L 4,9.5 M 8,2.5 L 8,9.5"
android:strokeColor="#0F9D58"
android:strokeWidth="2"/>
</vector>
1. M 4,2.5
2. L 4,9.5
3. M 8,2.5
4. L 8,9.5
Drawing paths
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportHeight="12"
android:viewportWidth="12">
<path
android:fillColor="#DB4437"
android:pathData="M 2,6 C 2,3.8 3.8,2 6,2 C 8.2,2 10,3.8 10,6 C 10,8.2 8.2,10 6,10 C 3.8,10 2,8.2 2,6"/>
</vector>
Drawing paths
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportHeight="12"
android:viewportWidth="12">
<!-- This path draws a red circle. -->
<path
android:fillColor="#DB4437"
android:pathData="M 2,6 C 2,3.8 3.8,2 6,2 C 8.2,2 10,3.8 10,6 C 10,8.2 8.2,10 6,10 C 3.8,10 2,8.2 2,6"/>
</vector>
Drawing paths
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportHeight="12"
android:viewportWidth="12">
<!-- This path draws a red circle. -->
<path
android:fillColor="#DB4437"
android:pathData="M 2,6 C 2,3.8 3.8,2 6,2 C 8.2,2 10,3.8 10,6 C 10,8.2 8.2,10 6,10 C 3.8,10 2,8.2 2,6"/>
</vector>
Transforming groups of paths
Property name Element type Value type
android:pivotX <group> float
android:pivotY <group> float
android:rotation <group> float
android:scaleX <group> float
android:scaleY <group> float
android:translateX <group> float
android:translateY <group> float
Transforming groups of paths
<vector ...>
<group android:translateX="2">
<path android:name="play_path"/>
</group>
</vector>
Transforming groups of paths
<vector ...>
<!-- Translate the canvas, then draw the play icon. -->
<group android:translateX="2">
<path android:name="play_path"/>
</group>
</vector>
Transforming groups of paths
<vector ...>
<!-- Translate the canvas, then rotate, then scale, then draw the play icon. -->
<group android:scaleX="1.5" android:pivotX="6" android:pivotY="6">
<group android:rotation="90" android:pivotX="6" android:pivotY="6">
<group android:translateX="2">
<path android:name="play_path"/>
</group>
</group>
</group>
</vector>
Transforming groups of paths
Rotated back and forth
Transforming groups of paths
Transforming groups of paths
Rotated 90 degrees and vertically translated
Ok stop.. Let’s use it?
<?xml version="1.0" encoding="utf-8"?>
<animated-selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/expanded"
android:drawable="@drawable/vd_checkable_expandcollapse_expanded"
android:state_checked="true"/>
<item
android:id="@+id/collapsed"
android:drawable="@drawable/vd_checkable_expandcollapse_collapsed"/>
… </animated-selector>
Ok stop.. Let’s use it?
...
<transition
android:drawable="@drawable/avd_checkable_expandcollapse_collapsed_to_expanded"
android:fromId="@id/collapsed"
android:toId="@id/expanded"/>
<transition
android:drawable="@drawable/avd_checkable_expandcollapse_expanded_to_collapsed"
android:fromId="@id/expanded"
android:toId="@id/collapsed"/>
</animated-selector>
Trimming stroked paths
Property name Element type Value type Min Max
android:trimPathStart <path> float 0 1
android:trimPathEnd <path> float 0 1
android:trimPathOffset <path> float 0 1
Trimming stroked paths
Trimming stroked paths
Trimming stroked paths
Trimming stroked paths
Trimming stroked paths
Trimming stroked paths
Trimming stroked paths
Trimming stroked paths
Trimming stroked paths
Morphing paths
The true art.
Morphing paths
The true art.
Morphing paths
The true art.
Morphing paths
The true art.
Doesn’t look that fancy right?
Let’s try and add rotation?!
Morphing paths
The true art.
Morphing paths
The true art.
A skilled morph-master
can basically do a LOT
of cool stuff..
Clipping paths
Clipping paths
So.. about that download icon...
- Fill alpha
So.. about that download icon...
- Fill alpha
(at the end when fading out the downloading arrow).
So.. about that download icon...
- Fill alpha
- Stroke width
So.. about that download icon...
- Fill alpha
- Stroke width
(during the progress indicator to check mark
animation).
So.. about that download icon...
- Fill alpha
- Stroke width
- Translation and rotation
So.. about that download icon...
- Fill alpha
- Stroke width
- Translation and rotation
(at the beginning to create the ‘bouncing arrow’
effect).
So.. about that download icon...
- Fill alpha
- Stroke width
- Translation and rotation
- Trim path start/end
So.. about that download icon...
- Fill alpha
- Stroke width
- Translation and rotation
- Trim path start/end
(at the end when transitioning from the progress bar
to the check mark).
So.. about that download icon...
- Fill alpha
- Stroke width
- Translation and rotation
- Trim path start/end
- Path morphing
So.. about that download icon...
- Fill alpha
- Stroke width
- Translation and rotation
- Trim path start/end
- Path morphing
(at the beginning to create the ‘bouncing line’ effect,
and at the end while transitioning the check mark
back into an arrow).
So.. about that download icon...
- Fill alpha
- Stroke width
- Translation and rotation
- Trim path start/end
- Path morphing
- Clip path
So.. about that download icon...
- Fill alpha
- Stroke width
- Translation and rotation
- Trim path start/end
- Path morphing
- Clip path
(vertically filling the contents of the downloading
arrow to indicate indeterminate progress).
Important tool to know -Shapeshifter
https://shapeshifter.design/
WOOHOO
So.. now you know all the different powers of
Vector Drawables!
This is you playing around with animations
Or… maybe it’s your designer?! :D
This is you writing insane animations :D
Lottie, by AirBnB
Lottie, by AirBnB
Your designer can create animations using Adobe After Effects and export them to a JSON file.
Lottie builds our animations with that file.
And that’s it :)
Lottie, by AirBnB - Usage
dependencies {
...
implementation
"com.airbnb.android:lottie:$lottieVersion"
...
}
Lottie, by AirBnB - Usage
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/animation_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:lottie_rawRes="@raw/hello_world"
//or
app:lottie_fileName="hello_world.json"
//Loop indefinitely
app:lottie_loop="true"
// Start playing as soon as the animation is loaded
app:lottie_autoPlay="true" />
Lottie, by AirBnB - Usage
And.. THAT’S IT!
Lottie, by AirBnB - Big tip!
https://www.lottiefiles.com/ is awesome!
THANK YOU
Useful links:
Thank you for coming!
How a screen works - https://youtu.be/3BJU2drrtCM
Understanding Overdraw - https://youtu.be/T52v50r-JfE
Overdraw, Cliprect, QuickReject - https://youtu.be/vkTn3Ule4Ps
Invalidations, Layouts, and Performance - https://youtu.be/we6poP0kw6E
Icon animations techniques - https://www.androiddesignpatterns.com/2016/11/introduction-to-icon-animation-
techniques.html

More Related Content

Similar to Advanced #4 GPU & Animations

Android design lecture #1
Android design   lecture #1Android design   lecture #1
Android design lecture #1
Vitali Pekelis
 
Android Performance Tools
Android Performance ToolsAndroid Performance Tools
Android Performance Tools
Heghine Hakobyan
 
SWT - Technical Deep Dive
SWT - Technical Deep DiveSWT - Technical Deep Dive
SWT - Technical Deep Dive
Eclipse Day India
 
Siggraph 2016 - Vulkan and nvidia : the essentials
Siggraph 2016 - Vulkan and nvidia : the essentialsSiggraph 2016 - Vulkan and nvidia : the essentials
Siggraph 2016 - Vulkan and nvidia : the essentials
Tristan Lorach
 
351111888-Commodore-64-Assembly-Language-Arcade-Programming-pdf.pdf
351111888-Commodore-64-Assembly-Language-Arcade-Programming-pdf.pdf351111888-Commodore-64-Assembly-Language-Arcade-Programming-pdf.pdf
351111888-Commodore-64-Assembly-Language-Arcade-Programming-pdf.pdf
kalelboss
 
S378 introduction to robocup & soccer simulation
S378 introduction to robocup & soccer simulationS378 introduction to robocup & soccer simulation
S378 introduction to robocup & soccer simulation
Isfahanlug
 
CSS3 Animations & Transitions with PhoneGap
CSS3 Animations & Transitions with PhoneGapCSS3 Animations & Transitions with PhoneGap
CSS3 Animations & Transitions with PhoneGap
Mark A R Smith
 
AAA 3D GRAPHICS ON THE WEB WITH REACTJS + BABYLONJS + UNITY3D by Denis Radin ...
AAA 3D GRAPHICS ON THE WEB WITH REACTJS + BABYLONJS + UNITY3D by Denis Radin ...AAA 3D GRAPHICS ON THE WEB WITH REACTJS + BABYLONJS + UNITY3D by Denis Radin ...
AAA 3D GRAPHICS ON THE WEB WITH REACTJS + BABYLONJS + UNITY3D by Denis Radin ...
DevClub_lv
 
JS Fest 2019. Денис Радин. AAA 3D графика в Web с ReactJS, BabylonJS и Unity3D
JS Fest 2019. Денис Радин. AAA 3D графика в Web с ReactJS, BabylonJS и Unity3DJS Fest 2019. Денис Радин. AAA 3D графика в Web с ReactJS, BabylonJS и Unity3D
JS Fest 2019. Денис Радин. AAA 3D графика в Web с ReactJS, BabylonJS и Unity3D
JSFestUA
 
Hacking for salone: drone races
Hacking for salone: drone racesHacking for salone: drone races
Hacking for salone: drone races
Emanuele Di Saverio
 
Game engine terminology worksheet
Game engine terminology worksheetGame engine terminology worksheet
Game engine terminology worksheetrwbybomb21
 
Html5 game using impact js
Html5 game using impact jsHtml5 game using impact js
Html5 game using impact jsHa Bogay
 
"Product Architecture: failures and lessons learnt" - Royi Benyossef @Product...
"Product Architecture: failures and lessons learnt" - Royi Benyossef @Product..."Product Architecture: failures and lessons learnt" - Royi Benyossef @Product...
"Product Architecture: failures and lessons learnt" - Royi Benyossef @Product...
Product of Things
 
Console to PC VR: Lessons Learned from the Unspoken
Console to PC VR: Lessons Learned from the UnspokenConsole to PC VR: Lessons Learned from the Unspoken
Console to PC VR: Lessons Learned from the Unspoken
Robert Sprentall
 
Advanced #2 - ui perf
 Advanced #2 - ui perf Advanced #2 - ui perf
Advanced #2 - ui perf
Vitali Pekelis
 
Google Developer Groups, Why We Choose Angular.js
Google Developer Groups, Why We Choose Angular.jsGoogle Developer Groups, Why We Choose Angular.js
Google Developer Groups, Why We Choose Angular.js
Almog Koren
 
Hacking for Salone: Drone Races - Di Saverio; Lippolis - Codemotion Milan 2016
Hacking for Salone: Drone Races - Di Saverio; Lippolis - Codemotion Milan 2016Hacking for Salone: Drone Races - Di Saverio; Lippolis - Codemotion Milan 2016
Hacking for Salone: Drone Races - Di Saverio; Lippolis - Codemotion Milan 2016
Codemotion
 
Performance #3 layout&amp;animation
Performance #3  layout&amp;animationPerformance #3  layout&amp;animation
Performance #3 layout&amp;animation
Vitali Pekelis
 
Crafting Awesome Designs - #BSW14
Crafting Awesome Designs - #BSW14Crafting Awesome Designs - #BSW14
Crafting Awesome Designs - #BSW14
David Pitman
 

Similar to Advanced #4 GPU & Animations (20)

Android design lecture #1
Android design   lecture #1Android design   lecture #1
Android design lecture #1
 
Android Performance Tools
Android Performance ToolsAndroid Performance Tools
Android Performance Tools
 
SWT - Technical Deep Dive
SWT - Technical Deep DiveSWT - Technical Deep Dive
SWT - Technical Deep Dive
 
Siggraph 2016 - Vulkan and nvidia : the essentials
Siggraph 2016 - Vulkan and nvidia : the essentialsSiggraph 2016 - Vulkan and nvidia : the essentials
Siggraph 2016 - Vulkan and nvidia : the essentials
 
351111888-Commodore-64-Assembly-Language-Arcade-Programming-pdf.pdf
351111888-Commodore-64-Assembly-Language-Arcade-Programming-pdf.pdf351111888-Commodore-64-Assembly-Language-Arcade-Programming-pdf.pdf
351111888-Commodore-64-Assembly-Language-Arcade-Programming-pdf.pdf
 
S378 introduction to robocup & soccer simulation
S378 introduction to robocup & soccer simulationS378 introduction to robocup & soccer simulation
S378 introduction to robocup & soccer simulation
 
CSS3 Animations & Transitions with PhoneGap
CSS3 Animations & Transitions with PhoneGapCSS3 Animations & Transitions with PhoneGap
CSS3 Animations & Transitions with PhoneGap
 
AAA 3D GRAPHICS ON THE WEB WITH REACTJS + BABYLONJS + UNITY3D by Denis Radin ...
AAA 3D GRAPHICS ON THE WEB WITH REACTJS + BABYLONJS + UNITY3D by Denis Radin ...AAA 3D GRAPHICS ON THE WEB WITH REACTJS + BABYLONJS + UNITY3D by Denis Radin ...
AAA 3D GRAPHICS ON THE WEB WITH REACTJS + BABYLONJS + UNITY3D by Denis Radin ...
 
JS Fest 2019. Денис Радин. AAA 3D графика в Web с ReactJS, BabylonJS и Unity3D
JS Fest 2019. Денис Радин. AAA 3D графика в Web с ReactJS, BabylonJS и Unity3DJS Fest 2019. Денис Радин. AAA 3D графика в Web с ReactJS, BabylonJS и Unity3D
JS Fest 2019. Денис Радин. AAA 3D графика в Web с ReactJS, BabylonJS и Unity3D
 
Hacking for salone: drone races
Hacking for salone: drone racesHacking for salone: drone races
Hacking for salone: drone races
 
Game engine terminology worksheet
Game engine terminology worksheetGame engine terminology worksheet
Game engine terminology worksheet
 
Html5 game using impact js
Html5 game using impact jsHtml5 game using impact js
Html5 game using impact js
 
"Product Architecture: failures and lessons learnt" - Royi Benyossef @Product...
"Product Architecture: failures and lessons learnt" - Royi Benyossef @Product..."Product Architecture: failures and lessons learnt" - Royi Benyossef @Product...
"Product Architecture: failures and lessons learnt" - Royi Benyossef @Product...
 
Console to PC VR: Lessons Learned from the Unspoken
Console to PC VR: Lessons Learned from the UnspokenConsole to PC VR: Lessons Learned from the Unspoken
Console to PC VR: Lessons Learned from the Unspoken
 
Advanced #2 - ui perf
 Advanced #2 - ui perf Advanced #2 - ui perf
Advanced #2 - ui perf
 
Pc54
Pc54Pc54
Pc54
 
Google Developer Groups, Why We Choose Angular.js
Google Developer Groups, Why We Choose Angular.jsGoogle Developer Groups, Why We Choose Angular.js
Google Developer Groups, Why We Choose Angular.js
 
Hacking for Salone: Drone Races - Di Saverio; Lippolis - Codemotion Milan 2016
Hacking for Salone: Drone Races - Di Saverio; Lippolis - Codemotion Milan 2016Hacking for Salone: Drone Races - Di Saverio; Lippolis - Codemotion Milan 2016
Hacking for Salone: Drone Races - Di Saverio; Lippolis - Codemotion Milan 2016
 
Performance #3 layout&amp;animation
Performance #3  layout&amp;animationPerformance #3  layout&amp;animation
Performance #3 layout&amp;animation
 
Crafting Awesome Designs - #BSW14
Crafting Awesome Designs - #BSW14Crafting Awesome Designs - #BSW14
Crafting Awesome Designs - #BSW14
 

More from Vitali Pekelis

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

More from Vitali Pekelis (20)

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

Recently uploaded

How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
wottaspaceseo
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Anthony Dahanne
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
Tendenci - The Open Source AMS (Association Management Software)
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
Globus
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
XfilesPro
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Globus
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
Cyanic lab
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
kalichargn70th171
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
WSO2
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
takuyayamamoto1800
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
Globus
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
Globus
 
Software Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdfSoftware Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdf
MayankTawar1
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
Ortus Solutions, Corp
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
informapgpstrackings
 

Recently uploaded (20)

How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
 
A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
 
Software Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdfSoftware Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdf
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
 

Advanced #4 GPU & Animations

Editor's Notes

  1. Dead Rising
  2. Dead Rising
  3. Dead Rising
  4. https://developer.android.com/studio/profile/dev-options-rendering.html || Colt McAnlis https://youtu.be/VzYkVL1n4M8
  5. https://developer.android.com/studio/profile/am-gpu.html
  6. 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.
  7. Systrace has traces on method android team added. If they had added alot of traces - it would slow the app.