rendermanager: reimplement clearing old decoders

This commit is contained in:
itsmattkc
2022-06-10 12:12:03 -07:00
parent 6391ef4a7f
commit 09a3ce39b9
2 changed files with 29 additions and 0 deletions
+24
View File
@@ -59,6 +59,11 @@ RenderManager::RenderManager(QObject *parent) :
context_ = nullptr;
decoder_cache_ = nullptr;
}
QTimer *decoder_clear_timer = new QTimer(this);
decoder_clear_timer->setInterval(kDecoderMaximumInactivity);
connect(decoder_clear_timer, &QTimer::timeout, this, &RenderManager::ClearOldDecoders);
decoder_clear_timer->start();
}
RenderManager::~RenderManager()
@@ -157,4 +162,23 @@ void RenderManager::RunTicket(RenderTicketPtr ticket) const
RenderProcessor::Process(ticket, context_, decoder_cache_, shader_cache_);
}
void RenderManager::ClearOldDecoders()
{
QMutexLocker locker(decoder_cache_->mutex());
qint64 min_age = QDateTime::currentMSecsSinceEpoch() - kDecoderMaximumInactivity;
for (auto it=decoder_cache_->begin(); it!=decoder_cache_->end(); ) {
DecoderPair decoder = it.value();
if (decoder.decoder->GetLastAccessedTime() < min_age) {
qDebug() << "Cleared old decoder";
decoder.decoder->Close();
it = decoder_cache_->erase(it);
} else {
it++;
}
}
}
}