QPainter время отрисовки |
Здравствуйте, гость ( Вход | Регистрация )
QPainter время отрисовки |
cerjo |
6.5.2015, 9:16
Сообщение
#1
|
||
Новичок Группа: Новичок Сообщений: 2 Регистрация: 6.5.2015 Пользователь №: 4378 Спасибо сказали: 0 раз(а) Репутация: 0 |
Добрый день!
Столкнулся с такой проблемой: унаследовал класс (TWidget) от QGLWidget, переопределил paintEvent, в нём QPainter-ом отрисовываю изображение. QTimer, связанный со слотом TWidget::update, "тИкает" каждые 16 мс (1000 мс / 60 Гц). На хостовой машине (Intel Core i5) отрисовка плавная и красивая. На целевой (Freescale i.MX6, CPU: Quad Core ARM Cortex A9, GPU: 3D - Vivante GC2000, 2D - Vivante GC320) машине FPS падает ~до 20-ти. Завёл QTime в начале paintEvent, по окончании вывожу QTime::elapsed, показывает 32 мс. Даже при пустом paintEvent, функция QPainter::end() занимает 32 мс. Можно ли как-нибудь уменьшить это время? Qt 5.4, хостовая ос Windows 7, целевая - QNX 6.6. Целевая машина пишет, что QOpenGLWidget не прикручен, посему наследуюсь от QGLWidget. P.S. Пробовал связку QGraphicsView + QGraphicsScene + QGraphicsItem-ы = 1-2 FPS. А при QGraphicsView::setViewPort(new QGLWidget()) - черный экран на целевой машине. twidget.h
twidget.cpp
Лог на хосте: Лог на целевой: |
||
|
|||
ViGOur |
6.5.2015, 10:21
Сообщение
#2
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Как вариант нужно посмотреть, что использует QTimer в Windows и QNX, думается мне, что он не оптимально работает в QNX и нужно для QNX использовать нативное API.
Или реализация QGLWidget в QNX хуже, чем в Windows, что в полне может быть... |
|
|
wiz29 |
6.5.2015, 18:56
Сообщение
#3
|
Старейший участник Группа: Участник Сообщений: 600 Регистрация: 7.7.2010 Из: Санкт-Петербург Пользователь №: 1866 Спасибо сказали: 94 раз(а) Репутация: 12 |
А приоритет процесса какой на QNX? Много ли там других задач "крутится" в момент выполнения вашей программы и какие у них приоритеты на исполнение?
|
|
|
cerjo |
7.5.2015, 8:56
Сообщение
#4
|
Новичок Группа: Новичок Сообщений: 2 Регистрация: 6.5.2015 Пользователь №: 4378 Спасибо сказали: 0 раз(а) Репутация: 0 |
Как вариант нужно посмотреть, что использует QTimer в Windows и QNX, думается мне, что он не оптимально работает в QNX и нужно для QNX использовать нативное API. Или реализация QGLWidget в QNX хуже, чем в Windows, что в полне может быть... Так а как QTimer связан с тем, что функция QPainter::end() выполняется долго? Мне кажется, даже если таймер врёт, тормоза отрисовки всё равно есть. Или я не правильно что-то понял? А приоритет процесса какой на QNX? Много ли там других задач "крутится" в момент выполнения вашей программы и какие у них приоритеты на исполнение? Приоритет процесса пока не могу посмотреть, через пару дней только, пока плата недоступна. В принципе из "весомого" крутится только screen. Раскрывающийся текст pid tid name prio STATE Blocked 1 1 /procnto-smp-instr 0f RUNNING 1 2 /procnto-smp-instr 0f RUNNING 1 3 /procnto-smp-instr 0f RUNNING 1 4 /procnto-smp-instr 0f READY 1 6 /procnto-smp-instr 255r RECEIVE 1 1 7 /procnto-smp-instr 255r RECEIVE 1 1 8 /procnto-smp-instr 255r RECEIVE 1 1 9 /procnto-smp-instr 10r RUNNING 1 10 /procnto-smp-instr 10r RECEIVE 1 1 11 /procnto-smp-instr 10r RECEIVE 1 1 12 /procnto-smp-instr 24r RECEIVE 1 1 14 /procnto-smp-instr 10r RECEIVE 1 1 16 /procnto-smp-instr 10r RECEIVE 1 1 17 /procnto-smp-instr 10r RECEIVE 1 1 18 /procnto-smp-instr 24r RECEIVE 1 2 1 c/boot/devc-sermx1 24r RUNNING 1 2 2 c/boot/devc-sermx1 10r SIGWAITINFO 3 1 proc/boot/slogger 15r RECEIVE 1 4 1 proc/boot/pipe 10r SIGWAITINFO 4 2 proc/boot/pipe 10r RECEIVE 1 4 3 proc/boot/pipe 24r RECEIVE 1 4 4 proc/boot/pipe 10r RECEIVE 1 5 1 proc/boot/i2c-mx35 21r RECEIVE 1 6 1 proc/boot/i2c-mx35 10r RECEIVE 1 7 1 mcsd-mx6q-sabreARD 10r SIGWAITINFO 7 2 mcsd-mx6q-sabreARD 21r RECEIVE 1 7 3 mcsd-mx6q-sabreARD 21r RECEIVE 4 7 4 mcsd-mx6q-sabreARD 10r RECEIVE 10 7 5 mcsd-mx6q-sabreARD 10r RECEIVE 13 7 6 mcsd-mx6q-sabreARD 10r RECEIVE 7 7 7 mcsd-mx6q-sabreARD 21r RECEIVE 7 7 8 mcsd-mx6q-sabreARD 21r RECEIVE 7 8 1 mcsd-mx6q-sabreARD 10r SIGWAITINFO 8 2 mcsd-mx6q-sabreARD 21r RECEIVE 1 8 3 mcsd-mx6q-sabreARD 21r RECEIVE 4 8201 1 proc/boot/io-audio 21r SIGWAITINFO 8201 2 proc/boot/io-audio 50r RECEIVE 4 8201 3 proc/boot/io-audio 50r RECEIVE 7 8201 4 proc/boot/io-audio 21r RECEIVE 13 8201 5 proc/boot/io-audio 50r RECEIVE 16 8201 6 proc/boot/io-audio 25r CONDVAR (0x808d46c) 8201 8 proc/boot/io-audio 10r RECEIVE 1 8201 9 proc/boot/io-audio 21r RECEIVE 1 8201 10 proc/boot/io-audio 10r RECEIVE 1 8202 1 proc/boot/io-usb 10r SIGWAITINFO 8202 2 proc/boot/io-usb 10r RECEIVE 4 8202 3 proc/boot/io-usb 21r RECEIVE 7 8202 4 proc/boot/io-usb 21r RECEIVE 10 8202 5 proc/boot/io-usb 21r RECEIVE 1 8202 6 proc/boot/io-usb 21r RECEIVE 13 8202 7 proc/boot/io-usb 21r RECEIVE 13 8202 8 proc/boot/io-usb 21r RECEIVE 13 8203 1 oc/boot/devb-umass 10r SIGWAITINFO 8203 2 oc/boot/devb-umass 21r REPLY 8202 8203 3 oc/boot/devb-umass 21r RECEIVE 4 8203 4 oc/boot/devb-umass 21r RECEIVE 1 8203 5 oc/boot/devb-umass 21r RECEIVE 7 8203 6 oc/boot/devb-umass 21r RECEIVE 10 8203 7 oc/boot/devb-umass 21r RECEIVE 4 8203 8 oc/boot/devb-umass 21r RECEIVE 4 8203 9 oc/boot/devb-umass 21r RECEIVE 4 8204 1 roc/boot/io-pkt-v4 21r SIGWAITINFO 8204 2 roc/boot/io-pkt-v4 21r RECEIVE 1 8204 3 roc/boot/io-pkt-v4 21r RECEIVE 22 8205 1 c/boot/dhcp.client 10r SIGWAITINFO 8206 1 /boot/devf-generic 10r SIGWAITINFO 8206 2 /boot/devf-generic 10r RECEIVE 1 8206 3 /boot/devf-generic 10r RECEIVE 1 8206 4 /boot/devf-generic 10r RECEIVE 1 8206 5 /boot/devf-generic 10r RECEIVE 1 8207 1 proc/boot/qconn 10r SIGWAITINFO 8207 2 proc/boot/qconn 10r CONDVAR (0x805f520) 8207 3 proc/boot/qconn 10r RECEIVE 2 8207 4 proc/boot/qconn 10r RECEIVE 1 8208 1 proc/boot/devc-pty 10r RECEIVE 1 8211 1 proc/boot/inetd 10r SIGWAITINFO 12306 1 proc/boot/devf-ram 10r SIGWAITINFO 12306 2 proc/boot/devf-ram 10r RECEIVE 1 12306 3 proc/boot/devf-ram 10r RECEIVE 1 12306 4 proc/boot/devf-ram 10r RECEIVE 1 12306 5 proc/boot/devf-ram 10r RECEIVE 1 28689 1 bin/sh 10r SIGSUSPEND 28692 1 proc/boot/ksh 10r SIGSUSPEND 77845 1 sbin/screen 10r SIGWAITINFO 77845 2 sbin/screen 10r SEM 6faf8054 77845 3 sbin/screen 10r SEM 6faf8174 77845 4 sbin/screen 10r SEM 6faf81ec 77845 5 sbin/screen 10r SEM 6faf82ac 77845 6 sbin/screen 10r SEM 6faf83cc 77845 7 sbin/screen 10r SEM 6faf8414 77845 8 sbin/screen 10r SEM 6faf845c 77845 9 sbin/screen 10r SEM 6faf84a4 77845 10 sbin/screen 21r RECEIVE 1 77845 11 sbin/screen 21r RECEIVE 4 77845 12 sbin/screen 10r RECEIVE 7 77845 13 sbin/screen 21r RECEIVE 13 77845 14 sbin/screen 15r RECEIVE 10 77845 15 sbin/screen 15r CONDVAR (0x809695c) 77845 16 sbin/screen 10r RECEIVE 16 77845 17 sbin/screen 10r NANOSLEEP 77845 18 sbin/screen 10r RECEIVE 16 77845 19 sbin/screen 40r RECEIVE 21 77845 20 sbin/screen 10r RECEIVE 16 77845 21 sbin/screen 10r RECEIVE 16 77845 22 sbin/screen 10r RECEIVE 16 77845 23 sbin/screen 15r RECEIVE 16 77845 24 sbin/screen 15r CONDVAR (0x7805f218) 77845 25 sbin/screen 15r RECEIVE 24 |
|
|
ViGOur |
7.5.2015, 9:57
Сообщение
#5
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Так а как QTimer связан с тем, что функция QPainter::end() выполняется долго? Мне кажется, даже если таймер врёт, тормоза отрисовки всё равно есть. Или я не правильно что-то понял? Я ошибся при написании имелось ввиду QTime.Может дело не в том, что долго выполняется, а округляется не в ту сторону, для примера вот код: при его выполнении наглядно видно, что Qt'шный вариант явно отстает:"Вывод"
|
|
|
Текстовая версия | Сейчас: 25.11.2024, 17:15 |