activityfw/testapplications/newtestappset/acttestbenchmark/hbmeasuretest.cpp
changeset 117 c63ee96dbe5f
--- /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";
+}