QPropertyBindingPrivate: de-inline functions that modify heapObservers
Manipulating owning containers is costly at runtime, but also at compile-time, so don't do it in inline functions, do it out-of-line. Removes the top-2 entries[1] in a Clang -ftime-trace QtWidget build. [1] at the time of writing of this patch Change-Id: I5da5030788b0d976a0ab7875f87ba3b51dbb1231 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>bb10
parent
0ca2cf42e0
commit
9080a810ad
|
|
@ -245,6 +245,24 @@ QPropertyBindingPrivate::~QPropertyBindingPrivate()
|
|||
+ QPropertyBindingPrivate::getSizeEnsuringAlignment());
|
||||
}
|
||||
|
||||
void QPropertyBindingPrivate::clearDependencyObservers() {
|
||||
for (size_t i = 0; i < qMin(dependencyObserverCount, inlineDependencyObservers.size()); ++i) {
|
||||
QPropertyObserverPointer p{&inlineDependencyObservers[i]};
|
||||
p.unlink_fast();
|
||||
}
|
||||
if (heapObservers)
|
||||
heapObservers->clear();
|
||||
dependencyObserverCount = 0;
|
||||
}
|
||||
|
||||
QPropertyObserverPointer QPropertyBindingPrivate::allocateDependencyObserver_slow()
|
||||
{
|
||||
++dependencyObserverCount;
|
||||
if (!heapObservers)
|
||||
heapObservers.reset(new std::vector<QPropertyObserver>());
|
||||
return {&heapObservers->emplace_back()};
|
||||
}
|
||||
|
||||
void QPropertyBindingPrivate::unlinkAndDeref()
|
||||
{
|
||||
clearDependencyObservers();
|
||||
|
|
|
|||
|
|
@ -295,15 +295,7 @@ public:
|
|||
return observers;
|
||||
}
|
||||
|
||||
void clearDependencyObservers() {
|
||||
for (size_t i = 0; i < qMin(dependencyObserverCount, inlineDependencyObservers.size()); ++i) {
|
||||
QPropertyObserverPointer p{&inlineDependencyObservers[i]};
|
||||
p.unlink_fast();
|
||||
}
|
||||
if (heapObservers)
|
||||
heapObservers->clear();
|
||||
dependencyObserverCount = 0;
|
||||
}
|
||||
void clearDependencyObservers();
|
||||
|
||||
Q_ALWAYS_INLINE QPropertyObserverPointer allocateDependencyObserver() {
|
||||
if (dependencyObserverCount < inlineDependencyObservers.size()) {
|
||||
|
|
@ -313,13 +305,7 @@ public:
|
|||
return allocateDependencyObserver_slow();
|
||||
}
|
||||
|
||||
Q_NEVER_INLINE QPropertyObserverPointer allocateDependencyObserver_slow()
|
||||
{
|
||||
++dependencyObserverCount;
|
||||
if (!heapObservers)
|
||||
heapObservers.reset(new std::vector<QPropertyObserver>());
|
||||
return {&heapObservers->emplace_back()};
|
||||
}
|
||||
QPropertyObserverPointer allocateDependencyObserver_slow();
|
||||
|
||||
QPropertyBindingSourceLocation sourceLocation() const
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue