summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2004-08-19 13:57:02 (UTC)
committer mickeyl <mickeyl>2004-08-19 13:57:02 (UTC)
commitc028ea76557f18eda9d26ee46a48f461504f3ad2 (patch) (unidiff)
tree36e406a19b71dd075768c9299104482cb4ab8796
parent64bf315f998ef3ce0114adffa95fafaf2482ee17 (diff)
downloadopie-c028ea76557f18eda9d26ee46a48f461504f3ad2.zip
opie-c028ea76557f18eda9d26ee46a48f461504f3ad2.tar.gz
opie-c028ea76557f18eda9d26ee46a48f461504f3ad2.tar.bz2
- improve benchmark reliabilty, especially for SD and CF cards
- split file benchmarks into read/write - add AUTHORS file - encode individual version (it's opie-sysinfo 1.1.0 now) into the .pro file
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/sysinfo/AUTHORS4
-rw-r--r--noncore/settings/sysinfo/benchmarkinfo.cpp165
-rw-r--r--noncore/settings/sysinfo/benchmarkinfo.h2
-rw-r--r--noncore/settings/sysinfo/sysinfo.pro1
4 files changed, 42 insertions, 130 deletions
diff --git a/noncore/settings/sysinfo/AUTHORS b/noncore/settings/sysinfo/AUTHORS
new file mode 100644
index 0000000..a068b93
--- a/dev/null
+++ b/noncore/settings/sysinfo/AUTHORS
@@ -0,0 +1,4 @@
1Trolltech AS.
2Dan Williams <drw@handhelds.org>
3Michael 'Mickey' Lauer <mickeyl@handhelds.org>
4
diff --git a/noncore/settings/sysinfo/benchmarkinfo.cpp b/noncore/settings/sysinfo/benchmarkinfo.cpp
index 53d4897..f3a6561 100644
--- a/noncore/settings/sysinfo/benchmarkinfo.cpp
+++ b/noncore/settings/sysinfo/benchmarkinfo.cpp
@@ -148,7 +148,7 @@ BenchmarkInfo::BenchmarkInfo( QWidget *parent, const char *name, int wFlags )
148 while( !ts.eof() ) 148 while( !ts.eof() )
149 { 149 {
150 QString machline = ts.readLine(); 150 QString machline = ts.readLine();
151 odebug << "sysinfo: parsing benchmark results for '" << machline << "'" << oendl; 151 odebug << "sysinfo: parsing benchmark results for '" << machline << "'" << oendl;
152 QString resline = ts.readLine(); 152 QString resline = ts.readLine();
153 machines.insert( machline, new QStringList( QStringList::split( ",", resline ) ) ); 153 machines.insert( machline, new QStringList( QStringList::split( ",", resline ) ) );
154 machineCombo->insertItem( machline ); 154 machineCombo->insertItem( machline );
@@ -173,7 +173,7 @@ void BenchmarkInfo::machineActivated( int index )
173 QStringList* results = machines[ machineCombo->text( index ) ]; 173 QStringList* results = machines[ machineCombo->text( index ) ];
174 if ( !results ) 174 if ( !results )
175 { 175 {
176 odebug << "sysinfo: no results available." << oendl; 176 odebug << "sysinfo: no results available." << oendl;
177 return; 177 return;
178 } 178 }
179 QStringList::Iterator it = results->begin(); 179 QStringList::Iterator it = results->begin();
@@ -196,7 +196,7 @@ void BenchmarkInfo::run()
196 if ( test_alu->isOn() ) 196 if ( test_alu->isOn() )
197 { 197 {
198 int d = round( dhry_main( DHRYSTONE_RUNS ) ); 198 int d = round( dhry_main( DHRYSTONE_RUNS ) );
199 test_alu->setText( 1, QString( "%1 dhrys" ).arg( QString::number( d ) ) ); 199 test_alu->setText( 1, QString().sprintf( "%d dhrys", d ) );
200 test_alu->setOn( false ); 200 test_alu->setOn( false );
201 } 201 }
202 202
@@ -204,21 +204,21 @@ void BenchmarkInfo::run()
204 { 204 {
205 t.start(); 205 t.start();
206 BenchFFT(); 206 BenchFFT();
207 test_fpu->setText( 1, QString( "%1 secs" ).arg( QString::number( t.elapsed() / 1000.0 ) ) ); 207 test_fpu->setText( 1, QString().sprintf( "%.2f secs", t.elapsed() / 1000.0 ) );;
208 test_fpu->setOn( false ); 208 test_fpu->setOn( false );
209 } 209 }
210 210
211 if ( test_txt->isOn() ) 211 if ( test_txt->isOn() )
212 { 212 {
213 int value = textRendering( TEST_DURATION ); 213 int value = textRendering( TEST_DURATION );
214 test_txt->setText( 1, QString( "%1 chars/sec" ).arg( QString::number( value / TEST_DURATION ) ) ); 214 test_txt->setText( 1, QString().sprintf( "%d chars/sec", value / TEST_DURATION ) );
215 test_txt->setOn( false ); 215 test_txt->setOn( false );
216 } 216 }
217 217
218 if ( test_gfx->isOn() ) 218 if ( test_gfx->isOn() )
219 { 219 {
220 int value = gfxRendering( TEST_DURATION ); 220 int value = gfxRendering( TEST_DURATION );
221 test_gfx->setText( 1, QString( "%1 gops/sec" ).arg( QString::number( value / 4 / TEST_DURATION ) ) ); // 4 tests 221 test_gfx->setText( 1, QString().sprintf( "%.2f gops/sec", value / 4 / TEST_DURATION ) ); // 4 tests
222 test_gfx->setOn( false ); 222 test_gfx->setOn( false );
223 } 223 }
224 224
@@ -340,141 +340,50 @@ int BenchmarkInfo::gfxRendering( int seconds )
340 340
341} 341}
342 342
343const unsigned int FILE_TEST_COUNT = 8000;
344const unsigned int FILE_TEST_BLOCKSIZE = 1024;
345
343void BenchmarkInfo::performFileTest( const QString& fname, OCheckListItem* item ) 346void BenchmarkInfo::performFileTest( const QString& fname, OCheckListItem* item )
344{ 347{
348 QString filename = fname == "/benchmarkFile.dat" ? QString( "/tmp/bla" ) : fname;
349 odebug << "performing file test on " << filename << oendl;
350
351 QString writeCommand = QString( "dd if=/dev/zero of=%1 count=%2 bs=%3 && sync" ).arg( filename )
352 .arg( FILE_TEST_COUNT )
353 .arg( FILE_TEST_BLOCKSIZE );
354 QString readCommand = QString( "dd if=%1 of=/dev/null count=%2 bs=%3").arg( filename )
355 .arg( FILE_TEST_COUNT )
356 .arg( FILE_TEST_BLOCKSIZE );
357 ::system( "sync" );
358 odebug << "performing file test on " << filename << oendl;
359
360 int write = 0;
361 int read = 0;
362
345 QTime time; 363 QTime time;
346 time.start(); 364 time.start();
347 if ( writeFile( fname ) && 365 if ( ::system( writeCommand ) == 0 )
348 readFile( fname ) )
349 { 366 {
350 QFile::remove( fname ); 367 write = time.elapsed();
351 item->setText( 1, QString( "%1 kb/sec" ).arg( QString::number( 1024.0 / ( time.elapsed() / 1000.0 ) ) ) );
352 item->setOn( false );
353 } 368 }
354 else 369 else
355 { 370 {
356 item->setText( 1, tr( "error" ) ); 371 item->setText( 1, tr( "error" ) );
372 return;
357 } 373 }
358}
359
360char FileBuf[ BUFF_SIZE + 1 ];
361
362bool BenchmarkInfo::writeFile( const QString& w_path )
363{
364 int i;
365 int k;
366 int n;
367 int pos;
368 int len;
369 char *data = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; // 62
370
371 374
372 // /*------------------------------------ 375 time.restart();
373 int w_len; 376 if ( ::system( readCommand ) == 0 )
374
375 QFile writeFile( w_path );
376 srand( time( NULL ) );
377
378 for ( n = 0 ; n < 20 ; n++ )
379 { 377 {
380 if ( ! writeFile.open( IO_WriteOnly ) ) 378 read = time.elapsed();
381 {
382 writeFile.close();
383 writeFile.remove();
384 return ( false );
385 }
386 // ------------------------------------------ sequential write
387 for ( k = 0 ; k < 256 ; k++ )
388 {
389 n = rand() % 30;
390 memcpy( &FileBuf[ k * 32 ], &data[ n ], 32 );
391 }
392
393 for ( i = 0 ; i < FILE_SIZE / BUFF_SIZE ; i++ )
394 {
395 w_len = writeFile.writeBlock( FileBuf, BUFF_SIZE );
396 if ( w_len != BUFF_SIZE )
397 {
398 writeFile.close();
399 writeFile.remove();
400 return ( false );
401 }
402 writeFile.flush();
403 }
404 // ------------------------------------------ random write
405 for ( i = 0 ; i < 400 ; i++ )
406 {
407 len = rand() % 90 + 4000;
408 for ( k = 0 ; k < 128 ; k++ )
409 {
410 n = rand() % 30;
411 memcpy( &FileBuf[ k * 8 ], &data[ n ], 32 );
412 }
413 pos = rand() % ( FILE_SIZE - BUFF_SIZE );
414
415 writeFile.at( pos );
416 w_len = writeFile.writeBlock( FileBuf, len );
417 if ( w_len != len )
418 {
419 writeFile.close();
420 writeFile.remove();
421 return ( false );
422 }
423 writeFile.flush();
424 }
425 writeFile.close();
426 } 379 }
427 return ( true ); 380 else
428
429}
430
431
432bool BenchmarkInfo::readFile( const QString& r_path )
433{
434 int i;
435 int k;
436 int len;
437 int pos;
438 int r_len;
439
440 QFile readFile( r_path );
441 srand( time( NULL ) );
442
443 for ( k = 0 ; k < 200 ; k++ )
444 { 381 {
445 if ( ! readFile.open( IO_ReadOnly ) ) 382 item->setText( 1, tr( "error" ) );
446 { 383 return;
447 readFile.remove();
448 return ( false );
449 }
450 // ------------------------------------------ sequential read
451 readFile.at( 0 );
452 for ( i = 0 ; i < FILE_SIZE / BUFF_SIZE ; i++ )
453 {
454 readFile.at( i * BUFF_SIZE );
455 r_len = readFile.readBlock( FileBuf, BUFF_SIZE );
456 if ( r_len != BUFF_SIZE )
457 {
458 readFile.close();
459 readFile.remove();
460 return ( false );
461 }
462 }
463 // ------------------------------------------ random read
464 for ( i = 0 ; i < 1000 ; i++ )
465 {
466 len = rand() % 120 + 8;
467 pos = rand() % ( FILE_SIZE / BUFF_SIZE - BUFF_SIZE );
468 readFile.at( pos );
469 r_len = readFile.readBlock( FileBuf, len );
470 if ( r_len != len )
471 {
472 readFile.close();
473 readFile.remove();
474 return ( false );
475 }
476 }
477 readFile.close();
478 } 384 }
479 return ( true ); 385
386 QFile::remove( filename );
387 item->setText( 1, QString().sprintf( "%.2f kb/s, %.2f kb/s", FILE_TEST_COUNT / ( read / 1000.0 ), FILE_TEST_COUNT / ( write / 1000.0 ) ) );
388 item->setOn( false );
480} 389}
diff --git a/noncore/settings/sysinfo/benchmarkinfo.h b/noncore/settings/sysinfo/benchmarkinfo.h
index 0a61134..3b0a33c 100644
--- a/noncore/settings/sysinfo/benchmarkinfo.h
+++ b/noncore/settings/sysinfo/benchmarkinfo.h
@@ -61,8 +61,6 @@ public:
61 void performFileTest( const QString& fname, Opie::Ui::OCheckListItem* item ); 61 void performFileTest( const QString& fname, Opie::Ui::OCheckListItem* item );
62 62
63private slots: 63private slots:
64 bool writeFile( const QString& );
65 bool readFile( const QString& );
66 void run(); 64 void run();
67 void machineActivated( int ); 65 void machineActivated( int );
68}; 66};
diff --git a/noncore/settings/sysinfo/sysinfo.pro b/noncore/settings/sysinfo/sysinfo.pro
index 7974713..58f6eb0 100644
--- a/noncore/settings/sysinfo/sysinfo.pro
+++ b/noncore/settings/sysinfo/sysinfo.pro
@@ -29,5 +29,6 @@ DEPENDPATH += $(OPIEDIR)/include
29LIBS += -lqpe -lopiecore2 -lopieui2 29LIBS += -lqpe -lopiecore2 -lopieui2
30DEFINES += UNIX 30DEFINES += UNIX
31TARGET = sysinfo 31TARGET = sysinfo
32VERSION = 1.1.0
32 33
33include ( $(OPIEDIR)/include.pro ) 34include ( $(OPIEDIR)/include.pro )