Cogs.Core
ResourceUsageLogger.cpp
1
2#include "Resources/BufferManager.h"
3#include "Resources/TextureManager.h"
4#include "Resources/AnimationManager.h"
5#include "Resources/MeshManager.h"
6#include "Resources/ModelManager.h"
7#include "Resources/EffectManager.h"
8#include "Resources/MaterialManager.h"
9#include "Resources/MaterialDefinitionManager.h"
10#include "Resources/MaterialInstance.h"
11#include "Resources/FontManager.h"
12#include "Resources/AssetManager.h"
13
14#include "Renderer/RenderResources.h"
15
16#include "Services/Variables.h"
17#include "Context.h"
18
19#include "MemoryContext.h"
20#include "ResourceUsageLogger.h"
21
22#include "Foundation/Logging/Logger.h"
23#include "Foundation/Memory/Allocator.h"
24
25namespace
26{
27 Cogs::Logging::Log logger = Cogs::Logging::getLogger("ResourceUsage");
28
29 std::string byteString(size_t size)
30 {
31 if (size < 1024 * 5) {
32 return std::to_string(size) + "b";
33 }
34 size /= 1024;
35 if (size < 1024 * 5) {
36 return std::to_string(size) + "kb";
37 }
38 size /= 1024;
39 if (size < 1024 * 5) {
40 return std::to_string(size) + "mb";
41 }
42 size /= 1024;
43 return std::to_string(size) + "gb";
44 }
45
46}
47
48
49Cogs::Core::ResourceUsageLogger::ResourceUsageLogger(Context* context)
50{
51 timer.start();
52 context->variables->set("resources.usageLogger.rate",
53#if defined(COGS_PARANOIA)
54 1.f
55#else
56 0.f
57#endif
58 );
59}
60
61Cogs::Core::ResourceUsageLogger::~ResourceUsageLogger()
62{
63}
64
65void Cogs::Core::ResourceUsageLogger::update(Context* context, bool force)
66{
67 auto rate = context->variables->get("resources.usageLogger.rate", 0.f);
68
69 if (!force && (rate <= 0.f || timer.elapsedSeconds() < rate)) return;
70 timer.start();
71 LOG_DEBUG(logger, "Allocators: bas=%s/%zu, res=%s/%zu, io=%s/%zu, cmp=%s/%zu, scr=%s/%zu, str=%s/%zu",
72 byteString(context->memory->baseAllocator->getAllocatedBytes()).c_str(), context->memory->baseAllocator->getAllocationCount(),
73 byteString(context->memory->resourceAllocator->getAllocatedBytes()).c_str(), context->memory->resourceAllocator->getAllocationCount(),
74 byteString(context->memory->ioAllocator->getAllocatedBytes()).c_str(), context->memory->ioAllocator->getAllocationCount(),
75 byteString(context->memory->componentAllocator->getAllocatedBytes()).c_str(), context->memory->componentAllocator->getAllocationCount(),
76 byteString(context->memory->scriptAllocator->getAllocatedBytes()).c_str(), context->memory->scriptAllocator->getAllocationCount(),
77 byteString(context->memory->getStringsAllocator()->getAllocatedBytes()).c_str(), context->memory->getStringsAllocator()->getAllocationCount());
78
79 if (context->renderer) {
80 if (const auto* renderResources = context->renderer->getResources()) {
81 LOG_DEBUG(logger, "renderResources: %s", renderResources->getReport().c_str());
82 }
83 }
84 if (context->bufferManager) LOG_DEBUG(logger, "bufMgr: %s", context->bufferManager->getReport().c_str());
85 if (context->textureManager) LOG_DEBUG(logger, "texMgr: %s", context->textureManager->getReport().c_str());
86 if (context->animationManager) LOG_DEBUG(logger, "aniMgr: %s", context->animationManager->getReport().c_str());
87 if (context->meshManager) LOG_DEBUG(logger, "mshMgr: %s", context->meshManager->getReport().c_str());
88 if (context->modelManager) LOG_DEBUG(logger, "modMgr: %s", context->modelManager->getReport().c_str());
89 if (context->effectManager) LOG_DEBUG(logger, "effMgr: %s", context->effectManager->getReport().c_str());
90 if (context->materialManager) LOG_DEBUG(logger, "matMgr: %s", context->materialManager->getReport().c_str());
91 if (context->materialInstanceManager) LOG_DEBUG(logger, "mInMgr: %s", context->materialInstanceManager->getReport().c_str());
92 if (context->fontManager) LOG_DEBUG(logger, "fntMgr: %s", context->fontManager->getReport().c_str());
93 if (context->assetManager) LOG_DEBUG(logger, "assMgr: %s", context->assetManager->getReport().c_str());
94 if (context->materialDefinitionManager) LOG_DEBUG(logger, "mdfMgr: %s", context->materialDefinitionManager->getReport().c_str());
95}
Log implementation class.
Definition: LogManager.h:139
constexpr Log getLogger(const char(&name)[LEN]) noexcept
Definition: LogManager.h:180