This repository has been archived by the owner on Aug 8, 2023. It is now read-only.
Set Tile loaded/rendered instead of marking tile as optional. #11985
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #11957.
When a tile has no features
CustomGeometryTile::setTileData
marks it asTileNecessity::optional
, before callingGeometryTile:setData
. This call tosetData
triggers parse and layout on theGeometryTileWorker
and the worker will subsequently update the tile, which requests a new render frame. In the next frame, the tile is marked asTileNecessity::Required
again, triggerring a reload of the tile data and subsequent repeat layout of the empty feature data - creating a never-ending loop.The fix here is to mark the tile as
loaded
andrenderable
instead ofoptional
. This way the tile skips layout (and placement) and does not incur future reloads until evicted fro the tile cache.Verified the fix on iOS, macOS, and Android. CPU consumption drops back to 0 and tiles behave correctly.
The one thing I am not sure of in this approach is using the
loaded
andrenderable
protected members from theTile
parent class.cc @ChrisLoer @fabian-guerra