Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Amigo_sa от Январь 22, 2010, 18:03



Название: Animation Framework тормозит
Отправлено: Amigo_sa от Январь 22, 2010, 18:03
Добрый день.
Тестирую тут анимацию, конкретно propertyAnimation, и возникают странные тормоза, не знаю как решить проблему.
В тестах я менял геометрию картинок на Widget или на GraphicsView. Конкретно код:
Код:
	QLabel * demoLabel = new QLabel(QString::fromLocal8Bit("демонстрационный ролик"), this);
QFont font = demoLabel->font();
font.setPixelSize(48);
font.setBold(true);
font.setItalic(true);
demoLabel->setFont(font);
demoLabel->setGeometry(0, 500, 300, 50);

demoLabel->installEventFilter(this);

QPropertyAnimation * anim1 = new QPropertyAnimation(demoLabel, "geometry");
anim1->setDuration(9600);
anim1->setStartValue(QRect(2280, 950, 1000, 50));
anim1->setEndValue(QRect(-1000, 950, 1000, 50));
anim1->setLoopCount(-1);
Пробовал еще двигать картинки, уменьшать и увеличивать.
Проблема в том, что это безбожно дергается и ни о каких 60fps, как утверждает Qt нет...
Пробовал логировать события о перерисовке компонентов. Анимация действительно обновляет положение виджета каждые 16 мс. Посылает сначала move, потом paint. Возможно, есть проблема у графической подсистемы, к которой обращается Qt? К сожалению, с этой проблемой не сталкивался и на форуме похожего не нашел. Подскажите плиз, кто знает  :)


Название: Re: Animation Framework тормозит
Отправлено: SABROG от Январь 22, 2010, 18:58
Выложи пример, который можно собрать и погонять у себя на компьютере.


Название: Re: Animation Framework тормозит
Отправлено: IGHOR от Январь 22, 2010, 19:20
У меня тоже в приложении были тормоза с QPropertyAnimation
а именно полупрозрачный виджет отрисовывался с задержкой, видно как фон "тянется" за виджетом,
тестировал только на своем компьютере, попробуйте приложение, отпишитесь тормозит ли оно у вас тоже:
http://gigasoftgroup.com/Content/soft/POZMOBAonline/POZMOBAonline.rar
если мое приложение работает у вас без тормозов, то может вам поможет пересобрать Qt


Название: Re: Animation Framework тормозит
Отправлено: SABROG от Январь 22, 2010, 20:17
IGHOR, у меня твоя программа не тормозит. Жалко конечно, что весь интерфейс на украинском, т.е. система переводов Qt даже не используется. Шрифты смотрятся убого с таким интерфейсом, иконки не выравнены, их позиция похоже зависит от длины текста на кнопке, да и картину портит фокус-пунктир на кнопке.

P.S.: iphone конечно модно, но даже у нас на работе человек имеющий iphone страстно хочет взять себе nokia n900.


Название: Re: Animation Framework тормозит
Отправлено: xokc от Январь 22, 2010, 21:32
Не вижу у себя тормозов тоже. WinXP SP3. Core2Duo.


Название: Re: Animation Framework тормозит
Отправлено: Авварон от Январь 22, 2010, 21:51
оффтоп
когда нокиа наконец перестанет делать кирпичи?


Название: Re: Animation Framework тормозит
Отправлено: SABROG от Январь 22, 2010, 22:41
оффтоп
когда нокиа наконец перестанет делать кирпичи?

Вес iPhone - 135 грамм, вес Nokia N900 - 181 грамм, вес кирпича - 4300 грамм.
Толщина IPhone - 12,3мм, толщина Nokia N900 - 18,0мм
Высота IPhone - 115,5мм, высота Nokia N900 - 110,9мм (!)
Ширина IPhone - 6,21мм, высота Nokia N900 - 5,98мм (!)

Отсюда речь идет о толщине и весе Nokia N900. Итак разница составляет - 5,7мм и 46 грамм. А теперь вспомним, что у IPhone'a нет выдвижной клавиатуры, которая будет работать в любой программе и операционной системе которую ты можешь поставить вместо maemo. А теперь смотрим чего человеку не хватает для работы в консоли линукс установленного на iPhone - http://www.youtube.com/watch?v=QwfMJRP5rnI


Название: Re: Animation Framework тормозит
Отправлено: IGHOR от Январь 22, 2010, 23:58
SABROG, кнопка это стандартный QPushButton со стайлшитом, иконки ровняются по дефолту, и я не старался шрифты ровнять, прога написана только для тестирования анимации переходов так что за укр извините
а за пунктир кнопки это странно, я ведь отключил фокус, можете скрин прислать?
вот скриншоты как должно выглядеть http://gigasoftgroup.com/POZMOBAonline

