--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/activityfw/testapplications/newtestappset/acttestbenchmark/hbmeasuretest.cpp Thu Sep 16 12:11:40 2010 +0100
@@ -0,0 +1,603 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "hbmeasuretest.h"
+
+#include <QGridLayout>
+#include <HbLabel>
+#include <HbPushButton>
+#include <QCoreApplication>
+#include <QSignalMapper>
+#include <QVariant>
+#include <QList>
+#include <QVariantHash>
+#include <HbComboBox>
+#include <QBrush>
+#include <QPalette>
+#include <QGraphicsGridLayout>
+#include <QTimer>
+#include <QFile>
+#include <QTextStream>
+#include <e32std.h>
+#include <HbInstance>
+#include <qservicemanager.h>
+#include <HbScrollArea>
+#include <afactivitystorage.h>
+#include <afactivation.h>
+#include "afstorageglobals.h"
+#include <HbCheckBox>
+
+
+QTM_USE_NAMESPACE
+
+MeasureTest::MeasureTest(QGraphicsItem *parent) : HbView(parent), mByteArray(NULL)
+
+{
+ mFile = new QFile("c:\\actbenchmark.txt");
+ mFile->open(QIODevice::Append | QIODevice::Text);
+ mStream = new QTextStream(mFile);
+
+ mThumbwait = 0;
+ mThumbnull = 0;
+ mThumbcurrent = 0;
+ QServiceManager serviceManager;
+ serviceManager.addService(":/activityserviceplugin.xml");
+
+ mActivityManager = serviceManager.loadInterface("com.nokia.qt.activities.ActivityManager");
+ if (!mActivityManager) {
+ qFatal("Cannot initialize critical com.nokia.qt.activities.ActivityManager service.");
+ }
+
+ mThumbwait = 0;
+ mThumbnull = 0;
+ mThumbcurrent = 0;
+ mActivityStorage = new AfActivityStorage;
+ mActivation = new AfActivation;
+
+ HbWidget* widget = new HbWidget;
+ HbScrollArea* scrollArea = new HbScrollArea;
+
+ mResultLabel = new HbLabel();
+ mItemLabel = new HbLabel();
+ mTimesLabel = new HbLabel("Times");
+ mBytesLabel = new HbLabel("Bytes");
+ mPixmapLabel = new HbLabel("Pixmap");
+ mSizeLabel = new HbLabel("Size(WxH)");
+
+ mPixmap = new QPixmap(":/images/wolf.bmp");
+ mEmptyPixmap = new QPixmap();
+
+
+ mTimesCombo = new HbComboBox();
+ mLengthCombo = new HbComboBox();
+ mPixmapCombo = new HbComboBox();
+ mWidthCombo = new HbComboBox();
+ mHeightCombo = new HbComboBox();
+
+ mTimesCombo->addItem("1");
+ mTimesCombo->addItem("2");
+ mTimesCombo->addItem("4");
+ mTimesCombo->addItem("5");
+ mTimesCombo->addItem("10");
+ mTimesCombo->addItem("20");
+ mTimesCombo->addItem("40");
+ mTimesCombo->addItem("60");
+
+ QVariant variant;
+ variant = 10;
+ mLengthCombo->addItem("10 B", variant);
+ variant = 100;
+ mLengthCombo->addItem("100 B", variant);
+ variant = 1024;
+ mLengthCombo->addItem("1 KB", variant);
+ variant = 10240;
+ mLengthCombo->addItem("10 KB", variant);
+ variant = 102400;
+ mLengthCombo->addItem("100 KB", variant);
+ variant = 1024*1024;
+ mLengthCombo->addItem("1 MB", variant);
+
+ mWidthCombo->addItem("360");
+ mWidthCombo->addItem("180");
+ mWidthCombo->addItem("128");
+ mWidthCombo->addItem("90");
+
+ mHeightCombo->addItem("640");
+ mHeightCombo->addItem("320");
+ mHeightCombo->addItem("160");
+ mHeightCombo->addItem("128");
+
+
+ mPixmapCombo->addItem("no");
+ mPixmapCombo->addItem("yes");
+ mPixmapCombo->addItem("grab");
+
+ mSaveButton = new HbPushButton("Save activities");
+ mGetButton = new HbPushButton("Get activities");
+ mDelButton = new HbPushButton("Delete activities");
+ mGetDataButton = new HbPushButton("Get activities data");
+ mUpdateButton = new HbPushButton("Reserved");
+ mThumbButton = new HbPushButton("Get act with thumb");
+ mGetDataTimesButton = new HbPushButton("Get data times");
+ mSaveTimesButton = new HbPushButton("Add act times");
+ mSave10TimesButton = new HbPushButton("Add 10 act times");;
+
+ mSaveDekCheckBox = new HbCheckBox("Delete before Save");
+ mSaveDekCheckBox->setCheckState(Qt::Checked);
+
+ mLayout = new QGraphicsGridLayout();
+ mLayout->addItem(mSizeLabel, 2, 0, 1, 2);
+ mLayout->addItem(mWidthCombo, 2, 2, 1, 2);
+ mLayout->addItem(mHeightCombo, 2, 4, 1, 2);
+ mLayout->addItem(mTimesLabel, 3, 0, 1, 2);
+ mLayout->addItem(mBytesLabel, 3, 2, 1, 2);
+ mLayout->addItem(mPixmapLabel, 3, 4, 1, 2);
+ mLayout->addItem(mTimesCombo, 4, 0, 1, 2);
+ mLayout->addItem(mLengthCombo, 4, 2, 1, 2);
+ mLayout->addItem(mPixmapCombo, 4, 4, 1, 2);
+ mLayout->addItem(mSaveButton, 5, 0, 1, 6);
+ mLayout->addItem(mGetButton, 6, 0, 1, 6);
+ mLayout->addItem(mDelButton, 7, 0, 1, 6);
+ mLayout->addItem(mGetDataButton, 8, 0, 1, 6);
+ mLayout->addItem(mUpdateButton, 9, 0, 1, 6);
+ mLayout->addItem(mThumbButton, 10, 0, 1, 6);
+ mLayout->addItem(mSaveTimesButton, 11, 0, 1, 6);
+ mLayout->addItem(mSave10TimesButton, 12, 0, 1, 6);
+ mLayout->addItem(mGetDataTimesButton, 13, 0, 1, 6);
+ mLayout->addItem(mSaveDekCheckBox, 14, 0, 1, 6);
+ widget->setLayout(mLayout);
+
+ scrollArea->setContentWidget(widget);
+ scrollArea->setScrollDirections(Qt::Vertical);
+ scrollArea->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff);
+ connect(mSaveButton, SIGNAL(released()), this, SLOT(saveActivity()));
+ connect(mGetButton, SIGNAL(released()), this, SLOT(getActivity()));
+ connect(mDelButton, SIGNAL(released()), this, SLOT(deleteActivity()));
+ connect(mGetDataButton, SIGNAL(released()), this, SLOT(getActivityData()));
+ connect(mUpdateButton, SIGNAL(released()), this, SLOT(updateActivity()));
+ connect(mThumbButton, SIGNAL(released()), this, SLOT(getActivityThumb()));
+ connect(mGetDataTimesButton, SIGNAL(released()), this, SLOT(getTimesActivityData()));
+ connect(mSaveTimesButton, SIGNAL(released()), this, SLOT(saveTimes()));
+ connect(mSave10TimesButton, SIGNAL(released()), this, SLOT(save10actTimes()));
+
+ QGraphicsGridLayout* mainLayout = new QGraphicsGridLayout;
+ mainLayout->addItem(mResultLabel, 0, 0, 1, 6);
+ mainLayout->addItem(mItemLabel, 1, 0, 1, 6);
+ mainLayout->addItem(scrollArea, 2, 0, 1, 6);
+ setLayout(mainLayout);
+
+}
+
+MeasureTest::~MeasureTest()
+{
+ delete mFile;
+ delete mStream;
+ delete mEmptyPixmap;
+ delete mPixmap;
+ delete mActivityManager;
+ delete mActivityStorage;
+ delete mActivation;
+}
+
+
+void MeasureTest::Before()
+{
+ TTime time;
+ time.HomeTime();
+ iBefore = time.Int64();
+}
+
+void MeasureTest::After()
+{
+ TTime time;
+ time.HomeTime();
+ iAfter = time.Int64();
+}
+
+void MeasureTest::Result()
+{
+ TInt64 res(0);
+ res = iAfter-iBefore;
+ res = res/1000;
+ iResult = res;
+}
+
+void MeasureTest::deleteActivity()
+{
+ QStringList activities = mActivityStorage->allActivities();
+ QString name;
+ Before();
+ bool ok = false;
+ for (int i=0; i<activities.count(); i++) {
+ ok = mActivityStorage->removeActivity(activities.at(i));
+ if (!ok) {
+ break;
+ }
+ }
+ After();
+ Result();
+
+ mItemMessage.clear();
+ mResultMessage.clear();
+
+ if (!ok) {
+ mItemMessage = (tr("invoke error"));
+ mResultMessage = (tr("invoke error"));
+ } else {
+ mItemMessage = (tr("items: %1")).arg(activities.count());
+ mResultMessage = (tr("time: %1 ms")).arg(iResult);
+ }
+ mItemLabel->setPlainText(mItemMessage);
+ mResultLabel->setPlainText(mResultMessage);
+}
+
+void MeasureTest::getActivity()
+{
+ QStringList activities;
+ Before();
+ activities = mActivityStorage->allActivities();
+ After();
+ Result();
+ int count = activities.count();
+ mItemMessage.clear();
+ mResultMessage.clear();
+
+ mItemMessage = (tr("items: %1")).arg(count);
+ mResultMessage = (tr("time: %1 ms")).arg(iResult);
+
+ mItemLabel->setPlainText(mItemMessage);
+ mResultLabel->setPlainText(mResultMessage);
+}
+
+void MeasureTest::getActivityThumb()
+{
+ disconnect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) );
+ connect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) );
+ mThumbwait = 0;
+ mThumbnull = 0;
+ mThumbcurrent = 0;
+ bool ok = false;
+ QStringList activities;
+ Before();
+ activities = mActivityStorage->allActivities();
+ mThumbwait = activities.count();
+ int width = mWidthCombo->currentText().toInt();
+ int height = mHeightCombo->currentText().toInt();
+ QSize pixSize(width, height);
+ for ( int i=0; i<activities.count(); i++)
+ {
+ QString pixfile = mActivityStorage->activityMetaData(activities.at(i)).value(ActivityScreenshotKeyword).toString();
+ ok = QMetaObject::invokeMethod(mActivityManager, "getThumbnail", Q_ARG(QSize, pixSize), Q_ARG(QString, pixfile), Q_ARG(void*, NULL));
+ if ( !ok )
+ {
+ break;
+ }
+ }
+
+ int count = activities.count();
+ mItemMessage.clear();
+ mResultMessage.clear();
+ if (!ok) {
+ mItemMessage = (tr("invoke error"));
+ mResultMessage = (tr("invoke error"));
+ mItemLabel->setPlainText(mItemMessage);
+ mResultLabel->setPlainText(mResultMessage);
+ } else {
+
+ }
+}
+
+void MeasureTest::saveActivity()
+{
+ int bytes = mLengthCombo->itemData(mLengthCombo->currentIndex()).toInt();
+ delete mByteArray;
+ mByteArray = NULL;
+ mByteArray = new QByteArray(bytes, 'a');
+ QVariant variant;
+ variant = *mByteArray;
+ QPixmap *pixmap = NULL;
+ QPixmap screenshot;
+ if (mPixmapCombo->currentText() == "yes") {
+ pixmap = mPixmap;
+ }
+ else if ( mPixmapCombo->currentText() == "grab" )
+ {
+ HbMainWindow *mainWindow = hbInstance->allMainWindows().first();
+ screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect());
+ pixmap = &screenshot;
+ }
+ else
+ {
+ pixmap = mEmptyPixmap;
+ }
+ QVariantHash metadata;
+ metadata.insert(ActivityScreenshotKeyword, *pixmap);
+ int times = 0;
+ times = mTimesCombo->currentText().toInt();
+ bool ok = false;
+ Before();
+ for (int i=0; i<times; i++) {
+ QString name;
+ name.setNum(i);
+ ok = mActivityStorage->saveActivity(name, variant, metadata);
+ if (!ok) {
+ break;
+ }
+ }
+ After();
+ Result();
+ mItemMessage.clear();
+ mResultMessage.clear();
+ if (!ok) {
+ mItemMessage = (tr("invoke error"));
+ mResultMessage = (tr("invoke error"));
+ } else {
+ mResultMessage = (tr("time: %1 ms")).arg(iResult);
+ }
+ mItemLabel->setPlainText(mItemMessage);
+ mResultLabel->setPlainText(mResultMessage);
+}
+
+void MeasureTest::updateActivity()
+{
+
+}
+
+void MeasureTest::getActivityData()
+{
+ QStringList activities = mActivityStorage->allActivities();
+
+ QString name;
+ QVariant data;
+ Before();
+ for (int i=0; i<activities.count(); i++) {
+ data = mActivityStorage->activityData(activities.at(i));
+ }
+ After();
+ Result();
+
+ mItemMessage.clear();
+ mResultMessage.clear();
+
+ mItemMessage = (tr("items: %1")).arg(activities.count());
+ mResultMessage = (tr("time: %1 ms")).arg(iResult);
+
+ mItemLabel->setPlainText(mItemMessage);
+ mResultLabel->setPlainText(mResultMessage);
+}
+
+void MeasureTest::thumbnailReady(QPixmap pix, void * ptr)
+ {
+ if ( pix.isNull() )
+ {
+ mThumbnull++;
+ }
+ mThumbcurrent++;
+ mItemMessage = (tr("items: %1 from %2, but null %3")).arg(mThumbcurrent).arg(mThumbwait).arg(mThumbnull);
+ mItemLabel->setPlainText(mItemMessage);
+ mResultMessage = "";
+ mResultLabel->setPlainText(mResultMessage);
+ if (mThumbcurrent == mThumbwait)
+ {
+ After();
+ Result();
+ disconnect( mActivityManager, SIGNAL(thumbnailReady(QPixmap, void *)), this, SLOT(thumbnailReady(QPixmap, void *)) );
+ mResultMessage = (tr("time: %1 ms")).arg(iResult);
+ mResultLabel->setPlainText(mResultMessage);
+ }
+ }
+void MeasureTest::saveTimes()
+{
+ *mStream<<"save Times\n";
+ QList<int> trymeasure;
+ int bytes = mLengthCombo->itemData(mLengthCombo->currentIndex()).toInt();
+ delete mByteArray;
+ mByteArray = NULL;
+ mByteArray = new QByteArray(bytes, 'a');
+ QVariant variant;
+ variant = *mByteArray;
+ QPixmap *pixmap = NULL;
+ QPixmap screenshot;
+ if (mPixmapCombo->currentText() == "yes") {
+ pixmap = mPixmap;
+ }
+ else if ( mPixmapCombo->currentText() == "grab" )
+ {
+ HbMainWindow *mainWindow = hbInstance->allMainWindows().first();
+ screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect());
+ pixmap = &screenshot;
+ }
+ else
+ {
+ pixmap = mEmptyPixmap;
+ }
+ QVariantHash metadata;
+ metadata.insert(ActivityScreenshotKeyword, *pixmap);
+ int times = 0;
+ times = mTimesCombo->currentText().toInt();
+ bool ok = false;
+ QString name("0");
+ bool delBefore = mSaveDekCheckBox->checkState() == Qt::Checked ? true : false;
+ User::After(2000000); //2s
+ for (int i=0; i<times; i++) {
+ Before();
+ ok = mActivityStorage->saveActivity(name, variant, metadata);
+ After();
+ Result();
+ if (!ok) {
+ break;
+ }
+ trymeasure.append(iResult);
+ if (delBefore) {
+ ok = mActivityStorage->removeActivity(name);
+ if (!ok) {
+ break;
+ }
+ }
+ User::After(2000000); //2s
+ }
+
+ mItemMessage.clear();
+ mResultMessage.clear();
+ if (!ok) {
+ mItemMessage = (tr("invoke error"));
+ mResultMessage = (tr("invoke error"));
+ *mStream<<"error\n";
+ } else {
+ int averageint = average(trymeasure);
+ mResultMessage = (tr("time: %1 ms")).arg(averageint);
+ writeResults(trymeasure, averageint);
+ }
+ mStream->flush();
+ mItemLabel->setPlainText(mItemMessage);
+ mResultLabel->setPlainText(mResultMessage);
+}
+
+void MeasureTest::save10actTimes()
+{
+ *mStream<<"save 10 act Times\n";
+ QList<int> trymeasure;
+ int bytes = mLengthCombo->itemData(mLengthCombo->currentIndex()).toInt();
+ delete mByteArray;
+ mByteArray = NULL;
+ mByteArray = new QByteArray(bytes, 'a');
+ QVariant variant;
+ variant = *mByteArray;
+ QPixmap *pixmap = NULL;
+ QPixmap screenshot;
+ bool delBefore = mSaveDekCheckBox->checkState() == Qt::Checked ? true : false;
+ if (mPixmapCombo->currentText() == "yes") {
+ pixmap = mPixmap;
+ }
+ else if ( mPixmapCombo->currentText() == "grab" )
+ {
+ HbMainWindow *mainWindow = hbInstance->allMainWindows().first();
+ screenshot = QPixmap::grabWidget(mainWindow, mainWindow->rect());
+ pixmap = &screenshot;
+ }
+ else
+ {
+ pixmap = mEmptyPixmap;
+ }
+ QVariantHash metadata;
+ metadata.insert(ActivityScreenshotKeyword, *pixmap);
+ int times = 0;
+ times = mTimesCombo->currentText().toInt();
+ bool ok = false;
+ QString name;
+ User::After(2000000); //2s
+ for(int i=0; i<times; i++) {
+ Before();
+ for (int i=0; i<10; i++) {
+
+ name.setNum(i);
+ ok = mActivityStorage->saveActivity(name, variant, metadata);
+ if (!ok) {
+ break;
+ }
+ }
+ After();
+ Result();
+ trymeasure.append(iResult);
+
+ QStringList activities = mActivityStorage->allActivities();
+
+ if (delBefore) {
+ for (int i=0; i<activities.count(); i++) {
+ ok = mActivityStorage->removeActivity(activities.at(i));
+ if (!ok) {
+ break;
+ }
+ }
+ }
+ User::After(2000000); //2s
+
+ }
+ mItemMessage.clear();
+ mResultMessage.clear();
+ if (!ok) {
+ mItemMessage = (tr("invoke error"));
+ mResultMessage = (tr("invoke error"));
+ *mStream<<"error\n";
+ } else {
+ int averageint = average(trymeasure);
+ mResultMessage = (tr("time: %1 ms")).arg(averageint);
+ writeResults(trymeasure, averageint);
+ }
+ mStream->flush();
+ mItemLabel->setPlainText(mItemMessage);
+ mResultLabel->setPlainText(mResultMessage);
+
+}
+
+void MeasureTest::getTimesActivityData()
+{
+ int times = 0;
+ times = mTimesCombo->currentText().toInt();
+ *mStream<<"get data Times\n";
+ QList<int> trymeasure;
+
+ QStringList activities = mActivityStorage->allActivities();
+ User::After(2000000); //2s
+ QString name;
+ QVariant data;
+ for(int i=0; i<times; i++) {
+ Before();
+ for (int i=0; i<activities.count(); i++) {
+ data = mActivityStorage->activityData(activities.at(i));
+ }
+ After();
+ Result();
+ trymeasure.append(iResult);
+ User::After(2000000); //2s
+ }
+ mItemMessage.clear();
+ mResultMessage.clear();
+
+
+ int averageint = average(trymeasure);
+ mResultMessage = (tr("time: %1 ms")).arg(averageint);
+ writeResults(trymeasure, averageint);
+
+ mStream->flush();
+ mItemLabel->setPlainText(mItemMessage);
+ mResultLabel->setPlainText(mResultMessage);
+
+}
+
+int MeasureTest::average(const QList<int>& list)
+{
+ int count = list.count();
+ int sum=0;
+ for(int i=0; i<count; i++) {
+ sum += list.at(i);
+ }
+ sum = (sum+0.5)/count;
+ return sum;
+}
+
+int MeasureTest::writeResults(const QList<int>& list, int average)
+{
+ for(int i=0; i<list.count(); i++){
+ *mStream<<"| ";
+ *mStream<<list.at(i);
+ *mStream<<" |\n";
+ }
+ *mStream<<"| ";
+ *mStream<<average;
+ *mStream<<" |\n";
+}