OberonCore
https://forum.oberoncore.ru/

И снова о мерцании.
https://forum.oberoncore.ru/viewtopic.php?f=24&t=3333
Страница 2 из 2

Автор:  Илья Ермаков [ Пятница, 18 Март, 2011 23:20 ]
Заголовок сообщения:  Re: И снова о мерцании.

А эта пауза - она будет, если переключить форму в другой режим, в маску?

Автор:  Иван Кузьмицкий [ Пятница, 18 Март, 2011 23:28 ]
Заголовок сообщения:  Re: И снова о мерцании.

Да, всё ровно так же. Сеточки только нет.

P.S. Кстати, простейший эксперимент.

Берём форму, растягиваем её поширше и размещаем на ней матрицу 7x15 стандартных кнопок "Cancel". Если теперь выделить форму как монолит и растягивать её, то контролы начнут мерцать.

На видео видно, как этот массив контролов рисуется постепенно, в три или четыре приёма.

Опять же, непонятно, как это согласуется с буферизацией.

Автор:  Пётр Кушнир [ Суббота, 19 Март, 2011 00:31 ]
Заголовок сообщения:  Re: И снова о мерцании.

а вот саморисованые кнопки в том же количестве не моргают вовсе.

Автор:  Иван Кузьмицкий [ Суббота, 19 Март, 2011 11:15 ]
Заголовок сообщения:  Re: И снова о мерцании.

По результатам, выработались некоторые способы избавления от мерцания GUI.

1) Отказ от виндовых контролов везде, где только можно.
2) Оптимизация работы с БД, т.к. уменьшение количества синхронных запросов облегчает отрисовку.
3) Вынос тяжёлых операций в отложенные действия (эффект сомнительный, так как однопоточность остаётся самым сильным фактором, влияющим на перерисовку).

P.S. Пытаясь сформулировать проблему, мы с Петром пока что пришли к такому выводу: механизмы отображения в ББ хороши сами по себе, но GUI в целом имеет некоторые проблемы в виде однопоточной увязки и зависимостей от WinAPI. В результате, затяжные процессы в прикладной логике могут оказывать влияние на момент финального рендера виджетов.

Автор:  Info21 [ Суббота, 19 Март, 2011 13:05 ]
Заголовок сообщения:  Re: И снова о мерцании.

Иван Кузьмицкий писал(а):
затяжные процессы в прикладной логике могут оказывать влияние на момент финального рендера виджетов.
Напрашивается выделение прикладной логики с затяжными процессами в отдельный экземпляр ББ -- и пусть общается с "фасадом" через какое-нибудь TCP/IP.

Сам бог велел, no?

(В длинных вычислялках эта проблема тоже есть, поэтому любопытно.)

Автор:  Иван Кузьмицкий [ Пятница, 29 Апрель, 2011 21:59 ]
Заголовок сообщения:  Re: И снова о мерцании.

Небольшое замечание.

Заключение операций изменения внедрённых отображений в модификационные скобки BeginModification, EndModification значительно повлияло на общую картину в целом. Эти операции с самого начала не должны были быть неотменяемыми, но как-то это всё откладывалось "на потом".
Так вот, флики стали совсем малозаметны (хотя там, где много виндовых контролов, всё равно остались).

А наткнулись на этот факт совершенно случайно, копая бесконтрольное отжирание памяти при каждой перерисовке внедрённых отображений.

Страница 2 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/