Войти
ПроектыФорумУтилиты

Анализатор производительности GPU для Андроида (обновлено)

#0
1:55, 28 апр. 2013

Анализатор производительности мобильных GPU

Данная программка предназначена для разработчиков мобильных видеоигр. Во время разработки часто возникают вопросы, связанные с производительностью графической системы. Бенчмарки со статистикой не всегда могут ответить на них, порой хочется проверить всё на живой "железке". Вот для подобной проверки и понадобится такая программка.

Пользоваться анализатором просто: указываем размер фреймбуфера, размер текстуры, число отрисовываемых треугольников и их площадь, а так же число арифметических операций в вершинном и фрагментном шейдере. В результате наблюдаем число кадров в секунду (и длительность одного кадра в миллисекундах). Регулируя значения можно наблюдать, насколько зависит производительность от тех или иных параметров. Это поможет определить, каким должен быть ваш игровой движок.

(русский язык естественно имеется, просто скриншоты сняты с английской версии)

Я знаю, что существует продвинутые профайлеры с гораздо более широкими возможностями. Так что программа не претендует на лидерство, но может оказаться полезной в некоторых случаях. Справедливости ради скажу, что это приложение я создал в основном для того, чтобы опробовать свои силы в разработке под Андроид и посмотреть, как работает Google Play со стороны разработчика. Но чтобы не делать пустой Hello World, я постарался сделать что-нибудь полезное.

Текущая версия: 1.0.2
Требования: Android 2.3 и выше, OpenGL ES 2.0
Скачать в Google Play: https://play.google.com/store/apps/details?id=com.romanshuvalov.gpupa

Установившим просьба отписаться, на каком устройстве запускали и всё ли в порядке (я там за одно звук испытал - при нажатии на кнопки должны быть слышны щелчки). Сейчас потихонечку изучаю iOS, в связи с этим вопрос, нужна ли на iOS такая программулина?

#1
3:34, 28 апр. 2013

> Пользоваться анализатором просто: указываем размер фреймбуфера, размер
> текстуры, число отрисовываемых треугольников и их площадь, а так же число
> арифметических операций в вершинном и фрагментном шейдере. В результате
> наблюдаем число кадров в секунду (и длительность одного кадра в миллисекундах).
> Регулируя значения можно наблюдать, насколько зависит производительность от тех
> или иных параметров. Это поможет определить, каким должен быть ваш игровой
> движок.
Роман Шувалов, ну ты бы прогу так и назвал бы - гадание на кофейной гуще )))

#2
4:09, 28 апр. 2013

Ну почему на кофейной. Ответить на вопрос "что лучше, 10 000 треугольников с лёгким шейдером, или 4 треугольника с тяжёлым" программа вполне в состоянии.

#3
4:47, 28 апр. 2013

> 10 000 треугольников с лёгким шейдером, или 4 треугольника с тяжёлым" программа вполне в состоянии.
Роман Шувалов, такой вопрос вряд ли когда-либо будет стоять. Да и ответить она может лишь гадая - очень от многих факторов зависит ответ. От ОЧЕНЬ многих - в т.ч. и вообще не имеющих отношения к вертексам и шейдерам.

Я ни в коем случае не говорю, что такая программа не нужна. Но, сами понимаете, главное что бы она не принесла больше вреда, чем пользы ;-)

#4
4:58, 28 апр. 2013

> От ОЧЕНЬ многих
От каких, например?

#5
7:51, 28 апр. 2013

Установил, и понял насколько мой китаец плох... за что так со мной?
Потягал параметры и малость сказать удивлен.
Размер фреймбуфера 512. Тексура 256. Кол-во треугольнико 322, площадь 4%. Шейдеры не трогал. И этот набор выдает 30фпс. Ну это мягко сказать ложь. Есть 3D игры с более-менее приятной глазу графикой для моего китайца, в сцене явно параметры лучше приведенных.

#6
11:08, 28 апр. 2013

У китайцев  Mali и Vivante дас ист стандарт, поэтому выбор тут небольшой из GPU.
Если учесть, что мой недавно приехавший Pipo S3 рвет бренды как тузик грелку, пусть теперь бренды ориентируются на китайцев :)
Китай это массовый рынок, задушит он производителей мобильных, как задушил производителей другой бытовухи.
Поэтому у меня пока нос по ветру по этим GPU.

Роман Шувалов
Обязательно попробую,скажу как у меня вышло,ну и нужны сравнительные характеристики по разным девайсам, тогда яснее,что лучше-хуже.

#7
11:23, 28 апр. 2013

