renderer/decoder: clean up decoders after some time
This commit is contained in:
@@ -36,6 +36,7 @@
|
||||
namespace olive {
|
||||
|
||||
RenderManager* RenderManager::instance_ = nullptr;
|
||||
const int RenderManager::kDecoderMaximumInactivity = 10000;
|
||||
|
||||
RenderManager::RenderManager(QObject *parent) :
|
||||
ThreadPool(QThread::IdlePriority, 0, parent),
|
||||
@@ -56,6 +57,10 @@ RenderManager::RenderManager(QObject *parent) :
|
||||
decoder_cache_ = new DecoderCache();
|
||||
shader_cache_ = new ShaderCache();
|
||||
default_shader_ = context_->CreateNativeShader(ShaderCode(QString(), QString()));
|
||||
|
||||
decoder_clear_timer_.setInterval(kDecoderMaximumInactivity);
|
||||
connect(&decoder_clear_timer_, &QTimer::timeout, this, &RenderManager::ClearOldDecoders);
|
||||
decoder_clear_timer_.start();
|
||||
} else {
|
||||
qCritical() << "Tried to initialize unknown graphics backend";
|
||||
context_ = nullptr;
|
||||
@@ -79,6 +84,24 @@ RenderManager::~RenderManager()
|
||||
}
|
||||
}
|
||||
|
||||
void RenderManager::ClearOldDecoders()
|
||||
{
|
||||
QMutexLocker locker(decoder_cache_->mutex());
|
||||
|
||||
qint64 min_age = QDateTime::currentMSecsSinceEpoch() - kDecoderMaximumInactivity;
|
||||
|
||||
for (auto it=decoder_cache_->begin(); it!=decoder_cache_->end(); ) {
|
||||
DecoderPtr decoder = it.value();
|
||||
|
||||
if (decoder->GetLastAccessedTime() < min_age) {
|
||||
decoder->Close();
|
||||
it = decoder_cache_->erase(it);
|
||||
} else {
|
||||
it++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QByteArray RenderManager::Hash(const Node *n, const QString& output, const VideoParams ¶ms, const rational &time)
|
||||
{
|
||||
QCryptographicHash hasher(QCryptographicHash::Sha1);
|
||||
|
||||
Reference in New Issue
Block a user