diff options
author | Christian Strømme <christian.stromme@qt.io> | 2018-09-10 13:48:15 +0200 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@qt.io> | 2018-09-11 08:07:24 +0000 |
commit | 41d130aa70f58189dc12fb27060f0497117ceb17 (patch) | |
tree | 49575f563d566fa91858780b06171c953a2a5554 | |
parent | 156a70ee5dcacba34039e80d2cff158348de717a (diff) |
Look-up change flags when creating animation callbacks
mapping the property change to a change flag is expensive, so look-up
the change flag when creating the animation callback, as it won't change
after that and we can just cache it for later updates.
Change-Id: I520a3be298735c55aac6e8e6e8cb2215f2c9d75e
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
-rw-r--r-- | src/runtime/q3dsanimationmanager.cpp | 6 | ||||
-rw-r--r-- | src/runtime/q3dsuippresentation.cpp | 5 | ||||
-rw-r--r-- | src/runtime/q3dsuippresentation_p.h | 2 |
3 files changed, 8 insertions, 5 deletions
diff --git a/src/runtime/q3dsanimationmanager.cpp b/src/runtime/q3dsanimationmanager.cpp index 0ab3310..ed7245d 100644 --- a/src/runtime/q3dsanimationmanager.cpp +++ b/src/runtime/q3dsanimationmanager.cpp @@ -58,7 +58,8 @@ public: m_animationManager(manager), m_property(property), m_propertyName(propertyName), - m_type(type) { } + m_type(type), + m_changeFlag(target->mapChangeFlags({{propertyName}})) { } void valueChanged(const QVariant &value) override; @@ -75,6 +76,7 @@ private: QString m_propertyName; QVariant m_value; QVariant::Type m_type; + int m_changeFlag; int m_key = -1; }; @@ -559,7 +561,7 @@ void Q3DSAnimationManager::applyChanges() } else { change.cb->m_property.writeOnGadget(change.cb->m_target, change.cb->m_value); } - change.cb->m_target->notifyPropertyChanges({Q3DSPropertyChange(change.cb->m_propertyName)}); + change.cb->m_target->notifyPropertyChanges({Q3DSPropertyChange(change.cb->m_propertyName)}, change.cb->m_changeFlag); } m_changes.clear(); } diff --git a/src/runtime/q3dsuippresentation.cpp b/src/runtime/q3dsuippresentation.cpp index e60537c..3888ebe 100644 --- a/src/runtime/q3dsuippresentation.cpp +++ b/src/runtime/q3dsuippresentation.cpp @@ -626,10 +626,11 @@ int Q3DSGraphObject::mapChangeFlags(const Q3DSPropertyChangeList &changeList) co return 0; } -void Q3DSGraphObject::notifyPropertyChanges(const Q3DSPropertyChangeList &changeList) +void Q3DSGraphObject::notifyPropertyChanges(const Q3DSPropertyChangeList &changeList, int changeFlags) { const QSet<QString> keys = changeList.keys(); - const int changeFlags = mapChangeFlags(changeList); + if (changeFlags == -1) + changeFlags = mapChangeFlags(changeList); for (const auto &f : qAsConst(m_callbacks)) { if (f) f(this, keys, changeFlags); diff --git a/src/runtime/q3dsuippresentation_p.h b/src/runtime/q3dsuippresentation_p.h index ee1210c..9bc6b7c 100644 --- a/src/runtime/q3dsuippresentation_p.h +++ b/src/runtime/q3dsuippresentation_p.h @@ -328,7 +328,7 @@ public: virtual void resolveReferences(Q3DSUipPresentation &) { } virtual int mapChangeFlags(const Q3DSPropertyChangeList &changeList) const; - void notifyPropertyChanges(const Q3DSPropertyChangeList &changeList); + void notifyPropertyChanges(const Q3DSPropertyChangeList &changeList, int changeFlags = -1); bool isNode() const { return m_type >= FirstNodeType; } |