xokc, SABROG, спасибо что потестировали, значит все хорошо и у меня тормоза из-за разришения монитора 2048х1152 наверное


Название: Re: Animation Framework тормозит
Отправлено: Авварон от Январь 23, 2010, 00:44
SABROG
я не про вес, а внешний вид:(
а зачем в телефоне консоль?


Название: Re: Animation Framework тормозит
Отправлено: SABROG от Январь 23, 2010, 01:10
(http://img214.imageshack.us/img214/7078/pozmoba.png)

---
Консоль больше для сисадминов бы пригодилась, чтобы сервак перезагрузить например через SSH.


Название: Re: Animation Framework тормозит
Отправлено: IGHOR от Январь 23, 2010, 01:58
SABROG, теперь ясно, фокус появляется только после первого нажатия стрелок или таба,
в общем спасибо за замечание, в будущем учту это

скажите а что у вас за видеокарта? может тормоза связаны с видео драйвером, ибо Qt рисует через GDI+ а GDI+ по моему через DirectX


Название: Re: Animation Framework тормозит
Отправлено: panAlexey от Январь 23, 2010, 02:36
xokc, SABROG, спасибо что потестировали, значит все хорошо и у меня тормоза из-за разришения монитора 2048х1152 наверное
я бы не спешил ушки распускать на счет "не тормозит". у разных людей разное представление о нормальном отклике программы. Тут нужны точные замеры, а не болтовня.
ПС. "Хто онлайн?"  - это конкретно... :)))


Название: Re: Animation Framework тормозит
Отправлено: IGHOR от Январь 23, 2010, 03:04
panAlexey, может и разные,
главное мне определить почему фон/заставка иногда едут вслед за виджетом анимации, ибо если целиться на какой-то качественный продукт то надо избавится от таких тормозов
я уже потестировал на еще одном компьютере там все идеально, а на своем разрешение менял не помогло
если такое не у каждого значит "производительность" зависит от оборудования,
может Qt в новой версии поправят производительность анимации/перерисовки а если нет то буду думать о ручном рисовании нестандартных интерфейсов

PS: идея интерфейса проги пришла в то время когда я должен был встретится в чате с одной девушкой и не знал когда она появится вот и написал за одно такую программу "дело было вечером, делать было нечего"


Название: Re: Animation Framework тормозит
Отправлено: SABROG от Январь 23, 2010, 09:24
PS: идея интерфейса проги пришла в то время когда я должен был встретится в чате с одной девушкой и не знал когда она появится вот и написал за одно такую программу "дело было вечером, делать было нечего"

Это называется преследование, а программа помогает, эдакий шпион ;)

Насколько я помню Qt отказалась от GDI+. Хотя может это относилось именно к GDI объектам...


Название: Re: Animation Framework тормозит
Отправлено: zenden от Январь 23, 2010, 19:12
SABROG
Вы что-то путаете. Qt никогда не использовала GDI+. Да и зачем?
И никакой hardware-акселлерации в GDI+ нет.

P.S. Приложение автора не тормозит на MSI Wind U100,у которого процессор Atom 1.6 ghz и от видеокарты "только название".


Название: Re: Animation Framework тормозит
Отправлено: Sergey B. от Январь 23, 2010, 19:40
Core Duo e2160
XP SP3
Тормозов нет.


Название: Re: Animation Framework тормозит
Отправлено: IGHOR от Январь 23, 2010, 21:05
в этом я не очень разбираюсь,
но что делает gdi32.lib в зависимостях проекта Qt+VS2008 по умолчанию?


Название: Re: Animation Framework тормозит
Отправлено: xokc от Январь 23, 2010, 23:25
gdi32.lib отвечает за GDI. А за GDI+ отвечает, как ни странно, gdiplus.dll.


Название: Re: Animation Framework тормозит
Отправлено: Amigo_sa от Январь 25, 2010, 11:33
Выкладываю исходники тестовой программки. Qt 4.6.0, VS2008. Конфигурация компа - core 2 duo E7200, видео интегрированное,  Q33 Express Chipset Faminly.


Название: Re: Animation Framework тормозит
Отправлено: Авварон от Январь 25, 2010, 11:44
а что нужно увидеть? сверху резво бегает полоска, тормозов нет. 1280*800, macbook, intel gma
"тормоза" есть при резайзе, но оно и понятно - полоска двигается как приходят эвенты отрисовки, то есть если просто зажать и не ресайзить, то анимации нет вообще.


