[core] Don't upload empty buckets

This commit is contained in:
Bruno de Oliveira Abinader
2017-07-05 14:37:49 +03:00
parent 754d2f377a
commit a1ed9f8794
3 changed files with 11 additions and 3 deletions

View File

@@ -28,6 +28,9 @@ public:
Bucket() = default;
virtual ~Bucket() = default;
// Feature geometries are also used to populate the feature index.
// Obtaining these is a costly operation, so we do it only once, and
// pass-by-const-ref the geometries as a second parameter.
virtual void addFeature(const GeometryTileFeature&,
const GeometryCollection&) {};
@@ -46,7 +49,7 @@ public:
};
bool needsUpload() const {
return !uploaded;
return hasData() && !uploaded;
}
protected:

View File

@@ -69,8 +69,7 @@ void SymbolBucket::render(Painter& painter,
}
bool SymbolBucket::hasData() const {
assert(false); // Should be calling SymbolLayout::has{Text,Icon,CollisonBox}Data() instead.
return false;
return hasTextData() || hasIconData() || hasCollisionBoxData();
}
bool SymbolBucket::hasTextData() const {

View File

@@ -16,16 +16,19 @@ using namespace mbgl;
TEST(Buckets, CircleBucket) {
CircleBucket bucket { { {0, 0, 0}, MapMode::Still, 1.0 }, {} };
ASSERT_FALSE(bucket.hasData());
ASSERT_FALSE(bucket.needsUpload());
}
TEST(Buckets, FillBucket) {
FillBucket bucket { { {0, 0, 0}, MapMode::Still, 1.0 }, {} };
ASSERT_FALSE(bucket.hasData());
ASSERT_FALSE(bucket.needsUpload());
}
TEST(Buckets, LineBucket) {
LineBucket bucket { { {0, 0, 0}, MapMode::Still, 1.0 }, {}, {} };
ASSERT_FALSE(bucket.hasData());
ASSERT_FALSE(bucket.needsUpload());
}
TEST(Buckets, SymbolBucket) {
@@ -37,6 +40,8 @@ TEST(Buckets, SymbolBucket) {
ASSERT_FALSE(bucket.hasIconData());
ASSERT_FALSE(bucket.hasTextData());
ASSERT_FALSE(bucket.hasCollisionBoxData());
ASSERT_FALSE(bucket.hasData());
ASSERT_FALSE(bucket.needsUpload());
}
TEST(Buckets, RasterBucket) {
@@ -44,6 +49,7 @@ TEST(Buckets, RasterBucket) {
UnassociatedImage rgba({ 1, 1 });
RasterBucket bucket = { std::move(rgba) };
ASSERT_TRUE(bucket.hasData());
ASSERT_TRUE(bucket.needsUpload());
bucket.upload(context);