summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qproperty.cpp
diff options
context:
space:
mode:
authorFabian Kosmale <fabian.kosmale@qt.io>2021-07-09 09:41:49 +0200
committerFabian Kosmale <fabian.kosmale@qt.io>2021-08-08 21:59:52 +0200
commit7b38f466e0e78c3c7f73877c633bf9c847f6513b (patch)
treec71a55565e8f3e2081fe54182a59b4f2073ecaba /src/corelib/kernel/qproperty.cpp
parent8b1b07c872bc7457ab1381c9c826d53fbc7ad359 (diff)
QProperty: Only try to avoid TLS access if currentThreadId is faster
We will not gain anything if we have to do multiple function calls to obtain the thread id. Therefore we introduce a macro to signal that we have a fast implementation of currentThreadId, and only use the function if it is defined. Change-Id: I3347489ea91992896bb753b796ae26e391c2c99c Reviewed-by: Lars Knoll <lars.knoll@qt.io> (cherry picked from commit 5889985c8c8e8cc676de4480ad95979287860b96)
Diffstat (limited to 'src/corelib/kernel/qproperty.cpp')
-rw-r--r--src/corelib/kernel/qproperty.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/corelib/kernel/qproperty.cpp b/src/corelib/kernel/qproperty.cpp
index 82ab3b9b59..3123858d83 100644
--- a/src/corelib/kernel/qproperty.cpp
+++ b/src/corelib/kernel/qproperty.cpp
@@ -523,8 +523,12 @@ void QPropertyBindingData::notifyObservers(QUntypedPropertyData *propertyDataPtr
if (QPropertyObserverPointer observer = d.firstObserver()) {
auto status = storage ? storage->bindingStatus : nullptr;
QPropertyDelayedNotifications *delay;
+#ifndef QT_HAS_FAST_CURRENT_THREAD_ID
+ status = &bindingStatus;
+#else
if (!status || status->threadId != QThread::currentThreadId())
status = &bindingStatus;
+#endif
delay = status->groupUpdateData;
if (delay) {
delay->addProperty(this, propertyDataPtr);
@@ -2171,12 +2175,16 @@ void QBindingStorage::registerDependency_helper(const QUntypedPropertyData *data
Q_ASSERT(bindingStatus);
// Use ::bindingStatus to get the binding from TLS. This is required, so that reads from
// another thread do not register as dependencies
- const bool threadMatches = (QThread::currentThreadId() == bindingStatus->threadId);
QtPrivate::BindingEvaluationState *currentBinding;
+#ifdef QT_HAS_FAST_CURRENT_THREAD_ID
+ const bool threadMatches = (QThread::currentThreadId() == bindingStatus->threadId);
if (Q_LIKELY(threadMatches))
currentBinding = bindingStatus->currentlyEvaluatingBinding;
else
currentBinding = QT_PREPEND_NAMESPACE(bindingStatus).currentlyEvaluatingBinding;
+#else
+ currentBinding = QT_PREPEND_NAMESPACE(bindingStatus).currentlyEvaluatingBinding;
+#endif
QUntypedPropertyData *dd = const_cast<QUntypedPropertyData *>(data);
if (!currentBinding)
return;