Тормоза с перерисовкой контролов после апгрейда до 1.4

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Тормоза с перерисовкой контролов после апгрейда до 1.4

Сообщение PVOzerski » 18.05.2015 00:58:50

Столкнулся с неприятной проблемой. Была прога (имитационная модель с многопоточностью и графическим выводом), сделанная на Lazarus 1.2.6. Собиралась под GTK2 для Linux , успешно работала. Однако после пересборки в Lazarus 1.4 при использовании тех же параметров начались лютые тормоза с отрисовкой контролов и линий и выводом текста в текстовые поля. от разрядности сборки проблема не зависит. Интересно, что если в качестве графической библиотеки использовать qt, то проблема исчезает (однако это неудобное решение, так как в этом случае прога тянет за собой дополнительные библиотеки).

Если кто-нибудь захочет поискать истоки бага и пути его решения, готов предоставить исходники проги и дать любые пояснения.
PVOzerski
постоялец
 
Сообщения: 109
Зарегистрирован: 19.05.2005 13:45:10
Откуда: СПб

Re: Тормоза с перерисовкой контролов после апгрейда до 1.4

Сообщение alex208210 » 18.05.2015 11:15:08

просто дай пример кода прорисовки который сейчас не работает, те кто что то знает напишут сами.
alex208210
постоялец
 
Сообщения: 207
Зарегистрирован: 12.05.2010 13:16:51

Re: Тормоза с перерисовкой контролов после апгрейда до 1.4

Сообщение PVOzerski » 19.05.2015 00:20:20

Кажется, кое-что я раскопал... Похоже, тормозит метод Refresh у TSpeedButton (возможно, и у других контролов тоже). Демонстрационный код очень простой. Нужно взять форму побольше, положить на нее где-нибудь чуть ниже заголовка кнопку (TButton) Button1, еще ниже - быструю кнопку (TSpeedButton) SpeedButton1.
На Onclick для кнопки Button1 назначаем такой вот обработчик:

Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  for i := 1 to 300 do
    begin
      SpeedButton1.Left := SpeedButton1.Left + 1;
      SpeedButton1.Refresh;
    end;
end;


Потом на глаз сравниваем, с какой скоростью SpeedButton бежит по форме при тулкитах qt и GTK2 (показательно также будет "закомментировать" SpeedButton1.Refresh при использовании GTK2 - разница тоже очень ощутимая). Еще раз напоминаю, что всё проверялось только в Linux (а конкретно этот образец - только в 64-разрядной системе).
PVOzerski
постоялец
 
Сообщения: 109
Зарегистрирован: 19.05.2005 13:45:10
Откуда: СПб

Re: Тормоза с перерисовкой контролов после апгрейда до 1.4

Сообщение zub » 19.05.2015 01:24:48

А зачем вам нужны бегающие кнопки? с таким подходом ни на какую скорость расчитывать не приходится - не должны кнопки бегать, да и заставлять их перерисовываться ручками тоже не стоит. Дайте скрин тормозящей картинки, подозреваю перенасыщенность контролами и вызов ченить аля Refresh этих контролов пачками и в неподходящих местах((
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Тормоза с перерисовкой контролов после апгрейда до 1.4

Сообщение Vadim » 19.05.2015 03:50:41

zub писал(а):А зачем вам нужны бегающие кнопки?

Человек пишет вирус. При наведении мышки на кнопку, кнопка начинает метаться по форме во все стороны. :-)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Тормоза с перерисовкой контролов после апгрейда до 1.4

Сообщение PVOzerski » 19.05.2015 10:44:05

"Человек" не пишет вирус, а написал программу, реализующую имитационную модель и до перекомпиляции, несмотря на избыточные контролы, вполне нормально работавшую. Так что одно из двух: либо раньше метод Refresh в LCL был "заглушкой", а теперь стал делать что-то нужное, но медленно, либо налицо регрессия - независимо от того, нравится кому-то или нет стиль программирования "человека". Если интересно, зачем двигать speedbutton'ы - могу объяснить: примерно затем же, зачем это делается в IDE Лазаря, - чтобы вручную позиционировать их там, где надо (а потом, в ходе работы модели, они будут перемещаться уже сами). Да, вероятно, всё это можно было написать через чистую графику, без привлечения контролов, но так было проще. Поскольку работало - меня устраивало. Стало работать отвратно - поднял вопрос. Вот и всё.
PVOzerski
постоялец
 
Сообщения: 109
Зарегистрирован: 19.05.2005 13:45:10
Откуда: СПб

Re: Тормоза с перерисовкой контролов после апгрейда до 1.4

Сообщение zub » 19.05.2015 11:47:14

>>Поскольку работало - меня устраивало. Стало работать отвратно - поднял вопрос. Вот и всё.
То что это работало гдето не значит что будет работать везде и тем более незначит что должно работать. Имхо подход неверный, надо было
>>Да, вероятно, всё это можно было написать через чистую графику, без привлечения контролов, но так было проще.
По мне так какраз проще нарисовать чем иметь кучу контролов
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Тормоза с перерисовкой контролов после апгрейда до 1.4

Сообщение Vadim » 19.05.2015 12:23:43

PVOzerski
А без Refresh никак нельзя обойтись?
Просто я хочу промоделировать Вашу ситуацию, но не знаю всех сопутствующих обстоятельств. ;-) Lazarus 1.5, SpeedButton бегает по форме как угорелая, что с Refresh, что без. Правда она одна, я не знаю, при каком количестве контролов начинается кризис.

