Подтвердить что ты не робот

Android 4.3 Профилирование на экране GPU - длительное время ожидания gfx

Я только что обновил Galaxy Nexus до 4.3 и включил новую функцию профилирования на экране GPU и посмотрю следующий результат для экрана установки Android:

enter image description here

В соответствии с основные моменты платформы:

[With] colors indicating time spent creating drawing commands (blue), issuing the commands (orange), and waiting for the commands to complete (yellow).

Даже на очень простом экране существует много случаев, когда время обновления экрана превышает пороговое значение для гладкой 60 кадров в секунду (зеленая линия), и в основном это связано с тем, что существует много случаев, когда обновление будет тратить значительное время ожидания для команд для завершения (желтая линия *), а в других случаях этот шаг почти мгновен. Это не является чем-то особенным для приложения Setting, но, похоже, присутствует для всех приложений, которые я тестировал до сих пор. * выглядит более оранжевым, чем желтый для меня

Я хочу знать:

  • Прошло ли это время "ожидания завершения команд" означает, что команды экрана активно обрабатываются, и, таким образом, время точно отражает время, затрачиваемое на рисование экрана. ИЛИ на этот раз включает время ожидания видеосинхронизации (хотя я думаю, что для устранения этого требования будет использоваться тройной буфер)?
  • Время ожидания "ожидания завершения команд" будет сильно колебаться даже при рисовании одного и того же экрана (немного прокручивайте вверх и вниз по тому же ScrollView), есть ли какие-либо указания относительно того, как уменьшить это колебание (или если оно может вообще сокращаться)?

[Edit:]

Обновлен Nexus 7, а это еще хуже:

enter image description here

Пропустили до 5 кадров, "ожидая завершения команд", и это действительно показало в использовании, приложение было очень изменчивым и не реагирующим.

[Редактировать 2:] Я выполнил эти эту статью, чтобы вызвать TRIM в течение ~ 3 дней, поэтому N7 должен быть как "первозданный", так как он будет коротким от factory reset.

  • Устройство простаивает более часа
  • За последние 24 часа не выполнялось никаких событий окна обслуживания.
  • Устройство заряжается 30-процентной батареей или имеет 80-процентную батарею

Теперь Google Maps выглядит немного лучше (см. ниже), поэтому некоторые из проблем могут быть связаны с скоростью доступа к флэш-памяти, хотя я не знаю, как это сделать.

enter image description here

Тем не менее, поскольку Galaxy Nexus factory reset, его длительное "ожидание завершения команд" не может быть связано с отсутствием команды TRIM, и, следуя вышеприведенным шагам, улучшения. Итак, мы вернулись на квадратный...

4b9b3361

Ответ 1

"Ожидание завершения команд" означает, что существуют зависимости от визуализированных кадров. Например, приложение может использовать glReadPixels для чтения из визуализированного фрейма. Это означает, что после того, как кадр был отправлен на графический процессор для рендеринга, приложение блокируется до тех пор, пока не будет завершен этот кадр (тогда как обычно он сможет продолжить работу сразу). Android пытается позволить приложению разместить столько команд рендеринга, насколько это возможно, поэтому внезапное введение ожидания может означать, что приложение должно ждать, пока несколько ранее поставленных кадров будут нарисованы до того, как ожидание кадра будет визуализировано.

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

В теории возможно, чтобы рабочий поток записывал текстуру, позволяя основному потоку плавно переходить в очередные очереди. Но модель сложной нити GL делает очень сложным получить что-то вроде этого права, и основному потоку в конечном итоге придется дождаться завершения загрузки текстуры.

Что касается приложения "Настройки", может быть, что бэкэнд Android GL делает то же самое для повторного использования текстуры для значков, но это просто предположение. Возможно, Galaxy Nexus использует 2D-компоновщик для создания композиции кадра, что экономит электроэнергию, но ценой введения ожидания в драйвере. Я не знаю, будет ли эта зависимость измеряться на графике.