| 9 |
|
#include <QTextStream> |
| 10 |
|
#include <QCoreApplication> |
| 11 |
|
|
| 12 |
+ |
#include <QThreadPool> |
| 13 |
+ |
#include <QtConcurrent/QtConcurrent> |
| 14 |
+ |
|
| 15 |
|
#define SLOW_SCRIPT_TIME 0.1 // if a user script takes more than 0.1 seconds to execute give a warning. |
| 16 |
< |
#define CUSTOM_FILES_PER_THREAD 2 |
| 16 |
> |
#define CUSTOM_FILES_PER_THREAD 4 |
| 17 |
|
|
| 18 |
|
// Uses a singleton implementation (based on here: http://www.yolinux.com/TUTORIALS/C++Singleton.html) |
| 19 |
|
// which allows each thread to keep one script engine without always create/destruct them |
| 24 |
|
void executeCustomCode(const QString &jsString, const QVector<QString> &filesToProcess, const bool backupsEnabled, const bool verboseEnabled); |
| 25 |
|
private: |
| 26 |
|
static XmlCustomCode* uniqueInstance; |
| 27 |
+ |
|
| 28 |
|
const int numThreads; |
| 29 |
< |
QVector<QScriptEngine*> scriptEngines; |
| 30 |
< |
QVector<QScriptValue*> jsFunctions; |
| 31 |
< |
QVector<QScriptValue*> getXmlDataFunctions; |
| 32 |
< |
QVector<QScriptValue*> setXmlDataFunctions; |
| 29 |
> |
QThreadPool myThreadPool; |
| 30 |
> |
QMutex mutexIsAvailable; |
| 31 |
> |
|
| 32 |
> |
struct jsCustomCodeEngine{ |
| 33 |
> |
QScriptEngine* scriptEngine; |
| 34 |
> |
QScriptValue* jsFunction; |
| 35 |
> |
QScriptValue* getXmlDataFunction; |
| 36 |
> |
QScriptValue* setXmlDataFunction; |
| 37 |
> |
bool isAvailable; |
| 38 |
> |
}; |
| 39 |
> |
|
| 40 |
> |
QVector<jsCustomCodeEngine> jsScriptEngines; |
| 41 |
|
|
| 42 |
|
XmlCustomCode(); // constructor is private (use getInstance) |
| 43 |
|
XmlCustomCode(XmlCustomCode const&); // copy constructor is private |
| 44 |
|
XmlCustomCode& operator=(XmlCustomCode const&); // assignment operator is private |
| 45 |
|
|
| 46 |
|
void displayJsException(QScriptEngine &engine, QScriptValue &engineResult); |
| 47 |
+ |
jsCustomCodeEngine& getAvailableJsEngine(); |
| 48 |
|
|
| 49 |
|
__attribute__((always_inline)) inline void customCodeUnwinding(const QString &fileName, QString &currXmlFileString, |
| 50 |
|
QScriptEngine &engine, clock_t &begin, double elapsed_secs, QScriptValue &engineResult, QScriptValue &jsFunction, |