diff options
author | Christian Tismer <tismer@stackless.com> | 2020-02-11 10:12:32 +0100 |
---|---|---|
committer | Christian Tismer <tismer@stackless.com> | 2020-03-03 10:12:46 +0000 |
commit | 50f382579d1323817165d85bf88a394328a4e9a0 (patch) | |
tree | b1f610626d0a6d17aacb3aa86372b44c10b2272c /sources/shiboken2/generator/shiboken2/cppgenerator.h | |
parent | 4a8a2713433154aee21f1f83ef3e9e7dc9466275 (diff) |
Avoid the GIL in non-overridden Methods
In order to get better performance, we try to avoid allocating the
GIL when methods have no override with a Python function.
Every class gets an associated bool array that records functions
where no override was found. On second call of a function,
the GIL is avoided by this flag.
Update 2020-02-06:
The result is very promising when combined with a drastic
reduction of Py_(BEGIN|END)_ALLOW_THREAD macro calls.
So this could become the solution when combined with a good
reduction!
The Python 2 bug was circumvented by not generating the
additional Py_tp_setattro functions for class QQuickItem.
Task-number: PYSIDE-803
Change-Id: I0fe36edc5610b2d51bbb05f1b7507beee5088c83
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Diffstat (limited to 'sources/shiboken2/generator/shiboken2/cppgenerator.h')
-rw-r--r-- | sources/shiboken2/generator/shiboken2/cppgenerator.h | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/sources/shiboken2/generator/shiboken2/cppgenerator.h b/sources/shiboken2/generator/shiboken2/cppgenerator.h index e3bb2c9cf..aee1fb7d4 100644 --- a/sources/shiboken2/generator/shiboken2/cppgenerator.h +++ b/sources/shiboken2/generator/shiboken2/cppgenerator.h @@ -50,11 +50,15 @@ protected: bool finishGeneration() override; private: + void writeInitFunc(QTextStream &declStr, QTextStream &callStr, + const Indentor &indent, const QString &initFunctionName, + const TypeEntry *enclosingEntry = nullptr); + void writeCacheResetNative(QTextStream &s, const AbstractMetaClass *metaClass); void writeConstructorNative(QTextStream &s, const AbstractMetaFunction *func); void writeDestructorNative(QTextStream &s, const AbstractMetaClass *metaClass); QString getVirtualFunctionReturnTypeName(const AbstractMetaFunction *func); - void writeVirtualMethodNative(QTextStream &s, const AbstractMetaFunction *func); + void writeVirtualMethodNative(QTextStream &s, const AbstractMetaFunction *func, int cacheIndex); void writeMetaObjectMethod(QTextStream &s, const AbstractMetaClass *metaClass); void writeMetaCast(QTextStream &s, const AbstractMetaClass *metaClass); @@ -309,7 +313,7 @@ private: void writeParentChildManagement(QTextStream &s, const AbstractMetaFunction *func, bool userHeuristicForReturn); bool writeParentChildManagement(QTextStream &s, const AbstractMetaFunction *func, int argIndex, bool userHeuristicPolicy); - void writeReturnValueHeuristics(QTextStream &s, const AbstractMetaFunction *func, const QString &self = QLatin1String("self")); + void writeReturnValueHeuristics(QTextStream &s, const AbstractMetaFunction *func); void writeInitQtMetaTypeFunctionBody(QTextStream &s, GeneratorContext &context) const; /** |