Of Bytes, Cycles and Battery Life
Who am [2] [1]
How to reduce your APK size Memory Analysis Tools Performance Analysis Tools What i‘ll talk about
Reduce asset size – pngcrush your PNGs [3] – SVG (YMMV) [4] – lower bit-rates for audio Reduce code size – Remove unnecessary dependencies! – Proguard, for Class files [5] [6] – Dexguard, for Dex files [7] How to reduce your APK size
Multiple-APKs to the „rescue“ [8] – One APK per screen density – One APK per texture compression algorithm – Use Google Play filters – Easier with new Android Gradle build system APK Expansion files [9] – hosted by Google Roll your own „Expansion files“ – Avoid if you can! „But i can‘t reduce my APK size“
Memory Analysis Tools „But we have a Garbage Collector!“ – You can still „leak“ memory – Nasty static vars referencing unused objects – Hidden object references – Native memory allocated by Java classes If you write games, GC kills your steady framerate
DDMS [10] Heap View
DDMS Allocation Tracker
HPROF/Eclipse MAT [11] Select the process Click Save to a location of your choice Convert to „real“ HPROF file Open in Eclipse MAT [12]
HPROF/Eclipse MAT
Performance Analysis Tools Why do we want to analyse? – Jerky animations – Do less, conserve battery – Better user Experience What do we want to analyse? – Time spent in Java code – Time spent in Native code – Time spent drawing stuff
Before we start... Never use the emulator! – Ever, think of the kittens Identify hotspots in your app, not in microbenchmarks Only spend time if you have a real problem
Java Profilers DDMS – Quite capable method level profiler – Good enough for 99% of use cases – Works with any Android version 4.1+ Profiling tools – Systrace [13], More powerful, also tracks OS calls Needs root and Android 4.1+ – We‘ll check out the graphical parts later
DDMS Start app Navigate to problematic activity, hit Wait a bit, hit View profiling data – Ignore absolute time, only care for relative timings – Ignore trivial getters/setters, instrumentation messes with timings
DDMS
Native Code Profilers Android NDK Profiler [14] – Not an official NDK tool – Setup a bit involved Device specific CPU profilers – NVIDIA Nsight [15],... Roll your own – Instrument manually – Track down hotspots
Graphics Profilers What do we analyse? – Overdraw, your biggest enemy – Draw calls, your second biggest enemy Use DDMS/systrace – Related to memory Textures on VRAM (which is usually RAM) Bitmaps in RAM
Graphics Profilers 4.1+ Profiling tools GPU Vendor Specific – NVIDIA [16], Qualcomm [17], Imagination Technologies [18] – Outside of scope of this talk
Visualize Overdraw [19]
Visualize Overdraw Normal Color – 0 Overdraw Blue – 1x Overdraw Green – 2x Overdraw Light Red – 3x Overdraw Dark Red – +4x Overdraw
Visualize Overdraw Hierarchy View [20] Window -> Open Perspective -> Other...
Visualize Overdraw
Tracer for OpenGL [21] Window -> Open Perspective -> Other... Click Enter package name Wait
Visualize Overdraw
Closing Words So much to tell, so little time See Dalvik Performance Tips [22] Read all references – Your users will thank you for excellent battery life and buttery smooth UIs
FIN Thanks for Listening Questions?
References [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]
References [12] [13] [14] [15] [16] [17] and-resourceshttps://developer.qualcomm.com/mobile-development/mobile-technologies/gaming-graphics-optimization-adreno/tools- and-resources [18] [19] [20] [21] [22]