/*
* 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";
}