Подсчет кадров в секунду выводимых на дисплей

Chxal
Offline
Зарегистрирован: 23.05.2018

Добрый день! Благодаря теме Arduino и дисплеи от сотиков мобильных телефонов подключил дисплей 3.5" 320х480 с контроллером ILI9488(HX8357D) к stm32f103 методом программирования через ардуино IDE. Библиотеку для дисплея брал на github - Adafruit_TFTLCD_8bit_STM32. Удачно запустил пример graphicstest.ino, в котором выводится информация по бенчмарку в монитор:

TFT LCD test
TFT size is 320x480
Found HX8357D LCD driver
TFT begin done.
rotation: 0, runtime: 22531
rotation: 1, runtime: 22532
rotation: 2, runtime: 22532
rotation: 3, runtime: 22533

Benchmark                Time (microseconds)
Screen fill              131094
Text                     22531
Lines                    385178
Horiz/Vert Lines         14663
Rectangles (outline)     9948
Rectangles (filled)      363669
Circles (filled)         194603
Circles (outline)        164090
Triangles (outline)      73226
Triangles (filled)       195374
Rounded rects (outline)  53120
Rounded rects (filled)   441364
Done!

В некоторых бенчмарках выводится количество кадров, которое отрисовывается экраном(или которое передается на экран?) в секунду - FPS. Подскажите как доработать скетч или поделитесь скетчем где есть бенчмарк с подсчетом количества FPS.

Предположительно Screen fill из бенчмарка нужно разделить на 1000(функция millis(1000) - это 1 секунда), который выводит функцию testFillScreen(полное заполнение экрана 5-ю цветами - 5 кадров, если я правильно понимаю), то получается 5/131094/1000(получаем количество отрисованных кадров за время, которое переводим в секунды) = 0,038 FPS, что как-то очень мало и не верится по отрисовке другой графики.

Подскажите пожалуйста

sadman41
Offline
Зарегистрирован: 19.10.2016

FPS - Frames Per Second. Если один фрейм рисуется 50мс, то сколько таких фреймов отрисуется за 1000мс?

Chxal
Offline
Зарегистрирован: 23.05.2018

Так я спрашиваю код который будет выводить время отрисовки одного фрейма или количество фреймов за 1 сек,(одно из другого легко высчитывается).

Вы указали 50 мс с потолка ведь так или по моим данным?

sadman41
Offline
Зарегистрирован: 19.10.2016

Не вижу, что что-то легко высчитывается. Пытаюсь понять - исходя из каких соображений получено 0,038.

Chxal
Offline
Зарегистрирован: 23.05.2018

sadman41 пишет:

Не вижу, что что-то легко высчитывается. Пытаюсь понять - исходя из каких соображений получено 0,038.

...
unsigned long testFillScreen() {
  unsigned long start = micros();
  tft.fillScreen(BLACK);
  tft.fillScreen(RED);
  tft.fillScreen(GREEN);
  tft.fillScreen(BLUE);
  tft.fillScreen(BLACK);
  return micros() - start;
}
...
Serial.println(F("\nBenchmark                Time (microseconds)"));

  Serial.print(F("Screen fill              "));
  Serial.println(testFillScreen());
...

Как я написал в первом посте, то если я правильно понимаю, то функция testFillScreen() выводит поочередно 5 цветов на экран, можно ли это считать 5 кадрами, я не уверен. В мониторе Screen fill показывает за сколько миллисекунд произошло выполнение функции testFillScreen().

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

sadman41
Offline
Зарегистрирован: 19.10.2016

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

И да, пять заполнений экрана разными цветами есть пять фреймов.

yul-i-an
yul-i-an аватар
Offline
Зарегистрирован: 10.12.2012

Перед выводом на дисплей засекаете врямя, после вывода смотрите сколько прошло. И вот сколько таких отрезков в одной секунде столько и кадров.

Chxal
Offline
Зарегистрирован: 23.05.2018

Обратил внимание, что в бенчмарке написано микросекунды, и используется функция micros(), а функция milis()...

Тогда получается 5 полных заполнений экрана происходит за 0,131 секунду, что соответствует (5/0,131) приблизительно 38 кадров

__Alexander
Offline
Зарегистрирован: 24.10.2012

проще тем же стм-ом посчитать время выпонления функции заполнения и не страдать херней.

Chxal
Offline
Зарегистрирован: 23.05.2018

__Alexander пишет:

проще тем же стм-ом посчитать время выпонления функции заполнения и не страдать херней.

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

b707
Offline
Зарегистрирован: 26.05.2017

Chxal пишет:

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

__Alexander просто намекает, что за вас уже все подсчитано в том выводе, который вы приводите. Совершенно непонятно, неужели ради того, чтобы поделить 131мс на пять, надо заводить ветку на форуме...

__Alexander
Offline
Зарегистрирован: 24.10.2012

b707 пишет:

__Alexander просто намекает, что за вас уже все подсчитано в том выводе, который вы приводите. Совершенно непонятно, неужели ради того, чтобы поделить 131мс на пять, надо заводить ветку на форуме...

не, не так. В стм есть аппатарный счетчик тактов, если его обнулить перед вызовом и посмотреть результат после, то увидим колличество тактов, затраченное на выполнение этой функции. А если поделить результат на частоту тактирования, то получаем время в секуднах. 

 

намек: DWT_CYCCNT

b707
Offline
Зарегистрирован: 26.05.2017

__Alexander пишет:

не, не так. В стм есть аппатарный счетчик тактов, если его обнулить перед вызовом и посмотреть результат после, то увидим колличество тактов, затраченное на выполнение этой функции. А если поделить результат на частоту тактирования, то получаем время в секуднах. 

 

намек: DWT_CYCCNT

нафига эти сложности, если в тесте это время уже подсчитано?

__Alexander
Offline
Зарегистрирован: 24.10.2012

b707 пишет:

нафига эти сложности, если в тесте это время уже подсчитано?

Та то мысли в слух, смотря как оно там в тех mills-ах считется. Как в  авр, тоже запускается таймер? А в целом да, не понятно что ТС надо то.

Chxal
Offline
Зарегистрирован: 23.05.2018

b707 пишет:

... надо заводить ветку на форуме...

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

Вопрос решен.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Chxal, мне вот интересно, откуда из строки:

Screen fill              131094

следует, что "выдает время заполнения,но не одного, а 5 цветов экрана"?

Chxal
Offline
Зарегистрирован: 23.05.2018

andriano пишет:

Chxal, мне вот интересно, откуда из строки:

Screen fill              131094

следует, что "выдает время заполнения,но не одного, а 5 цветов экрана"?

В моем сообщении есть функция, которая выводит значение "Screen fill". В этой функции экран сначала полностью заполняется черным, потом красным, потом зеленым, потом голубым и опять черным.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

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