On Tue, Mar 2, 2010 at 4:34 PM, Alexandre Bergel <[email protected]>wrote:

> > Well it seems rather special purpose. What are you using it for?
> > Why is the cost impacting your work?
>
> There is an excellent paper at oopsla'09 that shows the method call
> graph can be effectively inferred using the method call stack depth:
> http://www-plan.cs.colorado.edu/klipto/mytkowicz-oopsla09.pdf
>
> Executing "[ running sender notNil ] whileTrue: [ running := running
> sender. depth := depth + 1]" before each method execution of my
> application terribly slows it down.
>

If you did your own VM you could do something like
- add a stack depth counter incremented and decremented on each call/return,
voided on each non-local return, terminateTo: etc
- cache it in a per-process inst var and store/restore it on process switch

But this will be difficult to get right (e.g. delimited continuations,
coroutines).


could you cache it in various activations?  e.g. something like

Notification subclass: StackDepthQuery

defaultAction
    ^nil

Object methodsFor: performance monitoring
cachingStackDepthDo: aBlock
    | home cachedStackDepth |
    home := thisContext.
    ^aBlock
        on:  StackDepthQuery
        do: [:ex|
            ex proceedWith: (cachedStackDepth ifNil: [cachedStackDepth :=
self computeStackDepthFrom: home)]

and then have StackDepthQuery count the stack frames as it searches for a
handler.  This is tricky because the exception machinery defers to
ContextPart to do the search.  You'd have to override a few methods.  But
this way you'd be able to cut short the counting adding
cachingStackDepthDo:'s at suitable points until profiling showed the
overhead was acceptable.




> Cheers,
> Alexandre
>
> >
> > On 2010-03-02, at 4:06 PM, Alexandre Bergel wrote:
> >
> >> Will it be of any use for you? If yes, then I will do it.
> >>
> >> Alexandre
> >>
> >>
> >> On 2 Mar 2010, at 21:00, John M McIntosh wrote:
> >>
> >>> Maybe you could write a plugin/primitive to do the work?
> >>>
> >>> On 2010-03-02, at 3:50 PM, Alexandre Bergel wrote:
> >>>
> >>>> Dear List,
> >>>>
> >>>> I was wondering whether there is a fast way to know the method call
> >>>> stack depth. Something like what follows does the job:
> >>>>
> >>>> -=-=-=-=-=-=-=-=-=-=-=-=
> >>>> | depth running |
> >>>> depth := 0.
> >>>> running := thisContext.
> >>>> [ running sender notNil ] whileTrue: [ running := running sender.
> >>>> depth := depth + 1].
> >>>> depth
> >>>> -=-=-=-=-=-=-=-=-=-=-=-=
> >>>>
> >>>> But it is rather slow. Anyone has a suggestion?
> >>>>
> >>>> Cheers,
> >>>> Alexandre
> >>>> -- _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
> >>>> Alexandre Bergel  http://www.bergel.eu
> >>>> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
> >
> > --
> > =
> > =
> > =
> > =
> > =
> > ======================================================================
> > John M. McIntosh <[email protected]>   Twitter:
> > squeaker68882
> > Corporate Smalltalk Consulting Ltd.  http://
> > www.smalltalkconsulting.com
> > =
> > =
> > =
> > =
> > =
> > ======================================================================
> >
> >
> >
> >
>
> --
> _,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
> Alexandre Bergel  http://www.bergel.eu
> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
>
>
>
>
>
>
> _______________________________________________
> Pharo-project mailing list
> [email protected]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to