Название: Re: Animation Framework тормозит
Отправлено: Amigo_sa от Январь 25, 2010, 11:55
а что нужно увидеть? сверху резво бегает полоска, тормозов нет. 1280*800, macbook, intel gma
"тормоза" есть при резайзе, но оно и понятно - полоска двигается как приходят эвенты отрисовки, то есть если просто зажать и не ресайзить, то анимации нет вообще.
Я мечтал увидеть плавный ресайз и плавную строку, при переключении состояний. Про ивенты отрисовки, я вставлял код, который ловил paintEvent, и они приходили стабильно через 16 мс, то есть, если не блокировать интерфес, то должно все рисоваться плавно, а почему то дергается :(


Название: Re: Animation Framework тормозит
Отправлено: IGHOR от Январь 25, 2010, 16:29
Amigo_sa, потестировал и оно страшно тормозит,
видимо от того что вы делаете анимацию отдельно к каждому из 42 QLabel
думаю нужно сделать кэширование, сначала срендерить одну картинку всей сетки QLabel потом делать анимацию только одной срендериной картинки
после анимации поставить на место все QLabel


Название: Re: Animation Framework тормозит
Отправлено: Amigo_sa от Январь 25, 2010, 16:59
Amigo_sa, потестировал и оно страшно тормозит,
видимо от того что вы делаете анимацию отдельно к каждому из 46 QLabel
думаю нужно сделать кэширование, сначала срендерить одну картинку всей сетки QLabel потом делать анимацию только одной срендериной картинки
после анимации поставить на место все QLabel
Спасибо большое за участие!
Как я понял, Layout действительно пересчитывает каждый раз координаты всех своих child-ов. Но не ожидал, что это так накладно.
Вопрос про кэширование: как его осущесвлять? сграбить в QImage всю сетку лэйблов, потом заменить сетку этой картинкой? Я не уверен, что CSS каждого лэйбла будет правильно отображаться, рамки всякие не должны ресайзится... Интересно, может,  в qt как-нибудь по-другому реализовать быструю анимацию?

Забыл сказать, тестирую на Vistе.


Название: Re: Animation Framework тормозит
Отправлено: IGHOR от Январь 25, 2010, 18:05
Amigo_sa, Нужно все проанализировать сначала, я не до конца понимаю что должна делать ваша программа,
может вам подойдет вариант собирать нужные цифри и нарисовать их на одной QPixmap и вовсе не загружать столько лабелов а анимировать и отображать только картинку?
если надо то перегенирировать цифры, на счет CSS то не понимаю зачем оно здесь? можно просто генерировать четыре картинки и пусть себе масштабируются QLabel a; a.setPixmap(..); a.setScaledContents(true);
И вообще самый быстрый вариант рисовать все в paintEvent а координаты и геометрию генерить по QTimeLine я так делал в презентации к своей дипломной
http://dl.getdropbox.com/u/860231/Presentation.rar


Название: Re: Animation Framework тормозит
Отправлено: Amigo_sa от Январь 26, 2010, 18:52
Переписал свое приложение, используя svg графику вместо CSS. Стало работать намного красивее. Вывод такой, что CSS сильно тормозит.


Название: Re: Animation Framework тормозит
Отправлено: crossly от Январь 28, 2010, 18:37
покажешь??:)


Название: Re: Animation Framework тормозит
Отправлено: panAlexey от Январь 28, 2010, 18:55
Вывод такой, что CSS сильно тормозит.
а то мы без тебя не знаем.


Название: Re: Animation Framework тормозит
Отправлено: Amigo_sa от Январь 29, 2010, 15:46
Выкладываю анимацию с 1 картинкой svg. Я, конечно, сильно упростил, но похоже сетка из картинок и вправду ненужна.

Для просмотра понадобятся релизные Core4, Gui4 и Svg


Название: Re: Animation Framework тормозит
Отправлено: IGHOR от Апрель 11, 2010, 23:05
Amigo_sa, я как-то делал бегущую строку на QTimer при том в этой же проге phonon рисовал видео и проц был загружен. С появлением 4.6.0  я решил перекинуть движок бегущей строки на QPropertyAnimation и в результате оно притормаживало больше чем c QTimer (c QTimer почти не заметно но иногда была видна задержка).
Если можете, потестируйте бегущую строку только с QTimer, мне интересно будет ли у вас разница в производительности.