summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorVolker Hilsheimer <volker.hilsheimer@qt.io>2023-10-11 13:54:16 +0200
committerVolker Hilsheimer <volker.hilsheimer@qt.io>2023-10-19 20:21:51 +0200
commit08bb24dd0a5c97bfefa8bb29d6c43af4525abd64 (patch)
tree56498eeb2f1db85da9d06c47a66f7a065af420ee /src
parentba1eec62a864428e4486b1e15f41ff06fc8f60d4 (diff)
JNI: make QJniArray class use stored JNI environment
Instead of creating a temporary QJniEnvironment for each access to the array, reuse the one stored in the QJniObject. This is much more efficient, and also protects against invalid access to the array from multiple threads. Change-Id: Id253a51ca64d4b3af333b14ec62ae176e1663604 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/corelib/kernel/qjniarray.h6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/corelib/kernel/qjniarray.h b/src/corelib/kernel/qjniarray.h
index ba79e27b8ef..96eaafca836 100644
--- a/src/corelib/kernel/qjniarray.h
+++ b/src/corelib/kernel/qjniarray.h
@@ -86,7 +86,7 @@ public:
qsizetype size() const
{
if (jarray array = object<jarray>())
- return QJniEnvironment()->GetArrayLength(array);
+ return jniEnv()->GetArrayLength(array);
return 0;
}
@@ -193,7 +193,7 @@ public:
const T operator[](qsizetype i) const { return at(i); } // const return value to disallow assignment
T at(qsizetype i) const
{
- QJniEnvironment env;
+ JNIEnv *env = jniEnv();
if constexpr (std::is_convertible_v<jobject, T>) {
return T{env->GetObjectArrayElement(object<jobjectArray>(), i)};
} else {
@@ -219,7 +219,7 @@ public:
}
auto asContainer() const
{
- QJniEnvironment env;
+ JNIEnv *env = jniEnv();
if constexpr (std::is_same_v<T, jobject>) {
QList<jobject> res;
res.reserve(size());