videorenderer: if an InvalidateVisible() signal comes through, cancel the queue

Optimization that frees up the GPU as quickly as possible when the user starts
making changes that may require quick feedback.
This commit is contained in:
itsmattkc
2020-05-07 00:56:16 +10:00
parent 2eb753e99d
commit c61adbf2a2
7 changed files with 59 additions and 27 deletions
+29 -17
View File
@@ -290,24 +290,14 @@ void RenderBackend::CancelQueue()
cancel_dialog_->RunIfWorkersAreBusy();
}
void RenderBackend::InvalidateVisible(const TimeRange &range, NodeInput *from)
{
InvalidateCacheVeryInternal(range, from, true);
}
void RenderBackend::InvalidateCache(const TimeRange &range, NodeInput *from)
{
// Adjust range to min/max values
rational start_range_adj = qMax(rational(0), range.in());
rational end_range_adj = qMin(GetSequenceLength(), range.out());
qDebug() << "Cache invalidated between"
<< start_range_adj.toDouble()
<< "and"
<< end_range_adj.toDouble();
if (from) {
// Queue value update
qDebug() << " from" << from->parentNode()->id() << "::" << from->id();
QueueValueUpdate(from);
}
InvalidateCacheInternal(start_range_adj, end_range_adj);
InvalidateCacheVeryInternal(range, from, false);
}
bool RenderBackend::ViewerIsConnected() const
@@ -349,6 +339,26 @@ void RenderBackend::SetWorkerBusyState(RenderWorker *worker, bool busy)
processor_busy_state_.replace(processors_.indexOf(worker), busy);
}
void RenderBackend::InvalidateCacheVeryInternal(const TimeRange &range, NodeInput *from, bool only_visible)
{
// Adjust range to min/max values
rational start_range_adj = qMax(rational(0), range.in());
rational end_range_adj = qMin(GetSequenceLength(), range.out());
qDebug() << "Cache invalidated between"
<< start_range_adj.toDouble()
<< "and"
<< end_range_adj.toDouble();
if (from) {
// Queue value update
qDebug() << " from" << from->parentNode()->id() << "::" << from->id();
QueueValueUpdate(from);
}
InvalidateCacheInternal(start_range_adj, end_range_adj, only_visible);
}
void RenderBackend::CopyNodeInputValue(NodeInput *input)
{
// Find our copy of this parameter
@@ -446,8 +456,10 @@ const QVector<QThread *> &RenderBackend::threads()
return threads_;
}
void RenderBackend::InvalidateCacheInternal(const rational &start_range, const rational &end_range)
void RenderBackend::InvalidateCacheInternal(const rational &start_range, const rational &end_range, bool only_visible)
{
Q_UNUSED(only_visible)
// Add the range to the list
cache_queue_.InsertTimeRange(TimeRange(start_range, end_range));