rendermanager: reimplement clearing old decoders
This commit is contained in:
@@ -59,6 +59,11 @@ RenderManager::RenderManager(QObject *parent) :
|
|||||||
context_ = nullptr;
|
context_ = nullptr;
|
||||||
decoder_cache_ = 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()
|
RenderManager::~RenderManager()
|
||||||
@@ -157,4 +162,23 @@ void RenderManager::RunTicket(RenderTicketPtr ticket) const
|
|||||||
RenderProcessor::Process(ticket, context_, decoder_cache_, shader_cache_);
|
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++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -130,6 +130,11 @@ private:
|
|||||||
|
|
||||||
ShaderCache* shader_cache_;
|
ShaderCache* shader_cache_;
|
||||||
|
|
||||||
|
static constexpr auto kDecoderMaximumInactivity = 10000;
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void ClearOldDecoders();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user