From 6a2764bbe0077b42664a8b83915cc3cd9d8890c9 Mon Sep 17 00:00:00 2001 From: Alexander Shalamov Date: Mon, 25 Feb 2019 09:53:13 +0200 Subject: [core] Add unit test for RenderCircleLayer::filterRenderTiles --- test/renderer/layers/render_circle_layer.test.cpp | 119 ++++++++++++++++++++++ test/test-files.json | 1 + 2 files changed, 120 insertions(+) create mode 100644 test/renderer/layers/render_circle_layer.test.cpp diff --git a/test/renderer/layers/render_circle_layer.test.cpp b/test/renderer/layers/render_circle_layer.test.cpp new file mode 100644 index 0000000000..bb02b2e885 --- /dev/null +++ b/test/renderer/layers/render_circle_layer.test.cpp @@ -0,0 +1,119 @@ +#include + +#include +#include +#include +#include +#include + +using namespace mbgl; +using namespace mbgl::style; + +class MockBucket final : public Bucket { +public: + using Bucket::Bucket; + void upload(gl::Context&) {} + bool hasData() const { return false; } + bool supportsLayer(const style::Layer::Impl&) const { return true; } +}; + +class MockTile final : public Tile { +public: + MockTile(OverscaledTileID id) : Tile(Tile::Kind::Geometry, id) { + renderable = true; + bucket = std::make_shared(); + } + void upload(gl::Context&){} + Bucket* getBucket(const style::Layer::Impl&) const {return bucket.get();} + + std::shared_ptr bucket; +}; + +struct MockRenderTileData { + std::vector> getRenderTiles() { + return {renderTiles.begin(), renderTiles.end()}; + } + std::list renderTiles; + std::vector> tiles; +}; + +template +MockRenderTileData generateRenderTileData(Ts&&... tileIds) { + MockRenderTileData data; + for (auto&& tileId : { tileIds... }) { + auto tile = std::make_unique(tileId.overscaleTo(tileId.canonical.z)); + data.renderTiles.push_back(RenderTile(tileId, *tile)); + data.tiles.emplace_back(std::move(tile)); + } + return data; +} + +TEST(RenderCircleLayer, FilterRenderTiles) { + auto layer = std::make_unique("circle", "source"); + auto renderLayer = std::make_unique(layer->mutableImpl()); + + // One parent overlaps 4 children. + auto one = generateRenderTileData(UnwrappedTileID{0, 0, 0}, + UnwrappedTileID{1, 0, 0}, + UnwrappedTileID{1, 0, 1}, + UnwrappedTileID{1, 1, 0}, + UnwrappedTileID{1, 1, 1}); + + ASSERT_EQ(renderLayer->filterRenderTiles(one.getRenderTiles()).size(), 1); + + // Two parent tiles overlap 5 child tiles. + auto two = generateRenderTileData(UnwrappedTileID{0, 0, 0}, + UnwrappedTileID{1, 0, 0}, + UnwrappedTileID{1, 0, 1}, + UnwrappedTileID{1, 1, 0}, + UnwrappedTileID{1, 1, 1}, + UnwrappedTileID{0, 0, 0}, + UnwrappedTileID{1, 1, 1}); + + ASSERT_EQ(renderLayer->filterRenderTiles(two.getRenderTiles()).size(), 2); + + // Three parent tiles overlapping 3 child tiles. + auto three = generateRenderTileData(UnwrappedTileID{13,4662,2369}, + UnwrappedTileID{13,4662,2370}, + UnwrappedTileID{13,4662,2371}, + UnwrappedTileID{13,4663,2371}, + UnwrappedTileID{14,9325,4740}, + UnwrappedTileID{14,9326,4739}, + UnwrappedTileID{14,9326,4740}, + UnwrappedTileID{14,9326,4741}, + UnwrappedTileID{14,9326,4742}, + UnwrappedTileID{14,9327,4739}, + UnwrappedTileID{14,9327,4740}, + UnwrappedTileID{14,9327,4741}, + UnwrappedTileID{14,9327,4742}, + UnwrappedTileID{14,9328,4739}, + UnwrappedTileID{14,9328,4740}); + + ASSERT_EQ(renderLayer->filterRenderTiles(three.getRenderTiles()).size(), 12); + + // One parent that overlaps 4 children tiles. + auto four = generateRenderTileData(UnwrappedTileID{10,583,296}, + UnwrappedTileID{14,9324,4739}, + UnwrappedTileID{14,9324,4740}, + UnwrappedTileID{14,9325,4739}, + UnwrappedTileID{14,9325,4740}, + UnwrappedTileID{14,9325,4741}, + UnwrappedTileID{14,9325,4742}, + UnwrappedTileID{14,9325,4743}, + UnwrappedTileID{14,9326,4739}, + UnwrappedTileID{14,9326,4740}, + UnwrappedTileID{14,9326,4741}, + UnwrappedTileID{14,9326,4742}, + UnwrappedTileID{14,9326,4743}, + UnwrappedTileID{14,9327,4739}, + UnwrappedTileID{14,9327,4740}, + UnwrappedTileID{14,9327,4741}, + UnwrappedTileID{14,9327,4742}, + UnwrappedTileID{14,9327,4743}, + UnwrappedTileID{14,9328,4739}, + UnwrappedTileID{14,9328,4740}, + UnwrappedTileID{14,9328,4741}, + UnwrappedTileID{14,9328,4742}); + + ASSERT_EQ(renderLayer->filterRenderTiles(four.getRenderTiles()).size(), 18); +} diff --git a/test/test-files.json b/test/test-files.json index 498237e072..4e81bdf201 100644 --- a/test/test-files.json +++ b/test/test-files.json @@ -30,6 +30,7 @@ "test/renderer/backend_scope.test.cpp", "test/renderer/group_by_layout.test.cpp", "test/renderer/image_manager.test.cpp", + "test/renderer/layers/render_circle_layer.test.cpp", "test/sprite/sprite_loader.test.cpp", "test/sprite/sprite_parser.test.cpp", "test/src/mbgl/test/fixture_log_observer.cpp", -- cgit v1.2.1