diff --git a/collects/racket/future/visualizer.rkt b/collects/future-visualizer/main.rkt similarity index 92% rename from collects/racket/future/visualizer.rkt rename to collects/future-visualizer/main.rkt index e7974dc6b8..02945a269b 100644 --- a/collects/racket/future/visualizer.rkt +++ b/collects/future-visualizer/main.rkt @@ -2,14 +2,14 @@ (require racket/contract slideshow/pict racket/bool - racket/future/trace + future-visualizer/trace "private/visualizer-gui.rkt" "private/visualizer-drawing.rkt") + (provide visualize-futures (contract-out - [show-visualizer (-> void?)] + [show-visualizer (->* () (#:timeline (listof indexed-future-event?)) void?)] [visualize-futures-thunk ((-> any/c) . -> . any/c)] - [show-visualizer-for-events ((listof indexed-future-event?) . -> . void?)] [timeline-pict (->i ([indexed-fevents (listof indexed-future-event?)]) (#:x [x (or/c #f exact-nonnegative-integer?)] #:y [y (or/c #f exact-nonnegative-integer?)] diff --git a/collects/racket/future/private/constants.rkt b/collects/future-visualizer/private/constants.rkt similarity index 100% rename from collects/racket/future/private/constants.rkt rename to collects/future-visualizer/private/constants.rkt diff --git a/collects/racket/future/private/display.rkt b/collects/future-visualizer/private/display.rkt similarity index 100% rename from collects/racket/future/private/display.rkt rename to collects/future-visualizer/private/display.rkt diff --git a/collects/racket/future/private/drawing-helpers.rkt b/collects/future-visualizer/private/drawing-helpers.rkt similarity index 100% rename from collects/racket/future/private/drawing-helpers.rkt rename to collects/future-visualizer/private/drawing-helpers.rkt diff --git a/collects/racket/future/private/graph-drawing.rkt b/collects/future-visualizer/private/graph-drawing.rkt similarity index 100% rename from collects/racket/future/private/graph-drawing.rkt rename to collects/future-visualizer/private/graph-drawing.rkt diff --git a/collects/racket/future/private/gui-helpers.rkt b/collects/future-visualizer/private/gui-helpers.rkt similarity index 100% rename from collects/racket/future/private/gui-helpers.rkt rename to collects/future-visualizer/private/gui-helpers.rkt diff --git a/collects/racket/future/private/visualizer-data.rkt b/collects/future-visualizer/private/visualizer-data.rkt similarity index 100% rename from collects/racket/future/private/visualizer-data.rkt rename to collects/future-visualizer/private/visualizer-data.rkt diff --git a/collects/racket/future/private/visualizer-drawing.rkt b/collects/future-visualizer/private/visualizer-drawing.rkt similarity index 100% rename from collects/racket/future/private/visualizer-drawing.rkt rename to collects/future-visualizer/private/visualizer-drawing.rkt diff --git a/collects/racket/future/private/visualizer-gui.rkt b/collects/future-visualizer/private/visualizer-gui.rkt similarity index 97% rename from collects/racket/future/private/visualizer-gui.rkt rename to collects/future-visualizer/private/visualizer-gui.rkt index a9ce7c6589..d5a5b37bbd 100644 --- a/collects/racket/future/private/visualizer-gui.rkt +++ b/collects/future-visualizer/private/visualizer-gui.rkt @@ -9,8 +9,7 @@ "display.rkt" "constants.rkt") -(provide show-visualizer - show-visualizer-for-events) +(provide show-visualizer) ;;rebuild-mouse-index : frame-info trace (listof segment) -> interval-map of (range --> interval-map) (define (rebuild-mouse-index frameinfo tr segs) @@ -84,12 +83,11 @@ (values (min screen-w DEF-WINDOW-WIDTH) (min screen-h DEF-WINDOW-HEIGHT))) -;;show-visualizer-for-events : (listof indexed-fevent) -> void -(define (show-visualizer-for-events logs) - ;If for some reason the log is empty, error - (when (empty? logs) - (error 'show-visualizer "No future log messages found.")) - (define the-trace (build-trace logs)) +(define (show-visualizer #:timeline [timeline #f]) + (define the-tl (if timeline timeline (timeline-events))) + (when (empty? the-tl) + (error 'show-visualizer "No future log messages found.")) + (define the-trace (build-trace the-tl)) (define-values (winw winh) (get-window-size)) ;The event segment we are currently mousing over (define hover-seg #f) @@ -354,6 +352,3 @@ (set! showing-create-graph (not showing-create-graph)))]) (send f show #t)) - -(define (show-visualizer) - (show-visualizer-for-events (timeline-events))) diff --git a/collects/racket/future/trace.rkt b/collects/future-visualizer/trace.rkt similarity index 93% rename from collects/racket/future/trace.rkt rename to collects/future-visualizer/trace.rkt index 1a84f75e9e..dfdf506900 100644 --- a/collects/racket/future/trace.rkt +++ b/collects/future-visualizer/trace.rkt @@ -4,7 +4,7 @@ (provide (struct-out future-event) (struct-out indexed-future-event) trace-futures - (contract-out + (contract-out [start-performance-tracking! (-> void?)] [timeline-events (-> (listof indexed-future-event?))] [trace-futures-thunk ((-> any/c) . -> . (listof indexed-future-event?))])) diff --git a/collects/scribblings/guide/futures.scrbl b/collects/scribblings/guide/futures.scrbl index ed78bed448..235f33fbe4 100644 --- a/collects/scribblings/guide/futures.scrbl +++ b/collects/scribblings/guide/futures.scrbl @@ -1,11 +1,11 @@ #lang scribble/doc @(require scribble/manual scribble/eval "guide-utils.rkt" - (for-label racket/flonum racket/future)) + (for-label racket/flonum racket/future future-visualizer)) @(define future-eval (make-base-eval)) @(interaction-eval #:eval future-eval (require racket/future - racket/future/private/visualizer-drawing - racket/future/private/visualizer-data)) + future-visualizer/private/visualizer-drawing + future-visualizer/trace)) @title[#:tag "effective-futures"]{Parallelism with Futures} @@ -105,10 +105,10 @@ Unfortunately, attempting to run the two computations in parallel with (touch f))) ] -To see why, use the @racketmodname[racket/future/visualizer], like this: +To see why, use the @racketmodname[future-visualizer], like this: @racketblock[ - (require racket/future/visualizer) + (require future-visualizer) (visualize-futures (let ([f (future (lambda () (mandelbrot 10000000 62 501 1000)))]) (list (mandelbrot 10000000 62 500 1000) diff --git a/collects/scribblings/reference/futures-trace.scrbl b/collects/scribblings/reference/futures-trace.scrbl index 235bd7c278..7a900c1a00 100644 --- a/collects/scribblings/reference/futures-trace.scrbl +++ b/collects/scribblings/reference/futures-trace.scrbl @@ -1,11 +1,11 @@ #lang scribble/doc -@(require "mz.rkt" (for-label racket/future racket/future/trace)) +@(require "mz.rkt" (for-label racket/future future-visualizer/trace)) @title[#:tag "futures-trace"]{Futures Tracing} @guideintro["effective-futures"]{the future visualizer} -@defmodule[racket/future/trace] +@defmodule[future-visualizer/trace] The @deftech{futures trace} module exposes low-level information about the execution of parallel programs written using @racket[future]. @@ -22,7 +22,7 @@ the execution of parallel programs written using @racket[future]. @racketblock[ (require racket/future - racket/future/trace) + future-visualizer/trace) (trace-futures (let ([f (future (lambda () ...))]) @@ -34,7 +34,7 @@ the execution of parallel programs written using @racket[future]. @racketblock[ (require racket/future - racket/future/trace) + future-visualizer/trace) (start-performance-tracking!) (let ([f (future (lambda () ...))]) @@ -76,7 +76,7 @@ useful for debugging the performance of programs that use futures. Though textual log output can be viewed directly (or retrieved in code via @racket[trace-futures]), it is much easier to use the graphical profiler tool provided by -@racketmodname[racket/future/visualizer]. +@racketmodname[future-visualizer]. In addition to its string message, each event logged for a future has a data value that is an instance of a @racket[future-event] diff --git a/collects/scribblings/reference/futures-visualizer.scrbl b/collects/scribblings/reference/futures-visualizer.scrbl index 3212b74702..12849ccc44 100644 --- a/collects/scribblings/reference/futures-visualizer.scrbl +++ b/collects/scribblings/reference/futures-visualizer.scrbl @@ -1,11 +1,11 @@ #lang scribble/doc -@(require "mz.rkt" (for-label racket/future/trace racket/future)) +@(require "mz.rkt" (for-label future-visualizer/trace racket/future)) @title[#:tag "futures-visualizer"]{Futures Visualizer} @guideintro["effective-futures"]{the future visualizer} -@defmodule[racket/future/visualizer] +@defmodule[future-visualizer] The @deftech{futures visualizer} is a graphical profiling tool for parallel programs written using @racket[future]. The tool @@ -27,7 +27,7 @@ at any point during the program's lifetime. @racketblock[ (require racket/future - racket/future/visualizer) + future-visualizer) (visualize-futures (let ([f (future (lambda () ...))]) @@ -39,8 +39,8 @@ at any point during the program's lifetime. @racketblock[ (require racket/future - racket/future/trace - racket/future/visualizer) + future-visualizer/trace + future-visualizer) (start-performance-tracking!) (let ([f (future (lambda () ...))]) @@ -51,10 +51,14 @@ at any point during the program's lifetime. ] } -@defproc[(show-visualizer) void?]{ - Displays the profiler window. Calls to this - function must be preceded by a call to @racket[start-performance-tracking!] (or can - be avoided altogether by using either @racket[visualize-futures] or @racket[visualize-futures-thunk]). +@defproc[(show-visualizer [#:timeline timeline (listof indexed-future-event?)]) void?]{ + Displays the visualizer window. If the function is called with no arguments, + it must be preceded by a call to @racket[start-performance-tracking!] -- in which case + the visualizer will show data for all events logged in between (via @racket[timeline-events]). + Note that @racket[visualize-futures] and @racket[visualize-futures-thunk] are simpler alternatives to using these + primitives directly. + The @racket[timeline] argument can be used to show the visualizer for a previously-generated + trace. } @section[#:tag "future-visualizer-timeline"]{Execution Timeline} diff --git a/collects/tests/future/visualizer.rkt b/collects/tests/future/visualizer.rkt index 77aa4739cc..f6962617a2 100644 --- a/collects/tests/future/visualizer.rkt +++ b/collects/tests/future/visualizer.rkt @@ -2,10 +2,10 @@ (require rackunit racket/list racket/vector - racket/future/private/visualizer-drawing - racket/future/private/visualizer-data - racket/future/private/display - racket/future/private/graph-drawing) + future-visualizer/private/visualizer-drawing + future-visualizer/private/visualizer-data + future-visualizer/private/display + future-visualizer/private/graph-drawing) (define (compile-trace-data logs) (define tr (build-trace logs))