mirror of
https://github.com/felt/tippecanoe.git
synced 2026-10-02 08:25:40 +02:00
Speed up overzooming in tile-join (#147)
* Clip away entire features by bbox. Avoid unnecessary recompression. * Move parent tile decoding in tile-join out of overzoom proper * An ever-growing cache of parent tiles * Limit the size of the cache * Remove the current reader *before* checking if we can run the queue * Clean up * Add missing #include * Add comment * When the tile-join cache fills up, evict the least recently used * Fix microsecond math * Factoring out tile-join's cache for testing * Add unit tests for tile-join cache * Update changelog and version
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
#include "catch/catch.hpp"
|
||||
#include "text.hpp"
|
||||
#include "sort.hpp"
|
||||
#include "tile-cache.hpp"
|
||||
#include <unistd.h>
|
||||
#include <limits.h>
|
||||
|
||||
@@ -65,3 +66,36 @@ TEST_CASE("External quicksort", "fqsort") {
|
||||
fclose(f);
|
||||
REQUIRE(nread == written);
|
||||
}
|
||||
|
||||
mvt_tile mock_get_tile(zxy tile) {
|
||||
mvt_layer l;
|
||||
l.name = std::to_string(tile.z) + "/" + std::to_string(tile.x) + "/" + std::to_string(tile.y);
|
||||
mvt_tile t;
|
||||
t.layers.push_back(l);
|
||||
return t;
|
||||
}
|
||||
|
||||
TEST_CASE("Tile-join cache", "tile cache") {
|
||||
tile_cache tc;
|
||||
tc.capacity = 5;
|
||||
|
||||
REQUIRE(tc.get(zxy(11, 327, 791), mock_get_tile).layers[0].name == "11/327/791");
|
||||
REQUIRE(tc.get(zxy(11, 5, 7), mock_get_tile).layers[0].name == "11/5/7");
|
||||
REQUIRE(tc.get(zxy(11, 5, 8), mock_get_tile).layers[0].name == "11/5/8");
|
||||
REQUIRE(tc.get(zxy(11, 5, 9), mock_get_tile).layers[0].name == "11/5/9");
|
||||
REQUIRE(tc.get(zxy(11, 5, 10), mock_get_tile).layers[0].name == "11/5/10");
|
||||
REQUIRE(tc.get(zxy(11, 327, 791), mock_get_tile).layers[0].name == "11/327/791");
|
||||
REQUIRE(tc.overzoom_cache.size() == 5);
|
||||
REQUIRE(tc.overzoom_cache.find(zxy(11, 327, 791)) != tc.overzoom_cache.end());
|
||||
REQUIRE(tc.overzoom_cache.find(zxy(11, 5, 7)) != tc.overzoom_cache.end());
|
||||
|
||||
// verify that additional gets evict the least-recently-used elements
|
||||
|
||||
REQUIRE(tc.get(zxy(11, 5, 11), mock_get_tile).layers[0].name == "11/5/11");
|
||||
REQUIRE(tc.overzoom_cache.size() == 5);
|
||||
REQUIRE(tc.overzoom_cache.find(zxy(11, 5, 7)) == tc.overzoom_cache.end());
|
||||
|
||||
REQUIRE(tc.get(zxy(11, 5, 12), mock_get_tile).layers[0].name == "11/5/12");
|
||||
REQUIRE(tc.overzoom_cache.size() == 5);
|
||||
REQUIRE(tc.overzoom_cache.find(zxy(11, 5, 8)) == tc.overzoom_cache.end());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user