fix: remaining issues recorded during test coverage work

- RenderManager: GPU-side members (context_, decoder_cache_,
  shader_cache_, auto_cacher_, worker_pool_, decoder_clear_timer_) were
  left uninitialized when the configured graphics backend is unknown
  (e.g. dummy); ViewerWidget then dereferenced garbage and crashed.
  Initialize them at declaration
- CurveView::SelectKeyframesOfInput ignored its reference parameter and
  selected keyframes of every connected track; select only the
  requested track's keyframes
- SeekableWidget::SeekToScenePoint dereferenced GetViewerNode()
  unconditionally; skip the playhead update when no viewer is connected
- LoadOTIOTask: unknown root schema leaked the freshly allocated
  project_ (delete + reset; OTIO is not enabled in local builds so this
  file is compile-verified by inspection only)

Locked by new tests: RenderManagerDummyBackend,
TimeRuler.SeekToScenePointWithoutViewerIsNoOp,
CurveViewTest.SelectKeyframesOfInputSelectsOnlyRequestedTrack
This commit is contained in:
2026-07-17 17:20:50 +08:00
parent 7223900b6d
commit 004e942cf9
7 changed files with 77 additions and 13 deletions
+10 -10
View File
@@ -63,11 +63,11 @@ private:
bool cancelled_;
Renderer *context_;
Renderer *context_ = nullptr;
DecoderCache *decoder_cache_;
DecoderCache *decoder_cache_ = nullptr;
ShaderCache *shader_cache_;
ShaderCache *shader_cache_ = nullptr;
};
class RenderWorkerPool;
@@ -239,21 +239,21 @@ private:
static RenderManager *instance_;
Renderer *context_;
Renderer *context_ = nullptr;
Backend backend_;
Backend requested_backend_;
DecoderCache *decoder_cache_;
DecoderCache *decoder_cache_ = nullptr;
ShaderCache *shader_cache_;
ShaderCache *shader_cache_ = nullptr;
static constexpr auto kDecoderMaximumInactivityAggressive = 1000;
static constexpr auto kDecoderMaximumInactivity = 5000;
int aggressive_gc_;
int aggressive_gc_ = 0;
QTimer *decoder_clear_timer_;
QTimer *decoder_clear_timer_ = nullptr;
RenderThread *dry_run_thread_ = nullptr;
RenderThread *audio_thread_ = nullptr;
@@ -263,9 +263,9 @@ private:
std::list<RenderThread *> render_threads_;
PreviewAutoCacher *auto_cacher_;
PreviewAutoCacher *auto_cacher_ = nullptr;
RenderWorkerPool *worker_pool_;
RenderWorkerPool *worker_pool_ = nullptr;
private slots:
void ClearOldDecoders();