diff options
author | Mikko Pulkki <mikko.pulkki@mapbox.com> | 2020-03-23 18:21:13 +0200 |
---|---|---|
committer | Mikko Pulkki <55925868+mpulkki-mapbox@users.noreply.github.com> | 2020-04-06 12:10:21 +0300 |
commit | d0c103fa8f0bade2be56d50a745f16b4e9ed6b29 (patch) | |
tree | e41956f80cfd63d7ab4e154c9785b39e7e6c99d4 /test/algorithm/update_renderables.test.cpp | |
parent | 69dc210598ff8319de53bb603438ba89d47d6229 (diff) | |
download | qtlocation-mapboxgl-d0c103fa8f0bade2be56d50a745f16b4e9ed6b29.tar.gz |
Refactor tileCover to support lod tiles
Diffstat (limited to 'test/algorithm/update_renderables.test.cpp')
-rw-r--r-- | test/algorithm/update_renderables.test.cpp | 258 |
1 files changed, 134 insertions, 124 deletions
diff --git a/test/algorithm/update_renderables.test.cpp b/test/algorithm/update_renderables.test.cpp index 6958f21ea2..bca04ab661 100644 --- a/test/algorithm/update_renderables.test.cpp +++ b/test/algorithm/update_renderables.test.cpp @@ -122,14 +122,14 @@ TEST(UpdateRenderables, SingleTile) { auto retainTileData = retainTileDataFn(log); auto renderTile = renderTileFn(log); - source.idealTiles.emplace(UnwrappedTileID{ 1, 1, 1 }); + source.idealTiles.emplace(OverscaledTileID{1, 1, 1}); // Make sure that we're getting the tile back. auto tile_1_1_1_1 = source.createTileData(OverscaledTileID{ 1, 1, 1 }); tile_1_1_1_1->renderable = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 1); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 1, 0, { 1, 1, 1 } }, Found }, // found ideal tile RetainTileDataAction{ { 1, 0, { 1, 1, 1 } }, TileNecessity::Required }, // @@ -139,8 +139,8 @@ TEST(UpdateRenderables, SingleTile) { // Check a repeated render with the same data. log.clear(); - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 1); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 1, 0, { 1, 1, 1 } }, Found }, // found ideal tile RetainTileDataAction{ { 1, 0, { 1, 1, 1 } }, TileNecessity::Required }, // @@ -150,9 +150,9 @@ TEST(UpdateRenderables, SingleTile) { // Insert a tile we don't have data for. log.clear(); - source.idealTiles.emplace(UnwrappedTileID{ 1, 0, 1 }); - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 1); + source.idealTiles.emplace(OverscaledTileID{1, 0, 1}); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 1, 0, { 1, 0, 1 } }, NotFound }, // missing ideal tile CreateTileDataAction{ { 1, 0, { 1, 0, 1 } } }, // create ideal tile @@ -172,8 +172,8 @@ TEST(UpdateRenderables, SingleTile) { // Mark the created tile as having the optional request tried. log.clear(); source.dataTiles[{ 1, 0, { 1, 0, 1 } }]->triedOptional = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 1); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 1, 0, { 1, 0, 1 } }, Found }, // missing ideal tile RetainTileDataAction{ { 1, 0, { 1, 0, 1 } }, TileNecessity::Required }, // @@ -195,8 +195,8 @@ TEST(UpdateRenderables, SingleTile) { log.clear(); auto tile_1_1_0_1 = source.createTileData(OverscaledTileID{ 1, 0, 1 }); tile_1_1_0_1->renderable = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 1); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 1, 0, { 1, 0, 1 } }, Found }, // newly added tile RetainTileDataAction{ { 1, 0, { 1, 0, 1 } }, TileNecessity::Required }, // @@ -211,11 +211,11 @@ TEST(UpdateRenderables, SingleTile) { // Insert another tile, and another bucket that has a different name and check that we're not // using it. log.clear(); - source.idealTiles.emplace(UnwrappedTileID{ 1, 0, 0 }); + source.idealTiles.emplace(OverscaledTileID{1, 0, 0}); auto tile_1_1_0_0 = source.createTileData(OverscaledTileID{ 1, 0, 0 }); - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 1); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 1, 0, { 1, 0, 0 } }, Found }, // found tile, not ready RetainTileDataAction{ { 1, 0, { 1, 0, 0 } }, TileNecessity::Required }, // @@ -240,8 +240,8 @@ TEST(UpdateRenderables, SingleTile) { // Then, add the bucket and check that it's getting used. log.clear(); tile_1_1_0_0->renderable = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 1); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 1, 0, { 1, 0, 0 } }, Found }, // found tile, now ready RetainTileDataAction{ { 1, 0, { 1, 0, 0 } }, TileNecessity::Required }, // @@ -266,15 +266,15 @@ TEST(UpdateRenderables, UseParentTile) { auto retainTileData = retainTileDataFn(log); auto renderTile = renderTileFn(log); - source.idealTiles.emplace(UnwrappedTileID{ 1, 0, 1 }); - source.idealTiles.emplace(UnwrappedTileID{ 1, 1, 0 }); - source.idealTiles.emplace(UnwrappedTileID{ 1, 1, 1 }); + source.idealTiles.emplace(OverscaledTileID{1, 0, 1}); + source.idealTiles.emplace(OverscaledTileID{1, 1, 0}); + source.idealTiles.emplace(OverscaledTileID{1, 1, 1}); // Make sure that we're getting the tile back. auto tile_0_0_0_0 = source.createTileData(OverscaledTileID{ 0, 0, 0 }); tile_0_0_0_0->renderable = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 1); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 1, 0, { 1, 0, 1 } }, NotFound }, // missing ideal tile CreateTileDataAction{ { 1, 0, { 1, 0, 1 } } }, // @@ -312,12 +312,12 @@ TEST(UpdateRenderables, DontUseWrongParentTile) { auto retainTileData = retainTileDataFn(log); auto renderTile = renderTileFn(log); - source.idealTiles.emplace(UnwrappedTileID{ 2, 0, 0 }); + source.idealTiles.emplace(OverscaledTileID{2, 0, 0}); auto tile_1_1_1_0 = source.createTileData(OverscaledTileID{ 1, 1, 0 }); tile_1_1_1_0->renderable = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 2); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 2, 0, { 2, 0, 0 } }, NotFound }, // missing ideal tile CreateTileDataAction{ { 2, 0, { 2, 0, 0 } } }, // @@ -334,8 +334,8 @@ TEST(UpdateRenderables, DontUseWrongParentTile) { // Now mark the created tile as having the optional request tried. log.clear(); source.dataTiles[{ 2, 0, { 2, 0, 0 } }]->triedOptional = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 2); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 2, 0, { 2, 0, 0 } }, Found }, // non-ready ideal tile RetainTileDataAction{ { 2, 0, { 2, 0, 0 } }, TileNecessity::Required }, // @@ -352,9 +352,9 @@ TEST(UpdateRenderables, DontUseWrongParentTile) { // Add a new child tile and check that it is now used. log.clear(); - source.idealTiles.emplace(UnwrappedTileID{ 2, 2, 0 }); - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 2); + source.idealTiles.emplace(OverscaledTileID{2, 2, 0}); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 2, 0, { 2, 0, 0 } }, Found }, // non-ready ideal tile RetainTileDataAction{ { 2, 0, { 2, 0, 0 } }, TileNecessity::Required }, // @@ -389,7 +389,7 @@ TEST(UpdateRenderables, UseParentTileWhenChildNotReady) { auto retainTileData = retainTileDataFn(log); auto renderTile = renderTileFn(log); - source.idealTiles.emplace(UnwrappedTileID{ 1, 0, 1 }); + source.idealTiles.emplace(OverscaledTileID{1, 0, 1}); auto tile_0_0_0_0 = source.createTileData(OverscaledTileID{ 0, 0, 0 }); tile_0_0_0_0->renderable = true; @@ -398,8 +398,8 @@ TEST(UpdateRenderables, UseParentTileWhenChildNotReady) { // Don't create bucket. // Make sure that it renders the parent tile. - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 1); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 1, 0, { 1, 0, 1 } }, Found }, // found, but not ready RetainTileDataAction{ { 1, 0, { 1, 0, 1 } }, TileNecessity::Required }, // @@ -416,8 +416,8 @@ TEST(UpdateRenderables, UseParentTileWhenChildNotReady) { // Now insert the bucket and make sure we're now using the matching tile log.clear(); tile_1_1_0_1->renderable = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 1); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 1, 0, { 1, 0, 1 } }, Found }, // found and ready RetainTileDataAction{ { 1, 0, { 1, 0, 1 } }, TileNecessity::Required }, // @@ -434,8 +434,8 @@ TEST(UpdateRenderables, UseOverlappingParentTile) { auto retainTileData = retainTileDataFn(log); auto renderTile = renderTileFn(log); - source.idealTiles.emplace(UnwrappedTileID{ 1, 0, 0 }); - source.idealTiles.emplace(UnwrappedTileID{ 1, 0, 1 }); + source.idealTiles.emplace(OverscaledTileID{1, 0, 0}); + source.idealTiles.emplace(OverscaledTileID{1, 0, 1}); auto tile_0_0_0_0 = source.createTileData(OverscaledTileID{ 0, 0, 0 }); tile_0_0_0_0->renderable = true; @@ -443,8 +443,8 @@ TEST(UpdateRenderables, UseOverlappingParentTile) { auto tile_1_1_0_1 = source.createTileData(OverscaledTileID{ 1, 0, 1 }); tile_1_1_0_1->renderable = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 1); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 1, 0, { 1, 0, 0 } }, NotFound }, // ideal tile not found CreateTileDataAction{ { 1, 0, { 1, 0, 0 } } }, // @@ -472,15 +472,15 @@ TEST(UpdateRenderables, UseChildTiles) { auto retainTileData = retainTileDataFn(log); auto renderTile = renderTileFn(log); - source.idealTiles.emplace(UnwrappedTileID{ 0, 0, 0 }); + source.idealTiles.emplace(OverscaledTileID{0, 0, 0}); auto tile_1_1_0_0 = source.createTileData(OverscaledTileID{ 1, 0, 0 }); tile_1_1_0_0->renderable = true; auto tile_1_1_1_0 = source.createTileData(OverscaledTileID{ 1, 1, 0 }); tile_1_1_1_0->renderable = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 0); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 0, 0, { 0, 0, 0 } }, NotFound }, // ideal tile, missing CreateTileDataAction{ { 0, 0, { 0, 0, 0 } } }, // @@ -506,15 +506,15 @@ TEST(UpdateRenderables, PreferChildTiles) { auto retainTileData = retainTileDataFn(log); auto renderTile = renderTileFn(log); - source.idealTiles.emplace(UnwrappedTileID{ 1, 0, 0 }); + source.idealTiles.emplace(OverscaledTileID{1, 0, 0}); auto tile_0_0_0_0 = source.createTileData(OverscaledTileID{ 0, 0, 0 }); tile_0_0_0_0->renderable = true; auto tile_2_2_0_0 = source.createTileData(OverscaledTileID{ 2, 0, 0 }); tile_2_2_0_0->renderable = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 1); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 1, 0, { 1, 0, 0 } }, NotFound }, // ideal tile, not found CreateTileDataAction{ { 1, 0, { 1, 0, 0 } } }, // @@ -536,8 +536,8 @@ TEST(UpdateRenderables, PreferChildTiles) { log.clear(); auto tile_2_2_0_1 = source.createTileData(OverscaledTileID{ 2, 0, 1 }); tile_2_2_0_1->renderable = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 1); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 1, 0, { 1, 0, 0 } }, Found }, // ideal tile, not ready // ideal tile was added in previous invocation, but is not yet ready @@ -559,8 +559,8 @@ TEST(UpdateRenderables, PreferChildTiles) { log.clear(); auto tile_2_2_1_0 = source.createTileData(OverscaledTileID{ 2, 1, 0 }); tile_2_2_1_0->renderable = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 1); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 1, 0, { 1, 0, 0 } }, Found }, // ideal tile, not ready // ideal tile was added in first invocation, but is not yet ready @@ -585,8 +585,8 @@ TEST(UpdateRenderables, PreferChildTiles) { log.clear(); auto tile_2_2_1_1 = source.createTileData(OverscaledTileID{ 2, 1, 1 }); tile_2_2_1_1->renderable = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 1); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 1, 0, { 1, 0, 0 } }, Found }, // ideal tile, not ready // ideal tile was added in first invocation, but is not yet ready @@ -615,7 +615,7 @@ TEST(UpdateRenderables, UseParentAndChildTiles) { auto retainTileData = retainTileDataFn(log); auto renderTile = renderTileFn(log); - source.idealTiles.emplace(UnwrappedTileID{ 1, 0, 0 }); + source.idealTiles.emplace(OverscaledTileID{1, 0, 0}); auto tile_0_0_0_0 = source.createTileData(OverscaledTileID{ 0, 0, 0 }); tile_0_0_0_0->renderable = true; @@ -623,8 +623,8 @@ TEST(UpdateRenderables, UseParentAndChildTiles) { tile_2_2_0_0->renderable = true; // Check that it uses the child tile and the parent tile to cover the rest. - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 1); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 1, 0, { 1, 0, 0 } }, NotFound }, // ideal tile, missing CreateTileDataAction{ { 1, 0, { 1, 0, 0 } } }, // @@ -644,8 +644,8 @@ TEST(UpdateRenderables, UseParentAndChildTiles) { // Then, remove the child tile and check that it now only the parent tile. log.clear(); source.dataTiles.erase(OverscaledTileID{ 2, 0, 0 }); - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 1); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 1, 0, { 1, 0, 0 } }, Found }, // ideal tile, not ready RetainTileDataAction{ { 1, 0, { 1, 0, 0 } }, TileNecessity::Required }, // @@ -669,13 +669,13 @@ TEST(UpdateRenderables, DontUseTilesLowerThanMinzoom) { auto renderTile = renderTileFn(log); source.zoomRange.min = 2; - source.idealTiles.emplace(UnwrappedTileID{ 2, 0, 0 }); + source.idealTiles.emplace(OverscaledTileID{2, 0, 0}); auto tile_1_1_0_0 = source.createTileData(OverscaledTileID{ 1, 0, 0 }); tile_1_1_0_0->renderable = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 2); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 2, 0, { 2, 0, 0 } }, NotFound }, // ideal tile, missing CreateTileDataAction{ { 2, 0, { 2, 0, 0 } } }, // @@ -698,13 +698,13 @@ TEST(UpdateRenderables, UseOverzoomedTileAfterMaxzoom) { auto renderTile = renderTileFn(log); source.zoomRange.max = 2; - source.idealTiles.emplace(UnwrappedTileID{ 2, 0, 0 }); + source.idealTiles.emplace(OverscaledTileID{2, 0, 0}); // Add a child tile (that should never occur in practice) and make sure it's not selected. auto tile_3_3_0_0 = source.createTileData(OverscaledTileID{ 3, 0, 0 }); tile_3_3_0_0->renderable = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 2); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ( ActionLog({ GetTileDataAction{ { 2, 0, { 2, 0, 0 } }, NotFound }, // ideal tile, missing @@ -719,8 +719,8 @@ TEST(UpdateRenderables, UseOverzoomedTileAfterMaxzoom) { // Mark the created tile as having tried the optional request. log.clear(); source.dataTiles[{ 2, 0, { 2, 0, 0 } }]->triedOptional = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 2); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ( ActionLog({ GetTileDataAction{ { 2, 0, { 2, 0, 0 } }, Found }, // ideal tile, missing @@ -733,12 +733,14 @@ TEST(UpdateRenderables, UseOverzoomedTileAfterMaxzoom) { }), log); - // Only add a non-overzoomed ("parent") tile at first. + // Switch to overzoomed tile and only add a non-overzoomed ("parent") tile at first. log.clear(); + source.idealTiles.clear(); + source.idealTiles.emplace(OverscaledTileID{3, 0, {2, 0, 0}}); auto tile_2_2_0_0 = source.createTileData(OverscaledTileID{ 2, 0, { 2, 0, 0 } }); tile_2_2_0_0->renderable = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 3); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 3, 0, { 2, 0, 0 } }, NotFound }, // ideal tile, missing CreateTileDataAction{ { 3, 0, { 2, 0, 0 } } }, // @@ -754,8 +756,8 @@ TEST(UpdateRenderables, UseOverzoomedTileAfterMaxzoom) { log.clear(); auto tile_3_2_0_0 = source.createTileData(OverscaledTileID{ 3, 0, { 2, 0, 0 } }); tile_3_2_0_0->renderable = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 3); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 3, 0, { 2, 0, 0 } }, Found }, // RetainTileDataAction{ { 3, 0, { 2, 0, 0 } }, TileNecessity::Required }, // @@ -765,8 +767,10 @@ TEST(UpdateRenderables, UseOverzoomedTileAfterMaxzoom) { // Check that it's switching back to the tile that has the matching overzoom value. log.clear(); - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 2); + source.idealTiles.clear(); + source.idealTiles.emplace(OverscaledTileID{2, 0, 0}); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 2, 0, { 2, 0, 0 } }, Found }, // RetainTileDataAction{ { 2, 0, { 2, 0, 0 } }, TileNecessity::Required }, // @@ -780,8 +784,8 @@ TEST(UpdateRenderables, UseOverzoomedTileAfterMaxzoom) { tile_2_2_0_0 = nullptr; // Use the overzoomed tile even though it doesn't match the zoom level. - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 2); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 2, 0, { 2, 0, 0 } }, NotFound }, // CreateTileDataAction{ { 2, 0, { 2, 0, 0 } } }, // @@ -802,13 +806,13 @@ TEST(UpdateRenderables, AscendToNonOverzoomedTiles) { auto renderTile = renderTileFn(log); source.zoomRange.max = 2; - source.idealTiles.emplace(UnwrappedTileID{ 2, 0, 0 }); + source.idealTiles.emplace(OverscaledTileID{3, 0, {2, 0, 0}}); // Add a matching overzoomed tile and make sure it gets selected. auto tile_3_2_0_0 = source.createTileData(OverscaledTileID{ 3, 0, { 2, 0, 0 } }); tile_3_2_0_0->renderable = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 3); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 3, 0, { 2, 0, 0 } }, Found }, // RetainTileDataAction{ { 3, 0, { 2, 0, 0 } }, TileNecessity::Required }, // @@ -822,8 +826,8 @@ TEST(UpdateRenderables, AscendToNonOverzoomedTiles) { tile_3_2_0_0 = nullptr; auto tile_2_2_0_0 = source.createTileData(OverscaledTileID{ 2, 0, { 2, 0, 0 } }); tile_2_2_0_0->renderable = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 3); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 3, 0, { 2, 0, 0 } }, NotFound }, // CreateTileDataAction{ { 3, 0, { 2, 0, 0 } } }, // @@ -841,8 +845,8 @@ TEST(UpdateRenderables, AscendToNonOverzoomedTiles) { tile_2_2_0_0 = nullptr; auto tile_1_1_0_0 = source.createTileData(OverscaledTileID{ 1, 0, { 1, 0, 0 } }); tile_1_1_0_0->renderable = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 3); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 3, 0, { 2, 0, 0 } }, Found }, // ideal tile, not ready RetainTileDataAction{ { 3, 0, { 2, 0, 0 } }, TileNecessity::Required }, // @@ -857,8 +861,8 @@ TEST(UpdateRenderables, AscendToNonOverzoomedTiles) { // Now, mark the created tile as found. log.clear(); source.dataTiles[{ 3, 0, { 2, 0, 0 } }]->triedOptional = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 3); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 3, 0, { 2, 0, 0 } }, Found }, // ideal tile, not ready RetainTileDataAction{ { 3, 0, { 2, 0, 0 } }, TileNecessity::Required }, // @@ -881,11 +885,11 @@ TEST(UpdateRenderables, DoNotAscendMultipleTimesIfNotFound) { auto retainTileData = retainTileDataFn(log); auto renderTile = renderTileFn(log); - source.idealTiles.emplace(UnwrappedTileID{ 8, 0, 0 }); - source.idealTiles.emplace(UnwrappedTileID{ 8, 1, 0 }); + source.idealTiles.emplace(OverscaledTileID{8, 0, 0}); + source.idealTiles.emplace(OverscaledTileID{8, 1, 0}); - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 8); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 8, 0, { 8, 0, 0 } }, NotFound }, // ideal tile CreateTileDataAction{ { 8, 0, { 8, 0, 0 } } }, // @@ -919,8 +923,8 @@ TEST(UpdateRenderables, DoNotAscendMultipleTimesIfNotFound) { auto tile_4_0_0_0 = source.createTileData(OverscaledTileID{ 4, 0, { 4, 0, 0 } }); tile_4_0_0_0->renderable = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 8); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 8, 0, { 8, 0, 0 } }, Found }, // ideal tile, not ready RetainTileDataAction{ { 8, 0, { 8, 0, 0 } }, TileNecessity::Required }, // @@ -954,13 +958,13 @@ TEST(UpdateRenderables, DontRetainUnusedNonIdealTiles) { auto retainTileData = retainTileDataFn(log); auto renderTile = renderTileFn(log); - source.idealTiles.emplace(UnwrappedTileID{ 2, 0, 0 }); + source.idealTiles.emplace(OverscaledTileID{2, 0, 0}); source.createTileData(OverscaledTileID{ 1, 0, 0 }); source.createTileData(OverscaledTileID{ 2, 0, 0 }); - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 2); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 2, 0, { 2, 0, 0 } }, Found }, // ideal tile, not ready RetainTileDataAction{ { 2, 0, { 2, 0, 0 } }, TileNecessity::Required }, // @@ -983,16 +987,22 @@ TEST(UpdateRenderables, WrappedTiles) { auto retainTileData = retainTileDataFn(log); auto renderTile = renderTileFn(log); - source.idealTiles.emplace(UnwrappedTileID{ 1, -1, 0 }); // 'wrap' -> -1 - source.idealTiles.emplace(UnwrappedTileID{ 1, 0, 0 }); // 'wrap' -> 0 - source.idealTiles.emplace(UnwrappedTileID{ 1, 1, 0 }); // 'wrap' -> 0 - source.idealTiles.emplace(UnwrappedTileID{ 1, 2, 0 }); // 'wrap' -> 1 + UnwrappedTileID tileIds[] = { + {1, -1, 0}, // 'wrap' -> -1 + {1, 0, 0}, // 'wrap' -> 0 + {1, 1, 0}, // 'wrap' -> 0 + {1, 2, 0} // 'wrap' -> 1 + }; + + for (const auto& id : tileIds) { + source.idealTiles.emplace(OverscaledTileID{1, id.wrap, id.canonical}); + } auto tile_0_0_0_0 = source.createTileData(OverscaledTileID{ 0, 0, { 0, 0, 0 } }); tile_0_0_0_0->renderable = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 1); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 1, -1, { 1, 1, 0 } }, NotFound }, // ideal tile 1/-1/0 (wrapped to -1) CreateTileDataAction{ { 1, -1, { 1, 1, 0 } } }, // @@ -1043,10 +1053,10 @@ TEST(UpdateRenderables, RepeatedRenderWithMissingOptionals) { auto retainTileData = retainTileDataFn(log); auto renderTile = renderTileFn(log); - source.idealTiles.emplace(UnwrappedTileID{ 6, 0, 0 }); + source.idealTiles.emplace(OverscaledTileID{6, 0, 0}); - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 6); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 6, 0, { 6, 0, 0 } }, NotFound }, // ideal tile, not found CreateTileDataAction{ { 6, 0, { 6, 0, 0 } } }, // @@ -1066,8 +1076,8 @@ TEST(UpdateRenderables, RepeatedRenderWithMissingOptionals) { // Repeat. log.clear(); - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 6); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 6, 0, { 6, 0, 0 } }, Found }, // ideal tile, not ready RetainTileDataAction{ { 6, 0, { 6, 0, 0 } }, TileNecessity::Required }, // @@ -1087,8 +1097,8 @@ TEST(UpdateRenderables, RepeatedRenderWithMissingOptionals) { // Mark next level has having tried optional. log.clear(); source.dataTiles[{ 6, 0, { 6, 0, 0 } }]->triedOptional = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 6); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 6, 0, { 6, 0, 0 } }, Found }, // ideal tile, not ready RetainTileDataAction{ { 6, 0, { 6, 0, 0 } }, TileNecessity::Required }, // @@ -1109,8 +1119,8 @@ TEST(UpdateRenderables, RepeatedRenderWithMissingOptionals) { // Repeat. log.clear(); - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 6); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 6, 0, { 6, 0, 0 } }, Found }, // ideal tile, not ready RetainTileDataAction{ { 6, 0, { 6, 0, 0 } }, TileNecessity::Required }, // @@ -1131,8 +1141,8 @@ TEST(UpdateRenderables, RepeatedRenderWithMissingOptionals) { // Mark next level has having tried optional. log.clear(); source.dataTiles[{ 5, 0, { 5, 0, 0 } }]->triedOptional = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 6); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 6, 0, { 6, 0, 0 } }, Found }, // ideal tile, not ready RetainTileDataAction{ { 6, 0, { 6, 0, 0 } }, TileNecessity::Required }, // @@ -1155,8 +1165,8 @@ TEST(UpdateRenderables, RepeatedRenderWithMissingOptionals) { // Mark next level has having tried optional. log.clear(); source.dataTiles[{ 4, 0, { 4, 0, 0 } }]->triedOptional = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 6); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 6, 0, { 6, 0, 0 } }, Found }, // ideal tile, not ready RetainTileDataAction{ { 6, 0, { 6, 0, 0 } }, TileNecessity::Required }, // @@ -1180,8 +1190,8 @@ TEST(UpdateRenderables, RepeatedRenderWithMissingOptionals) { // Mark next level has having tried optional. log.clear(); source.dataTiles[{ 3, 0, { 3, 0, 0 } }]->triedOptional = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 6); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 6, 0, { 6, 0, 0 } }, Found }, // ideal tile, not ready RetainTileDataAction{ { 6, 0, { 6, 0, 0 } }, TileNecessity::Required }, // @@ -1207,8 +1217,8 @@ TEST(UpdateRenderables, RepeatedRenderWithMissingOptionals) { log.clear(); auto tile_3_3_0_0 = source.dataTiles[{ 3, 0, { 3, 0, 0 } }].get(); tile_3_3_0_0->renderable = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 6); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 6, 0, { 6, 0, 0 } }, Found }, // ideal tile, not ready RetainTileDataAction{ { 6, 0, { 6, 0, 0 } }, TileNecessity::Required }, // @@ -1236,14 +1246,14 @@ TEST(UpdateRenderables, LoadRequiredIfIdealTileCantBeFound) { auto renderTile = renderTileFn(log); source.zoomRange.max = 6; - source.idealTiles.emplace(UnwrappedTileID{ 6, 0, 0 }); + source.idealTiles.emplace(OverscaledTileID{6, 0, 0}); auto tile_6_6_0_0 = source.createTileData(OverscaledTileID{ 6, 0, { 6, 0, 0 } }); tile_6_6_0_0->triedOptional = true; tile_6_6_0_0->loaded = true; - algorithm::updateRenderables(getTileData, createTileData, retainTileData, renderTile, - source.idealTiles, source.zoomRange, 6); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 6, 0, { 6, 0, 0 } }, Found }, // ideal tile, not found RetainTileDataAction{ { 6, 0, { 6, 0, 0 } }, TileNecessity::Required }, // @@ -1270,7 +1280,7 @@ TEST(UpdateRenderables, LoadOverscaledMaxZoomTile) { auto renderTile = renderTileFn(log); source.zoomRange.max = 2; - source.idealTiles.emplace(UnwrappedTileID{ 2, 0, 0 }); + source.idealTiles.emplace(OverscaledTileID{4, 0, {2, 0, 0}}); auto tile_4_2_0_0 = source.createTileData(OverscaledTileID{ 4, 0, { 2, 0, 0 } }); tile_4_2_0_0->renderable = false; @@ -1293,8 +1303,8 @@ TEST(UpdateRenderables, LoadOverscaledMaxZoomTile) { 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); + algorithm::updateRenderables( + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange); EXPECT_EQ(ActionLog({ GetTileDataAction{ { 4, 0, { 2, 0, 0 } }, Found }, RetainTileDataAction{ { 4, 0, { 2, 0, 0 } }, TileNecessity::Required }, @@ -1318,15 +1328,15 @@ TEST(UpdateRenderables, MaxParentOverscaleFactor) { auto retainTileData = retainTileDataFn(log); auto renderTile = renderTileFn(log); - source.idealTiles.emplace(UnwrappedTileID{4, 0, 0}); - source.idealTiles.emplace(UnwrappedTileID{4, 1, 0}); + source.idealTiles.emplace(OverscaledTileID{4, 0, 0}); + source.idealTiles.emplace(OverscaledTileID{4, 1, 0}); auto tile_0_0_0_0 = source.createTileData(OverscaledTileID{0, 0, 0}); tile_0_0_0_0->renderable = true; // Set max parent overscale factor to 4, so that tile 0,0,0 would be rendered algorithm::updateRenderables( - getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange, 4, 4); + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange, 4); EXPECT_EQ(ActionLog({GetTileDataAction{{4, 0, {4, 0, 0}}, NotFound}, // ideal tile CreateTileDataAction{{4, 0, {4, 0, 0}}}, RetainTileDataAction{{4, 0, {4, 0, 0}}, TileNecessity::Required}, @@ -1354,7 +1364,7 @@ TEST(UpdateRenderables, MaxParentOverscaleFactor) { // Set max parent overscale factor to 3. // Parent tile 0,0,0 should not be requested / rendered. algorithm::updateRenderables( - getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange, 4, 3); + getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange, 3); EXPECT_EQ(ActionLog({GetTileDataAction{{4, 0, {4, 0, 0}}, Found}, // ideal tile RetainTileDataAction{{4, 0, {4, 0, 0}}, TileNecessity::Required}, GetTileDataAction{{5, 0, {5, 0, 0}}, NotFound}, // child tiles |