Название: Непонятное падение FPS при анимации Отправлено: kuzulis от Март 04, 2015, 16:52 Всем доброго времени.
Мне нужно полностью отрисовывать некий измеритель (спидометр и прочее) который будет иметь сложную анимацию и кучу градиентов. Использовать фоновые картинки врятли получится, поэтому все нужно рисовать самому. Заметил странную тенденцию падения FPS при анимациях.. Например, имею последовательную анимацию изменения некоторого значения от минимума до максимума и обратно. При изменени этого значения отрисовывается прогресс - дуга окружности с градиентом: что-то вроде поворота на заданный угол в зависимости от текущего значения параметра. Измеритель имеет несколько дуг окружностей с разнами радиусами. Обработчик onPaint() прибинжен на проперти текущего значения: при изменении текущего значения вся сцена будет перерисована. Так вот, если перерисовывать все прогрессы в onPaint() - то FPS низкая: ~13-14 FPS, и onPaint() вызывается где-то раз в 60-70 мсек.. Но если оставить отрисовку только одного прогресса - то она повышается до ~30-40 FPS и onPaint() вызывается где-то раз в 30 мсек.. Все эти замеры делаю в QML профилировщике.. При этом, там видно что каждый onPaint() (со всеми рисовалками и прочим кодом) занимает около 3,5 мсек времени.. Отсюда вопрос: какого хрена onPaint() вызывается реже? С какого перепугу? Ведь фактически максимальная FPS может достигать 200 FPS (при задержке каждого onPaint() даже в 5 мсек..) Такая ситуевина меня вообще не радует.. Елки.. Проект приаттачиваю :) PS: Там надо кликнуть по счене мышкой для запуска анимации.. PSPS: Используется Qt 5.4.0 / Windowsx32 / MinGW PSPSPS: Блин, вопрос: что будет если рисовать из C++ кода... Будет ли профит? :) Название: Re: Непонятное падение FPS при анимации Отправлено: navrocky от Март 04, 2015, 17:51 У меня под дебагом в профилировщике FPS в районе 60. onPaint ~600микросекунд. Тормозов я не заметил никаких.
openSuse x64, ноутбучный i7, интелловское видео. Название: Re: Непонятное падение FPS при анимации Отправлено: kuzulis от Март 04, 2015, 18:43 Обновил проект.. Добавил еще одно кольцо.. И FPS иногда падает до 8-ми.. >:(
PS: Теперь на Qt 5.4.0 / MSVC2013 / Windows8x32 / Radeon 3000 UPD: А используя Qt 5.4.0 / MinGW / так вообще почти всегда 8 FPS.. UPD2: А если развернуть на весь экран - то падает до 5 FPS.. :o Название: Re: Непонятное падение FPS при анимации Отправлено: nwnclv от Март 05, 2015, 00:48 У меня норм отрисовывается. Я правда не понял, что там должно произойти, там просто какая-то цветная секция туда-сюда прыгает. Но довольно плавно и быстро
debian, графика intel. Название: Re: Непонятное падение FPS при анимации Отправлено: kuzulis от Март 05, 2015, 11:24 Цитировать Я правда не понял, что там должно произойти, там просто какая-то цветная секция туда-сюда прыгает. Ну да.. я об этом же писал выше.. там три секции (прогресс-бара) прыгают. :) Цитировать Но довольно плавно и быстро debian, графика intel. Везет линуксойдам. :) Название: Re: Непонятное падение FPS при анимации Отправлено: Bepec от Март 05, 2015, 13:31 Аналогично никаких падений не заметно, на взгляд где то 20-30 fps.
W7 x64, intel i5, nvidia PS а чем можно fps мерить? как то не сталкивался с такой задачей, просто интересно :) Название: Re: Непонятное падение FPS при анимации Отправлено: navrocky от Март 05, 2015, 15:46 Дрова то хоть стоят? Может оно у тебя при запуске откатилось до llvmpipe драйвера?
Название: Re: Непонятное падение FPS при анимации Отправлено: kuzulis от Март 05, 2015, 16:35 Цитата: Bepec PS а чем можно fps мерить? как то не сталкивался с такой задачей, просто интересно Там в QtCreator встроен QML профайлер (нужно кликнуть по иконке "Analyse" - такая, с мониторчиком с сеткой). Вот это самый профайлер и показывает все. Цитата: navrocky Дрова то хоть стоят? Может оно у тебя при запуске откатилось до llvmpipe драйвера? Конечно стоят.. Без дров оно просто не запустится. Т.к. требуется OpenGL > 2.0 (у меня 3.1). А в тестах вы на весь экран разворачиваете? Название: Re: Непонятное падение FPS при анимации Отправлено: nwnclv от Март 05, 2015, 21:10 Развернул, прогнал на полную.
Профилировщик запустил, где тут FPS смотреть? Кстати при развороте у меня странный баг при отрисовке возник ... Часть спидометра как бы не активна. Название: Re: Непонятное падение FPS при анимации Отправлено: kuzulis от Март 05, 2015, 21:44 Цитировать Профилировщик запустил, где тут FPS смотреть? На графике, вверху.. Будет или зеденая или оранжевая или красная полоски .. Нужно туда кликнуть и там среди других параметров будет стоять FPS. Собственно, зеленым цветом отображается если все ОК (хватает FPS) и цвет меняется вплоть до красного (темно-оранжевого) - если FPS мал. Цитировать Часть спидометра как бы не активна. Не знаю.. Не видел. Название: Re: Непонятное падение FPS при анимации Отправлено: nwnclv от Март 05, 2015, 21:51 а, вижу. В среднем 50 FPS на полном экране. В самом начале есть желтый прямоугольник с 23, но это скорее всего момент разворота.
Цитировать Не знаю.. Не видел. https://dl.dropboxusercontent.com/u/22107199/qml.pngКак-то так. Вот активная область обведена, все остальное не прорисовывается. Название: Re: Непонятное падение FPS при анимации Отправлено: kuzulis от Март 06, 2015, 11:30 Цитировать а, вижу. В среднем 50 FPS на полном экране. Эх. везет вам с аппаратной частью. Цитировать Как-то так. Вот активная область обведена, все остальное не прорисовывается. У меня такого не наблюдается. И кстати, кажется что в QML метод ctx.arc() рисует неправильные окружности.. Так же как его однофомилец из C++ (из пайнтера). Симптомы такие же как и в: http://stackoverflow.com/questions/17118967/drawarc-are-not-drawen-correctly-qt-c. PS: ГЫ.. ппц.. сколько мороки с графикой в Qt.. Знал бы это - соскочил бы на что-то другое. Название: Re: Непонятное падение FPS при анимации Отправлено: kuzulis от Март 07, 2015, 21:55 В общем.. Обошел это, наштамповав нужных картинок (в гимпе и фотошопе не умею, поэтому писал код, который рисует картинки, а потом их сохранял в файлы :) ). И теперь просто вращаю нужные картинки.. FPS на уровне 50-60..
Название: Re: Непонятное падение FPS при анимации Отправлено: carrygun от Март 10, 2015, 05:31 И кстати, кажется что в QML метод ctx.arc() рисует неправильные окружности.. arc() рисует сплайнами, рисовать окружности толстой линией - немного неправильно. Правильно рисовать путь и заливать его, тогда окружности круглые :) |