[CZ] Renderování vektorové mapy + noční režim + posuvník zoomu

Daniel Grym shared this problem 6 years ago
Not a Problem

Používám originální vektorovou mapu (Asamm Software, s. r. o.) a s dalšími novými updaty se stále zhoršuje posun mapy. Locus se při vykreslování zasekává, po přepnutí do nočního režimu se mění posun mapy ve slideshow. Zhoršení je patrné i na online mapách při nočním režimu.

Tlačítko zoomu je málokdy funkční, při jeho posunu zmizí mapa a trvá někdy i 10s než se vykreslí v jiné velikosti.

Chtělo by to zapracovat na systému renderování, popř. vypustit zbytečný posuvník.


Jiné mapové programy s posunem problém nemají a výkon zařízení (Nexus 7, Galaxy SII) je pro tuto činnost dostatečný.

Comments (6)

photo
1

Bohužel vaší zkušenost nemůžu opět potvrdit.


Na rendrování vektorové mapy neustále pracuju a napopak by se měla s poslední verzí ještě zlepšit. Je třeba počítat s tím, že vektorová mapa je cca 2x pomalejší než mapa rastrová, občas i o něco více. Je to dáno jejím způsobem zpracování a provedení.


Tlačítko zoomu - nevím o problému, že by nefungovalo. Můžete mi pospsat krok za krokem co udělat aby mi též nefungovalo?


Vypustit posuvník - bohužel, nevím co tím myslíte.


Věřím že výkon na zmýněných zařízeních dostatečný je, protože sám Locus vyvíjím na SGS2 a vše běhá plynule a bez problému.

photo
1

Renderování a ovládání mapy jsem neosvětlil dostatečně a pochopitelně. Pokud by byla dostupná nějaká rastrová varianta, neobtěžoval bych. Vektorová mapa byl jednoduchý způsob, jak do zařízení dostat celou ČR bez ohledu na dostupnost signálu GPRS pro online mapy a zatížení datového tarifu. Nevím jak to má zpracovaný např. Seznam s jejich Mapami.cz do mobilu, ale jejich vykreslování je podstatně plynulejší. Velikost souboru s mapovým podkladem je také podobná (okolo 350MB) a jestliže obsahuje vektorová mapa např. velké procento čísel domů naproti tomu Mapy.cz obsahují spoustu jiných informací (turistické značky, jména řek či vodních ploch ap.)


K vlastnímu problému - ten se mi nepodařilo nasimulovat resp. zachytit na Nexusu, kde nefunguje program Screencast na zachytávání dění na obrazovce. Natočil jsem tedy několik samplů na Galaxy SII.


http://mujweb.cz/atelier-arz1/slider_1.mp4


To je záznam, jak program nestíhá reagovat na posuvník. Ten je v případě Nexusu téměř nefunkční. Buď zmizí dříve, než se ho uživatel stihne dotknout nebo nereaguje na dotek. Na Galaxy má "pouze" problém s dlouhou odezvou.


http://mujweb.cz/atelier-arz1/slider_2.mp4


Tatáž operace, jen prováděná prsty přímo na obrazovce - podstatně rychlejší odezva.


http://mujweb.cz/atelier-arz4/night_mode.mp4


V nočním režimu se celé vykreslování zpomalí ještě výrazněji, patrně při přepočtu do inverzních barev v reálném čase.


Tyto hodnoty se ale na Nexusu ještě výrazně zpomalí, kdy je Locus několikanásobně pomalejší. To je s ohledem na konstrukci CPU i RAM jen stěží pochopitelné.


Když už jsme u map, tak jsem zaznamenal zmizení podpory Google satelitní mapy. Nejspíše došlo k nějakým licenčním problémům a Google mapa už nebude v Locusu k dispozici. Je možná nějaká náhrada? V současnosti musím ručně vyhledávat lokality ve dvou nezávislých programech, namísto abych si jen přepnul mapu v jednom programu...

photo
1

Nejdříve jsem se bál, že máte celý systém opravdu netypicky pomalý, nebo nějaký jiný problém nicméně, abych to vyjasnil.


Zjednoušeně - data na obrazovku lze vykreslovat dvěma způsoby.

  • Softwarově - využívá se maximálně CPU, které je ale primárně dělané na výpočty
  • Hardwarově - využívá grafické jádro optimalizované pro vykreslování grafiky

Google mapy, Seznam a i jiný využívají hardwarové vykreslování, proto je to tak rychlé. Locus a většina takových to aplikací využívá softwarové vykreslování.


