summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Rex <julian.rex@mapbox.com>2019-07-18 23:14:54 -0400
committerJulian Rex <julian.rex@mapbox.com>2019-07-22 11:02:53 -0400
commited3ef8230d09daffc14a757d844123aa26e9b770 (patch)
treecb9c0196518f833728ab2035aa07e70269c7a8f9
parent90b4314fee9721456f344963ce288037f0fb3ac5 (diff)
downloadqtlocation-mapboxgl-ed3ef8230d09daffc14a757d844123aa26e9b770.tar.gz
[ios] Perf experiments
-rw-r--r--src/mbgl/geometry/feature_index.cpp6
-rw-r--r--src/mbgl/renderer/layers/render_circle_layer.cpp1
-rw-r--r--src/mbgl/renderer/layers/render_circle_layer.hpp1
-rw-r--r--src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp1
-rw-r--r--src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp1
-rw-r--r--src/mbgl/renderer/layers/render_fill_layer.cpp1
-rw-r--r--src/mbgl/renderer/layers/render_fill_layer.hpp1
-rw-r--r--src/mbgl/renderer/layers/render_heatmap_layer.cpp1
-rw-r--r--src/mbgl/renderer/layers/render_heatmap_layer.hpp1
-rw-r--r--src/mbgl/renderer/layers/render_line_layer.cpp26
-rw-r--r--src/mbgl/renderer/layers/render_line_layer.hpp1
-rw-r--r--src/mbgl/renderer/render_layer.hpp1
-rw-r--r--src/mbgl/tile/custom_geometry_tile.cpp2
-rw-r--r--src/mbgl/tile/geojson_tile.cpp2
-rw-r--r--src/mbgl/tile/geometry_tile.cpp2
-rw-r--r--src/mbgl/tile/geometry_tile_data.cpp8
-rw-r--r--src/mbgl/tile/geometry_tile_data.hpp2
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.