From 43a582a2abff46c295711a88349a9222e12b89a6 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 5 Apr 2022 09:30:26 +1000 Subject: Sequencer: skip redundant F-curve GSet allocation --- .../editors/space_sequencer/sequencer_edit.c | 3 +++ source/blender/sequencer/intern/animation.c | 21 +++++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index b77f780e413..70fba9d4ac9 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -2457,6 +2457,9 @@ static void sequencer_copy_animation(Scene *scene, Sequence *seq) } GSet *fcurves = SEQ_fcurves_by_strip_get(seq, &scene->adt->action->curves); + if (fcurves == NULL) { + return; + } GSET_FOREACH_BEGIN (FCurve *, fcu, fcurves) { BLI_addtail(&fcurves_clipboard, BKE_fcurve_copy(fcu)); diff --git a/source/blender/sequencer/intern/animation.c b/source/blender/sequencer/intern/animation.c index a908bb01d35..82dc5970a7f 100644 --- a/source/blender/sequencer/intern/animation.c +++ b/source/blender/sequencer/intern/animation.c @@ -48,9 +48,13 @@ GSet *SEQ_fcurves_by_strip_get(const Sequence *seq, ListBase *fcurve_base) char rna_path[SEQ_RNAPATH_MAXSTR]; size_t rna_path_len = sequencer_rna_path_prefix(rna_path, seq->name + 2); - GSet *fcurves = BLI_gset_ptr_new(__func__); + /* Only allocate `fcurves` if it's needed as it's possible there is no animation for `seq`. */ + GSet *fcurves = NULL; LISTBASE_FOREACH (FCurve *, fcurve, fcurve_base) { if (STREQLEN(fcurve->rna_path, rna_path, rna_path_len)) { + if (fcurves == NULL) { + fcurves = BLI_gset_ptr_new(__func__); + } BLI_gset_add(fcurves, fcurve); } } @@ -65,8 +69,11 @@ void SEQ_offset_animdata(Scene *scene, Sequence *seq, int ofs) if (!seq_animation_curves_exist(scene) || ofs == 0) { return; } - GSet *fcurves = SEQ_fcurves_by_strip_get(seq, &scene->adt->action->curves); + if (fcurves == NULL) { + return; + } + GSET_FOREACH_BEGIN (FCurve *, fcu, fcurves) { unsigned int i; if (fcu->bezt) { @@ -95,8 +102,11 @@ void SEQ_free_animdata(Scene *scene, Sequence *seq) if (!seq_animation_curves_exist(scene)) { return; } - GSet *fcurves = SEQ_fcurves_by_strip_get(seq, &scene->adt->action->curves); + if (fcurves == NULL) { + return; + } + GSET_FOREACH_BEGIN (FCurve *, fcu, fcurves) { BLI_remlink(&scene->adt->action->curves, fcu); BKE_fcurve_free(fcu); @@ -129,8 +139,11 @@ void SEQ_animation_duplicate(Scene *scene, Sequence *seq, ListBase *list) if (BLI_listbase_is_empty(list)) { return; } - GSet *fcurves = SEQ_fcurves_by_strip_get(seq, list); + if (fcurves == NULL) { + return; + } + GSET_FOREACH_BEGIN (FCurve *, fcu, fcurves) { FCurve *fcu_cpy = BKE_fcurve_copy(fcu); BLI_addtail(&scene->adt->action->curves, fcu_cpy); -- cgit v1.2.3