Date post: | 13-Jul-2015 |
Category: |
Technology |
Upload: | mario-zechner |
View: | 5,908 times |
Download: | 1 times |
Of Bytes, Cycles and Battery Life
Who am I?
@badlogicgameshttp://www.badlogicgames.com
[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 steadyframerate
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
HPROF/Eclipse MAT
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 messeswith 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
Visualize Overdraw
• Tracer for OpenGL [21]
• Window -> Open Perspective -> Other ...
• Click
• Enter package name
• Wait
Visualize Overdraw
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 lifeand buttery smooth UIs
FIN
Thanks for Listening
Questions?
References[1] http://www.amazon.com/Beginning-Android-Games-Mario-Zechner/dp/1430246774
[2] http://libgdx.badlogicgames.com/
[3] http://pmt.sourceforge.net/pngcrush/
[4] https://code.google.com/p/svg-android/
[5] http://developer.android.com/tools/help/proguard.html
[6] http://proguard.sourceforge.net/index.html
[7] http://www.saikoa.com/dexguard
[8] http://developer.android.com/google/play/publishing/multiple-apks.html
[9] http://developer.android.com/google/play/expansion-files.html
[10] http://developer.android.com/tools/debugging/ddms.html
[11] http://android-developers.blogspot.co.at/2011/03/memory-analysis-for-android.html
References[12] http://www.eclipse.org/mat/
[13] http://developer.android.com/tools/help/systrace.html
[14] https://code.google.com/p/android-ndk-profiler/
[15] http://www.nvidia.com/object/nsight.html
[16] https://developer.nvidia.com/tegra-profiler
[17] https://developer.qualcomm.com/mobile-development/mobile-technologies/gaming-graphics-optimization-adreno/tools-and-resources
[18] http://www.imgtec.com/powervr/insider/sdkdownloads/
[19] http://www.curious-creature.org/2012/12/01/android-performance-case-study/
[20] http://developer.android.com/tools/debugging/debugging-ui.html
[21] http://developer.android.com/tools/help/gltracer.html
[22] http://developer.android.com/training/articles/perf-tips.html