SASGIS - SAS.Планета
View Issue Details
0001748SAS.ПланетаРефакторингpublic27-12-2012 19:3030-12-2021 08:58
vdemidov 
 
normalmajorhave not tried
confirmedopen 
110418 
26xxxx 
0001748: Оптимизация слоя статусной строки
Разделить строку статуса на отдельные участки и сделать их независимыми слоями. В каждом сделать умную перерисовку только в том случае если данные поменялись. Сейчас оно перерисовывается все целиком пару раз в секунду. Мало того что само по себе набегает время, так еще и вызывает перерисовку на экране тайлов карты попадающих под статусную строку.
перерисовка экрана, сетка, строка состояния, строка статуса
related to 0001749confirmed  Данные высот вычислять и показывать асинхронно 
Issue History
27-12-2012 19:30vdemidovNew Issue
27-12-2012 19:31vdemidovStatusnew => confirmed
27-12-2012 20:49vasketsovNote Added: 0010237
27-12-2012 20:50vasketsovNote Edited: 0010237bug_revision_view_page.php?rev_id=5001
28-12-2012 04:44vdemidovNote Added: 0010239
28-12-2012 04:55vdemidovRelationship addedrelated to 0001749
28-10-2013 07:54vdemidovNote Deleted: 0010237
28-10-2013 07:54vdemidovNote Deleted: 0010239
28-10-2013 07:54vdemidovSeverityminor => major
28-10-2013 07:54vdemidovTarget Version26xxxx => 24xxxx
28-10-2013 07:56vdemidovNote Added: 0013132
28-10-2013 08:00vdemidovNote Edited: 0013132bug_revision_view_page.php?bugnote_id=13132#r5788
29-10-2013 08:51vdemidovTag Attached: перерисовка экрана
29-10-2013 08:51vdemidovTag Attached: сетка
29-10-2013 08:51vdemidovTag Attached: строка состояния
29-10-2013 08:51vdemidovTag Attached: строка статуса
04-11-2013 14:22vdemidovTarget Version24xxxx => 140303
03-03-2014 08:47vdemidovTarget Version140303 => 140404
19-03-2014 08:03vdemidovTarget Version140404 => 141111
23-10-2014 09:07vdemidovTarget Version141111 => 150915
21-01-2015 10:39vdemidovTarget Version150915 => 151010
18-02-2015 10:01vdemidovNote Added: 0015277
04-10-2015 15:28vdemidovTarget Version151010 => 151111
06-11-2015 08:20vdemidovTarget Version151111 => 191221
15-10-2017 17:29zedNote Added: 0018090
15-10-2017 18:20vdemidovNote Added: 0018091
15-10-2017 18:25vdemidovNote Edited: 0018091bug_revision_view_page.php?bugnote_id=18091#r7205
15-10-2017 18:39zedNote Added: 0018092
15-10-2017 19:20vdemidovNote Added: 0018093
23-07-2019 16:56vdemidovTarget Version191221 => 211230
30-12-2021 08:58zedTarget Version211230 => 26xxxx

Notes
(0013132)
vdemidov   
28-10-2013 07:56   
(edited on: 28-10-2013 08:00)
Отрисовка строки статуса у меня занимает больше времени главного потока чем отрисовка всей карты.
PS: это при том, что у меня нет ни высот, ни часов в строке статуса.

(0015277)
vdemidov   
18-02-2015 10:01   
Мне все больше хочется перевести строку состояния на использование датчиков. То есть, каждый элемент строки состояния будет иметь фиксированную ширину и отображать состояние одного из объектов ISensor. Конечно придется добавить новые типы датчиков: Текущий зум, Координаты под указателем мышки, Разрешение в центре экрана, Высота в центре экрана, Текущее время для пояса в центре экрана, Количество скачанных тайлов, Длинна очереди на закачку, Имя тайла под указателем мышки
Плюс нужно будет сделать отдельные списки активных датчиков-панелей и датчиков-строки-статуса (редактируемые через конфиг), что бы не создавать сходу всю кучу датчиков для каждого типа. Это позволит добавлять безболезненно новые типы датчиков, а пользователям подбирать нужный набор в панелях или строке состояния.
(0018090)
zed   
15-10-2017 17:29   
Помимо того, что перерисовываются тайлы, также ещё перерисовываются и надписи у линейки или пути (при его редактировании). А рендеринг текста в этих случаях очень тяжеловесный и, в итоге, самой ресурсоёмкой операцией оказывается именно обновление надписей (занимает на порядок больше времени, чем обновление всей статусной строки). Другими словами, попытка редактирования пути с парой сотней точек, при включённых надписях (а они по дефолту включены), ставит систему на колени со 100% загрузкой ядра CPU.

>Мне все больше хочется перевести строку состояния на использование датчиков
Т.е. убрать эту полупрозрачную штуку, и сделать что-то на подобии стандартного TStatusBar? Не хотелось бы терять визуальную составляющую, т.к. мне лично нравится, как у нас сейчас выглядит эта строка. Но вот то, что она создаёт лишнюю нагрузку в простое, очень не нравится.
(0018091)
vdemidov   
15-10-2017 18:20   
(edited on: 15-10-2017 18:25)
Ну, проблемы при перерисовки надписей при редактировании линий это отдельная проблема и ее тоже нужно решать отдельно.

Про датчики. Визуальную составляющую оставить такой как есть. Поменять только механику. У датчиков уже сейчас есть разделение данных и их отображения. Есть отображение на панели, а нужно добавить отображение в строке статуса.

Но перед этим нужно добавить недостающие датчики и сделать Гуй для их выбора в строку статуса и на панели, а существующие пункты меню использовать только для временного скрытия добавленных. Просто всех возможных будет очень много, вплоть до сотни, и искать их в меню это перебор.

(0018092)
zed   
15-10-2017 18:39   
Т.е. изменение значения у датчика всё так же будет вызывать необходимость перерисовки пересекающихся тайлов и, что хуже всего, всех слоёв унаследованных от TMapLayerBasicNoBitmap, которые обновляются целиком, вне зависимости от того, какая часть родительской битмапки обновилась.
(0018093)
vdemidov   
15-10-2017 19:20   
Во-первых, это будут отдельные битмапка, а не одна большая на всю ширину. Во-вторых, обновляться они будут только при реальном изменении данных. В-третьих, проблемы медленного обновления других слоев это проблемы других слоев и их тоже нужно решать, но отдельно от этой.