diff options
author | Lars Knoll <lars.knoll@qt.io> | 2020-07-08 10:57:21 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2020-07-10 15:07:07 +0200 |
commit | be1ce6b26909256e62c2b39e4de9f8f79d070937 (patch) | |
tree | 56ae09231c362010b17df127c4d7c17ab4943f30 /src/corelib/kernel/qproperty.cpp | |
parent | 0d1208f0f08727c55de9eed8e0ceef092080b927 (diff) |
Separate the error case when evaluating bindings
There's no point in returning a usually empty error when
evaluating bindings, adding overhead to the regular code
path.
Instead, the error can be set on the currently evaluating
binding if required. This streamlines the functor used to
wrap the binding and should thus expand to less code and
execute faster in the regular case.
To achieve this, expose a pointer to the currently evaluating
binding in the private API (as QtQml needs it to be able to
report errors).
The error case now requires one additional TLS lookup, but
we don't really care about performance in that case anyway.
Change-Id: Iecb450e765244930a41d813fcf8eb4013957a6a3
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/corelib/kernel/qproperty.cpp')
-rw-r--r-- | src/corelib/kernel/qproperty.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/corelib/kernel/qproperty.cpp b/src/corelib/kernel/qproperty.cpp index 92c9afc6d8..f7039cc62a 100644 --- a/src/corelib/kernel/qproperty.cpp +++ b/src/corelib/kernel/qproperty.cpp @@ -206,6 +206,11 @@ BindingEvaluationState::~BindingEvaluationState() *currentState = previousState; } +QPropertyBindingPrivate *QPropertyBindingPrivate::currentlyEvaluatingBinding() +{ + return currentBindingEvaluationState ? currentBindingEvaluationState->binding : nullptr; +} + void QPropertyBase::evaluateIfDirty() { QPropertyBasePointer d{this}; |