Skip to content

Commit f03c361

Browse files
authored
Merge pull request #142 from paulmach/wkt-unmarshalling
encoding/wkt: improve unmarshalling performance
2 parents 3198547 + 81828b8 commit f03c361

File tree

4 files changed

+825
-276
lines changed

4 files changed

+825
-276
lines changed

encoding/wkt/benchmarks_test.go

+115
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
package wkt
2+
3+
import (
4+
"encoding/json"
5+
"io/ioutil"
6+
"testing"
7+
8+
"github.com/paulmach/orb"
9+
)
10+
11+
func BenchmarkUnmarshalPoint(b *testing.B) {
12+
var mp orb.MultiPolygon
13+
loadJSON(b, "testdata/polygon.json", &mp)
14+
15+
text := MarshalString(orb.Point{-81.60644531, 41.51377887})
16+
17+
b.ReportAllocs()
18+
b.ResetTimer()
19+
for i := 0; i < b.N; i++ {
20+
_, err := Unmarshal(text)
21+
if err != nil {
22+
b.Fatalf("unexpected error: %v", err)
23+
}
24+
}
25+
}
26+
27+
func BenchmarkUnmarshalLineString_small(b *testing.B) {
28+
ls := orb.LineString{{1, 2}, {3, 4}}
29+
30+
text := MarshalString(ls)
31+
32+
b.ReportAllocs()
33+
b.ResetTimer()
34+
for i := 0; i < b.N; i++ {
35+
_, err := Unmarshal(text)
36+
if err != nil {
37+
b.Fatalf("unexpected error: %v", err)
38+
}
39+
}
40+
}
41+
42+
func BenchmarkUnmarshalLineString(b *testing.B) {
43+
var mp orb.MultiPolygon
44+
loadJSON(b, "testdata/polygon.json", &mp)
45+
46+
text := MarshalString(orb.LineString(mp[0][0]))
47+
48+
b.ReportAllocs()
49+
b.ResetTimer()
50+
for i := 0; i < b.N; i++ {
51+
_, err := Unmarshal(text)
52+
if err != nil {
53+
b.Fatalf("unexpected error: %v", err)
54+
}
55+
}
56+
}
57+
58+
func BenchmarkUnmarshalPolygon(b *testing.B) {
59+
var mp orb.MultiPolygon
60+
loadJSON(b, "testdata/polygon.json", &mp)
61+
62+
text := MarshalString(mp[0])
63+
64+
b.ReportAllocs()
65+
b.ResetTimer()
66+
for i := 0; i < b.N; i++ {
67+
_, err := Unmarshal(text)
68+
if err != nil {
69+
b.Fatalf("unexpected error: %v", err)
70+
}
71+
}
72+
}
73+
74+
func BenchmarkUnmarshalMultiPolygon_small(b *testing.B) {
75+
mp := orb.MultiPolygon{{{{1, 2}, {3, 4}}}, {{{5, 6}, {7, 8}}, {{1, 2}, {5, 4}}}}
76+
77+
text := MarshalString(mp)
78+
79+
b.ReportAllocs()
80+
b.ResetTimer()
81+
for i := 0; i < b.N; i++ {
82+
_, err := Unmarshal(text)
83+
if err != nil {
84+
b.Fatalf("unexpected error: %v", err)
85+
}
86+
}
87+
}
88+
89+
func BenchmarkUnmarshalMultiPolygon(b *testing.B) {
90+
var mp orb.MultiPolygon
91+
loadJSON(b, "testdata/polygon.json", &mp)
92+
93+
text := MarshalString(mp)
94+
95+
b.ReportAllocs()
96+
b.ResetTimer()
97+
for i := 0; i < b.N; i++ {
98+
_, err := Unmarshal(text)
99+
if err != nil {
100+
b.Fatalf("unexpected error: %v", err)
101+
}
102+
}
103+
}
104+
105+
func loadJSON(tb testing.TB, filename string, obj interface{}) {
106+
data, err := ioutil.ReadFile(filename)
107+
if err != nil {
108+
tb.Fatalf("failed to load mvt file: %v", err)
109+
}
110+
111+
err = json.Unmarshal(data, obj)
112+
if err != nil {
113+
tb.Fatalf("unmarshal error: %v", err)
114+
}
115+
}