Proč? Náročnost implementace, která je u hardwarového mnohonásobně vyšší.


Problémy:

1 pomalá reakce posuvníku: tohle je záměr. Posuvník čeká 250 ms. Když se po tu dobu hodnota nezmění, mapa se přepne. Jinak bylo zoomování naprosto nepoužitelné


2. noční režim - zde softwarové rendrování způsobuje ještě větší zpomalení jak sám píšete, kvůli přepočtu barev.


3. Google mapy - ty jsme odebrali cca před třemi lety. Je možnost přidat si mapy vlastním komplikovaným způsobem - viz: http://docs.locusmap.eu/doku.php/manual:custom_online_maps


Nicméně to co píšete není problém ale stav jaký v Locusu je. Rychlost by vyřešilo HW vykreslování, které bych velmi rád, jen na to není čas a nemá to u mě takovou prioritu.

photo
1

Zdravím,

Něco málo z problematiky SW a HW vykreslování je mi známo z hraní her a nostalgicky mi to připomene můj první skutečný HW akcelerátor Voodoo. Nicméně i s dnešním železem je např. na vykreslování filmů lepší SW dekódování než HW. Nevím proč tomu tak je a ani to nezjišťuji.


Ohledně Locusu, softwaru a hardwaru pro Android to bude trochu složitější…


Pokud Google mapy, Seznam a jim podobné programy využívají HW akcelerace, pak nemohly takto fungovat na Androidu 2.3.5 Gingerbread, protože ten HW akceleraci neumí použít. Ta byla implementována až do Androidu 4. x. Jelly Bean 4.1.2 používám až od prosince 2013, KitKat 4.4.2 od února 2014 a s těmito mapovými programy jsem problém neměl, jedinou brzdou bylo načítání dlaždic přes mobilní síť, kde obecně používám EDGE pro úsporu baterie, popř. nárazově HSPA právě na mapy. Na WiFi pak už problémy nebyly. Jakýkoli přínos HW akcelerace zde nebyl nějak znát.


Pokusil jsem se zaznamenat snahu o použití posuvníku – přestože se snažím trefit do pole posuvníku, doteky jsou mnohdy vyhodnoceny zcela jinak. Není tomu tak vždy a zaznamenal jsem jisté zprávy o chybě Nexusu s doteky, ale u jiných aplikací problém s dotyky nemám. Prohnal jsem Nexus i testem na multitouch a všech 10 doteků vyhodnotil správně.


Na konci videa je patrné pomalé překreslování dlaždic, které je oproti jiným situacím ještě dost rychlé – bývá to i horší. Snad právě proto posuvník nepoužívám a spokojím se s tlačítky +/-.


http://mujweb.cz/atelier-arz5/locus_touch.mp4


S nočním režimem je to obdobné – rád bych ho použil, ale slideshow mi moc nepomůže. Tak se snažím vystačit si s denním režimem a jasem na minimu.


Google mapy jsem si do Locusu dodal pomocí add-onu Locus Map Tweak. Přiznám se, že v minulosti jsem jej již měl na GB nainstalovaný, ale po přechodu na JB jsem na něj zapomněl, protože jsem byl nucen díky problémům Locus odsunout na vedlejší kolej a používat jiné programy.

photo
1

@Daniel Grym: Ty píšeš o transparentní HW akceleraci GUI, která probíhá automaticky při standardním programovacím modelu GUI. Ta nová aplikace Mapy.cz (dříve to zobrazovalo rastrové mapy, vektorové je to od cca od konce léta 2013) a Mapy Googlu nespíše používají explicitní HW vykreslování, tedy přes OpenGL. A to podporoval Android už dávno (http://developer.android.com/guide/topics/graphics/opengl.html).


Ono by se asi dalo optimalizovat i vykreslování sw, aby to bylo dostatečně rychlé (datové struktury, algoritmy, nativní kód, přednačítání okolí, ...), ale aplikace s HW vykreslováním budou mít v rychlosti a menším zatížení CPU stejně navrch.

photo
1

Je to jak píše @onelook, HW akcelerace je na Androidu již od počátku, tedy od verze A1.0, záleží jen na vývojářích.


A optimalizovat, těžko říci. Podle monitorovacích nástrojů už prostě většinu výpočetního času zabere vykreslování bitmap a obávám se, že více z toho už nevymáčknu. O to je to pak HW akcelerace horší právě při nočním režimu.