This is the mail archive of the kawa@sourceware.org mailing list for the Kawa project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

'time' in class-style


Forgive me for importunity.

Any comments for this version of 'time', please:

(define-syntax consumFormat
 (syntax-rules ()
       ((consumFormat consumer sFormat ...)
        (consumer:write (as <String> (format #f sFormat ...))))))

(define-simple-class <process-data> (<java.lang.Object> <gnu.text.Printable>)
(end-non-heap-mem :: <java.lang.management.MemoryUsage> init-value: #!null)
(end-heap-mem :: <java.lang.management.MemoryUsage> init-value: #!null)
(end-time :: <gnu.math.IntNum> init-value: #!null) ;; <int> is not initialized #!null
(start-non-heap-mem :: <java.lang.management.MemoryUsage> init-value: #!null)
(start-heap-mem :: <java.lang.management.MemoryUsage> init-value: #!null)
(start-time :: <gnu.math.IntNum> init-value: #!null)
(value init-value: ())
;; Shadow default constructor
((*init*) access: 'private ())
((*init* (process :: <gnu.expr.ModuleMethod>)) ;; ?? correct class
(let ((mem-bean :: <java.lang.management.MemoryMXBean>
(java.lang.management.ManagementFactory:getMemoryMXBean)))
(mem-bean:gc) (mem-bean:gc) (mem-bean:gc) ;; Why so much? I do not know :)
(set! start-non-heap-mem (mem-bean:getNonHeapMemoryUsage))
(set! start-heap-mem (mem-bean:getHeapMemoryUsage))
(set! start-time (java.lang.System:currentTimeMillis))
(set! value
(dynamic-wind
(lambda () #t)
;; run our process (a function)
process
(lambda ()
(set! end-non-heap-mem (mem-bean:getNonHeapMemoryUsage))
(set! end-heap-mem (mem-bean:getHeapMemoryUsage))
(set! end-time (java.lang.System:currentTimeMillis)))))
(mem-bean:gc))) ;; This is need?
;; getters
((getDuration) :: <gnu.math.RealNum> ;; <double> - java.lang.Double cannot be cast to gnu.math.RealNum
(/ (- end-time start-time) 1000.0))
((getInitHeapMemDiff) :: <int>
(- end-heap-mem:init start-heap-mem:init))
((getUsedHeapMemDiff) :: <int>
(- end-heap-mem:used start-heap-mem:used))
((getCommittedHeapMemDiff) :: <int>
(- end-heap-mem:committed start-heap-mem:committed))
((getMaxHeapMemDiff) :: <int>
(- end-heap-mem:max start-heap-mem:max))
((getInitNonHeapMemDiff) :: <int>
(- end-non-heap-mem:init start-non-heap-mem:init))
((getUsedNonHeapMemDiff) :: <int>
(- end-non-heap-mem:used start-non-heap-mem:used))
((getCommittedNonHeapMemDiff) :: <int>
(- end-non-heap-mem:committed start-non-heap-mem:committed))
((getMaxNonHeapMemDiff) :: <int>
(- end-non-heap-mem:max start-non-heap-mem:max))
;; gnu.text.Printable
((print out :: <gnu.lists.Consumer>) :: <void>
(consumFormat out "Value: ~A\n" value)
(consumFormat out "Duration: ~,3F sec.\n" (this):Duration)
(out:write "Memory usage:\n Heap memory:\n")
(consumFormat out " init: ~:D\n" (this):InitHeapMemDiff)
(consumFormat out " used: ~:D\n" (this):UsedHeapMemDiff)
(consumFormat out " committed: ~:D\n" (this):CommittedHeapMemDiff)
(consumFormat out " max: ~:D\n" (this):MaxHeapMemDiff)
(out:write " Non heap memory:\n")
(consumFormat out " init: ~:D\n" (this):InitHeapMemDiff)
(consumFormat out " used: ~:D\n" (this):UsedHeapMemDiff)
(consumFormat out " committed: ~:D\n" (this):CommittedHeapMemDiff)
(consumFormat out " max: ~:D\n" (this):MaxHeapMemDiff)))


(define-syntax time
 (syntax-rules ()
   ((time expression)
    ;; =>
    (make <process-data> (lambda () expression)))))

Thanks!
And excuse me again.

--
WBR, Yaroslav Kavenchuk.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]