File: Profile.st

package info (click to toggle)
gnu-smalltalk 3.1-6
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 33,300 kB
  • ctags: 13,999
  • sloc: ansic: 88,106; sh: 23,223; asm: 7,889; perl: 4,493; cpp: 3,539; awk: 1,483; yacc: 1,355; xml: 1,272; makefile: 1,192; lex: 843; sed: 258; objc: 124
file content (48 lines) | stat: -rw-r--r-- 999 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Bag subclass: #IdentityBag
       instanceVariableNames: ''
       classVariableNames: ''
       poolDictionaries: ''
       category: ''

!IdentityBag methodsFor: 'private'!

dictionaryClass
    ^IdentityDictionary! !


!BlockClosure methodsFor: 'profiling'!

profile
    | s profProcess workProcess results |
    s := Semaphore new.
    results := IdentityBag new.
    workProcess := self newProcess.
    profProcess := [
	workProcess resume.
        [
	    (Delay forMilliseconds: 5) wait.
	    workProcess isTerminated
	] whileFalse: [
	    results add: workProcess suspendedContext method.
	].
	s signal
    ] forkAt: Processor highIOPriority.
    s wait.
    ^results sortedByCount
! !

[
    | n c hash |

    n := 20000.

    hash := LookupTable new: n * 2.
    1 to: n do: [ :each |
        hash at: (each printString: 16) put: 1
    ].

    c := 0.
    n to: 1 by: -1 do: [ :each |
	(hash includesKey: each printString) ifTrue: [ c := c + 1]
    ].
] profile do: [ :each | each printNl ]!