Whether the functions were created by macro expansion or not won't
matter to the profiler. Maybe these functions are just not showing up
in the profile because they don't get called a lot?

But if you want to be extra sure, it is possible that if the functions
don't have a name (you can check this by using object-name on the
functions at runtime) they might get dropped from the profile. Most
functions will have a name, either because they are in a let or a
define or because the name is derived from the source location
information, but it is possible that a function might have neither of
these. You can usually fix this by introducing a let.

Robby

On Tue, Aug 28, 2012 at 9:47 AM, J. Ian Johnson <i...@ccs.neu.edu> wrote:
> What is the proper way to get the statistical profiler to be aware of 
> function definitions that are created by macro expansion (in different 
> splicing-syntax-parameterize'd blocks, if that matters)?
>
> I have a data flow analysis framework that is parameterized by the Might/Van 
> Horn metafunctions from Abstracting Abstract Machines, and some others that 
> are necessary for a real-world analysis (delta axiom approximations, pretty 
> printers, etc). This parameterization is at compile-time, which generates 
> several definitions local to different syntax-parameterizations. At the top 
> level, I have my test suite that I want to now profile, since I'm hitting 
> some performance issues. The profiler finds a few functions that it hides 
> since they don't contribute to much of the running time. Everything else is 
> not profiled, it seems.
>
> Example generator:
> (define-syntax (with-basic-k-trunc-analysis stx)
>   (syntax-case stx ()
>     [(_ (k trunc?) body1 body ...)
>      (syntax/loc stx
>        (syntax-parameterize
>            ([contour-length (λ (stx) #'k)] ; should be constant
>             [truncate-rt? (λ (stx) #'trunc?)] ; should be constant
>             [alloc (make-rename-transformer #'base-alloc)]
>             [addr-lookup (make-rename-transformer #'base-addr-lookup)]
>             [join-stores (make-rename-transformer #'base-join-stores)]
>             [compare-σ (make-rename-transformer #'base-compare-σ)]
>             [compare-w (make-rename-transformer #'base-compare-w)]
>             [step-parameters (make-rename-transformer #'base-step-parameters)]
>             [initial-parameters (make-rename-transformer 
> #'base-initial-parameters)]
>             [combine-parameters/exit (make-rename-transformer 
> #'base-combine-parameters/exit)]
>             [pretty-local (make-rename-transformer #'base-pretty-local)]
>             [pretty-wide (make-rename-transformer #'base-pretty-wide)])
>          (begin
>            (define (k-contour-add t label) <blah>)
>            (define (base-tick s) <blah>)
>            (syntax-parameterize ([tick (make-rename-transformer #'base-tick)])
>               body1 body ...))))]))
>
> There are several macros like this, all used in the same module as the 
> invocation of the profiler. The top level wrapper is the splicing 
> parameterization:
>
> (define-syntax-rule (with-all-widening body1 body ...)
>   (splicing-syntax-parameterize
>    ([widening 'all]
>     [add-context (make-rename-transformer #'values)]
>     [combine-context (make-rename-transformer #'combine-all)]
>     [no-state (make-rename-transformer #'no-state-all-widen)])
>    body1 body ...))
>
> Thanks,
> -Ian
>
> ____________________
>   Racket Users list:
>   http://lists.racket-lang.org/users

____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to