encoding/wkt/testdata/polygon.json

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[[[[-81.60644531,41.51377887],[-81.60639143,41.51373958],[-81.60644531,41.51369176],[-81.60644531,41.51377887]]],[[[-81.60644531,41.51367126],[-81.6062813,41.51356772],[-81.60629702,41.51355379],[-81.60626037,41.51353058],[-81.60628858,41.51350556],[-81.60598468,41.51331372],[-81.60566371,41.51359859],[-81.60597318,41.51379406],[-81.6059553,41.51381001],[-81.60601091,41.51384512],[-81.60602843,41.51382951],[-81.60618132,41.51392611],[-81.60618635,41.5139216],[-81.60622929,41.51394851],[-81.60623998,41.5139405],[-81.60629505,41.51397366],[-81.60630574,41.51396357],[-81.60644531,41.51405409],[-81.60644531,41.51425983],[-81.60639305,41.5143673],[-81.60644531,41.51439781],[-81.60644531,41.51475154],[-81.60588452,41.51475938],[-81.60587113,41.51480956],[-81.60586314,41.51486378],[-81.60586844,41.51493212],[-81.60588452,41.51500436],[-81.60591668,41.5150727],[-81.60595961,41.51513492],[-81.60601872,41.51519317],[-81.60608574,41.51524342],[-81.60617422,41.51528546],[-81.6062654,41.51531768],[-81.60635658,41.51533981],[-81.60643168,41.51534781],[-81.60644531,41.51534813],[-81.60644531,41.51584208],[-81.60601827,41.51584402],[-81.60601585,41.51523467],[-81.60549563,41.51523992],[-81.60551064,41.51584617],[-81.60477168,41.51585316],[-81.60474204,41.51443308],[-81.60470063,41.51230842],[-81.6047009,41.51210689],[-81.604738,41.51208018],[-81.60480645,41.51207272],[-81.60506247,41.51219568],[-81.605367,41.5123212],[-81.60554531,41.51237737],[-81.60552124,41.51245479],[-81.60556409,41.51251197],[-81.60570629,41.51253612],[-81.60577869,41.51250202],[-81.6058431,41.51249186],[-81.60589134,41.51245681],[-81.60623064,41.51248789],[-81.60644531,41.51248933],[-81.60644531,41.51367126]],[[-81.6056876,41.5138203],[-81.60559005,41.51375969],[-81.60557478,41.51377348],[-81.6055401,41.51375189],[-81.60555699,41.51373662],[-81.60545719,41.5136746],[-81.6053793,41.51374489],[-81.6053961,41.51375532],[-81.60537849,41.51377119],[-81.60536367,41.51378458],[-81.6053493,41.51377557],[-81.60527465,41.51384317],[-81.60537149,41.5139033],[-81.60538649,41.51388978],[-81.60542242,41.51391212],[-81.60540652,41.51392638],[-81.60550345,41.51398658],[-81.60557801,41.51391918],[-81.60556202,41.51390929],[-81.60557927,41.51389368],[-81.60559661,41.51387801],[-81.6056126,41.51388797],[-81.6056876,41.5138203]],[[-81.60579783,41.51453089],[-81.6057133,41.51447506],[-81.60569533,41.5144908],[-81.60564817,41.51446006],[-81.60566793,41.51444358],[-81.6055852,41.51439279],[-81.60551145,41.51445959],[-81.60553759,41.51447358],[-81.60549402,41.51451077],[-81.60546922,41.51449517],[-81.60539341,41.51456048],[-81.60548063,41.51461618],[-81.60549528,41.5146032],[-81.60554504,41.51463131],[-81.60552618,41.51464631],[-81.60561134,41.51469898],[-81.60561538,41.51469548],[-81.60568707,41.51463131],[-81.60566901,41.51461968],[-81.60570916,41.51458456],[-81.60572668,41.51459559],[-81.60579783,41.51453089]],[[-81.60521015,41.51392402],[-81.60511349,41.51386422],[-81.60509939,41.51387626],[-81.60506462,41.51385521],[-81.6050807,41.51384209],[-81.60497937,41.51378041],[-81.60490158,41.51384707],[-81.60491972,41.51385871],[-81.60488891,41.51388581],[-81.60487355,41.5138768],[-81.60479702,41.51394662],[-81.60489287,41.51400629],[-81.60490966,41.51399378],[-81.60494452,41.51401577],[-81.60492637,41.51402936],[-81.60502429,41.5140897],[-81.60509939,41.51402142],[-81.6050834,41.51401126],[-81.60511762,41.51398321],[-81.60513164,41.51399277],[-81.60521015,41.51392402]],[[-81.6054783,41.51421017],[-81.6053864,41.51415387],[-81.60537643,41.51416449],[-81.60533484,41.51413988],[-81.60534687,41.51412931],[-81.60525569,41.51407261],[-81.6051779,41.51414189],[-81.60519937,41.51415636],[-81.60516784,41.51418252],[-81.60514439,41.51416947],[-81.60506992,41.51424131],[-81.60515984,41.51429896],[-81.60517116,41.514289],[-81.60521078,41.51431308],[-81.60519874,41.51432311],[-81.60529064,41.51438041],[-81.60537104,41.5143071],[-81.60535217,41.514296],[-81.60537769,41.51427091],[-81.60539853,41.51428201],[-81.6054783,41.51421017]],[[-81.6055534,41.51291369],[-81.60533879,41.51277909],[-81.6052503,41.51285846],[-81.60527312,41.51287447],[-81.60523692,41.51290871],[-81.60512562,41.51283936],[-81.60497937,41.51297396],[-81.60509067,41.51304432],[-81.60505178,41.51307936],[-81.60502097,41.51306329],[-81.6048775,41.51319688],[-81.60509337,41.51333047],[-81.60523961,41.51320091],[-81.6052168,41.5131808],[-81.60525704,41.51314569],[-81.60536969,41.51321302],[-81.60551055,41.51308239],[-81.6054032,41.51301506],[-81.60544075,41.512979],[-81.60546761,41.512994],[-81.6055534,41.51291369]],[[-81.60622058,41.51403689],[-81.60612473,41.51397319],[-81.60610865,41.51398819],[-81.6060711,41.51396761],[-81.6060878,41.51395308],[-81.60599402,41.51389429],[-81.60592018,41.5139586],[-81.60593293,41.51396862],[-81.60589871,41.51399727],[-81.60588604,41.5139892],[-81.60580825,41.514057],[-81.60590679,41.51411828],[-81.60592153,41.5141057],[-81.60595638,41.51412528],[-81.60593904,41.5141394],[-81.60603552,41.51420008],[-81.60611197,41.51413227],[-81.60609589,41.51412232],[-81.60613083,41.51409366],[-81.60614485,41.51410221],[-81.60622058,41.51403689]],[[-81.60540868,41.51522539],[-81.6053979,41.51474371],[-81.60496778,41.51474909],[-81.60496455,41.51459936],[-81.6047998,41.51460138],[-81.60480788,41.51496219],[-81.60521123,41.51495707],[-81.60521401,41.515084],[-81.60486062,41.51508837],[-81.60487193,41.51559662],[-81.60530133,41.51559117],[-81.60529819,41.51545416],[-81.60500345,41.51545786],[-81.60500219,41.51540351],[-81.60507145,41.5154027],[-81.60506867,41.51528061],[-81.60499258,41.51528156],[-81.6049915,41.51523057],[-81.60540868,41.51522539]],[[-81.60527995,41.51574897],[-81.60527555,41.51565258],[-81.60492709,41.51566139],[-81.6049314,41.51575778],[-81.60527995,41.51574897]],[[-81.60543671,41.51256827],[-81.6052194,41.51243172],[-81.60502905,41.51259437],[-81.60524905,41.51273496],[-81.60543671,41.51256827]],[[-81.60583708,41.51515396],[-81.60579962,41.51497456],[-81.6057053,41.51498566],[-81.60574294,41.51516506],[-81.60583708,41.51515396]],[[-81.60598117,41.51270879],[-81.60575588,41.51256827],[-81.60557621,41.51273597],[-81.60580007,41.51287447],[-81.60598117,41.51270879]],[[-81.60599061,41.51309046],[-81.6057733,41.51295189],[-81.60558421,41.51311959],[-81.60580421,41.51325722],[-81.60599061,41.51309046]],[[-81.60639018,41.51283229],[-81.60616281,41.51269157],[-81.60597309,41.51285927],[-81.60620512,41.513001],[-81.60639018,41.51283229]]]]

0 commit comments

Comments
 (0)