On Fri, Oct 2, 2015 at 11:09 AM, Eliot Miranda <eliot.mira...@gmail.com>
wrote:

> Hi Henrik,
>
> On Thu, Oct 1, 2015 at 2:18 AM, Henrik Nergaard <henri...@student.uia.no>
> wrote:
>
>> Hi,
>>
>> Is there a simple way to query a variable to check how many methods that
>> access it? (just want to know the size)
>>
>> This works, but it is quite slow.
>> (Morph whichSelectorsAccess: #owner) size
>> Morph withAllSubclasses inject: 0 into: [ :sum :class | sum + (class
>> whichSelectorsAccess: #owner) size ]
>>
>
> If it is slow then there's some mistake.  Here are some measurements from
> the relevant code in my Spur Squeak v 5.0 image:
>
>
> | visited t |
> visited := 0.
> t := [self systemNavigation allMethodsSelect: [:m| visited := visited + 1.
>  (m readsField: 66) or: (m writesField: 66)] localToPackage: #VMMaker]
> timeToRun.
> {t. visited. t * 1000.0 / visited } #(89 13553 6.566811775990556)
>
>
> | visited t |
> visited := 0.
> t := [self systemNavigation allMethodsSelect: [:m| visited := visited + 1.
>  (m readsField: 6) or: (m writesField: 6)] localToPackage: #VMMaker]
> timeToRun.
> {t. visited. t * 1000.0 / visited } #(85 13553 6.271674168080867)
>
> So 85 milliseconds to analyse 13k methods, for a cost of 6 1/4 secs per
> method.  I wouldn't call that slow.
>
> The measurements for Morph and subclasses are even better:
>
>
> | visited t |
> visited := 0.
> t := [self systemNavigation allMethodsSelect: [:m| visited := visited + 1.
>  (m readsField: 66) or: (m writesField: 66)] localTo: Morph] timeToRun.
> {t. visited. t * 1000.0 / visited } #(34 12434 2.7344378317516487)
> | visited t |
> visited := 0.
> t := [self systemNavigation allMethodsSelect: [:m| visited := visited + 1.
>  (m readsField: 6) or: (m writesField: 6)] localTo: Morph] timeToRun.
> {t. visited. t * 1000.0 / visited } #(34 12434 2.7344378317516487)
>
> 34 milliseconds, 2 3/4 usecs per method.
>

Oops.  This should read


| visited t |
visited := 0.
t := [self systemNavigation allMethodsSelect: [:m| visited := visited + 1.
 (m readsField: 66) or: (m writesField: 66)] localTo: Morph] timeToRun.
{t. visited. t * 1000.0 / visited } #(33 12434 2.654013189641306)

| visited t |
visited := 0.
t := [self systemNavigation allMethodsSelect: [:m| visited := visited + 1.
 (m readsField: 6) or: (m writesField: 6)] localTo: Morph] timeToRun.
{t. visited. t * 1000.0 / visited } #(34 12434 2.7344378317516487)



>
>
> This on a late 2012 Mac Mini 2.3GHz Core i7.
>
>
>> <http://forum.world.st/file/n4852956/aMenuMorph%28885522432%29.png>
>>
>> Best regards,
>> Henrik
>>
>>
>>
>> --
>> View this message in context:
>> http://forum.world.st/Querying-the-accessors-of-a-variable-tp4852956.html
>> Sent from the Pharo Smalltalk Developers mailing list archive at
>> Nabble.com.
>>
>>
>
>
> --
> _,,,^..^,,,_
> best, Eliot
>



-- 
_,,,^..^,,,_
best, Eliot

Reply via email to