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