Wydajność - słowo klucz wśród programistów. Jakie ma znaczenie w procesie tworzenia gry? Czy w dzisiejszych czasach, kiedy pamięć i moc obliczeniowa są relatywnie tanie, powinna być decydującym czynnikiem? Podczas prezentacji omówimy konkretny przykład i wspólnie go zoptymalizujemy. Pokażemy kolejne poziomy tego procesu i zastanowimy się, na które z nich trzeba kłaść nacisk. Oprócz tego omówimy takie tematy jak: profiler, cache-miss, wycieki pamięci czy optymalizacja grafik i dźwięków.
4. CO TO ZNACZY „WYDAJNIE”
Blisko 60 FPS (klatek na sekundę)
Na renderowanie 1 klatki jest
0.01(6)s = ~17ms
• W tym obliczenia
• W tym przerzucenie danych do
karty graficznej
• W tym rysowanie
12. BITMAPY
Rozmiar na dysku =/= rozmiar w
pamięci
Grafika full hd to:
1920 x 1080 x 4B = 8 294 400B
13. PALETA!
Paleta RGB565 jest dobra dla teł
1920 x 1080 x 2 = 4 147 200B
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.RGB_565;
bmp = BitmapFactory.decodeResource(getResources(), R.drawable.my_bitmap, options);
16. WCZYTYWANIE DUŻYCH BITMAP #1
public Bitmap loadScaledDownPhoto(String path) {
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, options);
options.inSampleSize = calculateInSampleSize(options, MAX_WIDTH, MAX_HEIGHT);
options.inJustDecodeBounds = false;
return BitmapFactory.decodeFile(path, options);
}
17. WCZYTYWANIE DUŻYCH BITMAP #2
private int calculateInSampleSize( BitmapFactory.Options options, int reqWidth, int reqHeight) {
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1; // inSampleSize powinno być w potędze 2
if (height > reqHeight || width > reqWidth) {
// …
}
return inSampleSize;
}