summaryrefslogtreecommitdiff
path: root/test/algorithm
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2018-09-20 12:07:02 +0200
committerKonstantin Käfer <mail@kkaefer.com>2018-09-21 12:12:35 +0200
commit2ea0833ecf46ba6a38211e980a9200e7f4419bd8 (patch)
treef849687bc067927beb4164ba76265cf1a600c01d /test/algorithm
parentf49a9ca1de70c8249738ca42ab1c8c86fecf1623 (diff)
downloadqtlocation-mapboxgl-2ea0833ecf46ba6a38211e980a9200e7f4419bd8.tar.gz
[core] don't break ascent in the overscaled tile phase
We optimize our updateRenderable algorithm by breaking ascent when we've already checked a certain tile. So far, we've compared the UnwrappedTileIDs, but they don't include the overscale component. When ascending through overscaled tile IDs, we've stopped the ascent too early, when we should've kept the search going.
Diffstat (limited to 'test/algorithm')
-rw-r--r--test/algorithm/update_renderables.test.cpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/test/algorithm/update_renderables.test.cpp b/test/algorithm/update_renderables.test.cpp
index 7d6a0fcb13..e142758f29 100644
--- a/test/algorithm/update_renderables.test.cpp
+++ b/test/algorithm/update_renderables.test.cpp
@@ -1259,3 +1259,53 @@ TEST(UpdateRenderables, LoadRequiredIfIdealTileCantBeFound) {
}),
log);
}
+
+// Tests overzooming a 0/0/0 tile to zoom level 4, when the maxzoom is 2.
+TEST(UpdateRenderables, LoadOverscaledMaxZoomTile) {
+ ActionLog log;
+ MockSource source;
+ auto getTileData = getTileDataFn(log, source.dataTiles);
+ auto createTileData = createTileDataFn(log, source.dataTiles);
+ auto retainTileData = retainTileDataFn(log);
+ auto renderTile = renderTileFn(log);
+
+ source.zoomRange.max = 2;
+ source.idealTiles.emplace(UnwrappedTileID{ 2, 0, 0 });
+
+ auto tile_4_2_0_0 = source.createTileData(OverscaledTileID{ 4, 0, { 2, 0, 0 } });
+ tile_4_2_0_0->renderable = false;
+ tile_4_2_0_0->triedOptional = true;
+ tile_4_2_0_0->loaded = true;
+
+ auto tile_3_2_0_0 = source.createTileData(OverscaledTileID{ 3, 0, { 2, 0, 0 } });
+ tile_3_2_0_0->renderable = false;
+ tile_3_2_0_0->triedOptional = true;
+ tile_3_2_0_0->loaded = true;
+
+ auto tile_2_2_0_0 = source.createTileData(OverscaledTileID{ 2, 0, { 2, 0, 0 } });
+ tile_2_2_0_0->renderable = false;
+ tile_2_2_0_0->triedOptional = true;
+ tile_2_2_0_0->loaded = true;
+
+ // Tile level 1 won't be overscaled.
+ auto tile_1_1_0_0 = source.createTileData(OverscaledTileID{ 1, 0, { 1, 0, 0 } });
+ tile_1_1_0_0->renderable = true;
+ tile_1_1_0_0->triedOptional = true;
+ tile_1_1_0_0->loaded = true;
+
+ algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile,
+ source.idealTiles, source.zoomRange, 4);
+ EXPECT_EQ(ActionLog({
+ GetTileDataAction{ { 4, 0, { 2, 0, 0 } }, Found },
+ RetainTileDataAction{ { 4, 0, { 2, 0, 0 } }, TileNecessity::Required },
+ GetTileDataAction{ { 5, 0, { 2, 0, 0 } }, NotFound },
+ GetTileDataAction{ { 3, 0, { 2, 0, 0 } }, Found },
+ RetainTileDataAction{ { 3, 0, { 2, 0, 0 } }, TileNecessity::Required },
+ GetTileDataAction{ { 2, 0, { 2, 0, 0 } }, Found },
+ RetainTileDataAction{ { 2, 0, { 2, 0, 0 } }, TileNecessity::Required },
+ GetTileDataAction{ { 1, 0, { 1, 0, 0 } }, Found },
+ RetainTileDataAction{ { 1, 0, { 1, 0, 0 } }, TileNecessity::Required },
+ RenderTileAction{ { 1, 0, 0 }, *tile_1_1_0_0 },
+ }),
+ log);
+}