summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2004-08-27 09:43:17 (UTC)
committer mickeyl <mickeyl>2004-08-27 09:43:17 (UTC)
commita6e7ebcee38719a9f33ede08ed4c8a364c2ecb20 (patch) (side-by-side diff)
tree1c5674ddb8de987ac8a42d6c58597684ab1e43a4
parent2b5ae694fd875ed90c764d430891fbe4548688f2 (diff)
downloadopie-a6e7ebcee38719a9f33ede08ed4c8a364c2ecb20.zip
opie-a6e7ebcee38719a9f33ede08ed4c8a364c2ecb20.tar.gz
opie-a6e7ebcee38719a9f33ede08ed4c8a364c2ecb20.tar.bz2
adapt unit for file benchmarks, if value too high for kb/sec
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/sysinfo/benchmarkinfo.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/noncore/settings/sysinfo/benchmarkinfo.cpp b/noncore/settings/sysinfo/benchmarkinfo.cpp
index f3a6561..8497c8b 100644
--- a/noncore/settings/sysinfo/benchmarkinfo.cpp
+++ b/noncore/settings/sysinfo/benchmarkinfo.cpp
@@ -131,259 +131,273 @@ BenchmarkInfo::BenchmarkInfo( QWidget *parent, const char *name, int wFlags )
test_gfx->setText( 2, "n/a" );
test_ram->setText( 2, "n/a" );
test_sd->setText( 2, "n/a" );
test_cf->setText( 2, "n/a" );
startButton = new QPushButton( tr( "&Start Tests!" ), this );
QWhatsThis::add( startButton, tr( "Click here to perform the selected tests." ) );
connect( startButton, SIGNAL( clicked() ), this, SLOT( run() ) );
vb->addWidget( tests, 2 );
QFile f( QPEApplication::qpeDir() + "/share/sysinfo/results" );
if ( f.open( IO_ReadOnly ) )
{
machineCombo = new QComboBox( this );
QWhatsThis::add( machineCombo, tr( "Choose a model to compare your results with." ) );
QTextStream ts( &f );
while( !ts.eof() )
{
QString machline = ts.readLine();
odebug << "sysinfo: parsing benchmark results for '" << machline << "'" << oendl;
QString resline = ts.readLine();
machines.insert( machline, new QStringList( QStringList::split( ",", resline ) ) );
machineCombo->insertItem( machline );
}
QHBoxLayout* hb = new QHBoxLayout( vb );
hb->addWidget( new QLabel( tr( "Compare To:" ), this ) );
hb->addWidget( machineCombo, 2 );
connect( machineCombo, SIGNAL( activated(int) ), this, SLOT( machineActivated(int) ) );
}
vb->addWidget( startButton, 2 );
}
BenchmarkInfo::~BenchmarkInfo()
{}
void BenchmarkInfo::machineActivated( int index )
{
QStringList* results = machines[ machineCombo->text( index ) ];
if ( !results )
{
odebug << "sysinfo: no results available." << oendl;
return;
}
QStringList::Iterator it = results->begin();
test_alu->setText( 2, *(it++) );
test_fpu->setText( 2, *(it++) );
test_txt->setText( 2, *(it++) );
test_gfx->setText( 2, *(it++) );
test_ram->setText( 2, *(it++) );
test_sd->setText( 2, *(it++) );
test_cf->setText( 2, *(it++) );
}
void BenchmarkInfo::run()
{
startButton->setText( "> Don't touch! Running Tests! Don't touch! <" );
qApp->processEvents();
QTime t;
if ( test_alu->isOn() )
{
int d = round( dhry_main( DHRYSTONE_RUNS ) );
test_alu->setText( 1, QString().sprintf( "%d dhrys", d ) );
test_alu->setOn( false );
}
if ( test_fpu->isOn() )
{
t.start();
BenchFFT();
test_fpu->setText( 1, QString().sprintf( "%.2f secs", t.elapsed() / 1000.0 ) );;
test_fpu->setOn( false );
}
if ( test_txt->isOn() )
{
int value = textRendering( TEST_DURATION );
test_txt->setText( 1, QString().sprintf( "%d chars/sec", value / TEST_DURATION ) );
test_txt->setOn( false );
}
if ( test_gfx->isOn() )
{
int value = gfxRendering( TEST_DURATION );
test_gfx->setText( 1, QString().sprintf( "%.2f gops/sec", value / 4 / TEST_DURATION ) ); // 4 tests
test_gfx->setOn( false );
}
if ( test_ram->isOn() ) // /tmp is supposed to be in RAM on a PDA
{
performFileTest( "/tmp/benchmarkFile.dat", test_ram );
}
if ( test_cf->isOn() )
{
OStorageInfo storage;
performFileTest( storage.cfPath() + "/benchmarkFile.dat", test_cf );
}
if ( test_sd->isOn() )
{
OStorageInfo storage;
performFileTest( storage.sdPath() + "/benchmarkFile.dat", test_sd );
}
startButton->setText( tr( "&Start Tests!" ) );
}
int BenchmarkInfo::textRendering( int seconds )
{
QTime t;
t.start();
int stop = t.elapsed() + seconds * 1000;
int rr[] = { 255, 255, 255, 0, 0, 0, 0, 128, 128 };
int gg[] = { 0, 255, 0, 0, 255, 255, 0, 128, 128 };
int bb[] = { 0, 0, 255, 0, 0, 255, 255, 128, 0 };
const QString text( "Opie Benchmark Test" );
int w = QApplication::desktop()->width();
int h = QApplication::desktop()->height();
srand( time( NULL ) );
BenchmarkPaintWidget bpw;
int loops = 0;
while ( t.elapsed() < stop )
{
int k = rand() % 9;
int s = rand() % 100;
bpw.p.setPen( QColor( rr[ k ], gg[ k ], bb[ k ] ) );
bpw.p.setFont( QFont( "Vera", s ) );
bpw.p.drawText( rand() % w, rand() % h, text, text.length() );
++loops;
}
return loops * text.length();
}
int BenchmarkInfo::gfxRendering( int seconds )
{
int rr[] = { 255, 255, 255, 0, 0, 0, 0, 128, 128 };
int gg[] = { 0, 255, 0, 0, 255, 255, 0, 128, 128 };
int bb[] = { 0, 0, 255, 0, 0, 255, 255, 128, 0 };
int w = QApplication::desktop()->width();
int h = QApplication::desktop()->height();
srand( time( NULL ) );
BenchmarkPaintWidget bpw;
QTime t;
t.start();
int stop = t.elapsed() + seconds*1000;
int loops = 0;
while ( t.elapsed() < stop )
{
int k = rand() % 9;
bpw.p.setPen( QColor( rr[ k ], gg[ k ], bb[ k ] ) );
bpw.p.drawLine( rand()%w, rand()%h, rand()%w, rand()%h );
++loops;
}
t.restart();
stop = t.elapsed() + seconds*1000;
while ( t.elapsed() < stop )
{
int k = rand() % 9;
bpw.p.setPen( QColor( rr[ k ], gg[ k ], bb[ k ] ) );
bpw.p.drawArc( rand()%w, rand()%h, rand()%w, rand()%h, 360 * 16, 360 * 16 );
++loops;
}
QBrush br1;
br1.setStyle( SolidPattern );
t.restart();
stop = t.elapsed() + seconds*1000;
while ( t.elapsed() < stop )
{
int k = rand() % 9;
br1.setColor( QColor( rr[ k ], gg[ k ], bb[ k ] ) );
bpw.p.fillRect( rand()%w, rand()%h, rand()%w, rand()%h, br1 );
++loops;
}
QPixmap p = Resource::loadPixmap( "sysinfo/pattern" );
t.restart();
stop = t.elapsed() + seconds*1000;
while ( t.elapsed() < stop )
{
bpw.p.drawPixmap( rand()%w, rand()%h, p );
++loops;
}
return loops;
}
const unsigned int FILE_TEST_COUNT = 8000;
const unsigned int FILE_TEST_BLOCKSIZE = 1024;
void BenchmarkInfo::performFileTest( const QString& fname, OCheckListItem* item )
{
QString filename = fname == "/benchmarkFile.dat" ? QString( "/tmp/bla" ) : fname;
odebug << "performing file test on " << filename << oendl;
QString writeCommand = QString( "dd if=/dev/zero of=%1 count=%2 bs=%3 && sync" ).arg( filename )
.arg( FILE_TEST_COUNT )
.arg( FILE_TEST_BLOCKSIZE );
QString readCommand = QString( "dd if=%1 of=/dev/null count=%2 bs=%3").arg( filename )
.arg( FILE_TEST_COUNT )
.arg( FILE_TEST_BLOCKSIZE );
::system( "sync" );
odebug << "performing file test on " << filename << oendl;
int write = 0;
int read = 0;
QTime time;
time.start();
if ( ::system( writeCommand ) == 0 )
{
write = time.elapsed();
}
else
{
item->setText( 1, tr( "error" ) );
return;
}
time.restart();
if ( ::system( readCommand ) == 0 )
{
read = time.elapsed();
}
else
{
item->setText( 1, tr( "error" ) );
return;
}
QFile::remove( filename );
- item->setText( 1, QString().sprintf( "%.2f kb/s, %.2f kb/s", FILE_TEST_COUNT / ( read / 1000.0 ), FILE_TEST_COUNT / ( write / 1000.0 ) ) );
+ double readSpeed = FILE_TEST_COUNT / ( read / 1000.0 );
+ QString readUnit = "kb/s";
+ if ( readSpeed > 1024 )
+ {
+ readSpeed = readSpeed / 1024.0;
+ readUnit = "mb/s";
+ }
+ double writeSpeed = FILE_TEST_COUNT / ( write / 1000.0 );
+ QString writeUnit = "kb/s";
+ if ( writeSpeed > 1024 )
+ {
+ writeSpeed = writeSpeed / 1024.0;
+ writeUnit = "mb/s";
+ }
+ item->setText( 1, QString().sprintf( "%.2f %s, %.2f %s", readSpeed, readUnit.latin1(), writeSpeed, writeUnit.latin1() ) );
item->setOn( false );
}