Получение количества кадров в ядре Linux - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь найти переменную / некоторую метрику, которая может помочь мне вычислить фактическое количество кадров, отображаемых в драйвере графического процессора Midgard в ядре Linux.

При тестировании моих алгоритмов в программе уровня пользователя я использовал системный вызов (показанный ниже), который получил число кадров из SurfaceFlinger и сохранил это значение в файле, который я позже прочитал на уровне пользователяprogram.

system("setsid adb shell service call SurfaceFlinger 1013 | \
   grep -o -E \\([a-fA-F0-9]+\\ \\)> frames.txt");

Примечание: я пытаюсь создать регулятор dvfs, который использует эту информацию, но я не могу найти способ получить к ней доступ в драйвере Midgard.У меня есть доступ только к «использованию» ядер GPU, но это не всегда соответствует количеству кадров.Есть идеи, как это сделать?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Итак, я копал и наконец нашел, как общее количество кадров (с момента загрузки) может быть вычислено из ядра. Это делается путем мониторинга заборов синхронизации, как предложено @solidpixel выше. Во-первых, важно понимать типы ограждений, создаваемых данным потребителем буфера. Для Android потребителем буфера является Hardware Composer - HWC. HWC создает несколько заборов, но один, относящийся к отображаемым фреймам, является забором «отображения». Таким образом, вы можете проверить название каждого создаваемого забора, и если он соответствует «отображению», это то, что вы хотите посчитать. Для каждого кадра создается только 1 экранное ограждение, поэтому подсчет количества созданных экранных ограждений даст вам количество кадров.

0 голосов
/ 17 апреля 2019

Для Android вы можете отслеживать заборы завершения кадра, которые используются для обмена буфером между компонентами. Больше информации здесь:

Тем не менее, обратите внимание, что это класс вариантов использования, которые не имеют «фреймов» в традиционном смысле.

  • Для рендеринга в очки VR и AR используется рендеринг с передним буфером, где не будет замены буфера и, следовательно, нет ограничения на завершение.
  • Варианты использования OpenCL или GPU для вычислений, как правило, отрисовываются в произвольной памяти, а не в отображаемом фрейме, поэтому аналогично вы можете и не получить фреймы там.
...