SASGIS

Веб-картография и навигация


View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0001253SAS.Планета[All Projects] Хотелкаpublic29-03-2012 06:3510-10-2012 11:47
Reportervasketsov 
Assigned Tovasketsov 
PrioritynormalSeverityfeatureReproducibilityN/A
StatusclosedResolutionfixed 
PlatformWindowsOSVistaOS VersionUltimate
Product Version.Nightly 
Target Version120808Fixed in Version120808 
Summary0001253: Ускорение отрисовки карты заполнения для нефайловых типов кэша
DescriptionТак как нефайловые типы кэша допускают выполнение "групповых" операций над тайлами (например, поиск тайла по диапазону xy), для целей построения карты заполнения необходимо реализовать ещё один "групповой" метод.

Суть нового метода заключается в определении наличия или отсутствия тайлов (и их даты при наличии) в некотором заданном диапазоне xy в рамках одной операции над хранилищем в тех случаях, когда это будет выполняться заведомо существенно быстрее, чем "опрос" по одному тайлу.

Диапазон построения карты заполнения для нового метода может как совпадать со всем отображаемым участком карты, так и быть его небольшой частью. Последнее необходимо как минимум в следующих случаях:
а) построение карты заполнения в несколько потоков;
б) построение карты заполнения для нового участка экрана после небольшого сдвига;
в) построение карты заполнения при переходе через 180 градусов.
TagsБД, карта заполнения
Attached Files? file icon SASPlanet.elf [^] (81,059 bytes) 02-04-2012 12:15

- Relationships
related to 0001195closedvasketsov Переключение версии снимков для кэша GE 
related to 0001248closedvdemidov Ускорение отрисовки карты заполнения 

-  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 + флаги).

- Users who viewed this issue
User List Anonymous (2817x)
Total Views 2817
Last View 22-11-2024 03:07

- 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



Copyright © 2007 - 2024 SAS.Planet Team