Reuse prefetched tiles to avoid empty screen (#2668)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Bart Louwers <bart.louwers@gmail.com>
This commit is contained in:
Alex Cristici
2024-08-14 23:11:42 +03:00
committed by GitHub
parent d19ab42d0a
commit 5ec97c39fe
3 changed files with 123 additions and 55 deletions

View File

@@ -118,7 +118,7 @@ TEST(UpdateRenderables, SingleTile) {
tile_1_1_1_1->renderable = true;
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{1, 0, {1, 1, 1}}, Found}, // found ideal tile
RetainTileDataAction{{1, 0, {1, 1, 1}}, TileNecessity::Required}, //
@@ -129,7 +129,7 @@ TEST(UpdateRenderables, SingleTile) {
// Check a repeated render with the same data.
log.clear();
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{1, 0, {1, 1, 1}}, Found}, // found ideal tile
RetainTileDataAction{{1, 0, {1, 1, 1}}, TileNecessity::Required}, //
@@ -141,7 +141,7 @@ TEST(UpdateRenderables, SingleTile) {
log.clear();
source.idealTiles.emplace(OverscaledTileID{1, 0, 1});
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{1, 0, {1, 0, 1}}, NotFound}, // missing ideal tile
CreateTileDataAction{{1, 0, {1, 0, 1}}}, // create ideal tile
@@ -162,7 +162,7 @@ TEST(UpdateRenderables, SingleTile) {
log.clear();
source.dataTiles[{1, 0, {1, 0, 1}}]->triedOptional = true;
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{1, 0, {1, 0, 1}}, Found}, // missing ideal tile
RetainTileDataAction{{1, 0, {1, 0, 1}}, TileNecessity::Required}, //
@@ -185,7 +185,7 @@ TEST(UpdateRenderables, SingleTile) {
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);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{1, 0, {1, 0, 1}}, Found}, // newly added tile
RetainTileDataAction{{1, 0, {1, 0, 1}}, TileNecessity::Required}, //
@@ -204,7 +204,7 @@ TEST(UpdateRenderables, SingleTile) {
auto tile_1_1_0_0 = source.createTileData(OverscaledTileID{1, 0, 0});
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{1, 0, {1, 0, 0}}, Found}, // found tile, not ready
RetainTileDataAction{{1, 0, {1, 0, 0}}, TileNecessity::Required}, //
@@ -230,7 +230,7 @@ TEST(UpdateRenderables, SingleTile) {
log.clear();
tile_1_1_0_0->renderable = true;
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{1, 0, {1, 0, 0}}, Found}, // found tile, now ready
RetainTileDataAction{{1, 0, {1, 0, 0}}, TileNecessity::Required}, //
@@ -263,7 +263,7 @@ TEST(UpdateRenderables, UseParentTile) {
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);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{1, 0, {1, 0, 1}}, NotFound}, // missing ideal tile
CreateTileDataAction{{1, 0, {1, 0, 1}}}, //
@@ -306,7 +306,7 @@ TEST(UpdateRenderables, DontUseWrongParentTile) {
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);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{2, 0, {2, 0, 0}}, NotFound}, // missing ideal tile
CreateTileDataAction{{2, 0, {2, 0, 0}}}, //
@@ -324,7 +324,7 @@ TEST(UpdateRenderables, DontUseWrongParentTile) {
log.clear();
source.dataTiles[{2, 0, {2, 0, 0}}]->triedOptional = true;
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{2, 0, {2, 0, 0}}, Found}, // non-ready ideal tile
RetainTileDataAction{{2, 0, {2, 0, 0}}, TileNecessity::Required}, //
@@ -343,7 +343,7 @@ TEST(UpdateRenderables, DontUseWrongParentTile) {
log.clear();
source.idealTiles.emplace(OverscaledTileID{2, 2, 0});
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{2, 0, {2, 0, 0}}, Found}, // non-ready ideal tile
RetainTileDataAction{{2, 0, {2, 0, 0}}, TileNecessity::Required}, //
@@ -388,7 +388,7 @@ TEST(UpdateRenderables, UseParentTileWhenChildNotReady) {
// Make sure that it renders the parent tile.
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{1, 0, {1, 0, 1}}, Found}, // found, but not ready
RetainTileDataAction{{1, 0, {1, 0, 1}}, TileNecessity::Required}, //
@@ -406,7 +406,7 @@ TEST(UpdateRenderables, UseParentTileWhenChildNotReady) {
log.clear();
tile_1_1_0_1->renderable = true;
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{1, 0, {1, 0, 1}}, Found}, // found and ready
RetainTileDataAction{{1, 0, {1, 0, 1}}, TileNecessity::Required}, //
@@ -433,7 +433,7 @@ TEST(UpdateRenderables, UseOverlappingParentTile) {
tile_1_1_0_1->renderable = true;
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{1, 0, {1, 0, 0}}, NotFound}, // ideal tile not found
CreateTileDataAction{{1, 0, {1, 0, 0}}}, //
@@ -469,7 +469,7 @@ TEST(UpdateRenderables, UseChildTiles) {
tile_1_1_1_0->renderable = true;
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{0, 0, {0, 0, 0}}, NotFound}, // ideal tile, missing
CreateTileDataAction{{0, 0, {0, 0, 0}}}, //
@@ -485,6 +485,33 @@ TEST(UpdateRenderables, UseChildTiles) {
// no parent tile of 0 to consider
}),
log);
// Remove direct children and add children 2 zoom levels down
log.clear();
source.dataTiles.erase(OverscaledTileID{1, 0, 0});
source.dataTiles.erase(OverscaledTileID{1, 1, 0});
auto tile_2_2_0_0 = source.createTileData(OverscaledTileID{2, 0, 0});
tile_2_2_0_0->renderable = true;
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.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{0, 0, {0, 0, 0}}, Found}, // ideal tile not ready
RetainTileDataAction{{0, 0, {0, 0, 0}}, TileNecessity::Required}, //
GetTileDataAction{{1, 0, {1, 0, 0}}, NotFound}, // child tile not found
GetTileDataAction{{1, 0, {1, 0, 1}}, NotFound}, // child tile not found
GetTileDataAction{{1, 0, {1, 1, 0}}, NotFound}, // child tile not found
GetTileDataAction{{1, 0, {1, 1, 1}}, NotFound}, // child tile not found
// no parent tile of 0 to consider
// no parent or child tile found, check prefetched tiles
RetainTileDataAction{{2, 0, {2, 0, 0}}, TileNecessity::Optional}, //
RenderTileAction{{2, 0, 0}, *tile_2_2_0_0}, // render child from 2 levels down
RetainTileDataAction{{2, 0, {2, 1, 0}}, TileNecessity::Optional}, //
RenderTileAction{{2, 1, 0}, *tile_2_2_1_0}, // render child from 2 levels down
}),
log);
}
TEST(UpdateRenderables, PreferChildTiles) {
@@ -503,7 +530,7 @@ TEST(UpdateRenderables, PreferChildTiles) {
tile_2_2_0_0->renderable = true;
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{1, 0, {1, 0, 0}}, NotFound}, // ideal tile, not found
CreateTileDataAction{{1, 0, {1, 0, 0}}}, //
@@ -526,7 +553,7 @@ TEST(UpdateRenderables, PreferChildTiles) {
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);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, 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
@@ -549,7 +576,7 @@ TEST(UpdateRenderables, PreferChildTiles) {
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);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, 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
@@ -575,7 +602,7 @@ TEST(UpdateRenderables, PreferChildTiles) {
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);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, 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
@@ -613,7 +640,7 @@ TEST(UpdateRenderables, UseParentAndChildTiles) {
// 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);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{1, 0, {1, 0, 0}}, NotFound}, // ideal tile, missing
CreateTileDataAction{{1, 0, {1, 0, 0}}}, //
@@ -634,7 +661,7 @@ TEST(UpdateRenderables, UseParentAndChildTiles) {
log.clear();
source.dataTiles.erase(OverscaledTileID{2, 0, 0});
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{1, 0, {1, 0, 0}}, Found}, // ideal tile, not ready
RetainTileDataAction{{1, 0, {1, 0, 0}}, TileNecessity::Required}, //
@@ -664,7 +691,7 @@ TEST(UpdateRenderables, DontUseTilesLowerThanMinzoom) {
tile_1_1_0_0->renderable = true;
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{2, 0, {2, 0, 0}}, NotFound}, // ideal tile, missing
CreateTileDataAction{{2, 0, {2, 0, 0}}}, //
@@ -693,7 +720,7 @@ TEST(UpdateRenderables, UseOverzoomedTileAfterMaxzoom) {
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);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{2, 0, {2, 0, 0}}, NotFound}, // ideal tile, missing
CreateTileDataAction{{2, 0, {2, 0, 0}}}, //
@@ -708,7 +735,7 @@ TEST(UpdateRenderables, UseOverzoomedTileAfterMaxzoom) {
log.clear();
source.dataTiles[{2, 0, {2, 0, 0}}]->triedOptional = true;
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{2, 0, {2, 0, 0}}, Found}, // ideal tile, missing
RetainTileDataAction{{2, 0, {2, 0, 0}}, TileNecessity::Required}, //
@@ -727,7 +754,7 @@ TEST(UpdateRenderables, UseOverzoomedTileAfterMaxzoom) {
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);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{3, 0, {2, 0, 0}}, NotFound}, // ideal tile, missing
CreateTileDataAction{{3, 0, {2, 0, 0}}}, //
@@ -744,7 +771,7 @@ TEST(UpdateRenderables, UseOverzoomedTileAfterMaxzoom) {
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);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{3, 0, {2, 0, 0}}, Found}, //
RetainTileDataAction{{3, 0, {2, 0, 0}}, TileNecessity::Required}, //
@@ -757,7 +784,7 @@ TEST(UpdateRenderables, UseOverzoomedTileAfterMaxzoom) {
source.idealTiles.clear();
source.idealTiles.emplace(OverscaledTileID{2, 0, 0});
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{2, 0, {2, 0, 0}}, Found}, //
RetainTileDataAction{{2, 0, {2, 0, 0}}, TileNecessity::Required}, //
@@ -772,7 +799,7 @@ TEST(UpdateRenderables, UseOverzoomedTileAfterMaxzoom) {
// Use the overzoomed tile even though it doesn't match the zoom level.
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{2, 0, {2, 0, 0}}, NotFound}, //
CreateTileDataAction{{2, 0, {2, 0, 0}}}, //
@@ -799,7 +826,7 @@ TEST(UpdateRenderables, AscendToNonOverzoomedTiles) {
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);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{3, 0, {2, 0, 0}}, Found}, //
RetainTileDataAction{{3, 0, {2, 0, 0}}, TileNecessity::Required}, //
@@ -814,7 +841,7 @@ TEST(UpdateRenderables, AscendToNonOverzoomedTiles) {
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);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{3, 0, {2, 0, 0}}, NotFound}, //
CreateTileDataAction{{3, 0, {2, 0, 0}}}, //
@@ -833,7 +860,7 @@ TEST(UpdateRenderables, AscendToNonOverzoomedTiles) {
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);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{3, 0, {2, 0, 0}}, Found}, // ideal tile, not ready
RetainTileDataAction{{3, 0, {2, 0, 0}}, TileNecessity::Required}, //
@@ -849,7 +876,7 @@ TEST(UpdateRenderables, AscendToNonOverzoomedTiles) {
log.clear();
source.dataTiles[{3, 0, {2, 0, 0}}]->triedOptional = true;
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{3, 0, {2, 0, 0}}, Found}, // ideal tile, not ready
RetainTileDataAction{{3, 0, {2, 0, 0}}, TileNecessity::Required}, //
@@ -876,7 +903,7 @@ TEST(UpdateRenderables, DoNotAscendMultipleTimesIfNotFound) {
source.idealTiles.emplace(OverscaledTileID{8, 1, 0});
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{8, 0, {8, 0, 0}}, NotFound}, // ideal tile
CreateTileDataAction{{8, 0, {8, 0, 0}}}, //
@@ -911,7 +938,7 @@ TEST(UpdateRenderables, DoNotAscendMultipleTimesIfNotFound) {
tile_4_0_0_0->renderable = true;
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{8, 0, {8, 0, 0}}, Found}, // ideal tile, not ready
RetainTileDataAction{{8, 0, {8, 0, 0}}, TileNecessity::Required}, //
@@ -951,7 +978,7 @@ TEST(UpdateRenderables, DontRetainUnusedNonIdealTiles) {
source.createTileData(OverscaledTileID{2, 0, 0});
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{2, 0, {2, 0, 0}}, Found}, // ideal tile, not ready
RetainTileDataAction{{2, 0, {2, 0, 0}}, TileNecessity::Required}, //
@@ -989,7 +1016,7 @@ TEST(UpdateRenderables, WrappedTiles) {
tile_0_0_0_0->renderable = true;
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(
ActionLog({
GetTileDataAction{{1, -1, {1, 1, 0}}, NotFound}, // ideal tile 1/-1/0 (wrapped to -1)
@@ -1044,7 +1071,7 @@ TEST(UpdateRenderables, RepeatedRenderWithMissingOptionals) {
source.idealTiles.emplace(OverscaledTileID{6, 0, 0});
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{6, 0, {6, 0, 0}}, NotFound}, // ideal tile, not found
CreateTileDataAction{{6, 0, {6, 0, 0}}}, //
@@ -1065,7 +1092,7 @@ TEST(UpdateRenderables, RepeatedRenderWithMissingOptionals) {
// Repeat.
log.clear();
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{6, 0, {6, 0, 0}}, Found}, // ideal tile, not ready
RetainTileDataAction{{6, 0, {6, 0, 0}}, TileNecessity::Required}, //
@@ -1086,7 +1113,7 @@ TEST(UpdateRenderables, RepeatedRenderWithMissingOptionals) {
log.clear();
source.dataTiles[{6, 0, {6, 0, 0}}]->triedOptional = true;
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{6, 0, {6, 0, 0}}, Found}, // ideal tile, not ready
RetainTileDataAction{{6, 0, {6, 0, 0}}, TileNecessity::Required}, //
@@ -1108,7 +1135,7 @@ TEST(UpdateRenderables, RepeatedRenderWithMissingOptionals) {
// Repeat.
log.clear();
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{6, 0, {6, 0, 0}}, Found}, // ideal tile, not ready
RetainTileDataAction{{6, 0, {6, 0, 0}}, TileNecessity::Required}, //
@@ -1130,7 +1157,7 @@ TEST(UpdateRenderables, RepeatedRenderWithMissingOptionals) {
log.clear();
source.dataTiles[{5, 0, {5, 0, 0}}]->triedOptional = true;
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{6, 0, {6, 0, 0}}, Found}, // ideal tile, not ready
RetainTileDataAction{{6, 0, {6, 0, 0}}, TileNecessity::Required}, //
@@ -1154,7 +1181,7 @@ TEST(UpdateRenderables, RepeatedRenderWithMissingOptionals) {
log.clear();
source.dataTiles[{4, 0, {4, 0, 0}}]->triedOptional = true;
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{6, 0, {6, 0, 0}}, Found}, // ideal tile, not ready
RetainTileDataAction{{6, 0, {6, 0, 0}}, TileNecessity::Required}, //
@@ -1179,7 +1206,7 @@ TEST(UpdateRenderables, RepeatedRenderWithMissingOptionals) {
log.clear();
source.dataTiles[{3, 0, {3, 0, 0}}]->triedOptional = true;
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{6, 0, {6, 0, 0}}, Found}, // ideal tile, not ready
RetainTileDataAction{{6, 0, {6, 0, 0}}, TileNecessity::Required}, //
@@ -1206,7 +1233,7 @@ TEST(UpdateRenderables, RepeatedRenderWithMissingOptionals) {
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);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{6, 0, {6, 0, 0}}, Found}, // ideal tile, not ready
RetainTileDataAction{{6, 0, {6, 0, 0}}, TileNecessity::Required}, //
@@ -1241,7 +1268,7 @@ TEST(UpdateRenderables, LoadRequiredIfIdealTileCantBeFound) {
tile_6_6_0_0->loaded = true;
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{6, 0, {6, 0, 0}}, Found}, // ideal tile, not found
RetainTileDataAction{{6, 0, {6, 0, 0}}, TileNecessity::Required}, //
@@ -1292,7 +1319,7 @@ TEST(UpdateRenderables, LoadOverscaledMaxZoomTile) {
tile_1_1_0_0->loaded = true;
algorithm::updateRenderables(
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.zoomRange);
getTileData, createTileData, retainTileData, renderTile, source.idealTiles, source.dataTiles, source.zoomRange);
EXPECT_EQ(ActionLog({
GetTileDataAction{{4, 0, {2, 0, 0}}, Found},
RetainTileDataAction{{4, 0, {2, 0, 0}}, TileNecessity::Required},
@@ -1323,8 +1350,14 @@ TEST(UpdateRenderables, MaxParentOverscaleFactor) {
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);
algorithm::updateRenderables(getTileData,
createTileData,
retainTileData,
renderTile,
source.idealTiles,
source.dataTiles,
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},
@@ -1351,8 +1384,14 @@ 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, 3);
algorithm::updateRenderables(getTileData,
createTileData,
retainTileData,
renderTile,
source.idealTiles,
source.dataTiles,
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