Of Bytes, Cycles and Battery Life. Who am I? @badlogicgames [2] [1]

Post on 24-Dec-2015

213 views 0 download

Tags:

Transcript of Of Bytes, Cycles and Battery Life. Who am I? @badlogicgames [2] [1]

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 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

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 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

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 life

and 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