summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Strømme <christian.stromme@qt.io>2018-09-10 13:48:15 +0200
committerLaszlo Agocs <laszlo.agocs@qt.io>2018-09-11 08:07:24 +0000
commit41d130aa70f58189dc12fb27060f0497117ceb17 (patch)
tree49575f563d566fa91858780b06171c953a2a5554
parent156a70ee5dcacba34039e80d2cff158348de717a (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.cpp6
-rw-r--r--src/runtime/q3dsuippresentation.cpp5
-rw-r--r--src/runtime/q3dsuippresentation_p.h2
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; }