diff options
author | Julian Rex <julian.rex@mapbox.com> | 2019-07-18 23:14:54 -0400 |
---|---|---|
committer | Julian Rex <julian.rex@mapbox.com> | 2019-07-22 11:02:53 -0400 |
commit | ed3ef8230d09daffc14a757d844123aa26e9b770 (patch) | |
tree | cb9c0196518f833728ab2035aa07e70269c7a8f9 | |
parent | 90b4314fee9721456f344963ce288037f0fb3ac5 (diff) | |
download | qtlocation-mapboxgl-ed3ef8230d09daffc14a757d844123aa26e9b770.tar.gz |
[ios] Perf experiments
-rw-r--r-- | src/mbgl/geometry/feature_index.cpp | 6 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_circle_layer.cpp | 1 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_circle_layer.hpp | 1 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp | 1 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp | 1 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_fill_layer.cpp | 1 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_fill_layer.hpp | 1 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_heatmap_layer.cpp | 1 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_heatmap_layer.hpp | 1 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_line_layer.cpp | 26 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_line_layer.hpp | 1 | ||||
-rw-r--r-- | src/mbgl/renderer/render_layer.hpp | 1 | ||||
-rw-r--r-- | src/mbgl/tile/custom_geometry_tile.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/tile/geojson_tile.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/tile/geometry_tile.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/tile/geometry_tile_data.cpp | 8 | ||||
-rw-r--r-- | src/mbgl/tile/geometry_tile_data.hpp | 2 |
17 files changed, 40 insertions, 18 deletions
diff --git a/src/mbgl/geometry/feature_index.cpp b/src/mbgl/geometry/feature_index.cpp index 3675e8bc6e..a029cf41e8 100644 --- a/src/mbgl/geometry/feature_index.cpp +++ b/src/mbgl/geometry/feature_index.cpp @@ -149,9 +149,11 @@ void FeatureIndex::addFeature( assert(geometryTileFeature); } + GeometryCollection geometries = geometryTileFeature->getGeometries(); + bool needsCrossTileIndex = renderLayer->baseImpl->getTypeInfo()->crossTileIndex == style::LayerTypeInfo::CrossTileIndex::Required; if (!needsCrossTileIndex && - !renderLayer->queryIntersectsFeature(queryGeometry, *geometryTileFeature, tileID.z, transformState, pixelsToTileUnits, posMatrix)) { + !renderLayer->queryIntersectsFeature(queryGeometry, *geometryTileFeature, geometries, tileID.z, transformState, pixelsToTileUnits, posMatrix)) { continue; } @@ -159,7 +161,7 @@ void FeatureIndex::addFeature( continue; } - result[layerID].push_back(convertFeature(*geometryTileFeature, tileID)); + result[layerID].push_back(convertFeature(*geometryTileFeature, geometries, tileID)); } } diff --git a/src/mbgl/renderer/layers/render_circle_layer.cpp b/src/mbgl/renderer/layers/render_circle_layer.cpp index cf59319307..ca44ae87c8 100644 --- a/src/mbgl/renderer/layers/render_circle_layer.cpp +++ b/src/mbgl/renderer/layers/render_circle_layer.cpp @@ -139,6 +139,7 @@ GeometryCoordinates projectQueryGeometry(const GeometryCoordinates& queryGeometr bool RenderCircleLayer::queryIntersectsFeature( const GeometryCoordinates& queryGeometry, const GeometryTileFeature& feature, + const GeometryCollection&, //$$JR const float zoom, const TransformState& transformState, const float pixelsToTileUnits, diff --git a/src/mbgl/renderer/layers/render_circle_layer.hpp b/src/mbgl/renderer/layers/render_circle_layer.hpp index 9348e48929..e6176fda35 100644 --- a/src/mbgl/renderer/layers/render_circle_layer.hpp +++ b/src/mbgl/renderer/layers/render_circle_layer.hpp @@ -21,6 +21,7 @@ private: bool queryIntersectsFeature( const GeometryCoordinates&, const GeometryTileFeature&, + const GeometryCollection&, //$$JR const float, const TransformState&, const float, diff --git a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp index 3c97ab7431..0bd3f3f8e4 100644 --- a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp +++ b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp @@ -222,6 +222,7 @@ void RenderFillExtrusionLayer::render(PaintParameters& parameters) { bool RenderFillExtrusionLayer::queryIntersectsFeature( const GeometryCoordinates& queryGeometry, const GeometryTileFeature& feature, + const GeometryCollection&,//$$JR const float, const TransformState& transformState, const float pixelsToTileUnits, diff --git a/src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp b/src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp index 8bd1f52adf..0487405829 100644 --- a/src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp +++ b/src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp @@ -23,6 +23,7 @@ private: bool queryIntersectsFeature( const GeometryCoordinates&, const GeometryTileFeature&, + const GeometryCollection&,//$$JR const float, const TransformState&, const float, diff --git a/src/mbgl/renderer/layers/render_fill_layer.cpp b/src/mbgl/renderer/layers/render_fill_layer.cpp index cf31201d77..173bd1e1ee 100644 --- a/src/mbgl/renderer/layers/render_fill_layer.cpp +++ b/src/mbgl/renderer/layers/render_fill_layer.cpp @@ -252,6 +252,7 @@ void RenderFillLayer::render(PaintParameters& parameters) { bool RenderFillLayer::queryIntersectsFeature( const GeometryCoordinates& queryGeometry, const GeometryTileFeature& feature, + const GeometryCollection&,//$$JR const float, const TransformState& transformState, const float pixelsToTileUnits, diff --git a/src/mbgl/renderer/layers/render_fill_layer.hpp b/src/mbgl/renderer/layers/render_fill_layer.hpp index 79adc9dab4..c9f5ff0624 100644 --- a/src/mbgl/renderer/layers/render_fill_layer.hpp +++ b/src/mbgl/renderer/layers/render_fill_layer.hpp @@ -24,6 +24,7 @@ private: bool queryIntersectsFeature( const GeometryCoordinates&, const GeometryTileFeature&, + const GeometryCollection&,//$$JR const float, const TransformState&, const float, diff --git a/src/mbgl/renderer/layers/render_heatmap_layer.cpp b/src/mbgl/renderer/layers/render_heatmap_layer.cpp index 478a8f8c47..3a8415fede 100644 --- a/src/mbgl/renderer/layers/render_heatmap_layer.cpp +++ b/src/mbgl/renderer/layers/render_heatmap_layer.cpp @@ -217,6 +217,7 @@ void RenderHeatmapLayer::updateColorRamp() { bool RenderHeatmapLayer::queryIntersectsFeature( const GeometryCoordinates& queryGeometry, const GeometryTileFeature& feature, + const GeometryCollection&,//$$JR const float zoom, const TransformState&, const float pixelsToTileUnits, diff --git a/src/mbgl/renderer/layers/render_heatmap_layer.hpp b/src/mbgl/renderer/layers/render_heatmap_layer.hpp index 27e27adb28..4c3127c072 100644 --- a/src/mbgl/renderer/layers/render_heatmap_layer.hpp +++ b/src/mbgl/renderer/layers/render_heatmap_layer.hpp @@ -25,6 +25,7 @@ private: bool queryIntersectsFeature( const GeometryCoordinates&, const GeometryTileFeature&, + const GeometryCollection&,//$$JR const float, const TransformState&, const float, diff --git a/src/mbgl/renderer/layers/render_line_layer.cpp b/src/mbgl/renderer/layers/render_line_layer.cpp index 5c56826bd7..b8092d500e 100644 --- a/src/mbgl/renderer/layers/render_line_layer.cpp +++ b/src/mbgl/renderer/layers/render_line_layer.cpp @@ -214,14 +214,16 @@ void RenderLineLayer::render(PaintParameters& parameters) { } } -optional<GeometryCollection> offsetLine(const GeometryCollection& rings, const double offset) { - if (offset == 0) return {}; +GeometryCollection* offsetLine(const GeometryCollection& rings, const double offset) { + + GeometryCollection *newRings = new GeometryCollection(); + + if (offset == 0) return NULL; - GeometryCollection newRings; Point<double> zero(0, 0); for (const auto& ring : rings) { - newRings.emplace_back(); - auto& newRing = newRings.back(); + newRings->emplace_back(); + auto& newRing = newRings->back(); for (auto i = ring.begin(); i != ring.end(); i++) { auto& p = *i; @@ -247,6 +249,7 @@ optional<GeometryCollection> offsetLine(const GeometryCollection& rings, const d bool RenderLineLayer::queryIntersectsFeature( const GeometryCoordinates& queryGeometry, const GeometryTileFeature& feature, + const GeometryCollection& geometries,//$$JR const float zoom, const TransformState& transformState, const float pixelsToTileUnits, @@ -265,14 +268,21 @@ bool RenderLineLayer::queryIntersectsFeature( .evaluate(feature, zoom, style::LineOffset::defaultValue()) * pixelsToTileUnits; // Apply offset to geometry - auto offsetGeometry = offsetLine(feature.getGeometries(), offset); +// auto offsetGeometry = offsetLine(feature.getGeometries(), offset); + auto offsetGeometry = offsetLine(geometries, offset); // Test intersection const float halfWidth = getLineWidth(feature, zoom) / 2.0 * pixelsToTileUnits; - return util::polygonIntersectsBufferedMultiLine( + bool intersects = false; + + if (offsetGeometry) { + intersects = util::polygonIntersectsBufferedMultiLine( translatedQueryGeometry.value_or(queryGeometry), - offsetGeometry.value_or(feature.getGeometries()), + *offsetGeometry,//.value_or(geometries),//feature.getGeometries()), halfWidth); + } + delete offsetGeometry; + return intersects; } void RenderLineLayer::updateColorRamp() { diff --git a/src/mbgl/renderer/layers/render_line_layer.hpp b/src/mbgl/renderer/layers/render_line_layer.hpp index 4454d215d9..0b7ecdd2fe 100644 --- a/src/mbgl/renderer/layers/render_line_layer.hpp +++ b/src/mbgl/renderer/layers/render_line_layer.hpp @@ -27,6 +27,7 @@ private: bool queryIntersectsFeature( const GeometryCoordinates&, const GeometryTileFeature&, + const GeometryCollection&,//$$JR const float, const TransformState&, const float, diff --git a/src/mbgl/renderer/render_layer.hpp b/src/mbgl/renderer/render_layer.hpp index 75c729444b..d13b9c03f8 100644 --- a/src/mbgl/renderer/render_layer.hpp +++ b/src/mbgl/renderer/render_layer.hpp @@ -91,6 +91,7 @@ public: virtual bool queryIntersectsFeature( const GeometryCoordinates&, const GeometryTileFeature&, + const GeometryCollection&,//$$JR const float, const TransformState&, const float, diff --git a/src/mbgl/tile/custom_geometry_tile.cpp b/src/mbgl/tile/custom_geometry_tile.cpp index 7b1fc2e2d9..d64148101a 100644 --- a/src/mbgl/tile/custom_geometry_tile.cpp +++ b/src/mbgl/tile/custom_geometry_tile.cpp @@ -83,7 +83,7 @@ void CustomGeometryTile::querySourceFeatures( continue; } - result.push_back(convertFeature(*feature, id.canonical)); + result.push_back(convertFeature(*feature, feature->getGeometries(), id.canonical)); } } } diff --git a/src/mbgl/tile/geojson_tile.cpp b/src/mbgl/tile/geojson_tile.cpp index 4cf971df84..8990ff55f3 100644 --- a/src/mbgl/tile/geojson_tile.cpp +++ b/src/mbgl/tile/geojson_tile.cpp @@ -33,7 +33,7 @@ void GeoJSONTile::querySourceFeatures( continue; } - result.push_back(convertFeature(*feature, id.canonical)); + result.push_back(convertFeature(*feature, feature->getGeometries(), id.canonical)); } } } diff --git a/src/mbgl/tile/geometry_tile.cpp b/src/mbgl/tile/geometry_tile.cpp index 7f1bed49f4..f29daa0c70 100644 --- a/src/mbgl/tile/geometry_tile.cpp +++ b/src/mbgl/tile/geometry_tile.cpp @@ -360,7 +360,7 @@ void GeometryTile::querySourceFeatures( continue; } - result.push_back(convertFeature(*feature, id.canonical)); + result.push_back(convertFeature(*feature, feature->getGeometries(), id.canonical)); } } } diff --git a/src/mbgl/tile/geometry_tile_data.cpp b/src/mbgl/tile/geometry_tile_data.cpp index 680f8d1497..8d683ae084 100644 --- a/src/mbgl/tile/geometry_tile_data.cpp +++ b/src/mbgl/tile/geometry_tile_data.cpp @@ -99,7 +99,7 @@ void limitHoles(GeometryCollection& polygon, uint32_t maxHoles) { } } -static Feature::geometry_type convertGeometry(const GeometryTileFeature& geometryTileFeature, const CanonicalTileID& tileID) { +static Feature::geometry_type convertGeometry(const GeometryTileFeature& geometryTileFeature, const GeometryCollection& geometries, const CanonicalTileID& tileID) { const double size = util::EXTENT * std::pow(2, tileID.z); const double x0 = util::EXTENT * tileID.x; const double y0 = util::EXTENT * tileID.y; @@ -112,7 +112,7 @@ static Feature::geometry_type convertGeometry(const GeometryTileFeature& geometr ); }; - GeometryCollection geometries = geometryTileFeature.getGeometries(); +// GeometryCollection geometries = geometryTileFeature.getGeometries(); switch (geometryTileFeature.getType()) { case FeatureType::Unknown: { @@ -173,8 +173,8 @@ static Feature::geometry_type convertGeometry(const GeometryTileFeature& geometr return Point<double>(); } -Feature convertFeature(const GeometryTileFeature& geometryTileFeature, const CanonicalTileID& tileID) { - Feature feature { convertGeometry(geometryTileFeature, tileID) }; +Feature convertFeature(const GeometryTileFeature& geometryTileFeature, const GeometryCollection& geometries, const CanonicalTileID& tileID) { + Feature feature { convertGeometry(geometryTileFeature, geometries, tileID) }; feature.properties = geometryTileFeature.getProperties(); feature.id = geometryTileFeature.getID(); return feature; diff --git a/src/mbgl/tile/geometry_tile_data.hpp b/src/mbgl/tile/geometry_tile_data.hpp index 6ce67a532e..4e54339111 100644 --- a/src/mbgl/tile/geometry_tile_data.hpp +++ b/src/mbgl/tile/geometry_tile_data.hpp @@ -76,7 +76,7 @@ std::vector<GeometryCollection> classifyRings(const GeometryCollection&); void limitHoles(GeometryCollection&, uint32_t maxHoles); // convert from GeometryTileFeature to Feature (eventually we should eliminate GeometryTileFeature) -Feature convertFeature(const GeometryTileFeature&, const CanonicalTileID&); +Feature convertFeature(const GeometryTileFeature&, const GeometryCollection&, const CanonicalTileID&); // Fix up possibly-non-V2-compliant polygon geometry using angus clipper. // The result is guaranteed to have correctly wound, strictly simple rings. |