memorymanager: rewrote entire memory management system

This commit is contained in:
itsmattkc
2020-02-23 20:29:51 +11:00
parent 3a90e76fec
commit 48cdb3a6dd
10 changed files with 143 additions and 147 deletions
-2
View File
@@ -26,8 +26,6 @@ set(OLIVE_SOURCES
render/colorprocessor.cpp
render/diskmanager.h
render/diskmanager.cpp
render/memorymanager.h
render/memorymanager.cpp
render/pixelformat.h
render/pixelformat.cpp
render/pixelservice.h
+3 -2
View File
@@ -63,9 +63,10 @@ DecoderPtr RenderWorker::ResolveDecoderFromInput(StreamPtr stream)
QMutexLocker locker(decoder_cache_->lock());
// Access a map of Node inputs and decoder instances and retrieve a frame!
DecoderPtr decoder = decoder_cache_->Get(stream.get());
if (decoder == nullptr && stream != nullptr) {
if (!decoder && stream) {
// Create a new Decoder here
decoder = Decoder::CreateFromID(stream->footage()->decoder());
decoder->set_stream(stream);
@@ -74,7 +75,7 @@ DecoderPtr RenderWorker::ResolveDecoderFromInput(StreamPtr stream)
decoder_cache_->Add(stream.get(), decoder);
} else {
decoder = nullptr;
qWarning() << "Failed to open decoder for" << stream->footage()->filename();
qWarning() << "Failed to open decoder for" << stream->footage()->filename() << "::" << stream->index();
}
}
-65
View File
@@ -1,65 +0,0 @@
#include "memorymanager.h"
#include <QDebug>
#ifdef Q_OS_WINDOWS
#include <windows.h>
#else
#include <unistd.h>
#endif
MemoryManager* MemoryManager::instance_ = nullptr;
// FIXME: Hardcoded, should be a preference
const uint64_t MemoryManager::minimum_available_memory_ = 2147483648;
MemoryManager::MemoryManager(QObject* parent) :
QObject(parent)
{
}
void MemoryManager::CreateInstance()
{
instance_ = new MemoryManager();
}
MemoryManager *MemoryManager::instance()
{
return instance_;
}
void MemoryManager::DestroyInstance()
{
delete instance_;
instance_ = nullptr;
}
bool MemoryManager::ShouldFreeMemory()
{
return (GetAvailableMemory() < minimum_available_memory_);
}
bool MemoryManager::RegisterMemory()
{
if (ShouldFreeMemory()) {
emit FreeMemory();
return true;
}
return false;
}
uint64_t MemoryManager::GetAvailableMemory()
{
#ifdef Q_OS_WINDOWS
MEMORYSTATUSEX status;
status.dwLength = sizeof(status);
GlobalMemoryStatusEx(&status);
return status.ullAvailPhys;
#else
long pages = sysconf(_SC_AVPHYS_PAGES);
long page_size = sysconf(_SC_PAGE_SIZE);
return pages * page_size;
#endif
}
-32
View File
@@ -1,32 +0,0 @@
#ifndef MEMORYMANAGER_H
#define MEMORYMANAGER_H
#include <QObject>
class MemoryManager : public QObject
{
Q_OBJECT
public:
MemoryManager(QObject* parent = nullptr);
static void CreateInstance();
static MemoryManager* instance();
static void DestroyInstance();
static bool ShouldFreeMemory();
bool RegisterMemory();
signals:
void FreeMemory();
private:
static uint64_t GetAvailableMemory();
static MemoryManager* instance_;
static const uint64_t minimum_available_memory_;
};
#endif // MEMORYMANAGER_H