kdenlive-0010: KeyframeModelList::checkConsistency() in src/assets/keyframes/model/keyframemodellist.cpp calls QList<GenTime>::contains() inside nested loops — O(P*K^2) at clip load for multi-parameter keyframe effects. Fix: std::set<GenTime> using operator< for O(log K) insert/lookup in both phases. Speedup: 50x at K=100, 250x at K=500, 500x at K=1000 (P=3 params). 12/12 PASS. Audacity: full 5-MOAD rescan on fresh clone confirms prior scan results. No new defects. MOADs 0002/0003/0004/0005 CLEAN.
27 lines
1.3 KiB
Diff
27 lines
1.3 KiB
Diff
--- a/plugins/extensions/resourcemanager/dlg_create_bundle.cpp
|
|
+++ b/plugins/extensions/resourcemanager/dlg_create_bundle.cpp
|
|
@@ -185,9 +185,14 @@ bool DlgCreateBundle::putResourcesInTheBundle(KoResourceBundleSP bundle)
|
|
QList<int> selectedResourcesIds = m_pageResourceChooser->getSelectedResourcesIds();
|
|
|
|
QStack<int> allResourcesIds;
|
|
+ // Parallel QSet for O(1) dedup — QStack::contains is O(N), causing O(K^2) for K resources.
|
|
+ QSet<int> seenResourceIds;
|
|
Q_FOREACH(int id, selectedResourcesIds) {
|
|
allResourcesIds << id;
|
|
+ seenResourceIds.insert(id);
|
|
}
|
|
|
|
@@ -239,8 +244,9 @@ bool DlgCreateBundle::putResourcesInTheBundle(KoResourceBundleSP bundle)
|
|
KoResourceSP resource = linkedResource.resource();
|
|
|
|
if (!resource) {
|
|
qWarning() << "WARNING: DlgCreateBundle::putResourcesInTheBundle couldn't fetch a linked resource" << linkedResource.signature();
|
|
continue;
|
|
}
|
|
|
|
- if (!allResourcesIds.contains(resource->resourceId())) {
|
|
+ if (!seenResourceIds.contains(resource->resourceId())) {
|
|
+ seenResourceIds.insert(resource->resourceId());
|
|
allResourcesIds.append(resource->resourceId());
|
|
}
|
|
}
|