JunMessageSpy observes message passings in an evaluation of a given block closure or a string, and displays a tree of contexts showing which method/block took how long in the execution. Observation sampling rate and cut-off threshold can be specified, e.g.JunMessageSpy spy: [Smalltalk keys collect: [ :className | (className asString select: [ :char | char isUppercase]) asSymbol]] often: 1 omit: 0.01.orJunMessageSpy evaluate: 'self keys collect: [ :className | (className asString select: [ :char | char isUppercase]) asSymbol]' for: Smalltalk often: 1 omit: 0.01. 'spy it' is also added to YellowButtonMenu on ParagraphEditor for convinience.