70
Производительность WebGL приложений Кирилл Дмитренко Яндекс

Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

  • Upload
    ontico

  • View
    522

  • Download
    6

Embed Size (px)

Citation preview

Page 1: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Производительность WebGL приложений Кирилл Дмитренко Яндекс

Page 2: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

План •  Что такое WebGL? •  Измерение производительности

•  Оптимизации

Page 3: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

WebGL?

Page 4: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

WebGL – API к GPU

Page 5: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
Page 6: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Приложение

Page 7: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Приложение

Буферы

Page 8: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Приложение

Буферы Текстуры

Page 9: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Приложение

Буферы Шейдеры Текстуры

Page 10: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Приложение

Буферы Шейдеры Текстуры

WebGL контекст

Page 11: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Измерение

Page 12: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

FPS

Page 13: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Профайлер

Page 14: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Асинхронность •  Некоторые вызовы асинхронные.

Page 15: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Асинхронность •  Некоторые вызовы асинхронные.

•  Некоторые – синхронные.

Page 16: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Асинхронность •  Некоторые вызовы асинхронные.

•  Некоторые – синхронные. •  Некоторые синхронизируют весь контекст.

Page 17: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

EXT_disjoint_timer_query

+ Измеряет время исполнения на GPU.

Page 18: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

EXT_disjoint_timer_query

+ Измеряет время исполнения на GPU.

+ Асинхронно.

Page 19: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

EXT_disjoint_timer_query

+ Измеряет время исполнения на GPU.

+ Асинхронно.

-  Надо писать код.

Page 20: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

EXT_disjoint_timer_query

•  Время исполнения группы вызовов.

Page 21: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

EXT_disjoint_timer_query

•  Время исполнения группы вызовов.

•  Временные метки.

Page 22: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Demo time!

Page 23: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Измерение: выводы •  FPS как качественная характеристика.

Page 24: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Измерение: выводы •  FPS как качественная характеристика.

•  Профайлер для поиска узких мест на CPU.

Page 25: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Измерение: выводы •  FPS как качественная характеристика.

•  Профайлер для поиска узких мест на CPU.

•  EXT_disjoint_timer_query– на GPU.

Page 26: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Оптимизации

Page 27: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Работа с состоянием •  Не вызываем get* и read*.

Page 28: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Работа с состоянием •  Не вызываем get* и read*. •  getError() – только в разработке.

Page 29: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Работа с состоянием •  Не вызываем get* и read*. •  getError() – только в разработке.

•  Минимизировать переключения.

Page 30: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

foreach (framebuffer) foreach (state) foreach (program) foreach (texture set) foreach (vertex buffer) foreach (object) draw();

Page 31: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Less calls, more work!

•  Несколько объектов в один буфер.

Page 32: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Less calls, more work!

•  Несколько объектов в один буфер.

•  Текстуры – в атлас.

Page 33: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Less calls, more work!

•  Несколько объектов в один буфер.

•  Текстуры – в атлас. •  Instancing.

Page 34: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Demo time!

Page 35: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

В панорамах •  Получили бесплатно ☺

Page 36: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

В панорамах •  Получили бесплатно ☺ •  Instancing для маркеров.

Page 37: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

В панорамах •  Получили бесплатно ☺ •  Instancing для маркеров. •  Вытеснение невидимых секторов панорамы.

Page 38: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

В панорамах

Page 39: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

В панорамах

Page 40: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

В панорамах

Page 41: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

В панорамах

Page 42: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Overdraw •  Считаем пиксели по несколько раз.

Page 43: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Overdraw •  Исключить из кадра невидимые объекты.

Page 44: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Overdraw •  Исключить из кадра невидимые объекты.

•  Отсортировать объекты по Z.

Page 45: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Overdraw •  Исключить из кадра невидимые объекты.

•  Отсортировать объекты по Z.

•  Depth pre-pass.

Page 46: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Demo time!

Page 47: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

В панорамах

Page 48: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

В панорамах

Page 49: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

В панорамах

Page 50: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

В панорамах

Page 51: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

В панорамах

Page 52: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

В панорамах

Page 53: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

В панорамах

Page 54: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

В панорамах

Page 55: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

В панорамах

Page 56: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

В панорамах

Page 57: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

В панорамах

Page 58: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

В панорамах

Page 59: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Код вокруг •  DOM. •  Загрузка ресурсов. •  События UI.

Page 60: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Код вокруг •  Разбить на небольшие части.

Page 61: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Код вокруг •  Разбить на небольшие части.

•  Планировщик.

Page 62: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

В панорамах •  Загрузка видимых тайлов.

Page 63: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

В панорамах •  Загрузка видимых тайлов. •  Вытеснение невидимых частей панорамы.

Page 64: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

В панорамах •  Загрузка видимых тайлов. •  Вытеснение невидимых частей панорамы.

•  События API.

Page 65: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Оптимизации: выводы •  Аккуратно работаем с состоянием.

Page 66: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Оптимизации: выводы •  Аккуратно работаем с состоянием.

•  Меньше вызовов draw*.

Page 67: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Оптимизации: выводы •  Аккуратно работаем с состоянием.

•  Меньше вызовов draw*. •  Избегаем overdraw.

Page 68: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Оптимизации: выводы •  Аккуратно работаем с состоянием.

•  Меньше вызовов draw*. •  Избегаем overdraw. •  Планировщик.

Page 69: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Спасибо!

Page 70: Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)

Кирилл Дмитренко Разработчик интерфейсов

@dmikis facebook.com/dmikis [email protected]