make the drr log follower show its results in a separate window

original commit: a5961dcf366dafe5830bcd93c984b4601625204d
This commit is contained in:
Robby Findler 2012-11-27 22:53:19 -06:00
parent 7154fcca6b
commit f0e71cebf5

View File

@ -34,10 +34,9 @@ log message was reported.
'debug 'framework/colorer 'debug 'framework/colorer
'debug 'timeline)) 'debug 'timeline))
(define top-n-events 50) (define top-n-events 30)
(define drop-gc? #f) (define drop-gc? #f)
(define start-right-away? #t) ;; only applies if the 'main' module is loaded (define start-right-away? #t) ;; only applies if the 'main' module is loaded
(define show-hist? #t)
(define script-drr? #t) (define script-drr? #t)
(define interesting-range-start 26) (define interesting-range-start 26)
(define interesting-range-end +inf.0) (define interesting-range-end +inf.0)
@ -105,24 +104,40 @@ log message was reported.
(λ (_1 _2) (λ (_1 _2)
(stop-and-dump))])) (stop-and-dump))]))
(define (stop-and-dump) (define (stop-and-dump)
(cond (define sp (open-output-string))
[following-log? (parameterize ([current-output-port sp])
(define resp (make-channel)) (cond
(channel-put log-done-chan resp) [following-log?
(show-results (channel-get resp)) (define resp (make-channel))
(send db enable #f) (channel-put log-done-chan resp)
(send sb enable #t) (show-results (channel-get resp))
(send sb2 enable #t) (send db enable #f)
(set! following-log? #f)] (send sb enable #t)
[following-bt? (send sb2 enable #t)
(define resp (make-channel)) (set! following-log? #f)]
(channel-put bt-done-chan resp) [following-bt?
(define stacks (channel-get resp)) (define resp (make-channel))
(show-bt-results stacks) (channel-put bt-done-chan resp)
(send db enable #f) (define stacks (channel-get resp))
(send sb enable #t) (show-bt-results stacks)
(send sb2 enable #t) (send db enable #f)
(set! following-bt? #f)])) (send sb enable #t)
(send sb2 enable #t)
(set! following-bt? #f)]))
(show-string (get-output-string sp)))
(define (show-string str)
(define t (new text%))
(send t insert str)
(send t change-style (make-object style-delta% 'change-family 'modern)
0
(send t last-position))
(define f (new frame% [width 600] [height 800] [label "Log Follower Results"]))
(define ec (new editor-canvas% [parent f] [editor t]))
(define mb (new menu-bar% [parent f]))
(define edit-menu (new menu% [label "Edit"] [parent mb]))
(append-editor-operation-menu-items edit-menu)
(send f show #t))
(define following-log? #f) (define following-log? #f)
(define following-bt? #f) (define following-bt? #f)
@ -192,37 +207,37 @@ log message was reported.
(number? (gui-event-end i)))) (number? (gui-event-end i))))
evts)) evts))
(cond (define (show-hist)
[show-hist? (define gc-starts+ends
(define gc-starts+ends (filter
(filter values
values (for/list ([evt (in-list evts)])
(for/list ([evt (in-list evts)]) (cond
(cond [(gc-info? (vector-ref evt 2))
[(gc-info? (vector-ref evt 2)) (cons (gc-info-start-time (vector-ref evt 2))
(cons (gc-info-start-time (vector-ref evt 2)) (gc-info-end-time (vector-ref evt 2)))]
(gc-info-end-time (vector-ref evt 2)))] [else #f]))))
[else #f]))))
(printf "gc deltas\n")
(print-hist (map (λ (x) (- (cdr x) (car x))) gc-starts+ends))
(define (has-a-gc? evt-vec)
(define evt (vector-ref evt-vec 2))
(for/or ([gc-start+end (in-list gc-starts+ends)])
(<= (gui-event-start evt)
(car gc-start+end)
(gui-event-end evt))))
(define-values (has-gc-events no-gc-events)
(partition has-a-gc? gui-events))
(printf "\nwith gc\n")
(print-gui-event-hist has-gc-events)
(printf "\nwithout gc\n")
(print-gui-event-hist no-gc-events)
(printf "\nboth with and without gc\n")
(print-gui-event-hist gui-events))
(printf "gc deltas\n") (define (show-top-events)
(print-hist (map (λ (x) (- (cdr x) (car x))) gc-starts+ends))
(define (has-a-gc? evt-vec)
(define evt (vector-ref evt-vec 2))
(for/or ([gc-start+end (in-list gc-starts+ends)])
(<= (gui-event-start evt)
(car gc-start+end)
(gui-event-end evt))))
(define-values (has-gc-events no-gc-events)
(partition has-a-gc? gui-events))
(printf "\nwith gc\n")
(print-gui-event-hist has-gc-events)
(printf "\nwithout gc\n")
(print-gui-event-hist no-gc-events)
(printf "\nboth with and without gc\n")
(print-gui-event-hist gui-events)]
[else
(define interesting-gui-events (define interesting-gui-events
(let ([candidate-events (let ([candidate-events
(sort (filter (λ (x) (sort (filter (λ (x)
@ -262,7 +277,11 @@ log message was reported.
(if drop-gc? (if drop-gc?
(filter (λ (x) (not (has-a-gc-event? x))) (filter (λ (x) (not (has-a-gc-event? x)))
with-other-events) with-other-events)
with-other-events))])) with-other-events)))
(show-top-events)
(printf "\n\n============================================================\n\n\n")
(show-hist))
(struct gc-info (major? pre-amount pre-admin-amount code-amount (struct gc-info (major? pre-amount pre-admin-amount code-amount
post-amount post-admin-amount post-amount post-admin-amount
@ -376,3 +395,4 @@ log message was reported.
(queue-callback (queue-callback
(λ () (λ ()
(run-drracket-script)))))) (run-drracket-script))))))