Anonymous | Login | Signup for a new account | 22-11-24 03:07 UTC |
All Projects | SAS.Планета | Домен, сайт, форум, багтрекер | Доработка карты (ZMP) | Переводы и локализации | Прочее |
My View | View Issues | Change Log | Roadmap | Search |
View Issue Details [ Jump to Notes ] | [ Issue History ] [ Print ] | ||||||||
ID | Project | Category | View Status | Date Submitted | Last Update | ||||
0001253 | SAS.Планета | [All Projects] Хотелка | public | 29-03-2012 06:35 | 10-10-2012 11:47 | ||||
Reporter | vasketsov | ||||||||
Assigned To | vasketsov | ||||||||
Priority | normal | Severity | feature | Reproducibility | N/A | ||||
Status | closed | Resolution | fixed | ||||||
Platform | Windows | OS | Vista | OS Version | Ultimate | ||||
Product Version | .Nightly | ||||||||
Target Version | 120808 | Fixed in Version | 120808 | ||||||
Summary | 0001253: Ускорение отрисовки карты заполнения для нефайловых типов кэша | ||||||||
Description | Так как нефайловые типы кэша допускают выполнение "групповых" операций над тайлами (например, поиск тайла по диапазону xy), для целей построения карты заполнения необходимо реализовать ещё один "групповой" метод. Суть нового метода заключается в определении наличия или отсутствия тайлов (и их даты при наличии) в некотором заданном диапазоне xy в рамках одной операции над хранилищем в тех случаях, когда это будет выполняться заведомо существенно быстрее, чем "опрос" по одному тайлу. Диапазон построения карты заполнения для нового метода может как совпадать со всем отображаемым участком карты, так и быть его небольшой частью. Последнее необходимо как минимум в следующих случаях: а) построение карты заполнения в несколько потоков; б) построение карты заполнения для нового участка экрана после небольшого сдвига; в) построение карты заполнения при переходе через 180 градусов. | ||||||||
Tags | БД, карта заполнения | ||||||||
Attached Files | SASPlanet.elf [^] (81,059 bytes) 02-04-2012 12:15 | ||||||||
Relationships | |||||||||||
|
Notes | |
(0006321) Tolik (manager) 29-03-2012 06:45 |
> б) построение карты заполнения для нового участка экрана после небольшого сдвига; Привычно (и правильно), что карта заполнения после сдвига обновляется полностью. Если при сдвиге обновлять не всю, а только ту область, которая появилась на экране, может оказаться, что центральная часть карты зап. устарела (если смотреть её одновременно с закачкой). |
(0006322) vasketsov (manager) 29-03-2012 06:51 edited on: 29-03-2012 06:53 |
>центральная часть карты зап. устарела (если смотреть её одновременно с закачкой). Эту проблему надо решать немного по-другому, а именно - сбросом признака валидности с карты заполнения и перестроением её при произвольном минимальном сдвиге (а не как сейчас надо сильно сдвинуть). Коли уж тайлы на лету обновляются после закачки, то "известить" слой карты заполнения об изменениях также не проблема. В любом случае конкретно эта доработка не ставит целью изменение исходных параметров карты заполнения, как она строилась по всему экрану, так и будет строиться. Как не показывала карта через 180 градусов - так и не будет показывать после этой доработки. Это просто указание на то, что диапазон не обязательно совпадает с экраном. |
(0006361) vasketsov (manager) 02-04-2012 11:42 edited on: 02-04-2012 11:49 |
Задуманное сделал, ускорение отрисовки карты заполнения для GE заметно (но правда не в разы, потому что до последнего необработанного тайла надо идти до конца индекса, индекс маленький, а больше +4 я не запускал). Но могу "обрадовать". Налетел на совершенно непонятную багу. Крэшится в SysUtils внутри совершенно безобидного IntToStr. Крэшится ТОЛЬКО если включить карту заполнения, и не дав ей дорисоваться, сдвинуть карту (чтобы рисовалась по-новой). Судя по стеку - гадит обработка исключений (вызывается рекурсивно). Замена MemoryManager в DLL на FastMM или сасовский ничего принципиально не меняет. Даже обернул получение битовой карты тайлов в BeginWrite..EndWrite - пофигу. На самом деле крайне редко при установленной версии аналогично валится и "старая" DLL, где нет функции получения битовой карты для тайлов. |
(0006362) vdemidov (manager) 02-04-2012 11:57 |
А ты в dll прописал IsMultiThread := true |
(0006363) vasketsov (manager) 02-04-2012 12:14 edited on: 02-04-2012 12:16 |
О, заметно полегчало, ведь чувствовал что что-то забыл. Но всё равно (пусть и сильно реже) где-то крэшится. Походу надо ещё попробовать MainInstance передать в DLL. Врубил "еврику" на EXE и DLL и словил приаттаченное. |
(0006364) vdemidov (manager) 02-04-2012 12:29 |
Ну это похоже та же проблема, что и у Паразита в соседней хотелке. Скоро вылечиться. Глобальных локов просто не будет. Можешь посмотреть на новый основной слой. Правда он еще не до конца доделан. |
(0006369) vasketsov (manager) 02-04-2012 17:42 |
Пока что сделал только для GE. Приаттачил DLL в доработку 0001195. Работает и потайлово, и по битовой карте. Общая логика: 0. Карта заполнения по битовой карте тайлов строится ТОЛЬКО если исходный зум строго больше текущего. 1. Хранилище (а кроме него собственно некому) определяет формат (и размер) буфера для битовой карты тайлов в заданном диапазоне (*). 2. Создаётся пустой чистый буфер. 3. Зовётся хранилище, далее вызов улетает в DLL (если хранилище в DLL). Соответственно в сасе не кэшируется. 4. По возвращению из DLL буфер заполнен в соответствии с заказанным форматом. Если DLL не поддерживает заказанный хранилищем формат - ломаем руки автору хранилища и по совместительству DLL. 5. Покуда может кинуться EOutOfMemory - хранилище не должно требовать именно заказанного формата буфера, может быть и попроще (например, только флаги). 6. Разбор буфера и вызов раскраски тайлов. (*) Если есть даты - один формат, если нет - другой. Цель - по возможности минимизировать требуемый размер буфера. А то для 60 тайлов текущего зума для +8 в случае построения карты заполнения до диапазону дат для 12 байт на "микротайл" может быть совсем грустно, при сильной фрагментации ждать выделения будем долго. Сейчас предусмотрены форматы 1, 4 и 8 байт на "макротайл" (1 - только флаги, 4 - дата и время с точностью до 30 секунд + флаги, 8 - полный диапазон TDateTime + флаги). |
Issue History | |||
Date Modified | Username | Field | Change |
29-03-2012 06:35 | vasketsov | New Issue | |
29-03-2012 06:36 | vasketsov | Relationship added | related to 0001248 |
29-03-2012 06:45 | Tolik | Note Added: 0006321 | |
29-03-2012 06:51 | vasketsov | Note Added: 0006322 | |
29-03-2012 06:53 | vasketsov | Note Edited: 0006322 | View Revisions |
02-04-2012 11:42 | vasketsov | Note Added: 0006361 | |
02-04-2012 11:49 | vasketsov | Note Edited: 0006361 | View Revisions |
02-04-2012 11:50 | vasketsov | Assigned To | => vasketsov |
02-04-2012 11:50 | vasketsov | Status | new => assigned |
02-04-2012 11:57 | vdemidov | Note Added: 0006362 | |
02-04-2012 12:14 | vasketsov | Note Added: 0006363 | |
02-04-2012 12:15 | vasketsov | File Added: SASPlanet.elf | |
02-04-2012 12:16 | vasketsov | Note Edited: 0006363 | View Revisions |
02-04-2012 12:29 | vdemidov | Note Added: 0006364 | |
02-04-2012 17:25 | vasketsov | Relationship added | related to 0001195 |
02-04-2012 17:42 | vasketsov | Note Added: 0006369 | |
02-04-2012 18:06 | vasketsov | Status | assigned => resolved |
02-04-2012 18:06 | vasketsov | Fixed in Version | => 120808 |
02-04-2012 18:06 | vasketsov | Resolution | open => fixed |
13-05-2012 09:12 | gpsMax | Tag Attached: карта заполнения | |
14-05-2012 08:33 | vdemidov | Target Version | => 120808 |
17-05-2012 17:36 | gpsMax | Tag Attached: БД | |
10-10-2012 11:47 | Tolik | Status | resolved => closed |
My View | View Issues | Change Log | Roadmap | Search |
Copyright © 2007 - 2024 SAS.Planet Team |