From 395793b921a4e50d46a1f8f9fbfe9ed283d0fd99 Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Thu, 28 Apr 2016 16:29:29 +0200 Subject: [PATCH] Additional tests and code comments --- externs/olx.js | 4 +- src/ol/render/canvas/replay.js | 4 +- src/ol/source/vectortile.js | 2 +- test.html | 33 ---- test/spec/ol/renderer/canvas/replay.test.js | 40 ++--- .../layer/expected/vector-canvas-stroke.png | Bin 0 -> 504 bytes test_rendering/spec/ol/layer/vector.test.js | 150 ++++++++++++++++-- 7 files changed, 164 insertions(+), 69 deletions(-) delete mode 100644 test.html create mode 100644 test_rendering/spec/ol/layer/expected/vector-canvas-stroke.png diff --git a/externs/olx.js b/externs/olx.js index 5d3c1fea97..d9ed973096 100644 --- a/externs/olx.js +++ b/externs/olx.js @@ -4418,7 +4418,7 @@ olx.source.VectorTileOptions.prototype.logo; /** * This source may have overlapping geometries. Default is `true`. Setting this - * to `false` (e.g. for sources with polygons that represent adminstrative + * to `false` (e.g. for sources with polygons that represent administrative * boundaries or TopoJSON sources) allows the renderer to optimise fill and * stroke operations. * @type {boolean|undefined} @@ -5864,7 +5864,7 @@ olx.source.VectorOptions.prototype.logo; /** * This source may have overlapping geometries. Default is `true`. Setting this - * to `false` (e.g. for sources with polygons that represent adminstrative + * to `false` (e.g. for sources with polygons that represent administrative * boundaries or TopoJSON sources) allows the renderer to optimise fill and * stroke operations. * @type {boolean|undefined} diff --git a/src/ol/render/canvas/replay.js b/src/ol/render/canvas/replay.js index 92b4a758b5..1d859128ed 100644 --- a/src/ol/render/canvas/replay.js +++ b/src/ol/render/canvas/replay.js @@ -266,6 +266,8 @@ ol.render.canvas.Replay.prototype.replay_ = function( var prevX, prevY, roundX, roundY; var pendingFill = 0; var pendingStroke = 0; + // When the batch size gets too big, performance decreases. 200 is a good + // balance between batch size and number of fill/stroke instructions. var batchSize = this.instructions != instructions || this.overlaps ? 0 : 200; while (i < ii) { @@ -1267,8 +1269,6 @@ ol.render.canvas.PolygonReplay.prototype.drawFlatCoordinatess_ = function(flatCo closePathInstruction); offset = end; } - // FIXME is it quicker to fill and stroke each polygon individually, - // FIXME or all polygons together? var fillInstruction = [ol.render.canvas.Instruction.FILL]; this.hitDetectionInstructions.push(fillInstruction); if (state.fillStyle !== undefined) { diff --git a/src/ol/source/vectortile.js b/src/ol/source/vectortile.js index b9e003ddb6..a8f0b42590 100644 --- a/src/ol/source/vectortile.js +++ b/src/ol/source/vectortile.js @@ -56,7 +56,7 @@ ol.source.VectorTile = function(options) { * @private * @type {boolean} */ - this.overlaps_ = options.overlaps || true; + this.overlaps_ = options.overlaps == undefined ? true : options.overlaps; /** * @protected diff --git a/test.html b/test.html deleted file mode 100644 index ab049dd51a..0000000000 --- a/test.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - OpenLayers 3 example - - - -

My Map

-
- - - - diff --git a/test/spec/ol/renderer/canvas/replay.test.js b/test/spec/ol/renderer/canvas/replay.test.js index 496e8de250..1585fed1d5 100644 --- a/test/spec/ol/renderer/canvas/replay.test.js +++ b/test/spec/ol/renderer/canvas/replay.test.js @@ -1,5 +1,17 @@ goog.provide('ol.test.renderer.canvas.Replay'); +goog.require('ol.transform'); +goog.require('ol.Feature'); +goog.require('ol.geom.Polygon'); +goog.require('ol.render.canvas.LineStringReplay'); +goog.require('ol.render.canvas.PolygonReplay'); +goog.require('ol.render.canvas.Replay'); +goog.require('ol.render.canvas.ReplayGroup'); +goog.require('ol.renderer.vector'); +goog.require('ol.style.Fill'); +goog.require('ol.style.Stroke'); +goog.require('ol.style.Style'); + describe('ol.render.canvas.ReplayGroup', function() { describe('#replay', function() { @@ -8,7 +20,7 @@ describe('ol.render.canvas.ReplayGroup', function() { var feature1, feature2, feature3, style1, style2, transform; beforeEach(function() { - transform = goog.vec.Mat4.createNumber(); + transform = ol.transform.create(); replay = new ol.render.canvas.ReplayGroup(1, [-180, -90, 180, 90], 1, false); feature1 = new ol.Feature(new ol.geom.Polygon( [[[-90, -45], [-90, 0], [0, 0], [0, -45], [-90, -45]]])); @@ -46,9 +58,9 @@ describe('ol.render.canvas.ReplayGroup', function() { closePath: function() {}, setLineDash: function() {}, restore: function() {} - } + }; - }) + }); it('batches fill and stroke instructions for same style', function() { ol.renderer.vector.renderFeature(replay, feature1, style1, 1); @@ -85,7 +97,7 @@ describe('ol.render.canvas.ReplayGroup', function() { ol.renderer.vector.renderFeature(replay, feature2, style2, 1); ol.renderer.vector.renderFeature(replay, feature3, style2, 1); var skippedUids = {}; - skippedUids[goog.getUid(feature1)] = true; + skippedUids[ol.getUid(feature1)] = true; replay.replay(context, 1, transform, 0, skippedUids); expect(fillCount).to.be(1); expect(strokeCount).to.be(1); @@ -97,7 +109,7 @@ describe('ol.render.canvas.ReplayGroup', function() { ol.renderer.vector.renderFeature(replay, feature2, style1, 1); ol.renderer.vector.renderFeature(replay, feature3, style2, 1); var skippedUids = {}; - skippedUids[goog.getUid(feature3)] = true; + skippedUids[ol.getUid(feature3)] = true; replay.replay(context, 1, transform, 0, skippedUids); expect(fillCount).to.be(1); expect(strokeCount).to.be(1); @@ -109,8 +121,8 @@ describe('ol.render.canvas.ReplayGroup', function() { ol.renderer.vector.renderFeature(replay, feature2, style1, 1); ol.renderer.vector.renderFeature(replay, feature3, style2, 1); var skippedUids = {}; - skippedUids[goog.getUid(feature1)] = true; - skippedUids[goog.getUid(feature2)] = true; + skippedUids[ol.getUid(feature1)] = true; + skippedUids[ol.getUid(feature2)] = true; replay.replay(context, 1, transform, 0, skippedUids); expect(fillCount).to.be(1); expect(strokeCount).to.be(1); @@ -126,7 +138,7 @@ describe('ol.render.canvas.ReplayGroup', function() { expect(fillCount).to.be(3); expect(strokeCount).to.be(3); expect(beginPathCount).to.be(3); - }) + }); }); }); @@ -252,15 +264,3 @@ describe('ol.render.canvas.PolygonReplay', function() { }); }); - -goog.require('goog.vec.Mat4'); -goog.require('ol.Feature'); -goog.require('ol.geom.Polygon'); -goog.require('ol.render.canvas.LineStringReplay'); -goog.require('ol.render.canvas.PolygonReplay'); -goog.require('ol.render.canvas.Replay'); -goog.require('ol.render.canvas.ReplayGroup'); -goog.require('ol.renderer.vector'); -goog.require('ol.style.Fill'); -goog.require('ol.style.Stroke'); -goog.require('ol.style.Style'); diff --git a/test_rendering/spec/ol/layer/expected/vector-canvas-stroke.png b/test_rendering/spec/ol/layer/expected/vector-canvas-stroke.png new file mode 100644 index 0000000000000000000000000000000000000000..9627e9c34fb3af67d9e850d0bb5f83aece242007 GIT binary patch literal 504 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdoh8VBGKN;uumf=k1;I6PpYq+7rE# zoEg0}%NEG$s1`Km7@wZIVQmKcZg$%vi5-pdpWN@2KeJYKo|8Vuug3Mn({{2mP z^qf&&bGFXbcm197m*i~XdvGTI*IBj&5)DZVU5pxL92X+WBYz3!uQa?Cn{wcG^R40_ zvzzmd-S{SBB+2q)L!~;e5#t7Fh+?=dbjDh~3pdpKwZ9u5m$?1p)$3U0gxdLkjs{EL zz5?WEC#6wN;jIkA(P9RX^NayD><%C2)H2OFC3^Auo>QWY#bsO)_5M8fK7Zr8 zvHRUyZYIVbe=HgLBENrQv`D*qoBhFz(tP=b