crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> 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
#ifndef TWIDGET_H
#define TWIDGET_H

#include <QGLWidget>
#include <QPaintEvent>

class TWidget : public QGLWidget
{
public:
    TWidget();
    ~TWidget();
protected:
    void paintEvent(QPaintEvent*);

};

#endif // TWIDGET_H


twidget.cpp
#include "twidget.h"
#include <QTime>
#include <QPainter>
#include <iostream>


TWidget::TWidget()
{
}

TWidget::~TWidget()
{
}

void TWidget::paintEvent(QPaintEvent *event)
{
    QTime time;
    time.start();
    QPainter painter(this);
//    static QPixmap pic(QPixmap(":/Background.png").scaled(this->width(), this->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
//    painter.drawPixmap(this->geometry(), pic);
    std::cout << "Before painter.end() time is: " << time.elapsed() << std::endl << std::flush;
    painter.end();
    std::cout << "After painter.end() time is: " << time.elapsed() << std::endl << std::flush;
    event->accept();
}


Лог на хосте:
Прикрепленное изображение


Лог на целевой:
Прикрепленное изображение

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
ViGOur
  опции профиля:
сообщение 6.5.2015, 10:21
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Как вариант нужно посмотреть, что использует QTimer в Windows и QNX, думается мне, что он не оптимально работает в QNX и нужно для QNX использовать нативное API.
Или реализация QGLWidget в QNX хуже, чем в Windows, что в полне может быть...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
cerjo
  опции профиля:
сообщение 7.5.2015, 8:56
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 6.5.2015
Пользователь №: 4378

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(ViGOur @ 6.5.2015, 10:21) *
Как вариант нужно посмотреть, что использует QTimer в Windows и QNX, думается мне, что он не оптимально работает в QNX и нужно для QNX использовать нативное API.
Или реализация QGLWidget в QNX хуже, чем в Windows, что в полне может быть...


Так а как QTimer связан с тем, что функция QPainter::end() выполняется долго? Мне кажется, даже если таймер врёт, тормоза отрисовки всё равно есть. Или я не правильно что-то понял?

Цитата(wiz29 @ 6.5.2015, 18:56) *
А приоритет процесса какой на 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
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.11.2024, 21:24