[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.
This commit is contained in:
Konstantin Käfer
2018-09-20 12:07:02 +02:00
parent f49a9ca1de
commit 2ea0833ecf
2 changed files with 54 additions and 5 deletions

View File

@@ -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);
}