Volodar
Да, я уже заметил, что оценка заниженная даже если выключить GUI (кстати, забыл убрать фон при выключении GUI). В шейдере я кажись что-то лишнее оставил, и пустой шейдер что-то все равно считает. Будем исправлять.

bodja
Для сравнительных характеристик есть www.glbenchmark.com, а я создавал программу немного не для этого.

#8
11:57, 28 апр. 2013

Роман Шувалов
> Для сравнительных характеристик есть www.glbenchmark.com, а я создавал
> программу немного не для этого.
Ну мне хватило antutu.
Понятно, что прожка для тех,кто детально хочет пощупать GPU.
Ну все равно все сводится к комплексному сравнению, если конечно игра не пишется под свой собственный девай.


Чо бы понятнее было, ну вот у меня списочек дополнительных шейдеров.

+ Показать

И списочек анимации партиклов

+ Показать

Вроде как все нужно и полезно для разработки игры.

#9
22:01, 28 апр. 2013

Выкатил мелкое обновление:

Заметил уже один баг, из-за повышения targetSdkVersion до 14 из нижней панели Андроида исчезла кнопка "Меню" (с тремя точками которая). Исправлю в следующей версии.

#10
22:07, 28 апр. 2013

В целом да, вижу, не очень полезная программа оказалась. Ерунду показывает при околонулевых значениях параметров.

Для справки, вот так выглядит "пустой" вершинный шейдер:

precision mediump float;
uniform mat4 u_proj;
uniform mat4 u_modelview;
attribute vec4 a_pos;
attribute vec4 a_uv;
varying vec4 v_uv;
varying vec4 v_pos;
varying vec4 v_temp;
void main() {
  float i = 0.0; 
  mat4 mat_temp = u_proj; 
  v_temp = vec4(0.98, 1.0, 1.02, 1.0); 
  gl_Position = u_proj * a_pos;
  i = 0.0; 
  while (i < 0.8) { // число перемножений матриц
      mat_temp = mat_temp + (u_modelview * mat_temp);  
      i = i + 1.0; 
  }
  v_uv.p = v_uv.p + mat_temp[0][0] + mat_temp[1][2]; 
  gl_Position = gl_Position * vec4(1.0000, 1.0000, 1.0, 1.0);  // масштаб, зависит от выбранной площади треугольника
  v_pos = gl_Position;
  v_uv = a_uv;
}

Фрагментный:

precision mediump float;
uniform mat4 u_proj;
uniform mat4 u_modelview;
varying vec4 v_uv;
varying vec4 v_pos; 
varying vec4 v_temp; 
uniform sampler2D u_sampler;
void main() {
  float i = 0.0; 
  vec4 t_temp = v_temp; 
  i = 0.0; 
  while (i < 0.8) { // число выборок 
       gl_FragColor = gl_FragColor + (texture2D(u_sampler, vec2(v_uv.s + 0.07*i, v_uv.t - 0.07*i) ))*0.08;
       i = i + 1.0; 
  }
  gl_FragColor.g = gl_FragColor.g + t_temp.y; 
  gl_FragColor.r = gl_FragColor.r + v_uv.p; 
}

upd.: уже увидел переопределение v_uv в вершинном шейдере. Невнимательность :(

#11
22:24, 13 мая 2013

Офигеть, 120 установок. Я кроме этой темы нигде приложение не упоминал.

#12
1:39, 14 мая 2013

при повороте экрана приложение стабильно выпадает в осадок на дроиде 4.0.3 adreno 200 512mb
первое приложение которое ребутнуло мне смарт (под высокой нагрузкой, повторить не пытался)
не оценил бо не хочу гуглеплюс

результаты предсказуемы, хотя ожидал хотя бы 10к трисов.

кто знает сколько в эпикцитадели поликов на кадр?

#13
1:55, 14 мая 2013

clc
> при повороте экрана приложение стабильно выпадает в осадок на дроиде 4.0.3
> adreno 200 512mb
Опаньки, вот это да. Какое устройство? Буду решать проблему

У меня тоже оказывается выпадает, не доглядел когда выпускал апдейт. Исправлю. Спасибо.

Я даже знаю с чем это связано, в манифесте targetSdkVersion я изменил на 14, поэтому android:configChanges="orientation" уже не актуален. Интересно, как это обойти...

#14
16:57, 14 мая 2013

clc
Обновил, теперь всё должно быть в порядке. Выставил targetSdkVersion = 12, в нём запрет пересоздания по android:configChanges="orientation" еще работает, а консоль разработчика не ругается на отсутствие поддержки планшетов.

ПроектыФорумУтилиты

Тема в архиве.