summaryrefslogtreecommitdiff
path: root/tests/test-performance/test-resourceqt-performance/test-resourceqt-performance.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-performance/test-resourceqt-performance/test-resourceqt-performance.cpp')
-rw-r--r--tests/test-performance/test-resourceqt-performance/test-resourceqt-performance.cpp116
1 files changed, 116 insertions, 0 deletions
diff --git a/tests/test-performance/test-resourceqt-performance/test-resourceqt-performance.cpp b/tests/test-performance/test-resourceqt-performance/test-resourceqt-performance.cpp
new file mode 100644
index 0000000..69648b0
--- /dev/null
+++ b/tests/test-performance/test-resourceqt-performance/test-resourceqt-performance.cpp
@@ -0,0 +1,116 @@
+#include <QtCore/QCoreApplication>
+#include <QtCore/QString>
+#include <QtCore/QStringList>
+#include <stdlib.h>
+#include <errno.h>
+#include <libgen.h>
+#include <getopt.h>
+#include "client.h"
+
+class ConfigParser
+{
+public:
+ ConfigParser()
+ {
+ exitCode = 0;
+ exitFlag = false;
+
+ resourcesAll = 0;
+ resourcesOptional = 0;
+ repeatCount = 100;
+
+ parseConfig();
+ }
+
+public:
+ bool exitFlag;
+ int exitCode;
+
+ int repeatCount;
+ uint32_t resourcesAll;
+ uint32_t resourcesOptional;
+ double timeLimit;
+ QString applicationClass;
+
+private:
+ void parseConfig()
+ {
+ QSettings settings("/usr/lib/libresourceqt-performance-tests/test-resourceqt-performance.ini", QSettings::IniFormat);
+
+ settings.beginGroup("config");
+ QString resAll = settings.value("AllResources", "AudioPlayback,VideoPlayback").toString();
+ QString resOpt = settings.value("OptionalResources", "").toString();
+ QString appClass = settings.value("ApplicationClass", "player").toString().toLower();
+ repeatCount = settings.value("TestCount", 100).toInt();
+ settings.endGroup();
+
+ settings.beginGroup("main");
+ timeLimit = settings.value("limit", 80.0).toDouble();
+ settings.endGroup();
+
+ resourcesAll = Client::parseResourceList(resAll);
+ resourcesOptional = Client::parseResourceList(resOpt);
+ applicationClass = parseClassString(qPrintable(appClass));
+
+ if( applicationClass.isEmpty() )
+ {
+ printf("Wrong application class in configuration file! Using default ...\n");
+ applicationClass = "player";
+ }
+
+ if( !resourcesAll )
+ {
+ resAll = "AudioPlayback,VideoPlayback";
+ resourcesAll = Client::parseResourceList(resAll);
+
+ printf("No resources found in configuration file! Using defaults ...\n");
+ }
+
+ if( (resourcesAll | resourcesOptional) != resourcesAll )
+ {
+ printf("Optional resources are not subset of all resources!\n");
+ exitFlag = true;
+ exitCode = 1;
+ }
+ }
+
+ const char* parseClassString(const char *str)
+ {
+ if( strcmp(str, "call") && strcmp(str, "camera") && strcmp(str, "ringtone") && strcmp(str, "alarm") && strcmp(str, "navigator") && strcmp(str, "game")
+ && strcmp(str, "player") && strcmp(str, "event") && strcmp(str, "background") )
+ {
+ printf("Invalid class '%s'", str);
+ return NULL;
+ }
+
+ return str;
+ }
+};
+
+int main(int argc, char *argv[])
+{
+ ConfigParser parser;
+
+ if( parser.exitFlag )
+ return parser.exitCode;
+
+ QCoreApplication app(argc, argv);
+ Client client(parser.repeatCount, parser.applicationClass, parser.resourcesAll, parser.resourcesOptional);
+ app.exec();
+
+ int retval = client.getFailed();
+ if( retval > 0 )
+ printf("One or more test iterations failed!\n");
+
+ int oldval = retval;
+ retval += client.getAcquireAverage() > parser.timeLimit ? 100 : 0;
+ if( retval > oldval )
+ printf("Acquire average time is higher than limit (%.2f/%.2f ms) !\n", client.getAcquireAverage(), parser.timeLimit);
+
+ oldval = retval;
+ retval += client.getReleaseAverage() > parser.timeLimit ? 100 : 0;
+ if( retval > oldval )
+ printf("Release average time is higher than limit (%.2f/%.2f ms) !\n", client.getReleaseAverage(), parser.timeLimit);
+
+ return retval;
+}