SASGIS - SAS.Планета
View Issue Details
0003345SAS.Планета[All Projects] Багpublic21-06-2018 10:4710-09-2018 19:41
JackOfShadows 
zed 
normalminoralways
resolvedfixed 
160707 
181221181221 
0003345: Рисование маршрута - тормоза после 20-й точки
Стабильно начинает подтормаживать и в 160707, и в ночнушке после 20й-25й точки маршрута. При размещении точки загрузка процессора прыгает с 30 до 80%, на отрисовку точки надо где-то полсекунды.
No tags attached.
Issue History
21-06-2018 10:47JackOfShadowsNew Issue
22-06-2018 08:00zedNote Added: 0018335
22-06-2018 08:26zedNote Added: 0018336
22-06-2018 08:58vdemidovStatusnew => feedback
25-06-2018 06:31JackOfShadowsNote Added: 0018340
25-06-2018 06:31JackOfShadowsStatusfeedback => new
25-06-2018 11:03vdemidovNote Added: 0018341
25-06-2018 12:16zedNote Added: 0018342
25-06-2018 12:20zedNote Added: 0018343
25-06-2018 12:38vdemidovNote Added: 0018344
08-08-2018 12:50vdemidovStatusnew => confirmed
08-08-2018 12:50vdemidovCategoryРефакторинг => Баг
08-08-2018 12:50vdemidovTarget Version => 26xxxx
08-09-2018 21:17zedNote Added: 0018395
08-09-2018 21:27zedNote Added: 0018396
08-09-2018 21:27zedAssigned To => zed
08-09-2018 21:27zedStatusconfirmed => feedback
08-09-2018 21:28zedNote Edited: 0018396bug_revision_view_page.php?bugnote_id=18396#r7315
08-09-2018 21:35zedNote Edited: 0018395bug_revision_view_page.php?bugnote_id=18395#r7317
09-09-2018 15:38GarlNote Added: 0018398
10-09-2018 04:46JackOfShadowsNote Added: 0018399
10-09-2018 04:46JackOfShadowsStatusfeedback => assigned
10-09-2018 19:41zedStatusassigned => resolved
10-09-2018 19:41zedFixed in Version => 181221
10-09-2018 19:41zedResolutionopen => fixed
10-09-2018 19:41zedTarget Version26xxxx => 181221

Notes
(0018335)
zed   
22-06-2018 08:00   
Если включить опцию "Отображать только конечное расстояние" тормоза пропадают?

Про версию 160707 можете забыть, тестировать всегда надо на крайней ночнушке. Причём, там лежит 4 *.exe и надо убедиться, что поведение одинаковое у всех версий.
(0018336)
zed   
22-06-2018 08:26   
Если у вас Windows 10, то проблема может быть именно в ней: GDI based application unusably slow in Windows 10
(0018340)
JackOfShadows   
25-06-2018 06:31   
> Если включить опцию "Отображать только конечное расстояние" тормоза пропадают?

Да, всё летает.

> Про версию 160707 можете забыть, тестировать всегда надо на крайней ночнушке. Причём, там лежит 4 *.exe и надо убедиться, что поведение одинаковое у всех версий.

Я начал с ночной, конечно же.

> Если у вас Windows 10, то проблема может быть именно в ней: GDI based application unusably slow in Windows 10

Да, на обоих компах десятка.
(0018341)
vdemidov   
25-06-2018 11:03   
Ну, значит пора кардинально переделывать TMapLayerCalcLineCaptions. Вместо прямого отображения подписей - делать отображение сгенерированных маркеров с текстом. Причем эту генерацию, видимо нужно делать в отдельном потоке и с кэшированием результатов. Что-то среднее между текущей реализацией и реализацией подписей в растеризаторе слоя меток.
(0018342)
zed   
25-06-2018 12:16   
Переделывать нужно рендеринг шрифтов и делать альтернативу на DirectWrite.

https://github.com/graphics32/graphics32/issues/29
(0018343)
zed   
25-06-2018 12:20   
Кстати, в компоненте SynEdit идёт подготовка к переходу на DirectWrite и там можно подсмотреть реализацию. Но стоит учитывать, что DirectWrite будет доступен только в Windows 7 и выше, т.е. нужно оставлять совместимость и с GDI.
(0018344)
vdemidov   
25-06-2018 12:38   
Одно другому не мешает. Я вообще мечтал сделать вывод на экран тайлов, разных маркеров, элементов интерфейса с использованием аппаратного ускорения (OpenGL или Direct3D) в виде простых текстур. Меня именно наличие прямого рисования текста и линий останавливало от экспериментов в этом направлении.
(0018395)
zed   
08-09-2018 21:17   
(edited on: 08-09-2018 21:35)
Проблема в методе RenderText со значением AALevel больше 0 (у нас в этом месте 3). Чтобы сделать сглаживание, GR32 увеличивает шрифт в 2^N раз (где N - циферка AALevel) рендерит его на временную битмапку (которая получается очень большого размера), потом руками делает скейлинг битмапки вниз, до размера, соответствующего изначальному размеру шрифта и только потом у нас получается нужный битмап.

Предлагаю перейти на метод TextOut, который ничего подобного не делает, при этом скорость рендеринга увеличивается более чем на порядок. Правда, текст получается более тонкий и на дефолтном сером фоне становится менее заметен. Поэтому, одновременно предлагаю изменить и дефолтное оформление (см. 0003369 - скриншот new).

(0018396)
zed   
08-09-2018 21:27   
(edited on: 08-09-2018 21:28)
Тестовый бинарник: https://yadi.sk/d/7ZpmWZyVxrQbtg

JackOfShadows
Проверьте, как он поведёт себя.

Чтобы увидеть новое оформление, удалите в SASPlanet.ini секции CalcLine, CalcCircle и EditMarkPolyLine или SASPlanet.ini целиком (предварительно сделав бэкап).

(0018398)
Garl   
09-09-2018 15:38   
лучше! в разы резвее.
(0018399)
JackOfShadows   
10-09-2018 04:46   
Проверил, тормозов нет. Спасибо.