[core] Pass ImageManager to ImageRequestor's constructor
This makes ImageRequestor API explicitly dependant on ImageManager, so that ImageRequestor can unregister itself from ImageManager on destruction.
This commit is contained in:
@@ -288,4 +288,11 @@ gfx::TextureBinding ImageManager::textureBinding(gfx::Context& context) {
|
||||
return { atlasTexture->getResource(), gfx::TextureFilterType::Linear };
|
||||
}
|
||||
|
||||
ImageRequestor::ImageRequestor(ImageManager& imageManager_) : imageManager(imageManager_) {
|
||||
}
|
||||
|
||||
ImageRequestor::~ImageRequestor() {
|
||||
imageManager.removeRequestor(*this);
|
||||
}
|
||||
|
||||
} // namespace mbgl
|
||||
|
||||
@@ -19,11 +19,7 @@ namespace gfx {
|
||||
class Context;
|
||||
} // namespace gfx
|
||||
|
||||
class ImageRequestor {
|
||||
public:
|
||||
virtual ~ImageRequestor() = default;
|
||||
virtual void onImagesAvailable(ImageMap icons, ImageMap patterns, ImageVersionMap versionMap, uint64_t imageCorrelationID) = 0;
|
||||
};
|
||||
class ImageRequestor;
|
||||
|
||||
/*
|
||||
ImageManager does two things:
|
||||
@@ -105,4 +101,13 @@ private:
|
||||
bool dirty = true;
|
||||
};
|
||||
|
||||
class ImageRequestor {
|
||||
public:
|
||||
explicit ImageRequestor(ImageManager&);
|
||||
virtual ~ImageRequestor();
|
||||
virtual void onImagesAvailable(ImageMap icons, ImageMap patterns, ImageVersionMap versionMap, uint64_t imageCorrelationID) = 0;
|
||||
private:
|
||||
ImageManager& imageManager;
|
||||
};
|
||||
|
||||
} // namespace mbgl
|
||||
|
||||
@@ -42,6 +42,7 @@ GeometryTile::GeometryTile(const OverscaledTileID& id_,
|
||||
std::string sourceID_,
|
||||
const TileParameters& parameters)
|
||||
: Tile(Kind::Geometry, id_),
|
||||
ImageRequestor(parameters.imageManager),
|
||||
sourceID(std::move(sourceID_)),
|
||||
mailbox(std::make_shared<Mailbox>(*Scheduler::GetCurrent())),
|
||||
worker(parameters.workerScheduler,
|
||||
@@ -60,7 +61,6 @@ GeometryTile::GeometryTile(const OverscaledTileID& id_,
|
||||
|
||||
GeometryTile::~GeometryTile() {
|
||||
glyphManager.removeRequestor(*this);
|
||||
imageManager.removeRequestor(*this);
|
||||
markObsolete();
|
||||
}
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ class TileParameters;
|
||||
class GlyphAtlas;
|
||||
class ImageAtlas;
|
||||
|
||||
class GeometryTile : public Tile, public GlyphRequestor, ImageRequestor {
|
||||
class GeometryTile : public Tile, public GlyphRequestor, public ImageRequestor {
|
||||
public:
|
||||
GeometryTile(const OverscaledTileID&,
|
||||
std::string sourceID,
|
||||
|
||||
@@ -108,6 +108,8 @@ TEST(ImageManager, RemoveReleasesBinPackRect) {
|
||||
|
||||
class StubImageRequestor : public ImageRequestor {
|
||||
public:
|
||||
StubImageRequestor(ImageManager& imageManager) : ImageRequestor(imageManager) {}
|
||||
|
||||
void onImagesAvailable(ImageMap icons, ImageMap patterns, std::unordered_map<std::string, uint32_t> versionMap, uint64_t imageCorrelationID_) final {
|
||||
if (imagesAvailable && imageCorrelationID == imageCorrelationID_) imagesAvailable(icons, patterns, versionMap);
|
||||
}
|
||||
@@ -118,7 +120,7 @@ public:
|
||||
|
||||
TEST(ImageManager, NotifiesRequestorWhenSpriteIsLoaded) {
|
||||
ImageManager imageManager;
|
||||
StubImageRequestor requestor;
|
||||
StubImageRequestor requestor(imageManager);
|
||||
bool notified = false;
|
||||
|
||||
ImageManagerObserver observer;
|
||||
@@ -142,7 +144,7 @@ TEST(ImageManager, NotifiesRequestorWhenSpriteIsLoaded) {
|
||||
|
||||
TEST(ImageManager, NotifiesRequestorImmediatelyIfDependenciesAreSatisfied) {
|
||||
ImageManager imageManager;
|
||||
StubImageRequestor requestor;
|
||||
StubImageRequestor requestor(imageManager);
|
||||
bool notified = false;
|
||||
|
||||
requestor.imagesAvailable = [&] (ImageMap, ImageMap, std::unordered_map<std::string, uint32_t>) {
|
||||
@@ -170,7 +172,7 @@ class StubImageManagerObserver : public ImageManagerObserver {
|
||||
|
||||
TEST(ImageManager, OnStyleImageMissingBeforeSpriteLoaded) {
|
||||
ImageManager imageManager;
|
||||
StubImageRequestor requestor;
|
||||
StubImageRequestor requestor(imageManager);
|
||||
StubImageManagerObserver observer;
|
||||
|
||||
imageManager.setObserver(&observer);
|
||||
@@ -203,7 +205,7 @@ TEST(ImageManager, OnStyleImageMissingBeforeSpriteLoaded) {
|
||||
|
||||
TEST(ImageManager, OnStyleImageMissingAfterSpriteLoaded) {
|
||||
ImageManager imageManager;
|
||||
StubImageRequestor requestor;
|
||||
StubImageRequestor requestor(imageManager);
|
||||
StubImageManagerObserver observer;
|
||||
|
||||
imageManager.setObserver(&observer);
|
||||
|
||||
Reference in New Issue
Block a user