summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/actions/actions.cpp10
-rw-r--r--src/client.cpp5
-rw-r--r--src/dyetool/client.cpp1
-rw-r--r--src/dyetool/dyemain.cpp1
-rw-r--r--src/fs/files_unittest.cc6
-rw-r--r--src/game.cpp2
-rw-r--r--src/gui/gui.cpp5
-rw-r--r--src/gui/widgets/browserbox_unittest.cc19
-rw-r--r--src/gui/widgets/desktop.cpp4
-rw-r--r--src/gui/windowmanager_unittest.cc24
-rw-r--r--src/integrity_unittest.cc23
-rw-r--r--src/resources/atlas/atlasmanager.cpp16
-rw-r--r--src/resources/atlas/atlasresource.cpp2
-rw-r--r--src/resources/dye/dye_unittest.cc21
-rw-r--r--src/resources/dye/dyepalette_unittest.cc19
-rw-r--r--src/resources/image/image.cpp2
-rw-r--r--src/resources/loaders/atlasloader.cpp2
-rw-r--r--src/resources/loaders/emptyatlasloader.cpp2
-rw-r--r--src/resources/loaders/imageloader.cpp2
-rw-r--r--src/resources/loaders/imagesetloader.cpp2
-rw-r--r--src/resources/loaders/musicloader.cpp2
-rw-r--r--src/resources/loaders/rescaledloader.cpp2
-rw-r--r--src/resources/loaders/shaderloader.cpp2
-rw-r--r--src/resources/loaders/shaderprogramloader.cpp2
-rw-r--r--src/resources/loaders/soundloader.cpp2
-rw-r--r--src/resources/loaders/spritedefloader.cpp2
-rw-r--r--src/resources/loaders/subimageloader.cpp2
-rw-r--r--src/resources/loaders/subimagesetloader.cpp2
-rw-r--r--src/resources/loaders/walklayerloader.cpp2
-rw-r--r--src/resources/loaders/xmlloader.cpp2
-rw-r--r--src/resources/map/maplayer_unittest.cc3
-rw-r--r--src/resources/map/speciallayer_unittest.cc23
-rw-r--r--src/resources/memorymanager.cpp8
-rw-r--r--src/resources/resource.cpp2
-rw-r--r--src/resources/resource.h20
-rw-r--r--src/resources/resourcemanager/resourcemanager.cpp221
-rw-r--r--src/resources/resourcemanager/resourcemanager.h155
-rw-r--r--src/resources/resourcemanager/resourcemanager_unittest.cc483
-rw-r--r--src/resources/sprite/animatedsprite.cpp2
-rw-r--r--src/resources/sprite/animatedsprite_unittest.cc19
-rw-r--r--src/utils/chatutils_unittest.cc19
-rw-r--r--src/utils/stringutils_unittest.cc1
-rw-r--r--src/utils/translation/poparser_unittest.cc19
-rw-r--r--src/utils/xml_unittest.cc25
-rw-r--r--src/utils/xmlutils_unittest.cc23
45 files changed, 723 insertions, 488 deletions
diff --git a/src/actions/actions.cpp b/src/actions/actions.cpp
index b4fadf62d..c6d48a1d9 100644
--- a/src/actions/actions.cpp
+++ b/src/actions/actions.cpp
@@ -1038,7 +1038,7 @@ impHandler0(who)
impHandler0(cleanGraphics)
{
- resourceManager->clearCache();
+ ResourceManager::clearCache();
if (debugChatTab)
{
@@ -1274,20 +1274,20 @@ impHandler(dump)
if (!event.args.empty())
{
- ResourceManager::Resources *res = resourceManager->getResources();
+ ResourceManager::Resources *res = ResourceManager::getResources();
// TRANSLATORS: dump command
showRes(_("Resource images:"), res);
- res = resourceManager->getOrphanedResources();
+ res = ResourceManager::getOrphanedResources();
// TRANSLATORS: dump command
showRes(_("Resource orphaned images:"), res);
}
else
{
- ResourceManager::Resources *res = resourceManager->getResources();
+ ResourceManager::Resources *res = ResourceManager::getResources();
// TRANSLATORS: dump command
debugChatTab->chatLog(_("Resource images:") + toString(res->size()),
ChatMsgType::BY_SERVER);
- res = resourceManager->getOrphanedResources();
+ res = ResourceManager::getOrphanedResources();
// TRANSLATORS: dump command
debugChatTab->chatLog(_("Resource orphaned images:")
+ toString(res->size()),
diff --git a/src/client.cpp b/src/client.cpp
index f1ede82a2..2868b675d 100644
--- a/src/client.cpp
+++ b/src/client.cpp
@@ -334,7 +334,6 @@ void Client::gameInit()
ConfigManager::storeSafeParameters();
#endif // ANDROID
- ResourceManager::init();
if (!VirtFs::setWriteDir(settings.localDataDir))
{
logger->error(strprintf("%s couldn't be set as home directory! "
@@ -1039,7 +1038,7 @@ int Client::gameExec()
delete2(mGame);
assertListener = new AssertListener;
Game::clearInstance();
- resourceManager->cleanOrphans();
+ ResourceManager::cleanOrphans();
Party::clearParties();
Guild::clearGuilds();
NpcDialog::clearDialogs();
@@ -1111,7 +1110,7 @@ int Client::gameExec()
"local/"));
}
- resourceManager->clearCache();
+ ResourceManager::clearCache();
loginData.clearUpdateHost();
serverVersion = 0;
diff --git a/src/dyetool/client.cpp b/src/dyetool/client.cpp
index cf3fceed6..0815272d4 100644
--- a/src/dyetool/client.cpp
+++ b/src/dyetool/client.cpp
@@ -189,7 +189,6 @@ void Client::gameInit()
ConfigManager::storeSafeParameters();
#endif // ANDROID
- ResourceManager::init();
if (!VirtFs::setWriteDir(settings.localDataDir))
{
logger->error(strprintf("%s couldn't be set as home directory! "
diff --git a/src/dyetool/dyemain.cpp b/src/dyetool/dyemain.cpp
index 3b6fafb3b..9ee1bd0a9 100644
--- a/src/dyetool/dyemain.cpp
+++ b/src/dyetool/dyemain.cpp
@@ -87,7 +87,6 @@ int main(int argc, char **argv)
imageHelper = new SDLImageHelper;
#endif // USE_SDL2
- ResourceManager::init();
VirtFs::setWriteDir(".");
VirtFs::mountDir(".", Append_false);
VirtFs::mountDir("/", Append_false);
diff --git a/src/fs/files_unittest.cc b/src/fs/files_unittest.cc
index bb9822343..bc4c2dbf6 100644
--- a/src/fs/files_unittest.cc
+++ b/src/fs/files_unittest.cc
@@ -35,7 +35,6 @@
TEST_CASE("Files renameFile")
{
logger = new Logger();
- ResourceManager::init();
VirtFs::mountDirSilent("data", Append_false);
VirtFs::mountDirSilent("../data", Append_false);
@@ -74,7 +73,6 @@ TEST_CASE("Files renameFile")
TEST_CASE("Files existsLocal")
{
logger = new Logger();
- ResourceManager::init();
VirtFs::mountDirSilent("data", Append_false);
VirtFs::mountDirSilent("../data", Append_false);
REQUIRE(Files::existsLocal(VirtFs::getPath("help/about.txt")) == true);
@@ -90,7 +88,6 @@ TEST_CASE("Files existsLocal")
TEST_CASE("Files loadTextFileString")
{
logger = new Logger();
- ResourceManager::init();
VirtFs::mountDirSilent("data", Append_false);
VirtFs::mountDirSilent("../data", Append_false);
REQUIRE(VirtFs::loadTextFileString("test/simplefile.txt") ==
@@ -105,7 +102,6 @@ TEST_CASE("Files loadTextFileString")
TEST_CASE("Files loadTextFile")
{
logger = new Logger();
- ResourceManager::init();
VirtFs::mountDirSilent("data", Append_false);
VirtFs::mountDirSilent("../data", Append_false);
@@ -124,7 +120,6 @@ TEST_CASE("Files loadTextFile")
TEST_CASE("Files saveTextFile")
{
logger = new Logger();
- ResourceManager::init();
VirtFs::mountDirSilent("data", Append_false);
VirtFs::mountDirSilent("../data", Append_false);
@@ -150,7 +145,6 @@ TEST_CASE("Files saveTextFile")
TEST_CASE("Files getFilesInDir")
{
logger = new Logger();
- ResourceManager::init();
VirtFs::mountDirSilent("data", Append_false);
VirtFs::mountDirSilent("../data", Append_false);
diff --git a/src/game.cpp b/src/game.cpp
index a00c6cfea..c8d51aff4 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -1026,7 +1026,7 @@ void Game::changeMap(const std::string &mapPath)
BLOCK_START("Game::changeMap")
resetAdjustLevel();
- resourceManager->cleanProtected();
+ ResourceManager::cleanProtected();
if (popupManager)
{
diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp
index 06afeccc6..227b0c463 100644
--- a/src/gui/gui.cpp
+++ b/src/gui/gui.cpp
@@ -300,7 +300,7 @@ Gui::~Gui()
void Gui::logic()
{
BLOCK_START("Gui::logic")
- resourceManager->clearScheduled();
+ ResourceManager::clearScheduled();
if (!mTop)
{
@@ -359,8 +359,7 @@ void Gui::slowLogic()
if (time > mTime10 || mTime10 - time > 10)
{
mTime10 = time + 10;
- if (resourceManager)
- resourceManager->cleanOrphans();
+ ResourceManager::cleanOrphans();
}
}
diff --git a/src/gui/widgets/browserbox_unittest.cc b/src/gui/widgets/browserbox_unittest.cc
index 6064dfd72..e86aa6b0e 100644
--- a/src/gui/widgets/browserbox_unittest.cc
+++ b/src/gui/widgets/browserbox_unittest.cc
@@ -47,11 +47,19 @@
extern const char *dirSeparator;
+TEST_CASE("BrowserBox leak test1")
+{
+ logger = new Logger();
+ REQUIRE(gui == nullptr);
+ ResourceManager::cleanOrphans(true);
+ ResourceManager::deleteInstance();
+ delete2(logger);
+}
+
TEST_CASE("BrowserBox tests", "browserbox")
{
client = new Client;
logger = new Logger();
- ResourceManager::init();
VirtFs::mountDirSilent("data", Append_false);
VirtFs::mountDirSilent("../data", Append_false);
@@ -189,3 +197,12 @@ TEST_CASE("BrowserBox tests", "browserbox")
delete2(logger);
// VirtFs::deinit();
}
+
+TEST_CASE("BrowserBox leak test2")
+{
+ logger = new Logger();
+ REQUIRE(gui == nullptr);
+ ResourceManager::cleanOrphans(true);
+ ResourceManager::deleteInstance();
+ delete2(logger);
+}
diff --git a/src/gui/widgets/desktop.cpp b/src/gui/widgets/desktop.cpp
index 4aeea03b5..83d5bd58e 100644
--- a/src/gui/widgets/desktop.cpp
+++ b/src/gui/widgets/desktop.cpp
@@ -182,7 +182,7 @@ void Desktop::setBestFittingWallpaper()
{
if (mWallpaper)
{
- resourceManager->decRefDelete(mWallpaper);
+ ResourceManager::decRefDelete(mWallpaper);
mWallpaper = nullptr;
}
@@ -200,7 +200,7 @@ void Desktop::setBestFittingWallpaper()
if (newRsclWlPpr)
{
- resourceManager->decRefDelete(nWallPaper);
+ ResourceManager::decRefDelete(nWallPaper);
// We replace the resource in the resource manager
mWallpaper = newRsclWlPpr;
}
diff --git a/src/gui/windowmanager_unittest.cc b/src/gui/windowmanager_unittest.cc
index 49ea9d97c..b19844ac9 100644
--- a/src/gui/windowmanager_unittest.cc
+++ b/src/gui/windowmanager_unittest.cc
@@ -130,6 +130,15 @@
extern QuitDialog *quitDialog;
+TEST_CASE("windows leak test1")
+{
+ logger = new Logger();
+ REQUIRE(gui == nullptr);
+ ResourceManager::cleanOrphans(true);
+ ResourceManager::deleteInstance();
+ delete2(logger);
+}
+
TEST_CASE("Windows tests", "windowmanager")
{
setEnv("SDL_VIDEODRIVER", "dummy");
@@ -139,8 +148,7 @@ TEST_CASE("Windows tests", "windowmanager")
SDL_Init(SDL_INIT_VIDEO);
logger = new Logger();
ResourceManager::deleteInstance();
- ResourceManager::init();
- resourceManager->cleanOrphans(true);
+ ResourceManager::cleanOrphans(true);
VirtFs::mountDirSilent("data", Append_false);
VirtFs::mountDirSilent("../data", Append_false);
VirtFs::mountDirSilent("data/test", Append_false);
@@ -723,8 +731,7 @@ TEST_CASE("WindowManager", "create windows")
SDL_Init(SDL_INIT_VIDEO);
logger = new Logger();
ResourceManager::deleteInstance();
- ResourceManager::init();
- resourceManager->cleanOrphans(true);
+ ResourceManager::cleanOrphans(true);
VirtFs::mountDirSilent("data", Append_false);
VirtFs::mountDirSilent("../data", Append_false);
VirtFs::mountDirSilent("data/test", Append_false);
@@ -869,3 +876,12 @@ TEST_CASE("WindowManager", "create windows")
// VirtFs::deinit();
}
+
+TEST_CASE("windows leak test2")
+{
+ logger = new Logger();
+ REQUIRE(gui == nullptr);
+ ResourceManager::cleanOrphans(true);
+ ResourceManager::deleteInstance();
+ delete2(logger);
+}
diff --git a/src/integrity_unittest.cc b/src/integrity_unittest.cc
index 34312b7b3..41a57f41d 100644
--- a/src/integrity_unittest.cc
+++ b/src/integrity_unittest.cc
@@ -30,6 +30,8 @@
#include "fs/virtfs/virtfs.h"
#include "fs/virtfs/virtfsrwops.h"
+#include "gui/gui.h"
+
#include "input/inputactionmap.h"
#include "resources/image/image.h"
@@ -93,6 +95,15 @@ static bool compareBuffers(const unsigned char *const buf2)
return isCorrect;
}
+TEST_CASE("integrity leak test1")
+{
+ logger = new Logger();
+ REQUIRE(gui == nullptr);
+ ResourceManager::cleanOrphans(true);
+ ResourceManager::deleteInstance();
+ delete2(logger);
+}
+
TEST_CASE("integrity tests", "integrity")
{
setEnv("SDL_VIDEODRIVER", "dummy");
@@ -101,7 +112,6 @@ TEST_CASE("integrity tests", "integrity")
XML::initXML();
SDL_Init(SDL_INIT_VIDEO);
logger = new Logger();
- ResourceManager::init();
std::string name("data/test/test.zip");
std::string prefix;
if (Files::existsLocal(name) == false)
@@ -326,7 +336,7 @@ TEST_CASE("integrity tests", "integrity")
image->decRef();
}
- resourceManager->cleanOrphans(true);
+ ResourceManager::cleanOrphans(true);
delete client;
client = nullptr;
@@ -336,3 +346,12 @@ TEST_CASE("integrity tests", "integrity")
delete2(logger);
// VirtFs::deinit();
}
+
+TEST_CASE("integrity leak test2")
+{
+ logger = new Logger();
+ REQUIRE(gui == nullptr);
+ ResourceManager::cleanOrphans(true);
+ ResourceManager::deleteInstance();
+ delete2(logger);
+}
diff --git a/src/resources/atlas/atlasmanager.cpp b/src/resources/atlas/atlasmanager.cpp
index b9107a757..91749e597 100644
--- a/src/resources/atlas/atlasmanager.cpp
+++ b/src/resources/atlas/atlasmanager.cpp
@@ -132,12 +132,12 @@ void AtlasManager::loadImages(const StringVect &files,
const std::string str = *it;
// check is image with same name already in cache
// and if yes, move it to deleted set
- Resource *const res = resourceManager->getTempResource(str);
+ Resource *const res = ResourceManager::getTempResource(str);
if (res)
{
// increase counter because in moveToDeleted it will be decreased.
res->incRef();
- resourceManager->moveToDeleted(res);
+ ResourceManager::moveToDeleted(res);
}
std::string path = str;
@@ -181,12 +181,12 @@ void AtlasManager::loadEmptyImages(const StringVect &files,
const std::string str = *it;
// check is image with same name already in cache
// and if yes, move it to deleted set
- Resource *const res = resourceManager->getTempResource(str);
+ Resource *const res = ResourceManager::getTempResource(str);
if (res)
{
// increase counter because in moveToDeleted it will be decreased.
res->incRef();
- resourceManager->moveToDeleted(res);
+ ResourceManager::moveToDeleted(res);
}
Image *const image = new Image(0,
@@ -395,14 +395,14 @@ void AtlasManager::injectToResources(const AtlasResource *const resource)
{
Image *const image = atlas->atlasImage;
if (image)
- resourceManager->addResource(atlas->name, image);
+ ResourceManager::addResource(atlas->name, image);
FOR_EACH (std::vector<AtlasItem*>::iterator, it2, atlas->items)
{
AtlasItem *const item = *it2;
if (!item)
continue;
// add each atlas sub image to resources
- resourceManager->addResource(item->name, item->image);
+ ResourceManager::addResource(item->name, item->image);
}
}
}
@@ -422,7 +422,7 @@ void AtlasManager::moveToDeleted(AtlasResource *const resource)
if (image)
{
// move each atlas image to deleted
- resourceManager->moveToDeleted(image);
+ ResourceManager::moveToDeleted(image);
}
FOR_EACH (std::vector<AtlasItem*>::iterator, it2, atlas->items)
{
@@ -433,7 +433,7 @@ void AtlasManager::moveToDeleted(AtlasResource *const resource)
if (image2)
{
// move each atlas sub image to deleted
- resourceManager->moveToDeleted(image2);
+ ResourceManager::moveToDeleted(image2);
}
}
}
diff --git a/src/resources/atlas/atlasresource.cpp b/src/resources/atlas/atlasresource.cpp
index 5f2a3d3c7..06ae62542 100644
--- a/src/resources/atlas/atlasresource.cpp
+++ b/src/resources/atlas/atlasresource.cpp
@@ -53,7 +53,7 @@ AtlasResource::~AtlasResource()
delete atlas;
}
}
- resourceManager->clearDeleted(false);
+ ResourceManager::clearDeleted(false);
}
void AtlasResource::incRef()
diff --git a/src/resources/dye/dye_unittest.cc b/src/resources/dye/dye_unittest.cc
index 4323a28f6..f31097cbe 100644
--- a/src/resources/dye/dye_unittest.cc
+++ b/src/resources/dye/dye_unittest.cc
@@ -28,6 +28,8 @@
#include "fs/virtfs/virtfs.h"
+#include "gui/gui.h"
+
#include "resources/sdlimagehelper.h"
#ifdef USE_SDL2
#include "resources/surfaceimagehelper.h"
@@ -53,6 +55,15 @@
#ifdef USE_OPENGL
+TEST_CASE("Dye leak test1")
+{
+ logger = new Logger();
+ REQUIRE(gui == nullptr);
+ ResourceManager::cleanOrphans(true);
+ ResourceManager::deleteInstance();
+ delete2(logger);
+}
+
TEST_CASE("Dye replaceSOGLColor 1 1")
{
DyePalette palette("#00ff00,000011", 6);
@@ -2357,7 +2368,6 @@ TEST_CASE("Dye real dye")
client = new Client;
SDL_Init(SDL_INIT_VIDEO);
logger = new Logger();
- ResourceManager::init();
VirtFs::mountDirSilent("data", Append_false);
VirtFs::mountDirSilent("../data", Append_false);
VirtFs::mountDirSilent("data/test", Append_false);
@@ -2400,3 +2410,12 @@ TEST_CASE("Dye real dye")
delete2(logger);
// VirtFs::deinit();
}
+
+TEST_CASE("Dye leak test2")
+{
+ logger = new Logger();
+ REQUIRE(gui == nullptr);
+ ResourceManager::cleanOrphans(true);
+ ResourceManager::deleteInstance();
+ delete2(logger);
+}
diff --git a/src/resources/dye/dyepalette_unittest.cc b/src/resources/dye/dyepalette_unittest.cc
index 14e5e5d49..280a74ead 100644
--- a/src/resources/dye/dyepalette_unittest.cc
+++ b/src/resources/dye/dyepalette_unittest.cc
@@ -52,6 +52,15 @@
#include "debug.h"
+TEST_CASE("DyePalette leak test1")
+{
+ logger = new Logger();
+ REQUIRE(gui == nullptr);
+ ResourceManager::cleanOrphans(true);
+ ResourceManager::deleteInstance();
+ delete2(logger);
+}
+
TEST_CASE("DyePalette tests")
{
setEnv("SDL_VIDEODRIVER", "dummy");
@@ -60,7 +69,6 @@ TEST_CASE("DyePalette tests")
XML::initXML();
SDL_Init(SDL_INIT_VIDEO);
logger = new Logger();
- ResourceManager::init();
VirtFs::mountDirSilent("data", Append_false);
VirtFs::mountDirSilent("../data", Append_false);
VirtFs::mountDirSilent("data/test", Append_false);
@@ -399,3 +407,12 @@ TEST_CASE("DyePalette tests")
delete2(logger);
// VirtFs::deinit();
}
+
+TEST_CASE("DyePalette leak test2")
+{
+ logger = new Logger();
+ REQUIRE(gui == nullptr);
+ ResourceManager::cleanOrphans(true);
+ ResourceManager::deleteInstance();
+ delete2(logger);
+}
diff --git a/src/resources/image/image.cpp b/src/resources/image/image.cpp
index 390bf6cf1..f295be9cb 100644
--- a/src/resources/image/image.cpp
+++ b/src/resources/image/image.cpp
@@ -215,7 +215,7 @@ void Image::SDLCleanCache()
i != i_end; ++i)
{
if (mSDLSurface != i->second)
- resourceManager->scheduleDelete(i->second);
+ ResourceManager::scheduleDelete(i->second);
i->second = nullptr;
}
mAlphaCache.clear();
diff --git a/src/resources/loaders/atlasloader.cpp b/src/resources/loaders/atlasloader.cpp
index c5f6691a3..1faa98b44 100644
--- a/src/resources/loaders/atlasloader.cpp
+++ b/src/resources/loaders/atlasloader.cpp
@@ -56,7 +56,7 @@ Resource *Loader::getAtlas(const std::string &name,
const StringVect &files)
{
AtlasLoader rl = { name, &files };
- return resourceManager->get("atlas_" + name, AtlasLoader::load, &rl);
+ return ResourceManager::get("atlas_" + name, AtlasLoader::load, &rl);
}
#endif // USE_OPENGL
diff --git a/src/resources/loaders/emptyatlasloader.cpp b/src/resources/loaders/emptyatlasloader.cpp
index 81d99cd51..6fe2f1463 100644
--- a/src/resources/loaders/emptyatlasloader.cpp
+++ b/src/resources/loaders/emptyatlasloader.cpp
@@ -57,7 +57,7 @@ Resource *Loader::getEmptyAtlas(const std::string &name,
const StringVect &files)
{
EmptyAtlasLoader rl = { name, &files };
- return resourceManager->get("atlas_" + name, EmptyAtlasLoader::load, &rl);
+ return ResourceManager::get("atlas_" + name, EmptyAtlasLoader::load, &rl);
}
#endif // USE_OPENGL
diff --git a/src/resources/loaders/imageloader.cpp b/src/resources/loaders/imageloader.cpp
index 2bfba2706..5ae883886 100644
--- a/src/resources/loaders/imageloader.cpp
+++ b/src/resources/loaders/imageloader.cpp
@@ -85,6 +85,6 @@ namespace
Image *Loader::getImage(const std::string &idPath)
{
DyedImageLoader rl = { idPath };
- return static_cast<Image*>(resourceManager->get(idPath,
+ return static_cast<Image*>(ResourceManager::get(idPath,
DyedImageLoader::load, &rl));
}
diff --git a/src/resources/loaders/imagesetloader.cpp b/src/resources/loaders/imagesetloader.cpp
index 6ec02c699..468b97120 100644
--- a/src/resources/loaders/imagesetloader.cpp
+++ b/src/resources/loaders/imagesetloader.cpp
@@ -74,6 +74,6 @@ ImageSet *Loader::getImageSet(const std::string &imagePath,
"x").append(toString(
h)).append(
"]");
- return static_cast<ImageSet*>(resourceManager->get(str,
+ return static_cast<ImageSet*>(ResourceManager::get(str,
ImageSetLoader::load, &rl));
}
diff --git a/src/resources/loaders/musicloader.cpp b/src/resources/loaders/musicloader.cpp
index f23a9fc70..0d482b8a6 100644
--- a/src/resources/loaders/musicloader.cpp
+++ b/src/resources/loaders/musicloader.cpp
@@ -78,6 +78,6 @@ namespace
SDLMusic *Loader::getMusic(const std::string &idPath)
{
ResourceLoader rl = { idPath };
- return static_cast<SDLMusic*>(resourceManager->get(
+ return static_cast<SDLMusic*>(ResourceManager::get(
idPath, ResourceLoader::load, &rl));
}
diff --git a/src/resources/loaders/rescaledloader.cpp b/src/resources/loaders/rescaledloader.cpp
index c4c315227..e4a9112f1 100644
--- a/src/resources/loaders/rescaledloader.cpp
+++ b/src/resources/loaders/rescaledloader.cpp
@@ -72,6 +72,6 @@ Image *Loader::getRescaled(const Image *const image,
"_rescaled%dx%d", width, height);
const RescaledLoader rl = { image, width, height };
Image *const img = static_cast<Image *const>(
- resourceManager->get(idPath, RescaledLoader::load, &rl));
+ ResourceManager::get(idPath, RescaledLoader::load, &rl));
return img;
}
diff --git a/src/resources/loaders/shaderloader.cpp b/src/resources/loaders/shaderloader.cpp
index f06c9d219..d2ffba348 100644
--- a/src/resources/loaders/shaderloader.cpp
+++ b/src/resources/loaders/shaderloader.cpp
@@ -61,7 +61,7 @@ Resource *Loader::getShader(const unsigned int type,
const std::string &name)
{
ShaderLoader rl = { name, type };
- return resourceManager->get("shader_" + name, ShaderLoader::load, &rl);
+ return ResourceManager::get("shader_" + name, ShaderLoader::load, &rl);
}
#endif // USE_OPENGL
diff --git a/src/resources/loaders/shaderprogramloader.cpp b/src/resources/loaders/shaderprogramloader.cpp
index d48e1aa9f..763536a6c 100644
--- a/src/resources/loaders/shaderprogramloader.cpp
+++ b/src/resources/loaders/shaderprogramloader.cpp
@@ -66,7 +66,7 @@ Resource *Loader::getShaderProgram(const std::string &vertex,
const bool isNewShader)
{
ShaderProgramLoader rl = { vertex, fragment, isNewShader };
- return resourceManager->get("program_" + vertex + " + " + fragment,
+ return ResourceManager::get("program_" + vertex + " + " + fragment,
ShaderProgramLoader::load, &rl);
}
diff --git a/src/resources/loaders/soundloader.cpp b/src/resources/loaders/soundloader.cpp
index be71a5ddb..bff769755 100644
--- a/src/resources/loaders/soundloader.cpp
+++ b/src/resources/loaders/soundloader.cpp
@@ -73,6 +73,6 @@ namespace
SoundEffect *Loader::getSoundEffect(const std::string &idPath)
{
ResourceLoader rl = { idPath };
- return static_cast<SoundEffect*>(resourceManager->get(
+ return static_cast<SoundEffect*>(ResourceManager::get(
idPath, ResourceLoader::load, &rl));
}
diff --git a/src/resources/loaders/spritedefloader.cpp b/src/resources/loaders/spritedefloader.cpp
index c140c8f73..bdc0c40f0 100644
--- a/src/resources/loaders/spritedefloader.cpp
+++ b/src/resources/loaders/spritedefloader.cpp
@@ -63,6 +63,6 @@ SpriteDef *Loader::getSprite(const std::string &path,
"[").append(toString(
variant).append(
"]"));
- return static_cast<SpriteDef*>(resourceManager->get(str,
+ return static_cast<SpriteDef*>(ResourceManager::get(str,
SpriteDefLoader::load, &rl));
}
diff --git a/src/resources/loaders/subimageloader.cpp b/src/resources/loaders/subimageloader.cpp
index f2f7ad7de..804e957a5 100644
--- a/src/resources/loaders/subimageloader.cpp
+++ b/src/resources/loaders/subimageloader.cpp
@@ -85,6 +85,6 @@ Image *Loader::getSubImage(Image *const parent,
"x").append(
toString(height)).append(
"]");
- return static_cast<Image*>(resourceManager->get(str,
+ return static_cast<Image*>(ResourceManager::get(str,
SubImageLoader::load, &rl));
}
diff --git a/src/resources/loaders/subimagesetloader.cpp b/src/resources/loaders/subimagesetloader.cpp
index c8d0fba74..6ca43cb32 100644
--- a/src/resources/loaders/subimagesetloader.cpp
+++ b/src/resources/loaders/subimagesetloader.cpp
@@ -73,6 +73,6 @@ ImageSet *Loader::getSubImageSet(Image *const parent,
"x").append(toString(
height)).append(
"]");
- return static_cast<ImageSet*>(resourceManager->get(str,
+ return static_cast<ImageSet*>(ResourceManager::get(str,
SubImageSetLoader::load, &rl));
}
diff --git a/src/resources/loaders/walklayerloader.cpp b/src/resources/loaders/walklayerloader.cpp
index 71f94539a..99d7a251f 100644
--- a/src/resources/loaders/walklayerloader.cpp
+++ b/src/resources/loaders/walklayerloader.cpp
@@ -58,7 +58,7 @@ WalkLayer *Loader::getWalkLayer(const std::string &name,
Map *const map)
{
WalkLayerLoader rl = {name, map};
- return static_cast<WalkLayer*>(resourceManager->get("map_" + name,
+ return static_cast<WalkLayer*>(ResourceManager::get("map_" + name,
WalkLayerLoader::load, &rl));
}
#else // DYECMD
diff --git a/src/resources/loaders/xmlloader.cpp b/src/resources/loaders/xmlloader.cpp
index ac005bc06..74dd46ef9 100644
--- a/src/resources/loaders/xmlloader.cpp
+++ b/src/resources/loaders/xmlloader.cpp
@@ -58,7 +58,7 @@ XML::Document *Loader::getXml(const std::string &idPath,
const SkipError skipError)
{
ResourceLoader rl = { idPath, useResman, skipError };
- return static_cast<XML::Document*>(resourceManager->get(
+ return static_cast<XML::Document*>(ResourceManager::get(
idPath, ResourceLoader::load, &rl));
}
diff --git a/src/resources/map/maplayer_unittest.cc b/src/resources/map/maplayer_unittest.cc
index 945c52b0e..e8066029c 100644
--- a/src/resources/map/maplayer_unittest.cc
+++ b/src/resources/map/maplayer_unittest.cc
@@ -1649,7 +1649,6 @@ TEST_CASE("MapLayer draw")
TEST_CASE("MapLayer drawSpecialLayer (specialLayer)")
{
logger = new Logger;
- ResourceManager::init();
VirtFs::mountDirSilent("data", Append_false);
VirtFs::mountDirSilent("../data", Append_false);
@@ -2002,7 +2001,6 @@ TEST_CASE("MapLayer drawSpecialLayer (specialLayer)")
TEST_CASE("MapLayer drawSpecialLayer (tempLayer)")
{
logger = new Logger;
- ResourceManager::init();
VirtFs::mountDirSilent("data", Append_false);
VirtFs::mountDirSilent("../data", Append_false);
@@ -2361,7 +2359,6 @@ TEST_CASE("MapLayer drawSpecialLayer (tempLayer)")
TEST_CASE("MapLayer drawFringe")
{
logger = new Logger;
- ResourceManager::init();
VirtFs::mountDirSilent("data", Append_false);
VirtFs::mountDirSilent("../data", Append_false);
diff --git a/src/resources/map/speciallayer_unittest.cc b/src/resources/map/speciallayer_unittest.cc
index 93270d7e5..d43daaac8 100644
--- a/src/resources/map/speciallayer_unittest.cc
+++ b/src/resources/map/speciallayer_unittest.cc
@@ -30,6 +30,8 @@
#include "fs/virtfs/virtfs.h"
+#include "gui/gui.h"
+
#include "utils/delete2.h"
#include "resources/sdlimagehelper.h"
@@ -40,11 +42,19 @@
#include "debug.h"
+TEST_CASE("SpecialLayer leak test1")
+{
+ logger = new Logger();
+ REQUIRE(gui == nullptr);
+ ResourceManager::cleanOrphans(true);
+ ResourceManager::deleteInstance();
+ delete2(logger);
+}
+
TEST_CASE("SpecialLayer updateCache")
{
logger = new Logger;
client = new Client;
- ResourceManager::init();
VirtFs::mountDirSilent("data", Append_false);
VirtFs::mountDirSilent("../data", Append_false);
@@ -260,9 +270,18 @@ TEST_CASE("SpecialLayer updateCache")
}
delete layer;
- resourceManager->cleanOrphans();
+ ResourceManager::cleanOrphans();
delete2(client);
VirtFs::unmountDirSilent("data");
VirtFs::unmountDirSilent("../data");
delete2(logger);
}
+
+TEST_CASE("SpecialLayer leak test2")
+{
+ logger = new Logger();
+ REQUIRE(gui == nullptr);
+ ResourceManager::cleanOrphans(true);
+ ResourceManager::deleteInstance();
+ delete2(logger);
+}
diff --git a/src/resources/memorymanager.cpp b/src/resources/memorymanager.cpp
index 01e67eb1b..55d157c5f 100644
--- a/src/resources/memorymanager.cpp
+++ b/src/resources/memorymanager.cpp
@@ -80,14 +80,12 @@ void MemoryManager::printAllMemory(ChatTab *const tab A_DYECMD_UNUSED)
{
if (!logger)
return;
+
#ifdef DYECMD
- if (resourceManager)
- resourceManager->calcMemory(0);
+ ResourceManager::calcMemory(0);
#else // DYECMD
- int sz = 0;
- if (resourceManager)
- sz += resourceManager->calcMemory(0);
+ int sz = ResourceManager::calcMemory(0);
if (tab)
{
// TRANSLATORS: memory usage chat message
diff --git a/src/resources/resource.cpp b/src/resources/resource.cpp
index 0d01f440c..e75df7b44 100644
--- a/src/resources/resource.cpp
+++ b/src/resources/resource.cpp
@@ -66,7 +66,7 @@ void Resource::decRef()
if (mRefCount == 0 && !mNotCount)
{
// Warn the manager that this resource is no longer used.
- resourceManager->release(this);
+ ResourceManager::release(this);
}
}
diff --git a/src/resources/resource.h b/src/resources/resource.h
index e9f7e0531..4b2f57229 100644
--- a/src/resources/resource.h
+++ b/src/resources/resource.h
@@ -32,17 +32,15 @@
*/
class Resource notfinal : public MemoryCounter
{
- friend class ResourceManager;
-
public:
/**
* Constructor
*/
Resource() :
MemoryCounter(),
+ mTimeStamp(0),
mIdPath(),
mSource(),
- mTimeStamp(0),
mRefCount(0),
mProtected(false),
#ifdef DEBUG_DUMP_LEAKS
@@ -57,6 +55,11 @@ class Resource notfinal : public MemoryCounter
A_DELETE_COPY(Resource)
/**
+ * Destructor.
+ */
+ virtual ~Resource();
+
+ /**
* Increments the internal reference count.
*/
virtual void incRef();
@@ -76,6 +79,9 @@ class Resource notfinal : public MemoryCounter
const std::string &getIdPath() const noexcept2 A_WARN_UNUSED
{ return mIdPath; }
+ void setIdPath(const std::string &path)
+ { mIdPath = path; }
+
/**
* Return refCount for this resource.
*/
@@ -110,19 +116,15 @@ class Resource notfinal : public MemoryCounter
{ mDumped = n; }
#endif // DEBUG_DUMP_LEAKS
+ time_t mTimeStamp; /**< Time at which the resource was orphaned. */
+
#ifndef UNITTESTS
protected:
#endif // UNITTESTS
- /**
- * Destructor.
- */
- virtual ~Resource();
-
std::string mIdPath; /**< Path identifying this resource. */
std::string mSource;
private:
- time_t mTimeStamp; /**< Time at which the resource was orphaned. */
unsigned int mRefCount; /**< Reference count. */
bool mProtected;
bool mNotCount;
diff --git a/src/resources/resourcemanager/resourcemanager.cpp b/src/resources/resourcemanager/resourcemanager.cpp
index aed4426b6..a5e5ebac5 100644
--- a/src/resources/resourcemanager/resourcemanager.cpp
+++ b/src/resources/resourcemanager/resourcemanager.cpp
@@ -46,20 +46,17 @@
#include "debug.h"
-ResourceManager *resourceManager = nullptr;
-
-ResourceManager::ResourceManager() :
- deletedSurfaces(),
- mResources(),
- mOrphanedResources(),
- mDeletedResources(),
- mOldestOrphan(0),
- mDestruction(0)
+namespace ResourceManager
{
- logger->log1("Initializing resource manager...");
-}
-ResourceManager::~ResourceManager()
+std::set<SDL_Surface*> deletedSurfaces;
+Resources mResources;
+Resources mOrphanedResources;
+std::set<Resource*> mDeletedResources;
+time_t mOldestOrphan = 0;
+bool mDestruction = false;
+
+void deleteResourceManager()
{
mDestruction = true;
mResources.insert(mOrphanedResources.begin(), mOrphanedResources.end());
@@ -171,26 +168,22 @@ ResourceManager::~ResourceManager()
}
clearDeleted();
clearScheduled();
+ mDestruction = false;
}
-void ResourceManager::init()
-{
- if (!resourceManager)
- resourceManager = new ResourceManager;
-}
-
-void ResourceManager::cleanUp(Resource *const res)
+void cleanUp(Resource *const res)
{
if (!res)
return;
- if (res->mRefCount > 0)
+ const unsigned refCount = res->getRefCount();
+ if (refCount > 0)
{
logger->log("ResourceManager::~ResourceManager() cleaning up %u "
"reference%s to %s",
- res->mRefCount,
- (res->mRefCount == 1) ? "" : "s",
- res->mIdPath.c_str());
+ refCount,
+ (refCount == 1) ? "" : "s",
+ res->getIdPath().c_str());
}
delete res;
@@ -199,7 +192,7 @@ void ResourceManager::cleanUp(Resource *const res)
#endif // DEBUG_LEAKS
}
-void ResourceManager::cleanProtected()
+void cleanProtected()
{
ResourceIterator iter = mResources.begin();
while (iter != mResources.end())
@@ -222,7 +215,7 @@ void ResourceManager::cleanProtected()
}
}
-bool ResourceManager::cleanOrphans(const bool always)
+bool cleanOrphans(const bool always)
{
timeval tv;
gettimeofday(&tv, nullptr);
@@ -266,7 +259,7 @@ bool ResourceManager::cleanOrphans(const bool always)
return status;
}
-void ResourceManager::logResource(const Resource *const res)
+void logResource(const Resource *const res)
{
if (!res)
return;
@@ -278,7 +271,7 @@ void ResourceManager::logResource(const Resource *const res)
const int count = image->getRefCount();
if (count)
src.append(" ").append(toString(count));
- logger->log("resource(%s, %u) %s", res->mIdPath.c_str(),
+ logger->log("resource(%s, %u) %s", res->getIdPath().c_str(),
image->getGLImage(), src.c_str());
}
else
@@ -287,15 +280,36 @@ void ResourceManager::logResource(const Resource *const res)
const int count = res->getRefCount();
if (count > 0)
src.append(" ").append(toString(count));
- logger->log("resource(%s) %s", res->mIdPath.c_str(), src.c_str());
+ logger->log("resource(%s) %s", res->getIdPath().c_str(), src.c_str());
}
#else // USE_OPENGL
- logger->log("resource(%s)", res->mIdPath.c_str());
+ logger->log("resource(%s)", res->getIdPath().c_str());
#endif // USE_OPENGL
}
-void ResourceManager::clearDeleted(const bool full)
+void logResources(const std::string &msg)
+{
+ logger->log("start of resources: " + msg);
+ logger->log("resouces");
+ FOR_EACH(ResourceIterator, it, mResources)
+ {
+ logResource((*it).second);
+ }
+ logger->log("orphaned resouces");
+ FOR_EACH(ResourceIterator, it, mOrphanedResources)
+ {
+ logResource((*it).second);
+ }
+ logger->log("deleted resouces");
+ FOR_EACH(std::set<Resource*>::iterator, it, mDeletedResources)
+ {
+ logResource(*it);
+ }
+ logger->log("end of resources");
+}
+
+void clearDeleted(const bool full)
{
bool status(true);
logger->log1("clear deleted");
@@ -334,17 +348,16 @@ void ResourceManager::clearDeleted(const bool full)
}
}
-
-bool ResourceManager::addResource(const std::string &idPath,
- Resource *const resource)
+bool addResource(const std::string &idPath,
+ Resource *const resource)
{
if (resource)
{
resource->incRef();
- resource->mIdPath = idPath;
+ resource->setIdPath(idPath);
#ifdef DEBUG_IMAGES
logger->log("set name %p, %s", static_cast<void*>(resource),
- resource->mIdPath.c_str());
+ resource->getIdPath().c_str());
#endif // DEBUG_IMAGES
mResources[idPath] = resource;
@@ -353,21 +366,21 @@ bool ResourceManager::addResource(const std::string &idPath,
return false;
}
-Resource *ResourceManager::getFromCache(const std::string &filename,
- const int variant)
+Resource *getFromCache(const std::string &filename,
+ const int variant)
{
std::stringstream ss;
ss << filename << "[" << variant << "]";
return getFromCache(ss.str());
}
-bool ResourceManager::isInCache(const std::string &idPath) const
+bool isInCache(const std::string &idPath)
{
const ResourceCIterator &resIter = mResources.find(idPath);
return (resIter != mResources.end() && resIter->second);
}
-Resource *ResourceManager::getTempResource(const std::string &idPath)
+Resource *getTempResource(const std::string &idPath)
{
const ResourceCIterator &resIter = mResources.find(idPath);
if (resIter != mResources.end())
@@ -379,7 +392,7 @@ Resource *ResourceManager::getTempResource(const std::string &idPath)
return nullptr;
}
-Resource *ResourceManager::getFromCache(const std::string &idPath)
+Resource *getFromCache(const std::string &idPath)
{
// Check if the id exists, and return the value if it does.
ResourceIterator resIter = mResources.find(idPath);
@@ -403,9 +416,9 @@ Resource *ResourceManager::getFromCache(const std::string &idPath)
return nullptr;
}
-Resource *ResourceManager::get(const std::string &idPath,
- generator fun,
- const void *const data)
+Resource *get(const std::string &idPath,
+ generator fun,
+ const void *const data)
{
#ifndef DISABLE_RESOURCE_CACHING
Resource *resource = getFromCache(idPath);
@@ -416,10 +429,10 @@ Resource *ResourceManager::get(const std::string &idPath,
if (resource)
{
resource->incRef();
- resource->mIdPath = idPath;
+ resource->setIdPath(idPath);
#ifdef DEBUG_IMAGES
logger->log("set name %p, %s", static_cast<void*>(resource),
- resource->mIdPath.c_str());
+ resource->getIdPath().c_str());
#endif // DEBUG_IMAGES
mResources[idPath] = resource;
@@ -435,10 +448,10 @@ Resource *ResourceManager::get(const std::string &idPath,
if (resource)
{
resource->incRef();
- resource->mIdPath = idPath;
+ resource->setIdPath(idPath);
#ifdef DEBUG_IMAGES
logger->log("set name %p, %s", static_cast<void*>(resource),
- resource->mIdPath.c_str());
+ resource->getIdPath().c_str());
#endif // DEBUG_IMAGES
}
else
@@ -451,7 +464,7 @@ Resource *ResourceManager::get(const std::string &idPath,
return resource;
}
-void ResourceManager::release(Resource *const res)
+void release(Resource *const res)
{
if (!res || mDestruction)
return;
@@ -466,19 +479,19 @@ void ResourceManager::release(Resource *const res)
return;
}
- ResourceIterator resIter = mResources.find(res->mIdPath);
+ ResourceIterator resIter = mResources.find(res->getIdPath());
if (resIter == mResources.end())
{
reportAlways("no resource in cache: %s",
- res->mIdPath.c_str());
+ res->getIdPath().c_str());
delete res;
return;
}
if (resIter->second != res)
{
reportAlways("in cache other image: %s",
- res->mIdPath.c_str());
+ res->getIdPath().c_str());
delete res;
return;
}
@@ -499,7 +512,7 @@ void ResourceManager::release(Resource *const res)
#endif // DISABLE_RESOURCE_CACHING
}
-void ResourceManager::moveToDeleted(Resource *const res)
+void moveToDeleted(Resource *const res)
{
if (!res)
return;
@@ -509,7 +522,7 @@ void ResourceManager::moveToDeleted(Resource *const res)
if (count == 1)
logResource(res);
res->decRef();
- ResourceIterator resIter = mResources.find(res->mIdPath);
+ ResourceIterator resIter = mResources.find(res->getIdPath());
if (resIter != mResources.end() && resIter->second == res)
{
mResources.erase(resIter);
@@ -517,7 +530,7 @@ void ResourceManager::moveToDeleted(Resource *const res)
}
else
{
- resIter = mOrphanedResources.find(res->mIdPath);
+ resIter = mOrphanedResources.find(res->getIdPath());
if (resIter != mOrphanedResources.end() && resIter->second == res)
{
mOrphanedResources.erase(resIter);
@@ -533,7 +546,7 @@ void ResourceManager::moveToDeleted(Resource *const res)
}
}
-void ResourceManager::decRefDelete(Resource *const res)
+void decRefDelete(Resource *const res)
{
if (!res)
return;
@@ -543,14 +556,14 @@ void ResourceManager::decRefDelete(Resource *const res)
{
logResource(res);
- ResourceIterator resIter = mResources.find(res->mIdPath);
+ ResourceIterator resIter = mResources.find(res->getIdPath());
if (resIter != mResources.end() && resIter->second == res)
{
mResources.erase(resIter);
}
else
{
- resIter = mOrphanedResources.find(res->mIdPath);
+ resIter = mOrphanedResources.find(res->getIdPath());
if (resIter != mOrphanedResources.end() && resIter->second == res)
mOrphanedResources.erase(resIter);
}
@@ -563,55 +576,52 @@ void ResourceManager::decRefDelete(Resource *const res)
}
}
-void ResourceManager::deleteInstance()
+void deleteInstance()
{
#ifdef DUMP_LEAKED_RESOURCES
- if (resourceManager)
- {
- logger->log1("clean orphans start");
- resourceManager->cleanProtected();
- while (resourceManager->cleanOrphans(true))
- continue;
- logger->log1("clean orphans end");
- ResourceIterator iter = resourceManager->mResources.begin();
+ logger->log1("clean orphans start");
+ ResourceManager::cleanProtected();
+ while (ResourceManager::cleanOrphans(true))
+ continue;
+ logger->log1("clean orphans end");
+ ResourceIterator iter = ResourceManager::mResources.begin();
#ifdef UNITTESTS
- bool status(false);
+ bool status(false);
#endif // UNITTESTS
- while (iter != resourceManager->mResources.end())
+ while (iter != ResourceManager::mResources.end())
+ {
+ const Resource *const res = iter->second;
+ if (res)
{
- const Resource *const res = iter->second;
- if (res)
+ if (res->getRefCount())
{
- if (res->getRefCount())
- {
- logger->log(std::string("ResourceLeak: ").append(
- res->getIdPath()).append(" (").append(toString(
- res->getRefCount())).append(")"));
+ logger->log(std::string("ResourceLeak: ").append(
+ res->getIdPath()).append(" (").append(toString(
+ res->getRefCount())).append(")"));
#ifdef UNITTESTS
- status = true;
+ status = true;
#endif // UNITTESTS
- }
}
- ++iter;
}
+ ++iter;
+ }
#ifdef UNITTESTS
- if (status)
- reportAlways("Found leaked resources.");
+ if (status)
+ reportAlways("Found leaked resources.");
#endif // UNITTESTS
- }
#endif // DUMP_LEAKED_RESOURCES
- delete2(resourceManager);
+ deleteResourceManager();
}
-void ResourceManager::scheduleDelete(SDL_Surface *const surface)
+void scheduleDelete(SDL_Surface *const surface)
{
deletedSurfaces.insert(surface);
}
-void ResourceManager::clearScheduled()
+void clearScheduled()
{
BLOCK_START("ResourceManager::clearScheduled")
FOR_EACH (std::set<SDL_Surface*>::iterator, i, deletedSurfaces)
@@ -620,16 +630,16 @@ void ResourceManager::clearScheduled()
BLOCK_END("ResourceManager::clearScheduled")
}
-void ResourceManager::clearCache()
+void clearCache()
{
cleanProtected();
while (cleanOrphans(true))
continue;
}
-int ResourceManager::calcMemoryLocal() const
+int calcMemoryLocal()
{
- int sz = sizeof(ResourceManager);
+ int sz = 24;
FOR_EACH (std::set<SDL_Surface*>::iterator, it, deletedSurfaces)
{
sz += memoryManager.getSurfaceSize(*it);
@@ -637,7 +647,7 @@ int ResourceManager::calcMemoryLocal() const
return sz;
}
-int ResourceManager::calcMemoryChilds(const int level) const
+int calcMemoryChilds(const int level)
{
int sz = 0;
FOR_EACH (ResourceCIterator, it, mResources)
@@ -656,3 +666,38 @@ int ResourceManager::calcMemoryChilds(const int level) const
}
return sz;
}
+
+int calcMemory(const int level)
+{
+ const int sumLocal = calcMemoryLocal();
+ const int sumChilds = calcMemoryChilds(0);
+ memoryManager.printMemory("resource manager",
+ level,
+ sumLocal,
+ sumChilds);
+ return sumLocal + sumChilds;
+}
+
+int size() noexcept2
+{
+ return CAST_S32(mResources.size());
+}
+
+#if defined(DEBUG_DUMP_LEAKS) || defined(UNITTESTS)
+Resources &getResources()
+{
+ return mResources;
+}
+
+Resources &getOrphanedResources()
+{
+ return mOrphanedResources;
+}
+
+const std::set<Resource*> &getDeletedResources()
+{
+ return mDeletedResources;
+}
+#endif // defined(DEBUG_DUMP_LEAKS) || defined(UNITTESTS)
+
+} // namespace ResourceManager
diff --git a/src/resources/resourcemanager/resourcemanager.h b/src/resources/resourcemanager/resourcemanager.h
index 6fff83df0..f279b2b7c 100644
--- a/src/resources/resourcemanager/resourcemanager.h
+++ b/src/resources/resourcemanager/resourcemanager.h
@@ -23,8 +23,6 @@
#ifndef RESOURCES_RESOURCEMANAGER_RESOURCEMANAGER_H
#define RESOURCES_RESOURCEMANAGER_RESOURCEMANAGER_H
-#include "resources/memorycounter.h"
-
#include <map>
#include <set>
@@ -35,124 +33,97 @@ class Resource;
struct SDL_Surface;
struct SDL_RWops;
-/**
- * A class for loading and managing resources.
- */
-class ResourceManager final : public MemoryCounter
+namespace ResourceManager
{
- friend class Resource;
-
- public:
- typedef Resource *(*loader)(SDL_RWops *rw,
- const std::string &name);
- typedef Resource *(&generator)(const void *const data);
-
- ResourceManager();
-
- A_DELETE_COPY(ResourceManager)
-
- /**
- * Destructor. Cleans up remaining resources, warning about resources
- * that were still referenced.
- */
- ~ResourceManager();
+ typedef Resource *(*loader)(SDL_RWops *rw,
+ const std::string &name);
+ typedef Resource *(&generator)(const void *const data);
- /**
- * Creates a resource and adds it to the resource map.
- *
- * @param idPath The resource identifier path.
- * @param fun A function for generating the resource.
- * @param data Extra parameters for the generator.
- * @return A valid resource or <code>NULL</code> if the resource could
- * not be generated.
- */
- Resource *get(const std::string &idPath,
- generator fun,
- const void *const data) A_WARN_UNUSED;
+ typedef std::map<std::string, Resource*> Resources;
+ typedef Resources::iterator ResourceIterator;
+ typedef Resources::const_iterator ResourceCIterator;
- Resource *getFromCache(const std::string &idPath) A_WARN_UNUSED;
+ /**
+ * Cleans up remaining resources, warning about resources
+ * that were still referenced.
+ */
+ void deleteResourceManager();
- Resource *getFromCache(const std::string &filename,
- const int variant) A_WARN_UNUSED;
+ /**
+ * Creates a resource and adds it to the resource map.
+ *
+ * @param idPath The resource identifier path.
+ * @param fun A function for generating the resource.
+ * @param data Extra parameters for the generator.
+ * @return A valid resource or <code>NULL</code> if the resource could
+ * not be generated.
+ */
+ Resource *get(const std::string &idPath,
+ generator fun,
+ const void *const data) A_WARN_UNUSED;
- bool addResource(const std::string &idPath,
- Resource *const resource);
+ Resource *getFromCache(const std::string &idPath) A_WARN_UNUSED;
- /**
- * Releases a resource, placing it in the set of orphaned resources.
- */
- void release(Resource *const res);
+ Resource *getFromCache(const std::string &filename,
+ const int variant) A_WARN_UNUSED;
- void clearDeleted(const bool full = true);
+ bool addResource(const std::string &idPath,
+ Resource *const resource);
- void decRefDelete(Resource *const res);
+ /**
+ * Releases a resource, placing it in the set of orphaned resources.
+ */
+ void release(Resource *const res);
- /**
- * Move resource to deleted resources list.
- */
- void moveToDeleted(Resource *const res);
+ void clearDeleted(const bool full = true);
- void scheduleDelete(SDL_Surface *const surface);
+ void decRefDelete(Resource *const res);
- void clearScheduled();
+ /**
+ * Move resource to deleted resources list.
+ */
+ void moveToDeleted(Resource *const res);
- /**
- * Deletes the class instance if it exists.
- */
- static void deleteInstance();
+ void scheduleDelete(SDL_Surface *const surface);
- int size() const noexcept2 A_WARN_UNUSED
- { return CAST_S32(mResources.size()); }
+ void clearScheduled();
- typedef std::map<std::string, Resource*> Resources;
- typedef Resources::iterator ResourceIterator;
- typedef Resources::const_iterator ResourceCIterator;
+ /**
+ * Deletes the class instance if it exists.
+ */
+ void deleteInstance();
-#ifdef DEBUG_DUMP_LEAKS
- Resources* getResources() A_WARN_UNUSED
- { return &mResources; }
+ int size() noexcept2 A_WARN_UNUSED;
- Resources* getOrphanedResources() A_WARN_UNUSED
- { return &mOrphanedResources; }
-#endif // DEBUG_DUMP_LEAKS
+#if defined(DEBUG_DUMP_LEAKS) || defined(UNITTESTS)
+ Resources &getResources() A_WARN_UNUSED;
- bool cleanOrphans(const bool always = false);
+ Resources &getOrphanedResources() A_WARN_UNUSED;
- void cleanProtected();
+ const std::set<Resource*> &getDeletedResources() A_WARN_UNUSED;
+#endif // defined(DEBUG_DUMP_LEAKS) || defined(UNITTESTS)
- bool isInCache(const std::string &idPath) const A_WARN_UNUSED;
+ bool cleanOrphans(const bool always = false);
- Resource *getTempResource(const std::string &idPath) A_WARN_UNUSED;
+ void cleanProtected();
- void clearCache();
+ bool isInCache(const std::string &idPath) A_WARN_UNUSED;
- int calcMemoryLocal() const override final;
+ Resource *getTempResource(const std::string &idPath) A_WARN_UNUSED;
- int calcMemoryChilds(const int level) const override final;
+ void clearCache();
- std::string getCounterName() const override final
- { return "ResourceManager"; }
+ int calcMemoryLocal();
- static void init();
+ int calcMemoryChilds(const int level);
-#ifndef UNITTESTS
- private:
-#endif // UNITTESTS
- /**
- * Deletes the resource after logging a cleanup message.
- */
- static void cleanUp(Resource *const resource);
+ int calcMemory(const int level);
- static void logResource(const Resource *const res);
+ void cleanUp(Resource *const resource);
- std::set<SDL_Surface*> deletedSurfaces;
- Resources mResources;
- Resources mOrphanedResources;
- std::set<Resource*> mDeletedResources;
- time_t mOldestOrphan;
- bool mDestruction;
-};
+ void logResource(const Resource *const res);
-extern ResourceManager *resourceManager;
+ void logResources(const std::string &msg);
+} // namespace ResourceManager
#endif // RESOURCES_RESOURCEMANAGER_RESOURCEMANAGER_H
diff --git a/src/resources/resourcemanager/resourcemanager_unittest.cc b/src/resources/resourcemanager/resourcemanager_unittest.cc
index c700bfbab..8c8d72868 100644
--- a/src/resources/resourcemanager/resourcemanager_unittest.cc
+++ b/src/resources/resourcemanager/resourcemanager_unittest.cc
@@ -20,6 +20,9 @@
#include "catch.hpp"
#include "client.h"
+#include "configmanager.h"
+#include "configuration.h"
+#include "dirs.h"
#include "logger.h"
#include "graphicsmanager.h"
@@ -27,6 +30,8 @@
#include "fs/virtfs/virtfs.h"
+#include "gui/gui.h"
+
#include "resources/sdlimagehelper.h"
#include "resources/resourcemanager/resourcemanager.h"
@@ -84,6 +89,15 @@ namespace
} // namespace
+TEST_CASE("resourcemanager leak test1")
+{
+ logger = new Logger();
+ REQUIRE(gui == nullptr);
+ ResourceManager::cleanOrphans(true);
+ ResourceManager::deleteInstance();
+ delete2(logger);
+}
+
TEST_CASE("resourcemanager", "resourcemanager")
{
setEnv("SDL_VIDEODRIVER", "dummy");
@@ -92,8 +106,6 @@ TEST_CASE("resourcemanager", "resourcemanager")
XML::initXML();
SDL_Init(SDL_INIT_VIDEO);
logger = new Logger();
- ResourceManager::init();
- ResourceManager *safeResman = resourceManager;
VirtFs::mountDirSilent("data", Append_false);
VirtFs::mountDirSilent("../data", Append_false);
@@ -108,22 +120,40 @@ TEST_CASE("resourcemanager", "resourcemanager")
#endif // USE_SDL2
ActorSprite::load();
- resourceManager = new ResourceManager;
+
+ Dirs::initRootDir();
+ Dirs::initHomeDir();
+
+// ConfigManager::initConfiguration();
+// getConfigDefaults2(config.getDefaultValues());
+
+ while (ResourceManager::cleanOrphans(true))
+ continue;
+
testResouceCounter = 0;
+ const size_t resSize = ResourceManager::getResources().size();
+
+ SECTION("resourcemanager get 0")
+ {
+ REQUIRE(testResouceCounter == 0);
+ REQUIRE(ResourceManager::getResources().size() == 0 + resSize);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
+ }
SECTION("resourcemanager get 1")
{
REQUIRE(testResouceCounter == 0);
TestLoader rl = { "test1" };
- Resource *res = resourceManager->get("test1",
+ Resource *res = ResourceManager::get("test1",
TestLoader::load, &rl);
REQUIRE(testResouceCounter == 1);
REQUIRE(res != nullptr);
REQUIRE(res->getRefCount() == 1);
- REQUIRE(resourceManager->mResources.size() == 1);
- REQUIRE(resourceManager->mResources["test1"] == res);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 1 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
res->decRef();
REQUIRE(res->getRefCount() == 0);
}
@@ -131,18 +161,18 @@ TEST_CASE("resourcemanager", "resourcemanager")
SECTION("resourcemanager get 2")
{
TestLoader rl = { "test1" };
- Resource *const res = resourceManager->get("test1",
+ Resource *const res = ResourceManager::get("test1",
TestLoader::load, &rl);
REQUIRE(res != nullptr);
REQUIRE(testResouceCounter == 1);
REQUIRE(res->getRefCount() == 1);
res->setSource("source 1");
REQUIRE(res->getSource() == "source 1");
- REQUIRE(resourceManager->mResources.size() == 1);
- REQUIRE(resourceManager->mResources["test1"] == res);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
- Resource *const res2 = resourceManager->get("test1",
+ REQUIRE(ResourceManager::getResources().size() == 1 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
+ Resource *const res2 = ResourceManager::get("test1",
TestLoader::load, &rl);
REQUIRE(res2 != nullptr);
REQUIRE(testResouceCounter == 1);
@@ -150,10 +180,10 @@ TEST_CASE("resourcemanager", "resourcemanager")
REQUIRE(res2->getRefCount() == 2);
REQUIRE(res->getIdPath() == res2->getIdPath());
REQUIRE(res2->getSource() == "source 1");
- REQUIRE(resourceManager->mResources.size() == 1);
- REQUIRE(resourceManager->mResources["test1"] == res2);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 1 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res2);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
res->decRef();
res2->decRef();
REQUIRE(res->getRefCount() == 0);
@@ -162,53 +192,53 @@ TEST_CASE("resourcemanager", "resourcemanager")
SECTION("resourcemanager get 3")
{
TestLoader rl = { "test1" };
- Resource *res = resourceManager->get("test1",
+ Resource *res = ResourceManager::get("test1",
TestLoader::load, &rl);
REQUIRE(res != nullptr);
REQUIRE(testResouceCounter == 1);
REQUIRE(res->getRefCount() == 1);
- REQUIRE(resourceManager->mResources.size() == 1);
- REQUIRE(resourceManager->mResources["test1"] == res);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 1 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
res->setSource("source 1");
res->decRef();
- REQUIRE(resourceManager->mResources.size() == 0);
- REQUIRE(resourceManager->mOrphanedResources["test1"] == res);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 0 + resSize);
+ REQUIRE(ResourceManager::getOrphanedResources()["test1"] == res);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
REQUIRE(res->getRefCount() == 0);
}
SECTION("resourcemanager get 4")
{
TestLoader rl = { "test1" };
- Resource *res = resourceManager->get("test1",
+ Resource *res = ResourceManager::get("test1",
TestLoader::load, &rl);
REQUIRE(res != nullptr);
REQUIRE(testResouceCounter == 1);
REQUIRE(res->getRefCount() == 1);
- REQUIRE(resourceManager->mResources.size() == 1);
- REQUIRE(resourceManager->mResources["test1"] == res);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 1 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
res->setSource("source 1");
res->decRef();
REQUIRE(res->getRefCount() == 0);
- REQUIRE(resourceManager->mResources.size() == 0);
- REQUIRE(resourceManager->mOrphanedResources["test1"] == res);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 0 + resSize);
+ REQUIRE(ResourceManager::getOrphanedResources()["test1"] == res);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
- Resource *const res2 = resourceManager->get("test1",
+ Resource *const res2 = ResourceManager::get("test1",
TestLoader::load, &rl);
REQUIRE(res2 != nullptr);
REQUIRE(testResouceCounter == 1);
REQUIRE(res2->getRefCount() == 1);
REQUIRE(res->getIdPath() == res2->getIdPath());
REQUIRE(res2->getSource() == "source 1");
- REQUIRE(resourceManager->mResources.size() == 1);
- REQUIRE(resourceManager->mResources["test1"] == res2);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 1 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res2);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
res2->decRef();
REQUIRE(res->getRefCount() == 0);
}
@@ -216,43 +246,43 @@ TEST_CASE("resourcemanager", "resourcemanager")
SECTION("resourcemanager get 5")
{
TestLoader rl = { "test1" };
- Resource *res = resourceManager->get("test1",
+ Resource *res = ResourceManager::get("test1",
TestLoader::load, &rl);
- REQUIRE(resourceManager->isInCache("test1") == true);
+ REQUIRE(ResourceManager::isInCache("test1") == true);
REQUIRE(res != nullptr);
REQUIRE(testResouceCounter == 1);
REQUIRE(res->getRefCount() == 1);
- REQUIRE(resourceManager->mResources.size() == 1);
- REQUIRE(resourceManager->mResources["test1"] == res);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 1 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
res->setSource("source 1");
res->decRef();
REQUIRE(res->getRefCount() == 0);
- REQUIRE(resourceManager->mResources.empty() == true);
- REQUIRE(resourceManager->mOrphanedResources.size() == 1);
- REQUIRE(resourceManager->mOrphanedResources["test1"] == res);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 0 + resSize);
+ REQUIRE(ResourceManager::getOrphanedResources().size() == 1);
+ REQUIRE(ResourceManager::getOrphanedResources()["test1"] == res);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
sleep(33);
- resourceManager->cleanOrphans();
- REQUIRE(resourceManager->isInCache("test1") == false);
+ ResourceManager::cleanOrphans();
+ REQUIRE(ResourceManager::isInCache("test1") == false);
REQUIRE(testResouceCounter == 0);
- REQUIRE(resourceManager->mResources.empty() == true);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 0 + resSize);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
- Resource *const res2 = resourceManager->get("test1",
+ Resource *const res2 = ResourceManager::get("test1",
TestLoader::load, &rl);
- REQUIRE(resourceManager->isInCache("test1") == true);
+ REQUIRE(ResourceManager::isInCache("test1") == true);
REQUIRE(res2 != nullptr);
REQUIRE(testResouceCounter == 1);
REQUIRE(res2->getRefCount() == 1);
REQUIRE(res2->getSource() == "");
- REQUIRE(resourceManager->mResources.size() == 1);
- REQUIRE(resourceManager->mResources["test1"] == res2);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 1 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res2);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
res2->decRef();
REQUIRE(res2->getRefCount() == 0);
}
@@ -260,28 +290,28 @@ TEST_CASE("resourcemanager", "resourcemanager")
SECTION("resourcemanager get 6")
{
TestLoader rl = { "test1" };
- Resource *res = resourceManager->get("test1",
+ Resource *res = ResourceManager::get("test1",
TestLoader::load, &rl);
REQUIRE(res != nullptr);
REQUIRE(testResouceCounter == 1);
REQUIRE(res->getRefCount() == 1);
res->setSource("source 1");
- REQUIRE(resourceManager->mResources.size() == 1);
- REQUIRE(resourceManager->mResources["test1"] == res);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 1 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
- Resource *const res2 = resourceManager->get("test2",
+ Resource *const res2 = ResourceManager::get("test2",
TestLoader::load, &rl);
REQUIRE(res2 != nullptr);
REQUIRE(testResouceCounter == 2);
REQUIRE(res2->getRefCount() == 1);
REQUIRE(res2->getSource() == "");
- REQUIRE(resourceManager->mResources.size() == 2);
- REQUIRE(resourceManager->mResources["test1"] == res);
- REQUIRE(resourceManager->mResources["test2"] == res2);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 2 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res);
+ REQUIRE(ResourceManager::getResources()["test2"] == res2);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
res->decRef();
res2->decRef();
REQUIRE(res->getRefCount() == 0);
@@ -291,25 +321,25 @@ TEST_CASE("resourcemanager", "resourcemanager")
SECTION("resourcemanager getFromCache 1")
{
TestLoader rl = { "test1" };
- Resource *res = resourceManager->get("test1",
+ Resource *res = ResourceManager::get("test1",
TestLoader::load, &rl);
REQUIRE(res != nullptr);
REQUIRE(testResouceCounter == 1);
REQUIRE(res->getRefCount() == 1);
- REQUIRE(resourceManager->mResources.size() == 1);
- REQUIRE(resourceManager->mResources["test1"] == res);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
- Resource *const res2 = resourceManager->getFromCache("test1");
+ REQUIRE(ResourceManager::getResources().size() == 1 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
+ Resource *const res2 = ResourceManager::getFromCache("test1");
REQUIRE(res2 != nullptr);
REQUIRE(testResouceCounter == 1);
REQUIRE(res2->getRefCount() == 2);
REQUIRE(res == res2);
REQUIRE(res2->getSource() == "");
- REQUIRE(resourceManager->mResources.size() == 1);
- REQUIRE(resourceManager->mResources["test1"] == res2);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 1 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res2);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
res->decRef();
res->decRef();
REQUIRE(res->getRefCount() == 0);
@@ -318,27 +348,27 @@ TEST_CASE("resourcemanager", "resourcemanager")
SECTION("resourcemanager getFromCache 2")
{
TestLoader rl = { "test1" };
- Resource *res = resourceManager->get("test1",
+ Resource *res = ResourceManager::get("test1",
TestLoader::load, &rl);
REQUIRE(res != nullptr);
REQUIRE(testResouceCounter == 1);
REQUIRE(res->getRefCount() == 1);
- REQUIRE(resourceManager->mResources.size() == 1);
- REQUIRE(resourceManager->mResources["test1"] == res);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 1 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
res->decRef();
REQUIRE(res->getRefCount() == 0);
- Resource *const res2 = resourceManager->getFromCache("test1");
+ Resource *const res2 = ResourceManager::getFromCache("test1");
REQUIRE(res2 != nullptr);
REQUIRE(testResouceCounter == 1);
REQUIRE(res2->getRefCount() == 1);
REQUIRE(res == res2);
REQUIRE(res2->getSource() == "");
- REQUIRE(resourceManager->mResources.size() == 1);
- REQUIRE(resourceManager->mResources["test1"] == res2);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 1 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res2);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
res->decRef();
REQUIRE(res->getRefCount() == 0);
}
@@ -346,31 +376,31 @@ TEST_CASE("resourcemanager", "resourcemanager")
SECTION("resourcemanager getFromCache 3")
{
TestLoader rl = { "test1" };
- Resource *res = resourceManager->get("test1",
+ Resource *res = ResourceManager::get("test1",
TestLoader::load, &rl);
REQUIRE(res != nullptr);
REQUIRE(testResouceCounter == 1);
REQUIRE(res->getRefCount() == 1);
res->setSource("source 1");
- REQUIRE(resourceManager->mResources.size() == 1);
- REQUIRE(resourceManager->mResources["test1"] == res);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 1 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
- Resource *const res2 = resourceManager->get("test2",
+ Resource *const res2 = ResourceManager::get("test2",
TestLoader::load, &rl);
REQUIRE(res2 != nullptr);
REQUIRE(testResouceCounter == 2);
REQUIRE(res2->getRefCount() == 1);
REQUIRE(res2->getSource() == "");
- REQUIRE(resourceManager->mResources.size() == 2);
- REQUIRE(resourceManager->mResources["test1"] == res);
- REQUIRE(resourceManager->mResources["test2"] == res2);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
-
- Resource *const resC = resourceManager->getFromCache("test1");
- Resource *const res2C = resourceManager->getFromCache("test2");
+ REQUIRE(ResourceManager::getResources().size() == 2 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res);
+ REQUIRE(ResourceManager::getResources()["test2"] == res2);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
+
+ Resource *const resC = ResourceManager::getFromCache("test1");
+ Resource *const res2C = ResourceManager::getFromCache("test2");
REQUIRE(resC != nullptr);
REQUIRE(res2C != nullptr);
REQUIRE(testResouceCounter == 2);
@@ -378,11 +408,11 @@ TEST_CASE("resourcemanager", "resourcemanager")
REQUIRE(res2 == res2C);
REQUIRE(resC->getRefCount() == 2);
REQUIRE(res2C->getRefCount() == 2);
- REQUIRE(resourceManager->mResources.size() == 2);
- REQUIRE(resourceManager->mResources["test1"] == resC);
- REQUIRE(resourceManager->mResources["test2"] == res2C);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 2 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == resC);
+ REQUIRE(ResourceManager::getResources()["test2"] == res2C);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
res->decRef();
res->decRef();
@@ -397,13 +427,13 @@ TEST_CASE("resourcemanager", "resourcemanager")
REQUIRE(testResouceCounter == 0);
Resource *res = new TestResource();
REQUIRE(testResouceCounter == 1);
- resourceManager->addResource("test1", res);
+ ResourceManager::addResource("test1", res);
REQUIRE(res != nullptr);
REQUIRE(res->getRefCount() == 1);
- REQUIRE(resourceManager->mResources.size() == 1);
- REQUIRE(resourceManager->mResources["test1"] == res);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 1 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
res->decRef();
REQUIRE(res->getRefCount() == 0);
}
@@ -412,18 +442,18 @@ TEST_CASE("resourcemanager", "resourcemanager")
{
REQUIRE(testResouceCounter == 0);
TestLoader rl = { "test1" };
- REQUIRE(resourceManager->isInCache("test1") == false);
- Resource *res = resourceManager->get("test1",
+ REQUIRE(ResourceManager::isInCache("test1") == false);
+ Resource *res = ResourceManager::get("test1",
TestLoader::load, &rl);
- REQUIRE(resourceManager->isInCache("test1") == true);
- REQUIRE(resourceManager->isInCache("test2") == false);
+ REQUIRE(ResourceManager::isInCache("test1") == true);
+ REQUIRE(ResourceManager::isInCache("test2") == false);
REQUIRE(testResouceCounter == 1);
REQUIRE(res != nullptr);
REQUIRE(res->getRefCount() == 1);
- REQUIRE(resourceManager->mResources.size() == 1);
- REQUIRE(resourceManager->mResources["test1"] == res);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 1 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
res->decRef();
REQUIRE(res->getRefCount() == 0);
}
@@ -431,27 +461,27 @@ TEST_CASE("resourcemanager", "resourcemanager")
SECTION("resourcemanager getTempResource 1")
{
TestLoader rl = { "test1" };
- REQUIRE(resourceManager->getTempResource("test1") == nullptr);
- Resource *res = resourceManager->get("test1",
+ REQUIRE(ResourceManager::getTempResource("test1") == nullptr);
+ Resource *res = ResourceManager::get("test1",
TestLoader::load, &rl);
REQUIRE(res != nullptr);
REQUIRE(testResouceCounter == 1);
REQUIRE(res->getRefCount() == 1);
- REQUIRE(resourceManager->mResources.size() == 1);
- REQUIRE(resourceManager->mResources["test1"] == res);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
- Resource *const res2 = resourceManager->getTempResource("test1");
- REQUIRE(resourceManager->getTempResource("test2") == nullptr);
+ REQUIRE(ResourceManager::getResources().size() == 1 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
+ Resource *const res2 = ResourceManager::getTempResource("test1");
+ REQUIRE(ResourceManager::getTempResource("test2") == nullptr);
REQUIRE(res2 != nullptr);
REQUIRE(testResouceCounter == 1);
REQUIRE(res2->getRefCount() == 1);
REQUIRE(res == res2);
REQUIRE(res2->getSource() == "");
- REQUIRE(resourceManager->mResources.size() == 1);
- REQUIRE(resourceManager->mResources["test1"] == res2);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 1 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res2);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
res->decRef();
REQUIRE(res->getRefCount() == 0);
}
@@ -460,42 +490,42 @@ TEST_CASE("resourcemanager", "resourcemanager")
{
REQUIRE(testResouceCounter == 0);
TestLoader rl = { "test1" };
- Resource *res = resourceManager->get("test1",
+ Resource *res = ResourceManager::get("test1",
TestLoader::load, &rl);
REQUIRE(testResouceCounter == 1);
REQUIRE(res != nullptr);
REQUIRE(res->getRefCount() == 1);
- REQUIRE(resourceManager->mResources.size() == 1);
- REQUIRE(resourceManager->mResources["test1"] == res);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
- resourceManager->moveToDeleted(res);
+ REQUIRE(ResourceManager::getResources().size() == 1 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
+ ResourceManager::moveToDeleted(res);
REQUIRE(testResouceCounter == 0);
- REQUIRE(resourceManager->mResources.empty() == true);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 0 + resSize);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
}
SECTION("resourcemanager moveToDeleted 2")
{
REQUIRE(testResouceCounter == 0);
TestLoader rl = { "test1" };
- Resource *res = resourceManager->get("test1",
+ Resource *res = ResourceManager::get("test1",
TestLoader::load, &rl);
res->incRef();
REQUIRE(testResouceCounter == 1);
REQUIRE(res != nullptr);
REQUIRE(res->getRefCount() == 2);
- REQUIRE(resourceManager->mResources.size() == 1);
- REQUIRE(resourceManager->mResources["test1"] == res);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
- resourceManager->moveToDeleted(res);
+ REQUIRE(ResourceManager::getResources().size() == 1 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
+ ResourceManager::moveToDeleted(res);
REQUIRE(testResouceCounter == 1);
REQUIRE(res->getRefCount() == 1);
- REQUIRE(resourceManager->mResources.empty() == true);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.size() == 1);
+ REQUIRE(ResourceManager::getResources().size() == 0 + resSize);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().size() == 1);
res->decRef();
}
@@ -503,96 +533,96 @@ TEST_CASE("resourcemanager", "resourcemanager")
{
REQUIRE(testResouceCounter == 0);
TestLoader rl = { "test1" };
- Resource *res = resourceManager->get("test1",
+ Resource *res = ResourceManager::get("test1",
TestLoader::load, &rl);
REQUIRE(testResouceCounter == 1);
REQUIRE(res != nullptr);
REQUIRE(res->getRefCount() == 1);
- REQUIRE(resourceManager->mResources.size() == 1);
- REQUIRE(resourceManager->mResources["test1"] == res);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 1 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
res->decRef();
REQUIRE(testResouceCounter == 1);
REQUIRE(res->getRefCount() == 0);
- REQUIRE(resourceManager->mResources.empty() == true);
- REQUIRE(resourceManager->mOrphanedResources.size() == 1);
- REQUIRE(resourceManager->mOrphanedResources["test1"] == res);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 0 + resSize);
+ REQUIRE(ResourceManager::getOrphanedResources().size() == 1);
+ REQUIRE(ResourceManager::getOrphanedResources()["test1"] == res);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
- resourceManager->moveToDeleted(res);
+ ResourceManager::moveToDeleted(res);
REQUIRE(testResouceCounter == 0);
- REQUIRE(resourceManager->mResources.empty() == true);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 0 + resSize);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
}
SECTION("resourcemanager decRefDelete 1")
{
REQUIRE(testResouceCounter == 0);
TestLoader rl = { "test1" };
- Resource *res = resourceManager->get("test1",
+ Resource *res = ResourceManager::get("test1",
TestLoader::load, &rl);
REQUIRE(testResouceCounter == 1);
REQUIRE(res != nullptr);
REQUIRE(res->getRefCount() == 1);
- REQUIRE(resourceManager->mResources.size() == 1);
- REQUIRE(resourceManager->mResources["test1"] == res);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 1 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
- resourceManager->decRefDelete(res);
+ ResourceManager::decRefDelete(res);
REQUIRE(testResouceCounter == 0);
- REQUIRE(resourceManager->mResources.empty() == true);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 0 + resSize);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
}
SECTION("resourcemanager cleanUp 1")
{
REQUIRE(testResouceCounter == 0);
TestLoader rl = { "test1" };
- Resource *res = resourceManager->get("test1",
+ Resource *res = ResourceManager::get("test1",
TestLoader::load, &rl);
REQUIRE(testResouceCounter == 1);
REQUIRE(res != nullptr);
REQUIRE(res->getRefCount() == 1);
- REQUIRE(resourceManager->mResources.size() == 1);
- REQUIRE(resourceManager->mResources["test1"] == res);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 1 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
res->decRef();
- resourceManager->cleanUp(res);
+ ResourceManager::cleanUp(res);
REQUIRE(testResouceCounter == 0);
- REQUIRE(resourceManager->mResources.empty() == true);
- REQUIRE(resourceManager->mOrphanedResources.size() == 1);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
- resourceManager->mOrphanedResources.clear();
+ REQUIRE(ResourceManager::getResources().size() == 0 + resSize);
+ REQUIRE(ResourceManager::getOrphanedResources().size() == 1);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
+ ResourceManager::getOrphanedResources().clear();
}
SECTION("resourcemanager cleanProtected 1")
{
REQUIRE(testResouceCounter == 0);
TestLoader rl = { "test1" };
- Resource *res = resourceManager->get("test1",
+ Resource *res = ResourceManager::get("test1",
TestLoader::load, &rl);
REQUIRE(testResouceCounter == 1);
REQUIRE(res != nullptr);
REQUIRE(res->getRefCount() == 1);
- REQUIRE(resourceManager->mResources.size() == 1);
- REQUIRE(resourceManager->mResources["test1"] == res);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 1 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
res->setProtected(true);
- resourceManager->cleanProtected();
+ ResourceManager::cleanProtected();
REQUIRE(testResouceCounter == 1);
- REQUIRE(resourceManager->mResources.empty() == true);
- REQUIRE(resourceManager->mOrphanedResources.size() == 1);
- REQUIRE(resourceManager->mOrphanedResources["test1"] == res);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 0 + resSize);
+ REQUIRE(ResourceManager::getOrphanedResources().size() == 1);
+ REQUIRE(ResourceManager::getOrphanedResources()["test1"] == res);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
res->decRef();
}
@@ -600,29 +630,29 @@ TEST_CASE("resourcemanager", "resourcemanager")
{
REQUIRE(testResouceCounter == 0);
TestLoader rl = { "test1" };
- Resource *res = resourceManager->get("test1",
+ Resource *res = ResourceManager::get("test1",
TestLoader::load, &rl);
res->incRef();
REQUIRE(testResouceCounter == 1);
REQUIRE(res != nullptr);
REQUIRE(res->getRefCount() == 2);
- REQUIRE(resourceManager->mResources.size() == 1);
- REQUIRE(resourceManager->mResources["test1"] == res);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
- resourceManager->moveToDeleted(res);
+ REQUIRE(ResourceManager::getResources().size() == 1 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
+ ResourceManager::moveToDeleted(res);
REQUIRE(testResouceCounter == 1);
REQUIRE(res->getRefCount() == 1);
- REQUIRE(resourceManager->mResources.empty() == true);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.size() == 1);
+ REQUIRE(ResourceManager::getResources().size() == 0 + resSize);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().size() == 1);
- resourceManager->clearDeleted();
+ ResourceManager::clearDeleted();
REQUIRE(testResouceCounter == 1);
REQUIRE(res->getRefCount() == 1);
- REQUIRE(resourceManager->mResources.empty() == true);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.size() == 1);
+ REQUIRE(ResourceManager::getResources().size() == 0 + resSize);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().size() == 1);
res->decRef();
}
@@ -630,36 +660,43 @@ TEST_CASE("resourcemanager", "resourcemanager")
{
REQUIRE(testResouceCounter == 0);
TestLoader rl = { "test1" };
- Resource *res = resourceManager->get("test1",
+ Resource *res = ResourceManager::get("test1",
TestLoader::load, &rl);
res->incRef();
REQUIRE(testResouceCounter == 1);
REQUIRE(res != nullptr);
REQUIRE(res->getRefCount() == 2);
- REQUIRE(resourceManager->mResources.size() == 1);
- REQUIRE(resourceManager->mResources["test1"] == res);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
- resourceManager->moveToDeleted(res);
+ REQUIRE(ResourceManager::getResources().size() == 1 + resSize);
+ REQUIRE(ResourceManager::getResources()["test1"] == res);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
+ ResourceManager::moveToDeleted(res);
REQUIRE(testResouceCounter == 1);
REQUIRE(res->getRefCount() == 1);
- REQUIRE(resourceManager->mResources.empty() == true);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.size() == 1);
+ REQUIRE(ResourceManager::getResources().size() == 0 + resSize);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().size() == 1);
res->decRef();
- resourceManager->clearDeleted();
+ ResourceManager::clearDeleted();
REQUIRE(testResouceCounter == 0);
- REQUIRE(resourceManager->mResources.empty() == true);
- REQUIRE(resourceManager->mOrphanedResources.empty() == true);
- REQUIRE(resourceManager->mDeletedResources.empty() == true);
+ REQUIRE(ResourceManager::getResources().size() == 0 + resSize);
+ REQUIRE(ResourceManager::getOrphanedResources().empty() == true);
+ REQUIRE(ResourceManager::getDeletedResources().empty() == true);
}
- delete resourceManager;
- resourceManager = safeResman;
delete2(client);
VirtFs::unmountDirSilent("data");
VirtFs::unmountDirSilent("../data");
delete2(logger);
// VirtFs::deinit();
}
+
+TEST_CASE("resourcemanager leak test2")
+{
+ logger = new Logger();
+ REQUIRE(gui == nullptr);
+ ResourceManager::cleanOrphans(true);
+ ResourceManager::deleteInstance();
+ delete2(logger);
+}
diff --git a/src/resources/sprite/animatedsprite.cpp b/src/resources/sprite/animatedsprite.cpp
index 960a5ea00..3e9250e13 100644
--- a/src/resources/sprite/animatedsprite.cpp
+++ b/src/resources/sprite/animatedsprite.cpp
@@ -90,7 +90,7 @@ AnimatedSprite *AnimatedSprite::delayedLoad(const std::string &restrict
{
if (!mEnableCache)
return load(filename, variant);
- Resource *restrict const res = resourceManager->getFromCache(
+ Resource *restrict const res = ResourceManager::getFromCache(
filename, variant);
if (res)
{
diff --git a/src/resources/sprite/animatedsprite_unittest.cc b/src/resources/sprite/animatedsprite_unittest.cc
index d17177a6d..f48b10b4b 100644
--- a/src/resources/sprite/animatedsprite_unittest.cc
+++ b/src/resources/sprite/animatedsprite_unittest.cc
@@ -54,6 +54,15 @@
#include "debug.h"
+TEST_CASE("AnimatedSprite leak test1")
+{
+ logger = new Logger();
+ REQUIRE(gui == nullptr);
+ ResourceManager::cleanOrphans(true);
+ ResourceManager::deleteInstance();
+ delete2(logger);
+}
+
TEST_CASE("AnimatedSprite tests", "animatedsprite")
{
setEnv("SDL_VIDEODRIVER", "dummy");
@@ -63,7 +72,6 @@ TEST_CASE("AnimatedSprite tests", "animatedsprite")
XML::initXML();
SDL_Init(SDL_INIT_VIDEO);
logger = new Logger();
- ResourceManager::init();
VirtFs::mountDirSilent("data", Append_false);
VirtFs::mountDirSilent("../data", Append_false);
mainGraphics = new SDLGraphics;
@@ -196,3 +204,12 @@ TEST_CASE("AnimatedSprite tests", "animatedsprite")
delete2(logger);
// VirtFs::deinit();
}
+
+TEST_CASE("AnimatedSprite leak test2")
+{
+ logger = new Logger();
+ REQUIRE(gui == nullptr);
+ ResourceManager::cleanOrphans(true);
+ ResourceManager::deleteInstance();
+ delete2(logger);
+}
diff --git a/src/utils/chatutils_unittest.cc b/src/utils/chatutils_unittest.cc
index b5b368f31..d613665dc 100644
--- a/src/utils/chatutils_unittest.cc
+++ b/src/utils/chatutils_unittest.cc
@@ -50,13 +50,21 @@
#include "debug.h"
+TEST_CASE("chatutils leak test1")
+{
+ logger = new Logger();
+ REQUIRE(gui == nullptr);
+ ResourceManager::cleanOrphans(true);
+ ResourceManager::deleteInstance();
+ delete2(logger);
+}
+
TEST_CASE("chatutils replaceVars")
{
client = new Client;
XML::initXML();
SDL_Init(SDL_INIT_VIDEO);
logger = new Logger();
- ResourceManager::init();
VirtFs::mountDirSilent("data", Append_false);
VirtFs::mountDirSilent("../data", Append_false);
theme = new Theme;
@@ -260,3 +268,12 @@ TEST_CASE("chatutils textToMe")
REQUIRE(textToMe("*") == "***");
REQUIRE(textToMe("test line") == "*test line*");
}
+
+TEST_CASE("chatutils leak test2")
+{
+ logger = new Logger();
+ REQUIRE(gui == nullptr);
+ ResourceManager::cleanOrphans(true);
+ ResourceManager::deleteInstance();
+ delete2(logger);
+}
diff --git a/src/utils/stringutils_unittest.cc b/src/utils/stringutils_unittest.cc
index d93e7a007..9d3285ccc 100644
--- a/src/utils/stringutils_unittest.cc
+++ b/src/utils/stringutils_unittest.cc
@@ -1474,7 +1474,6 @@ TEST_CASE("stringuntils timeDiffToString")
TEST_CASE("stringuntils replaceItemLinks")
{
logger = new Logger();
- ResourceManager::init();
VirtFs::mountDirSilent("data", Append_false);
VirtFs::mountDirSilent("../data", Append_false);
VirtFs::mountDirSilent("data/test", Append_false);
diff --git a/src/utils/translation/poparser_unittest.cc b/src/utils/translation/poparser_unittest.cc
index 3d7ac2aaa..7ba006f82 100644
--- a/src/utils/translation/poparser_unittest.cc
+++ b/src/utils/translation/poparser_unittest.cc
@@ -46,13 +46,21 @@
#include "debug.h"
+TEST_CASE("PoParser leak test1")
+{
+ logger = new Logger();
+ REQUIRE(gui == nullptr);
+ ResourceManager::cleanOrphans(true);
+ ResourceManager::deleteInstance();
+ delete2(logger);
+}
+
TEST_CASE("PoParser tests", "PoParser")
{
setEnv("SDL_VIDEODRIVER", "dummy");
client = new Client;
logger = new Logger();
- ResourceManager::init();
VirtFs::mountDirSilent("data", Append_false);
VirtFs::mountDirSilent("../data", Append_false);
@@ -137,3 +145,12 @@ TEST_CASE("PoParser tests", "PoParser")
delete2(logger);
// VirtFs::deinit();
}
+
+TEST_CASE("PoParser leak test2")
+{
+ logger = new Logger();
+ REQUIRE(gui == nullptr);
+ ResourceManager::cleanOrphans(true);
+ ResourceManager::deleteInstance();
+ delete2(logger);
+}
diff --git a/src/utils/xml_unittest.cc b/src/utils/xml_unittest.cc
index a52c5f522..6fd9a5e0a 100644
--- a/src/utils/xml_unittest.cc
+++ b/src/utils/xml_unittest.cc
@@ -42,18 +42,29 @@
#include "resources/sdlimagehelper.h"
+#include "resources/sprite/animatedsprite.h"
+
#include "resources/resourcemanager/resourcemanager.h"
#include "debug.h"
+TEST_CASE("xml test1")
+{
+ logger = new Logger();
+ REQUIRE(client == nullptr);
+ REQUIRE(gui == nullptr);
+ ResourceManager::cleanOrphans(true);
+ ResourceManager::deleteInstance();
+ delete2(logger);
+}
+
TEST_CASE("xml doc")
{
setEnv("SDL_VIDEODRIVER", "dummy");
+ logger = new Logger();
client = new Client;
XML::initXML();
- logger = new Logger();
- ResourceManager::init();
VirtFs::mountDirSilent("data", Append_false);
VirtFs::mountDirSilent("../data", Append_false);
mainGraphics = new SDLGraphics;
@@ -371,9 +382,19 @@ TEST_CASE("xml doc")
delete2(theme);
delete2(client);
+ ResourceManager::deleteInstance();
VirtFs::unmountDirSilent("data");
VirtFs::unmountDirSilent("../data");
delete2(logger);
// VirtFs::deinit();
}
+
+TEST_CASE("xml test2")
+{
+ logger = new Logger();
+ REQUIRE(gui == nullptr);
+ ResourceManager::cleanOrphans(true);
+ ResourceManager::deleteInstance();
+ delete2(logger);
+}
diff --git a/src/utils/xmlutils_unittest.cc b/src/utils/xmlutils_unittest.cc
index 1a9796b8e..4752eaa53 100644
--- a/src/utils/xmlutils_unittest.cc
+++ b/src/utils/xmlutils_unittest.cc
@@ -28,6 +28,8 @@
#include "fs/virtfs/virtfs.h"
+#include "gui/gui.h"
+
#include "utils/delete2.h"
#include "render/sdlgraphics.h"
@@ -38,12 +40,20 @@
#include "debug.h"
+TEST_CASE("xmlutils leak test1")
+{
+ logger = new Logger();
+ REQUIRE(gui == nullptr);
+ ResourceManager::cleanOrphans(true);
+ ResourceManager::deleteInstance();
+ delete2(logger);
+}
+
TEST_CASE("xmlutils readXmlIntVector 1")
{
client = new Client;
XML::initXML();
logger = new Logger();
- ResourceManager::init();
VirtFs::mountDirSilent("data", Append_false);
VirtFs::mountDirSilent("../data", Append_false);
@@ -89,7 +99,6 @@ TEST_CASE("xmlutils readXmlStringMap 1")
client = new Client;
XML::initXML();
logger = new Logger();
- ResourceManager::init();
VirtFs::mountDirSilent("data", Append_false);
VirtFs::mountDirSilent("../data", Append_false);
@@ -134,7 +143,6 @@ TEST_CASE("xmlutils readXmlIntMap 1")
client = new Client;
XML::initXML();
logger = new Logger();
- ResourceManager::init();
VirtFs::mountDirSilent("data", Append_false);
VirtFs::mountDirSilent("../data", Append_false);
VirtFs::mountDirSilent("data/test", Append_false);
@@ -177,3 +185,12 @@ TEST_CASE("xmlutils readXmlIntMap 1")
delete2(logger);
// VirtFs::deinit();
}
+
+TEST_CASE("xmlutils leak test2")
+{
+ logger = new Logger();
+ REQUIRE(gui == nullptr);
+ ResourceManager::cleanOrphans(true);
+ ResourceManager::deleteInstance();
+ delete2(logger);
+}