summaryrefslogtreecommitdiff
path: root/misc/openlayers/tests/manual/vector-features-performance.html
diff options
context:
space:
mode:
Diffstat (limited to 'misc/openlayers/tests/manual/vector-features-performance.html')
-rw-r--r--misc/openlayers/tests/manual/vector-features-performance.html149
1 files changed, 149 insertions, 0 deletions
diff --git a/misc/openlayers/tests/manual/vector-features-performance.html b/misc/openlayers/tests/manual/vector-features-performance.html
new file mode 100644
index 0000000..7990379
--- /dev/null
+++ b/misc/openlayers/tests/manual/vector-features-performance.html
@@ -0,0 +1,149 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>Vector Features Performance Test</title>
+ <style type="text/css">
+ body {
+ font-size: 0.8em;
+ }
+ p {
+ padding-top: 1em;
+ }
+ #map {
+ width: 512px;
+ height: 512px;
+ border: 1px solid black;
+ }
+ </style>
+
+ <script src="../../lib/Firebug/firebug.js"></script>
+ <script src="../../lib/OpenLayers.js"></script>
+ <script type="text/javascript">
+ var map, vectorLayer, drawFeature, features
+
+ var run = 0;
+
+ function nextRun() {
+ window.setTimeout(function() {
+ if (run < 5) {
+ vectorLayer.removeFeatures(features);
+ }
+ }, 900);
+
+ window.setTimeout(function(){
+ run++;
+
+ switch(run) {
+ case 1:
+ console.log("First run - feature bboxes will be cached");
+ map.setCenter(new OpenLayers.LonLat(-22.5, -22.5), 3);
+ vectorTestNew()
+ break;
+ case 2:
+ console.log("Test with all features inside extent");
+ vectorTestOld();
+ break;
+ case 3:
+ vectorTestNew();
+ break;
+ case 4:
+ console.log("Test with some features outside extent");
+ map.setCenter(new OpenLayers.LonLat(-22.5, -22.5), 5);
+ vectorTestOld();
+ break;
+ case 5:
+ vectorTestNew();
+ break;
+ }
+ }, 1000);
+ }
+
+ function vectorTestOld(){
+ vectorLayer.renderer.drawFeature = function(feature, style) {
+ if(style == null) {
+ style = feature.style;
+ }
+ if (feature.geometry) {
+ this.drawGeometry(feature.geometry, style, feature.id);
+ }
+ };
+
+ console.time("addFeaturesOld");
+ vectorLayer.addFeatures(features);
+ console.timeEnd("addFeaturesOld");
+ }
+
+ function vectorTestNew() {
+ vectorLayer.renderer.drawFeature = OpenLayers.Renderer[vectorLayer.renderer.CLASS_NAME.split(".")[2]].prototype.drawFeature;
+
+ console.time("addFeatures");
+ vectorLayer.addFeatures(features);
+ console.timeEnd("addFeatures");
+ }
+
+ function init(){
+ // allow testing of specific renderers via "?renderer=Canvas", etc
+ var renderer = OpenLayers.Util.getParameters(window.location.href).renderer;
+ renderer = (renderer) ? [renderer] : OpenLayers.Layer.Vector.prototype.renderers;
+
+ map = new OpenLayers.Map('map');
+
+ vectorLayer = new OpenLayers.Layer.Vector("Vector Layer", {
+ isBaseLayer: true,
+ renderers: renderer
+ });
+
+ map.addLayers([vectorLayer]);
+ map.addControl(new OpenLayers.Control.MousePosition());
+ map.setCenter(new OpenLayers.LonLat(-22.5, -22.5), 3);
+
+ vectorLayer.events.register("featuresadded", this, nextRun);
+
+ features = new Array(200);
+ var x, y
+ for (var i = 0; i < 200; i++) {
+ x = -Math.random()*45;
+ y = -Math.random()*45;
+ features[i] = new OpenLayers.Feature.Vector(
+ new OpenLayers.Geometry.LinearRing([
+ new OpenLayers.Geometry.Point(
+ -Math.random()*5+x, -Math.random()*5+y),
+ new OpenLayers.Geometry.Point(
+ -Math.random()*5+x, -Math.random()*5+y),
+ new OpenLayers.Geometry.Point(
+ -Math.random()*5+x, -Math.random()*5+y),
+ new OpenLayers.Geometry.Point(
+ -Math.random()*5+x, -Math.random()*5+y),
+ new OpenLayers.Geometry.Point(
+ -Math.random()*5+x, -Math.random()*5+y),
+ new OpenLayers.Geometry.Point(
+ -Math.random()*5+x, -Math.random()*5+y),
+ new OpenLayers.Geometry.Point(
+ -Math.random()*5+x, -Math.random()*5+y),
+ new OpenLayers.Geometry.Point(
+ -Math.random()*5+x, -Math.random()*5+y),
+ new OpenLayers.Geometry.Point(
+ -Math.random()*5+x, -Math.random()*5+y),
+ new OpenLayers.Geometry.Point(
+ -Math.random()*5+x, -Math.random()*5+y)
+ ]));
+
+ }
+
+ nextRun();
+ }
+ </script>
+ </head>
+ <body onload="init()">
+ <h1 id="title">New Rendering - Vector Features Performance Test</h1>
+ <div id="map"></div>
+ <p>
+ This test examines if checking for a feature being inside the visible
+ extent before rendering it has an impact on performance. Open the Firebug
+ console after running this test (hit F12) to see the results.
+ <br/>
+ After the performance test, you can drag around the map to see how the new
+ vector rendering feels where features get rendered only when they are visible
+ inside the map extent.
+ </p>
+ </body>
+</html>