Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add the --ostrace and --ossummary options to tester.tcl. To log calls the vfs layer from within test scripts. (CVS 4984) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
e1322415d0ca2d6b45f35ef9257b3716 |
User & Date: | danielk1977 2008-04-10 17:27:39.000 |
Context
2008-04-10
| ||
18:35 | Correctly handle virtual tables that are created and dropped all within a single transaction. Ticket #2994. (CVS 4985) (check-in: 0acb1b428d user: drh tags: trunk) | |
17:27 | Add the --ostrace and --ossummary options to tester.tcl. To log calls the vfs layer from within test scripts. (CVS 4984) (check-in: e1322415d0 user: danielk1977 tags: trunk) | |
17:14 | Enhanced testing and documentation of sqlite3_result_error_code(). Ticket #2940. (CVS 4983) (check-in: 5be56dbe87 user: drh tags: trunk) | |
Changes
Changes to src/test_osinst.c.
︙ | ︙ | |||
211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 | /* ** The following routine only works on pentium-class processors. ** It uses the RDTSC opcode to read the cycle count value out of the ** processor and returns that value. This can be used for high-res ** profiling. */ __inline__ unsigned long long int hwtime(void){ unsigned long long int x; __asm__("rdtsc\n\t" "mov %%edx, %%ecx\n\t" :"=A" (x)); return x; } #define OS_TIME_IO(eEvent, A, B, Call) { \ inst_file *p = (inst_file *)pFile; \ InstVfs *pInstVfs = p->pInstVfs; \ int rc; \ i64 t = hwtime(); \ rc = Call; \ | > > > > | 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 | /* ** The following routine only works on pentium-class processors. ** It uses the RDTSC opcode to read the cycle count value out of the ** processor and returns that value. This can be used for high-res ** profiling. */ #if defined(i386) || defined(__i386__) || defined(_M_IX86) __inline__ unsigned long long int hwtime(void){ unsigned long long int x; __asm__("rdtsc\n\t" "mov %%edx, %%ecx\n\t" :"=A" (x)); return x; } #else static unsigned long long int hwtime(void){ return 0; } #endif #define OS_TIME_IO(eEvent, A, B, Call) { \ inst_file *p = (inst_file *)pFile; \ InstVfs *pInstVfs = p->pInstVfs; \ int rc; \ i64 t = hwtime(); \ rc = Call; \ |
︙ | ︙ | |||
514 515 516 517 518 519 520 521 522 523 524 525 526 527 | p->xCall = xCall; p->xDel = xDel; p->pClient = pClient; } void sqlite3_instvfs_destroy(sqlite3_vfs *pVfs){ sqlite3_vfs_unregister(pVfs); sqlite3_free(pVfs); } void sqlite3_instvfs_reset(sqlite3_vfs *pVfs){ InstVfs *p = (InstVfs *)pVfs; assert( pVfs->xOpen==instOpen ); memset(p->aTime, 0, sizeof(i64)*OS_NUMEVENTS); | > | 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 | p->xCall = xCall; p->xDel = xDel; p->pClient = pClient; } void sqlite3_instvfs_destroy(sqlite3_vfs *pVfs){ sqlite3_vfs_unregister(pVfs); sqlite3_instvfs_configure(pVfs, 0, 0, 0); sqlite3_free(pVfs); } void sqlite3_instvfs_reset(sqlite3_vfs *pVfs){ InstVfs *p = (InstVfs *)pVfs; assert( pVfs->xOpen==instOpen ); memset(p->aTime, 0, sizeof(i64)*OS_NUMEVENTS); |
︙ | ︙ | |||
642 643 644 645 646 647 648 | return TCL_ERROR; } switch( (enum IV_enum)iSub ){ case IV_CREATE: { char *zParent = 0; sqlite3_vfs *p; | > | > > > | | | | > > > | 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 | return TCL_ERROR; } switch( (enum IV_enum)iSub ){ case IV_CREATE: { char *zParent = 0; sqlite3_vfs *p; int isDefault = 0; if( objc>2 && 0==strcmp("-default", Tcl_GetString(objv[2])) ){ isDefault = 1; } if( (objc-isDefault)!=4 && (objc-isDefault)!=3 ){ Tcl_WrongNumArgs(interp, 2, objv, "?-default? NAME ?PARENT-VFS?"); return TCL_ERROR; } if( objc==(4+isDefault) ){ zParent = Tcl_GetString(objv[3+isDefault]); } p = sqlite3_instvfs_create(Tcl_GetString(objv[2+isDefault]), zParent); if( !p ){ Tcl_AppendResult(interp, "error creating vfs ", 0); return TCL_ERROR; } if( isDefault ){ sqlite3_vfs_register(p, 1); } Tcl_SetObjResult(interp, objv[2]); break; } case IV_CONFIGURE: { InstVfsCall *pCall; |
︙ | ︙ |
Changes to test/tester.tcl.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 2001 September 15 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements some common TCL routines used for regression # testing the SQLite library # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 2001 September 15 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements some common TCL routines used for regression # testing the SQLite library # # $Id: tester.tcl,v 1.114 2008/04/10 17:27:39 danielk1977 Exp $ # # What for user input before continuing. This gives an opportunity # to connect profiling tools to the process. # for {set i 0} {$i<[llength $argv]} {incr i} { if {[regexp {^-+pause$} [lindex $argv $i] all value]} { |
︙ | ︙ | |||
57 58 59 60 61 62 63 | # test_malloc.c for additional information. # for {set i 0} {$i<[llength $argv]} {incr i} { if {[lindex $argv $i] eq "--malloctrace"} { set argv [lreplace $argv $i $i] sqlite3_memdebug_backtrace 10 sqlite3_memdebug_log start | < > > > > > > > > > > > > > > > > > > > > > > | 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | # test_malloc.c for additional information. # for {set i 0} {$i<[llength $argv]} {incr i} { if {[lindex $argv $i] eq "--malloctrace"} { set argv [lreplace $argv $i $i] sqlite3_memdebug_backtrace 10 sqlite3_memdebug_log start set tester_do_malloctrace 1 } } for {set i 0} {$i<[llength $argv]} {incr i} { if {[regexp {^--backtrace=(\d+)$} [lindex $argv $i] all value]} { sqlite3_memdebug_backtrace $value set argv [lreplace $argv $i $i] } } proc ostrace_call {zCall nClick zFile i32 i64} { set s "INSERT INTO ostrace VALUES( '$zCall', $nClick, '$zFile', $i32, $i64);" puts $::ostrace_fd $s } for {set i 0} {$i<[llength $argv]} {incr i} { if {[lindex $argv $i] eq "--ossummary" || [lindex $argv $i] eq "--ostrace"} { sqlite3_instvfs create -default ostrace set tester_do_ostrace 1 set ostrace_fd [open ostrace.sql w] puts $ostrace_fd "BEGIN;" if {[lindex $argv $i] eq "--ostrace"} { set s "CREATE TABLE ostrace" append s "(method TEXT, clicks INT, file TEXT, i32 INT, i64 INT);" puts $ostrace_fd $s sqlite3_instvfs configure ostrace ostrace_call } set argv [lreplace $argv $i $i] } } # # Check the command-line arguments to set the maximum number of # errors tolerated before halting. # if {![info exists maxErr]} { set maxErr 1000 } |
︙ | ︙ | |||
244 245 246 247 248 249 250 251 252 253 254 255 256 257 | puts "all of the test failures above might be a result from this defect" puts "in your TCL build." puts "******************************************************************" } if {$sqlite_open_file_count} { puts "$sqlite_open_file_count files were left open" incr nErr } if {[sqlite3_memory_used]>0} { puts "Unfreed memory: [sqlite3_memory_used] bytes" incr nErr ifcapable memdebug||mem5||(mem3&&debug) { puts "Writing unfreed memory log to \"./memleak.txt\"" sqlite3_memdebug_dump ./memleak.txt | > > > > > > > > > > > > > > | 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 | puts "all of the test failures above might be a result from this defect" puts "in your TCL build." puts "******************************************************************" } if {$sqlite_open_file_count} { puts "$sqlite_open_file_count files were left open" incr nErr } if {[info exists ::tester_do_ostrace]} { puts "Writing ostrace.sql..." set fd $::ostrace_fd puts -nonewline $fd "CREATE TABLE ossummary" puts $fd "(method TEXT, clicks INTEGER, count INTEGER);" foreach row [sqlite3_instvfs report ostrace] { foreach {method count clicks} $row break puts $fd "INSERT INTO ossummary VALUES('$method', $clicks, $count);" } puts $fd "COMMIT;" close $fd sqlite3_instvfs destroy ostrace } if {[sqlite3_memory_used]>0} { puts "Unfreed memory: [sqlite3_memory_used] bytes" incr nErr ifcapable memdebug||mem5||(mem3&&debug) { puts "Writing unfreed memory log to \"./memleak.txt\"" sqlite3_memdebug_dump ./memleak.txt |
︙ | ︙ |