時々、空間検索時間やレンダリング時間を計測して記録を残しておきたい。
ふとした修正で、パフォーマンスにブレーキがかかることがある。そのようなことがないようにするための記録である。
抽出されるレコード ixOsm が多くなる。短い道路、鉄道レコードが多い。
ixOsm=69,344、75,337の時は、座標変換(検索)にも 1,627、1,721mS と時間がかかる。
render tile 10_899_403 ixOsm=6310 陸地:53+検索:151+作図:1010=1214mS render tile 10_900_403 ixOsm=8895 陸地:40+検索:959+作図:220=1219mS render tile 10_901_403 ixOsm=11371 陸地:17+検索:182+作図:359=558mS render tile 10_901_404 ixOsm=69344 陸地:8+検索:1627+作図:1596=3231mS render tile 10_901_405 ixOsm=75337 陸地:81+検索:1721+作図:1414=3216mS readAll: size=3MB time=75mS /storage/36C5-1401/Map4/dat/japan-mid9/451/202.dat readAll: size=3MB time=76mS /storage/36C5-1401/Map4/dat/japan-mid9/451/203.dat render tile 10_902_403 ixOsm=5437 陸地:4+検索:184+作図:245=433mS render tile 10_902_404 ixOsm=14164 陸地:6+検索:333+作図:650=989mS render tile 10_902_405 ixOsm=20104 陸地:79+検索:336+作図:811=1226mS render tile 10_902_406 ixOsm=30118 陸地:100+検索:561+作図:762=1423mS
起動してからしばらくたってからの計測結果を下に示す。陸地ポリゴンは平均30ms以下、 全体は陸地ポリゴンを含む。
検索(座標変換を含む)は陸地を含む経過時間のため、所要時間は約50mSである。 レンダリングが平均的に 0.1秒強であるから、空間検索・座標変換はその半分以下である。
バイナリレコードは実際の描画は起きない範囲も含んでいる。その分も座標変換は行っている。 描画にも空描画という無駄があるが、座標変換にも無駄がある。
全体の平均は 0.2秒以下であり、快適なスクロールが可能である。
render tile 17_116313_51680 ixOsm=599 ixPnt=28070/2097152 検索=77mS 全体=181mS render tile 17_116313_51681 ixOsm=665 ixPnt=28660/2097152 検索=75mS 全体=206mS render tile 17_116313_51682 ixOsm=530 ixPnt=26930/2097152 検索=85mS 全体=194mS render tile 17_116313_51683 ixOsm=723 ixPnt=29648/2097152 検索=82mS 全体=196mS render Lands 17_116314_51682 ixOsm=1 time=29ms render Lands 17_116314_51683 ixOsm=1 time=31ms render tile 17_116314_51682 ixOsm=639 ixPnt=28122/2097152 検索=101mS 全体=215mS render tile 17_116314_51683 ixOsm=558 ixPnt=27358/2097152 検索=78mS 全体=165mS render Lands 17_116312_51679 ixOsm=1 time=23ms render Lands 17_116313_51679 ixOsm=1 time=28ms render tile 17_116312_51679 ixOsm=530 ixPnt=26890/2097152 検索=68mS 全体=140mS render tile 17_116313_51679 ixOsm=543 ixPnt=27114/2097152 検索=73mS 全体=151mS render Lands 17_116315_51682 ixOsm=1 time=22ms render tile 17_116315_51682 ixOsm=618 ixPnt=27486/2097152 検索=71mS 全体=142mS render Lands 17_116313_51678 ixOsm=1 time=37ms render tile 17_116313_51678 ixOsm=466 ixPnt=26088/2097152 検索=98mS 全体=176mS render Lands 17_116313_51677 ixOsm=1 time=29ms render Lands 17_116314_51677 ixOsm=1 time=23ms render Lands 17_116315_51677 ixOsm=1 time=31ms render tile 17_116313_51677 ixOsm=564 ixPnt=27130/2097152 検索=87mS 全体=228mS render tile 17_116314_51677 ixOsm=689 ixPnt=27482/2097152 検索=81mS 全体=232mS render tile 17_116315_51677 ixOsm=710 ixPnt=28026/2097152 検索=103mS 全体=240mS render Lands 17_116314_51676 ixOsm=1 time=20ms render Lands 17_116315_51676 ixOsm=1 time=38ms render tile 17_116314_51676 ixOsm=750 ixPnt=28272/2097152 検索=67mS 全体=163mS render tile 17_116315_51676 ixOsm=717 ixPnt=28404/2097152 検索=90mS 全体=185mS render Lands 17_116315_51675 ixOsm=1 time=21ms render tile 17_116315_51675 ixOsm=555 ixPnt=27654/2097152 検索=66mS 全体=151mS
japan-low3(max 10.1MB, 計20MB)、 japan-mid9(max 12.9MB, 計272MB)、 japan-high10(max 14.5MB 909_403.dat 東京, 計340MB)、 japan-high13(max 5.7MB, 計3.17GB)
バイナリレコードファイル読み込みバッファはサイズ毎に複数用意している。 サイズの単位は2バイトである。20MB 2個、14MB 8個、8MB 16個、4MB 32個、1MB 64個
サイズの小さい方から、ファイルサイズ以上のバッファを探して割り当てる。
最初に、割り当てられたときにメモリが確保される。14MBを超えるファイルが1個だけであれば、 実際には、2個(面)使われることはない。 例えば、14MBバッファは8面なので、全部使用中のときは、最近利用していないもの(LRU)を廃棄して、 そこに読込む。そのため、実際の使われ方を考慮して、バッファの個数(面数)を決める必要がある。 従って、Size、Num 配列の値は、今後、適宜、修正する。
final static int[] Size = { 512*1024, 2*1024*1024, 4*1024*1024, 7*1024*1024, 10*1024*1024 }; final static int[] Num = { 64, 32, 16, 8, 2 };
起動直後は動作がやや緩慢である。下は zoom 16(高ズーム)の結果である。
まず、陸地ポリゴンファイル lands-high6/56/25.dat time=117mS、 OSMバイナリレコードファイルjapan-high10/909/403.dat time=263mS、 japan-high13/7276/3225.dat time=159mS の読み込みが起こる。
現在は4スレッドで並列にレンダリングを行っている。最初はファイルの読み込みがあるため、 陸地ポリゴンの空間検索とレンダリングを合わせた時間は 382ms~713msである。 検索時間は陸地ポリゴン時間を含むラップタイムである。平均的には 0.7秒強である。 その後、4スレッドともレンダリング時間は 1.6秒程度であり、全体の時間は3秒強となっている。
その後はファイル読み込みがないため、平均的に 1.3秒程度となっている。
【起動直後:皇居】 readAll: size=2MB time=115mS /storage/36C5-1401/Map4/dat/lands-high6/56/25.dat Block.get: /storage/36C5-1401/Map4/dat/lands-high6/56/25.dat time=117mS render Lands 16_58208_25807 ixOsm=1 time=382ms readAll: size=14MB time=261mS /storage/36C5-1401/Map4/dat/japan-high10/909/403.dat Block.get: /storage/36C5-1401/Map4/dat/japan-high10/909/403.dat time=263mS render Lands 16_58208_25805 ixOsm=1 time=682ms render Lands 16_58208_25804 ixOsm=1 time=713ms render Lands 16_58208_25806 ixOsm=1 time=679ms readAll: size=4MB time=158mS /storage/36C5-1401/Map4/dat/japan-high13/7276/3225.dat Block.get: /storage/36C5-1401/Map4/dat/japan-high13/7276/3225.dat time=159mS render tile 16_58208_25805 ixOsm=5445 検索=1442mS 全体=3072mS render tile 16_58208_25806 ixOsm=5295 検索=1464mS 全体=3073mS render tile 16_58208_25804 ixOsm=6156 検索=1490mS 全体=3132mS render tile 16_58208_25807 ixOsm=6835 検索=1464mS 全体=3120mS render Lands 16_58209_25804 ixOsm=1 time=33ms render Lands 16_58209_25805 ixOsm=1 time=33ms render Lands 16_58209_25806 ixOsm=1 time=33ms render Lands 16_58209_25807 ixOsm=1 time=34ms render tile 16_58209_25806 ixOsm=5517 検索=445mS 全体=1016mS render tile 16_58209_25805 ixOsm=6214 検索=523mS 全体=1180mS render Lands 16_58210_25804 ixOsm=1 time=32ms render tile 16_58209_25804 ixOsm=7515 検索=573mS 全体=1368mS render Lands 16_58210_25805 ixOsm=1 time=34ms render tile 16_58209_25807 ixOsm=7268 検索=597mS 全体=1342mS render Lands 16_58210_25806 ixOsm=1 time=30ms render Lands 16_58210_25807 ixOsm=1 time=25ms render tile 16_58210_25804 ixOsm=9965 検索=683mS 全体=1456mS render tile 16_58210_25805 ixOsm=8119 検索=605mS 全体=1352mS render tile 16_58210_25806 ixOsm=6855 検索=484mS 全体=1123mS render tile 16_58210_25807 ixOsm=8182 検索=527mS 全体=1302mS 116MB
この後、神奈川県の郊外にジャンプしてみた。二つのファイルの読み込みが起きた。
readAll: size=14MB time=261mS /storage/36C5-1401/Map4/dat/japan-high10/909/403.dat readAll: size=4MB time=158mS /storage/36C5-1401/Map4/dat/japan-high13/7276/3225.dat
陸地ポリゴンの空間検索とレンダリングは最初の4タイルは平均0.7秒弱、その後の8タイルは平均 30ms 程度で、 空間検索時間は 0.5秒弱、レンダリング時間は 0.5~0.8秒程度となった。
この計測結果では、空間検索時間(約0.5秒)が思ったより大きい。
上記の検索時間は抽出されたレコードに対する座標変換時間やタグのパース時間が含まれている。
抽出されるレコード数が小さければ、検索時間も小さくなり、レンダリング時間も小さくなる。 都心や住宅地はレンダリングレコードが多いため、時間がかかる。 建物が殆どないタイルでは下記のように、高速である。
render tile ixOsm=1652 検索=98mS 全体=285mS render tile ixOsm=2292 検索=115mS 全体=313mS render tile ixOsm=116 検索=43mS 全体=134mS render tile ixOsm=116 検索=38mS 全体=114mS render tile ixOsm=146 検索=43mS 全体=139mS render tile ixOsm=147 検索=39mS 全体=125mS
パソコン側で極座標を世界XY平面座標に変換しておけば、Android機での座標変換時間は短縮できる。 しかし、極座標の方が分かりやすいため、その方法は採らない。世界XY平面座標の場合も、 zoom やタイルに依存する座標変換は必要であり、座標変換はなくせない。