1 | <html> |
---|
2 | <head profile="http://www.w3.org/2002/12/namespace"> |
---|
3 | <link rel="stylesheet" type="text/css" href="../../../../dijit/themes/dijit.css"> |
---|
4 | <link rel="stylesheet" type="text/css" href="../../../../dijit/themes/tundra/tundra.css"> |
---|
5 | <title>Dojo OpenLayers Benchmarks</title> |
---|
6 | <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> |
---|
7 | |
---|
8 | <!-- hosted version --> |
---|
9 | <script type="text/javascript" src="http://openlayers.org/api/2/OpenLayers.js"></script> |
---|
10 | |
---|
11 | <script type="text/javascript"> |
---|
12 | var djConfig = { |
---|
13 | parseOnLoad : true |
---|
14 | }; |
---|
15 | </script> |
---|
16 | |
---|
17 | <script type="text/javascript" src="../../../../dojo/dojo.js"></script> |
---|
18 | |
---|
19 | <script type="text/javascript"> |
---|
20 | |
---|
21 | require(["dojo/ready", |
---|
22 | "dojo/dom", |
---|
23 | "dojo/_base/array", |
---|
24 | "dojo/_base/html", |
---|
25 | "dojox/geo/openlayers/Map", |
---|
26 | "dojox/geo/openlayers/Layer", |
---|
27 | "dojox/geo/openlayers/GfxLayer", |
---|
28 | "dojox/geo/openlayers/Point", |
---|
29 | "dojox/geo/openlayers/LineString", |
---|
30 | "dojox/geo/openlayers/GeometryFeature", |
---|
31 | "dojo/parser"], |
---|
32 | function(ready, dom, arr, html, Map, Layer, GfxLayer, Point, LineString, GeometryFeature, parser) { |
---|
33 | |
---|
34 | var map; |
---|
35 | // var messageDiv; |
---|
36 | var Cookies = { |
---|
37 | init : function(){ |
---|
38 | var allCookies = document.cookie.split('; '); |
---|
39 | for ( var i = 0; i < allCookies.length; i++) { |
---|
40 | var cookiePair = allCookies[i].split('='); |
---|
41 | this[cookiePair[0]] = cookiePair[1]; |
---|
42 | } |
---|
43 | }, |
---|
44 | |
---|
45 | create : function(name, value, days){ |
---|
46 | var expires = ""; |
---|
47 | if (days) { |
---|
48 | var date = new Date(); |
---|
49 | date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); |
---|
50 | expires = "; expires=" + date.toGMTString(); |
---|
51 | } |
---|
52 | document.cookie = name + "=" + value + expires + "; path=/"; |
---|
53 | this[name] = value; |
---|
54 | }, |
---|
55 | |
---|
56 | erase : function(name){ |
---|
57 | this.create(name, '', -1); |
---|
58 | this[name] = undefined; |
---|
59 | } |
---|
60 | }; |
---|
61 | |
---|
62 | Cookies.init(); |
---|
63 | var numLoad = 4; |
---|
64 | var numLoadString = "numLoad"; |
---|
65 | var cumulativeTimeString = "cumulativeTime"; |
---|
66 | |
---|
67 | ready(function(){ |
---|
68 | var options = { |
---|
69 | baseLayerName : "TheLayer", |
---|
70 | baseLayerType : dojox.geo.openlayers.BaseLayerType.OSM, |
---|
71 | touchHandler : true |
---|
72 | }; |
---|
73 | |
---|
74 | if (!Cookies[numLoadString]) |
---|
75 | Cookies.create(numLoadString, numLoad); |
---|
76 | if (!Cookies[cumulativeTimeString]) |
---|
77 | Cookies.create(cumulativeTimeString, "0"); |
---|
78 | var div = dom.byId("map"); |
---|
79 | map = new Map(div, options); |
---|
80 | var la = map.getLayer("name", "TheLayer"); |
---|
81 | arr.forEach(la, function(l){ |
---|
82 | var ol = l.olLayer; |
---|
83 | ol.events.register("loadstart", this, loadStart); |
---|
84 | ol.events.register("tileloaded", this, tileLoaded); |
---|
85 | ol.events.register("loadend", this, loadEnd); |
---|
86 | }, this); |
---|
87 | map.fitTo([ -160, 70, 160, -70 ]); |
---|
88 | |
---|
89 | }); |
---|
90 | |
---|
91 | var startDate = null; |
---|
92 | var numTiles = undefined; |
---|
93 | |
---|
94 | function loadStart(event){ |
---|
95 | startDate = new Date(); |
---|
96 | numTiles = event.object.numLoadingTiles; |
---|
97 | } |
---|
98 | |
---|
99 | function tileLoaded(event){ |
---|
100 | if (!startDate) |
---|
101 | startDate = new Date(); |
---|
102 | if (!numTiles) |
---|
103 | numTiles = event.object.numLoadingTiles; |
---|
104 | } |
---|
105 | |
---|
106 | function loadEnd(event){ |
---|
107 | var endDate = new Date(); |
---|
108 | var time = endDate.getTime() - startDate.getTime(); |
---|
109 | // console.log("loading " + numTiles + " tiles took " + time + " ms"); |
---|
110 | if (Cookies[cumulativeTimeString]) { |
---|
111 | var ct = Cookies[cumulativeTimeString]; |
---|
112 | var ict = parseInt(ct) + time; |
---|
113 | Cookies.create(cumulativeTimeString, ict.toString()); |
---|
114 | } |
---|
115 | if (Cookies[numLoadString]) { |
---|
116 | var nl = Cookies[numLoadString]; |
---|
117 | var i = parseInt(nl) - 1; |
---|
118 | Cookies.create(numLoadString, i.toString()); |
---|
119 | if (i > 0) { |
---|
120 | window.location.reload(); |
---|
121 | } else { |
---|
122 | ct = Cookies[cumulativeTimeString]; |
---|
123 | log(numLoad + " load(s) took " + ct + " ms"); |
---|
124 | log(ct / numLoad + " ms for each load"); |
---|
125 | Cookies.erase(numLoadString); |
---|
126 | Cookies.erase(cumulativeTimeString); |
---|
127 | benchPoints(); |
---|
128 | benchLines(); |
---|
129 | showLayers(); |
---|
130 | } |
---|
131 | } |
---|
132 | } |
---|
133 | |
---|
134 | var pointLayer = null; |
---|
135 | var numPoints = dojo.isIE ? 10 : 1000; |
---|
136 | function benchPoints(){ |
---|
137 | var layer = new GfxLayer(); |
---|
138 | map.addLayer(layer); |
---|
139 | var startDate = new Date(); |
---|
140 | for ( var i = 0; i < numPoints; i++) { |
---|
141 | var x = Math.random() * 360 - 180; |
---|
142 | var y = Math.random() * 180 - 90; |
---|
143 | var g = new Point({ |
---|
144 | x : x, |
---|
145 | y : y |
---|
146 | }); |
---|
147 | var pf = new GeometryFeature(g).setStroke([ 0, 0, 0 ]).setShapeProperties({ |
---|
148 | r : 10 |
---|
149 | }); |
---|
150 | layer.addFeature(pf); |
---|
151 | } |
---|
152 | var endDate = new Date(); |
---|
153 | var time = endDate.getTime() - startDate.getTime(); |
---|
154 | log("creating " + numPoints + " points took " + time + " ms"); |
---|
155 | |
---|
156 | startDate = new Date(); |
---|
157 | layer.redraw(); |
---|
158 | endDate = new Date(); |
---|
159 | time = endDate.getTime() - startDate.getTime(); |
---|
160 | log("redrawing " + numPoints + " points took " + time + " ms"); |
---|
161 | |
---|
162 | var olm = map.getOLMap(); |
---|
163 | var center = olm.getCenter(); |
---|
164 | var zoom = olm.getZoom(); |
---|
165 | startDate = new Date(); |
---|
166 | olm.setCenter(center, zoom + 1); |
---|
167 | endDate = new Date(); |
---|
168 | time = endDate.getTime() - startDate.getTime(); |
---|
169 | log("zooming " + numPoints + " points took " + time + " ms"); |
---|
170 | olm.setCenter(center, zoom); |
---|
171 | pointLayer = layer; |
---|
172 | map.removeLayer(layer); |
---|
173 | } |
---|
174 | |
---|
175 | var lineLayer = null; |
---|
176 | var numLines = 100; |
---|
177 | var numPointsPerLine = 20; |
---|
178 | function benchLines(){ |
---|
179 | var layer = new GfxLayer(); |
---|
180 | map.addLayer(layer); |
---|
181 | var startDate = new Date(); |
---|
182 | |
---|
183 | for ( var i = 0; i < numLines; i++) { |
---|
184 | var x = Math.random() * 360 - 180; |
---|
185 | var y = Math.random() * 180 - 90; |
---|
186 | var start = { |
---|
187 | x : x, |
---|
188 | y : y |
---|
189 | }; |
---|
190 | var a = []; |
---|
191 | a.push(start); |
---|
192 | for ( var j = 0; j < numPointsPerLine; j++) { |
---|
193 | var dx = Math.random() * 3 - 1.5; |
---|
194 | var dy = Math.random() * 3 - 1.5; |
---|
195 | if(x + dx > -180 && x + dx < 180 && y + dy > -90 && y + dy < 90) { |
---|
196 | x = x + dx; |
---|
197 | y = y + dy; |
---|
198 | var p = {x:x, y:y}; |
---|
199 | a.push(p); |
---|
200 | } |
---|
201 | } |
---|
202 | var g = new LineString(a); |
---|
203 | var lf = new GeometryFeature(g).setStroke([ 0, 0, 0 ]); |
---|
204 | layer.addFeature(lf); |
---|
205 | } |
---|
206 | |
---|
207 | var endDate = new Date(); |
---|
208 | var time = endDate.getTime() - startDate.getTime(); |
---|
209 | log("creating " + numLines + " lines took " + time + " ms"); |
---|
210 | |
---|
211 | startDate = new Date(); |
---|
212 | layer.redraw(); |
---|
213 | endDate = new Date(); |
---|
214 | time = endDate.getTime() - startDate.getTime(); |
---|
215 | log("redrawing " + numLines + " lines took " + time + " ms"); |
---|
216 | |
---|
217 | var olm = map.getOLMap(); |
---|
218 | var center = olm.getCenter(); |
---|
219 | var zoom = olm.getZoom(); |
---|
220 | startDate = new Date(); |
---|
221 | olm.setCenter(center, zoom + 1); |
---|
222 | endDate = new Date(); |
---|
223 | time = endDate.getTime() - startDate.getTime(); |
---|
224 | log("zooming " + numLines + " lines took " + time + " ms"); |
---|
225 | olm.setCenter(center, zoom); |
---|
226 | lineLayer = layer; |
---|
227 | map.removeLayer(layer); |
---|
228 | } |
---|
229 | |
---|
230 | function showLayers() { |
---|
231 | map.addLayer(pointLayer); |
---|
232 | map.addLayer(lineLayer); |
---|
233 | } |
---|
234 | |
---|
235 | var msgDiv = null; |
---|
236 | function log(msg) { |
---|
237 | console.log(msg); |
---|
238 | if(msgDiv == null) { |
---|
239 | var layer = new Layer(); |
---|
240 | map.addLayer(layer); |
---|
241 | |
---|
242 | var s = layer.olLayer.map.getSize(); |
---|
243 | |
---|
244 | html.style(layer.olLayer.div, { |
---|
245 | width : s.w.toFixed(), |
---|
246 | left : "0px", |
---|
247 | top : "0px", |
---|
248 | height : s.h.toFixed() |
---|
249 | }); |
---|
250 | msgDiv = dojo.create("div", { |
---|
251 | style : { |
---|
252 | width : "100%", |
---|
253 | left : "0px", |
---|
254 | top : "0px", |
---|
255 | height : "100%", |
---|
256 | position : "absolute" |
---|
257 | } |
---|
258 | }, layer.olLayer.div); |
---|
259 | } |
---|
260 | var d = dojo.create("div", { |
---|
261 | }, msgDiv); |
---|
262 | d.textContent = msg; |
---|
263 | d.innerText = msg; |
---|
264 | } |
---|
265 | }); |
---|
266 | |
---|
267 | </script> |
---|
268 | |
---|
269 | <style type="text/css"> |
---|
270 | .olLayerGoogleCopyright { |
---|
271 | visibility: hidden; |
---|
272 | } |
---|
273 | </style> |
---|
274 | |
---|
275 | </head> |
---|
276 | <body class="tundra"> |
---|
277 | </head> |
---|
278 | |
---|
279 | <div id="map" style="background-color: #b5d0d0; width: 100%; height: 100%;"></div> |
---|
280 | |
---|
281 | </body> |
---|
282 | </html> |
---|