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