Добавлено спустя 5 минут 33 секунды:
zub писал(а):По мне так какраз проще нарисовать чем иметь кучу контролов

Как раз с подобными контролами получается проще, чем с обычным рисованием. Я лет 10 назад тоже делал программку, которая моделирует некую структурную схему, правда вместо TSpeedButton использовал TShape, т.к. по техзадению у меня было всего 4 предопределённых условных элемента. И вот эти контролы во всю имитировали работу, тоже бегая по форме и на ходу перестраивая свои связи.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Тормоза с перерисовкой контролов после апгрейда до 1.4

Сообщение zub » 19.05.2015 12:58:28

>>Как раз с подобными контролами получается проще, чем с обычным рисованием.
Возможно, с одним виджесетом, с не "перегруженой" схемой, с четким т.з., с гарантией того что в дальнейшем не будет кардинальных изменений... и т.д. и т.п.
PVOzerski
скрин будет?
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Тормоза с перерисовкой контролов после апгрейда до 1.4

Сообщение PVOzerski » 19.05.2015 14:44:46

Да пожалуйста. Могу и исходники выслать с инструкцией. Тем более что я-то workaround нашел - два refresh'а (по факту, лишних) отрубил - и всё нормализовалось. Скорее это потенциальный багрепорт для LCL (если только они не прибавили взамен скорости какой-то нужный функционал), чем проблема моей проги. А с багами всё-таки нужно разбираться.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
PVOzerski
постоялец
 
Сообщения: 109
Зарегистрирован: 19.05.2005 13:45:10
Откуда: СПб

Re: Тормоза с перерисовкой контролов после апгрейда до 1.4

Сообщение zub » 19.05.2015 15:07:20

>>Да пожалуйста. Могу и исходники выслать с инструкцией
Высылать ненадо, надо выкладывать на общедоступный хостинг контроля версий, т.е. открывать))
Имхо тормозить тут нечему. явно гдето чтото у вас нетак (или какаянить особенность гтк, наврятли баг) и происходит множественная отрисовка всего и вся.

Кнопки узлы графиков и бегунки "эквалайзера" снизу?
Еще более убеждаюсь что нарисовать всё руками будет практичней, включая кучу безликих едитов - делая полноценным контролом находу только тот который поллучает фокус
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Тормоза с перерисовкой контролов после апгрейда до 1.4

Сообщение PVOzerski » 19.05.2015 15:41:22

Насчет "вины" GTK2 - тогда бы проблема возникла сразу, а не после смены версии Lazarus.
Ну, а контролы Вы распознали сразу :)
Последний раз редактировалось PVOzerski 19.05.2015 15:50:08, всего редактировалось 1 раз.
PVOzerski
постоялец
 
Сообщения: 109
Зарегистрирован: 19.05.2005 13:45:10
Откуда: СПб

Re: Тормоза с перерисовкой контролов после апгрейда до 1.4

Сообщение Sharfik » 19.05.2015 15:49:32

Что то очень похожее - эквалайзер, графики я видел среди контроллов в базовом пакете CodeTyphon.

PVOzerski, соглашусь с zub частично. Переползая с Delphi инспектор свойств самописный у меня начал тупить, переписал все на самостоятельную отрисовку на канве и оставил пару контроллов, которые появлялись только для редактирования. Все стало по человечески работать и не тупить.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 809
Зарегистрирован: 20.07.2013 01:04:30

Re: Тормоза с перерисовкой контролов после апгрейда до 1.4

Сообщение Vadim » 19.05.2015 16:20:57

PVOzerski
Выложите сюда исходники (только исходники) и напишите подробнее, какие именно Ваши действия приводят к тормозам.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Тормоза с перерисовкой контролов после апгрейда до 1.4

Сообщение zub » 19.05.2015 16:40:51

>>Насчет "вины" GTK2 - тогда бы проблема возникла сразу, а не после смены версии Lazarus.
Не факт. Глянте сколько было изменений в гтк бакенде с 1.2 до 1.4 (недумаю что их было много, вообще поставте транк и найдите конкредный "сбойный" комит) - чтонить добавили или переделали более правильно.
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 235

Рейтинг@Mail.ru