Hi Henrik,

On Thu, Oct 1, 2015 at 2:18 AM, Henrik Nergaard <henrin10@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.


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