Fixed the ``bytes allocated off by n problem''.

This commit is contained in:
Abdulaziz Ghuloum 2008-01-07 21:37:41 -05:00
parent 01d0669607
commit fbebc96bfa
4 changed files with 27 additions and 41 deletions

Binary file not shown.

View File

@ -26,17 +26,18 @@
gc-user-secs gc-user-usecs
gc-sys-secs gc-sys-usecs
gc-real-secs gc-real-usecs
bytes-minor bytes-major
))
(define (mk-stats)
(make-stats #f #f #f #f #f #f #f #f #f #f #f #f #f))
(make-stats #f #f #f #f #f #f #f #f #f #f #f #f #f #f #f))
(define verbose-timer (make-parameter #f))
(define (set-stats! t)
(foreign-call "ikrt_stats_now" t))
(define (print-stats message bytes t1 t0)
(define (print-stats message t1 t0)
(define (print-time msg msecs gc-msecs)
(fprintf
(console-error-port)
@ -78,7 +79,12 @@
(stats-sys-usecs t1) (stats-sys-usecs t0))
(msecs (stats-gc-sys-secs t1) (stats-gc-sys-secs t0)
(stats-gc-sys-usecs t1) (stats-gc-sys-usecs t0))))
(fprintf (console-error-port) " ~a bytes allocated\n" bytes))
(fprintf (console-error-port) " ~a bytes allocated\n"
(diff-bytes
(stats-bytes-minor t0)
(stats-bytes-major t0)
(stats-bytes-minor t1)
(stats-bytes-major t1))))
(define time-it
(case-lambda
@ -88,31 +94,20 @@
(unless (procedure? proc)
(die 'time-it "not a procedure" proc))
(let* ([t0 (mk-stats)]
[t1 (mk-stats)]
[bytes-min (bytes-minor)]
[bytes-maj (bytes-major)])
(set-stats! t0)
(call-with-values proc
[t1 (mk-stats)])
(define k
(case-lambda
[(v)
(set-stats! t1)
(print-stats message
(diff-bytes bytes-min bytes-maj
(bytes-minor) (bytes-major))
t1 t0)
(print-stats message t1 t0)
v]
[v*
(set-stats! t1)
(print-stats message
(diff-bytes bytes-min bytes-maj
(bytes-minor) (bytes-major))
t1 t0)
(apply values v*)])))]))
(define (bytes-minor)
(foreign-call "ikrt_bytes_allocated"))
(define (bytes-major)
(foreign-call "ikrt_bytes_allocated_major"))
(print-stats message t1 t0)
(apply values v*)]))
(set-stats! t0)
(call-with-values proc k))]))
(define (diff-bytes mnr0 mjr0 mnr1 mjr1)
(+ (fx- mnr1 mnr0) (* (fx- mjr1 mjr0) #x10000000)))

View File

@ -1 +1 @@
1332
1333

View File

@ -839,6 +839,15 @@ ikrt_stats_now(ikptr t, ikpcb* pcb){
ref(t, off_record_data + 10 * wordsize) = fix(pcb->collect_stime.tv_usec);
ref(t, off_record_data + 11 * wordsize) = fix(pcb->collect_rtime.tv_sec);
ref(t, off_record_data + 12 * wordsize) = fix(pcb->collect_rtime.tv_usec);
{
/* minor bytes */
long int bytes_in_heap = ((long int) pcb->allocation_pointer) -
((long int) pcb->heap_base);
long int bytes = bytes_in_heap + pcb->allocation_count_minor;
ref(t, off_record_data + 13 * wordsize) = fix(bytes);
}
/* major bytes */
ref(t, off_record_data + 14 * wordsize) = fix(pcb->allocation_count_major);
return void_object;
}
@ -868,24 +877,6 @@ ikrt_gmt_offset(ikptr t){
*/
}
ikptr
ikrt_bytes_allocated(ikpcb* pcb){
int bytes_in_heap = ((long int) pcb->allocation_pointer) -
((long int) pcb->heap_base);
int bytes = bytes_in_heap + pcb->allocation_count_minor;
return fix(bytes);
}
ikptr
ikrt_bytes_allocated_major(ikpcb* pcb){
return fix(pcb->allocation_count_major);
}
ikptr
ikrt_fork(){
int pid = fork();