Hello, Noticed that loking through implementors, in 4.4 is slow. So, tested Browsing the onplementors of printOn: . To selecct in browser different Reaction is instant in Squeak 3.6. 3.8.2 (VM 4.1.4) 4.1, 4.4 Cog
Hello, Sorry regarding previous email, accidentally hit Send. Just wanted to report that changing focus while browsing implementers, degraded a lot through releases. Checked 3.6 (instant), 3.8.1 ( slower, but ok, it was first release with unicode support AFAIK), 4.1 is so-so and 4.4 it takes ~1sec to look implementer on Cog. On 4.4, Cog selected profiled gives:
- 21614 tallies, 21630 msec.
**Tree** -------------------------------- Process: other processes -------------------------------- 35.5% {7689ms} ProcessorScheduler class>>idleProcess 11.6% {2513ms} EventSensor>>eventTickler 11.6% {2512ms} Delay>>wait -------------------------------- Process: (40s) 49125: nil -------------------------------- 52.6% {11381ms} WorldState>>doOneCycleFor: 50.0% {10815ms} WorldState>>doOneCycleNowFor: |48.4% {10469ms} HandMorph>>processEvents | |48.4% {10467ms} HandMorph>>handleEvent: | | 48.3% {10454ms} HandMorph>>sendKeyboardEvent: | | 48.3% {10454ms} HandMorph>>sendEvent:focus:clear: | | 48.3% {10454ms} HandMorph>>sendFocusEvent:to:clear: | | 48.3% {10454ms} PluggableListMorphPlus(Morph)>>handleFocusEvent: | | 48.3% {10454ms} PluggableListMorphPlus(Morph)>>handleEvent: | | 48.3% {10454ms} KeyboardEvent>>sentTo: | | 48.3% {10454ms} PluggableListMorphPlus(Morph)>>handleKeystroke: | | 48.3% {10454ms} PluggableListMorphPlus(PluggableListMorph)>>keyStroke: | | 48.3% {10454ms} PluggableListMorphPlus(PluggableListMorph)>>specialKeyPressed: | | 48.3% {10454ms} PluggableListMorphPlus(PluggableListMorph)>>changeModelSelection: | | 48.3% {10454ms} MessageSet>>messageListIndex: | | 29.9% {6474ms} MessageSet(CodeHolder)>>contentsChanged | | |18.5% {4001ms} MessageSet(Object)>>contentsChanged | | | |18.5% {4001ms} MessageSet(Object)>>changed: | | | | 18.5% {3997ms} PluggableTextMorphPlus>>update: | | | | 18.5% {3997ms} PluggableTextMorphPlus(PluggableTextMorph)>>update: | | | | 18.4% {3977ms} PluggableTextMorphPlus(PluggableTextMorph)>>getText | | | | 18.4% {3977ms} MessageSet>>contents | | | | 18.4% {3977ms} MessageSet(CodeHolder)>>editContents | | | | 18.4% {3977ms} MessageSet>>selectedMessage | | | | 9.6% {2087ms} ActionSequence class(Behavior)>>sourceMethodAt:ifAbsent: | | | | |9.6% {2087ms} ActionSequence class(Behavior)>>sourceCodeAt:ifAbsent: | | | | | 9.6% {2087ms} CompiledMethod>>getSourceFor:in: | | | | | 9.6% {2087ms} CompiledMethod>>getSourceFromFileAt: | | | | | 9.6% {2087ms} RemoteString>>text | | | | | 9.6% {2087ms} CurrentReadOnlySourceFiles class>>at: | | | | | 9.6% {2087ms} CurrentReadOnlySourceFiles class(Exception class)>>signal | | | | | 9.6% {2087ms} CurrentReadOnlySourceFiles(Exception)>>signal | | | | | 9.6% {2087ms} MethodContext(ContextPart)>>handleSignal: | | | | | 9.6% {2086ms} MethodContext(ContextPart)>>handleSignal: | | | | | 9.6% {2086ms} MethodContext(ContextPart)>>handleSignal: | | | | | 9.6% {2086ms} UndefinedObject>>handleSignal: | | | | | 9.6% {2086ms} CurrentReadOnlySourceFiles>>defaultAction | | | | | 9.6% {2086ms} MultiByteFileStream(StandardFileStream)>>readOnlyCopy | | | | | 9.6% {2086ms} MultiByteFileStream class(StandardFileStream class)>>readOnlyFileNamed: | | | | | 9.6% {2086ms} MultiByteFileStream>>open:forWrite: | | | | | 9.6% {2086ms} MultiByteFileStream(StandardFileStream)>>open:forWrite: | | | | | 9.6% {2084ms} primitives | | | | 8.7% {1889ms} MessageSet(CodeHolder)>>sourceStringPrettifiedAndDiffed | | | | 8.7% {1887ms} ActionSequence class(Behavior)>>ultimateSourceCodeAt:ifAbsent: | | | | 8.7% {1887ms} ActionSequence class(Behavior)>>sourceCodeAt:ifAbsent: | | | | 8.7% {1887ms} CompiledMethod>>getSourceFor:in: | | | | 8.7% {1887ms} CompiledMethod>>getSourceFromFileAt: | | | | 8.7% {1887ms} RemoteString>>text | | | | 8.7% {1886ms} CurrentReadOnlySourceFiles class>>at: | | | | 8.7% {1886ms} CurrentReadOnlySourceFiles class(Exception class)>>signal | | | | 8.7% {1886ms} CurrentReadOnlySourceFiles(Exception)>>signal | | | | 8.7% {1886ms} MethodContext(ContextPart)>>handleSignal: | | | | 8.7% {1886ms} MethodContext(ContextPart)>>handleSignal: | | | | 8.7% {1886ms} MethodContext(ContextPart)>>handleSignal: | | | | 8.7% {1886ms} UndefinedObject>>handleSignal: | | | | 8.7% {1886ms} CurrentReadOnlySourceFiles>>defaultAction | | | | 8.7% {1886ms} MultiByteFileStream(StandardFileStream)>>readOnlyCopy | | | | 8.7% {1886ms} MultiByteFileStream class(StandardFileStream class)>>readOnlyFileNamed: | | | | 8.7% {1886ms} MultiByteFileStream>>open:forWrite: | | | | 8.7% {1885ms} MultiByteFileStream(StandardFileStream)>>open:forWrite: | | |11.4% {2473ms} MessageSet(Object)>>changed: | | | 11.4% {2470ms} PluggableTextMorphPlus>>update: | | | 11.4% {2470ms} PluggableTextMorphPlus(PluggableTextMorph)>>update: | | | 11.4% {2457ms} PluggableTextMorphPlus(PluggableTextMorph)>>getText | | | 11.4% {2457ms} MessageSet(CodeHolder)>>annotation | | | 11.4% {2456ms} MessageSet(CodeHolder)>>annotationForSelector:ofClass: | | | 10.6% {2301ms} MessageSet(StringHolder)>>timeStamp | | | 10.6% {2301ms} Utilities class>>timeStampForMethod: | | | 10.6% {2301ms} CompiledMethod>>timeStamp | | | 10.6% {2297ms} CompiledMethod>>preamble | | | 10.6% {2296ms} CurrentReadOnlySourceFiles class>>at: | | | 10.6% {2296ms} CurrentReadOnlySourceFiles class(Exception class)>>signal | | | 10.6% {2296ms} CurrentReadOnlySourceFiles(Exception)>>signal | | | 10.6% {2296ms} MethodContext(ContextPart)>>handleSignal: | | | 10.6% {2296ms} MethodContext(ContextPart)>>handleSignal: | | | 10.6% {2296ms} UndefinedObject>>handleSignal: | | | 10.6% {2296ms} CurrentReadOnlySourceFiles>>defaultAction | | | 10.6% {2296ms} MultiByteFileStream(StandardFileStream)>>readOnlyCopy | | | 10.6% {2296ms} MultiByteFileStream class(StandardFileStream class)>>readOnlyFileNamed: | | | 10.6% {2296ms} MultiByteFileStream>>open:forWrite: | | | 10.6% {2296ms} MultiByteFileStream(StandardFileStream)>>open:forWrite: | | | 10.6% {2295ms} primitives | | 18.4% {3970ms} MessageSet>>selectedMessage | | 10.1% {2195ms} ActionSequence class(Behavior)>>sourceMethodAt:ifAbsent: | | |10.1% {2193ms} ActionSequence class(Behavior)>>sourceCodeAt:ifAbsent: | | | 10.1% {2193ms} CompiledMethod>>getSourceFor:in: | | | 10.1% {2193ms} CompiledMethod>>getSourceFromFileAt: | | | 10.1% {2193ms} RemoteString>>text | | | 9.5% {2057ms} CurrentReadOnlySourceFiles class>>at: | | | 9.5% {2056ms} CurrentReadOnlySourceFiles class(Exception class)>>signal | | | 9.5% {2056ms} CurrentReadOnlySourceFiles(Exception)>>signal | | | 9.5% {2056ms} MethodContext(ContextPart)>>handleSignal: | | | 9.5% {2056ms} MethodContext(ContextPart)>>handleSignal: | | | 9.5% {2056ms} MethodContext(ContextPart)>>handleSignal: | | | 9.5% {2056ms} UndefinedObject>>handleSignal: | | | 9.5% {2056ms} CurrentReadOnlySourceFiles>>defaultAction | | | 9.5% {2056ms} MultiByteFileStream(StandardFileStream)>>readOnlyCopy | | | 9.5% {2056ms} MultiByteFileStream class(StandardFileStream class)>>readOnlyFileNamed: | | | 9.5% {2056ms} MultiByteFileStream>>open:forWrite: | | | 9.5% {2056ms} MultiByteFileStream(StandardFileStream)>>open:forWrite: | | 8.2% {1774ms} MessageSet(CodeHolder)>>sourceStringPrettifiedAndDiffed | | 8.2% {1773ms} ActionSequence class(Behavior)>>ultimateSourceCodeAt:ifAbsent: | | 8.2% {1773ms} ActionSequence class(Behavior)>>sourceCodeAt:ifAbsent: | | 8.2% {1773ms} CompiledMethod>>getSourceFor:in: | | 8.2% {1772ms} CompiledMethod>>getSourceFromFileAt: | | 8.2% {1772ms} RemoteString>>text | | 8.2% {1771ms} CurrentReadOnlySourceFiles class>>at: | | 8.2% {1771ms} CurrentReadOnlySourceFiles class(Exception class)>>signal | | 8.2% {1771ms} CurrentReadOnlySourceFiles(Exception)>>signal | | 8.2% {1771ms} MethodContext(ContextPart)>>handleSignal: | | 8.2% {1771ms} MethodContext(ContextPart)>>handleSignal: | | 8.2% {1771ms} MethodContext(ContextPart)>>handleSignal: | | 8.2% {1771ms} UndefinedObject>>handleSignal: | | 8.2% {1771ms} CurrentReadOnlySourceFiles>>defaultAction | | 8.2% {1771ms} MultiByteFileStream(StandardFileStream)>>readOnlyCopy | | 8.2% {1771ms} MultiByteFileStream class(StandardFileStream class)>>readOnlyFileNamed: | | 8.2% {1771ms} MultiByteFileStream>>open:forWrite: | | 8.2% {1771ms} MultiByteFileStream(StandardFileStream)>>open:forWrite: | | 8.2% {1770ms} primitives |1.6% {343ms} WorldState>>displayWorldSafely: | 1.6% {343ms} PasteUpMorph>>displayWorld | 1.6% {343ms} PasteUpMorph>>privateOuterDisplayWorld | 1.6% {343ms} WorldState>>displayWorld:submorphs: | 1.5% {315ms} WorldState>>drawWorld:submorphs:invalidAreasOn: | 1.4% {295ms} FormCanvas(Canvas)>>fullDrawMorph: | 1.4% {295ms} FormCanvas(Canvas)>>fullDraw: | 1.4% {295ms} DockingBarMorph(Morph)>>fullDrawOn: 2.6% {566ms} WorldState>>interCyclePause: 2.6% {566ms} Delay>>wait 2.6% {565ms} primitives **Leaves** 46.6% {10089ms} MultiByteFileStream(StandardFileStream)>>open:forWrite: 35.6% {7693ms} ProcessorScheduler class>>idleProcess 14.2% {3077ms} Delay>>wait
**Memory** old +84,176 bytes young -1,132,448 bytes used -1,048,272 bytes free +1,048,272 bytes
**GCs** full 0 totalling 0 ms (0% uptime) incr 28 totalling 44 ms (0.2% uptime), avg 1.6 ms tenures 1 (avg 28 GCs/tenure) root table 0 overflows
Vaidotas.
On 20 January 2013 18:20, Vaidotas Didžbalis vaidasd@gmail.com wrote:
Hello, Sorry regarding previous email, accidentally hit Send. Just wanted to report that changing focus while browsing implementers, degraded a lot through releases. Checked 3.6 (instant), 3.8.1 ( slower, but ok, it was first release with unicode support AFAIK), 4.1 is so-so and 4.4 it takes ~1sec to look implementer on Cog.
Ah, I was about to ask if you had any numbers :)
I tried hopping between methods, and couldn't really see any difference in speed between 4.3 and 4.4.
What I _did_ find was that choosing a method by clicking on it was noticeably slower ( than choosing a new method by using the up or down arrows, which is quite interesting.
frank
On 4.4, Cog selected profiled gives:
- 21614 tallies, 21630 msec.
**Tree**
Process: other processes
35.5% {7689ms} ProcessorScheduler class>>idleProcess 11.6% {2513ms} EventSensor>>eventTickler 11.6% {2512ms} Delay>>wait
Process: (40s) 49125: nil
52.6% {11381ms} WorldState>>doOneCycleFor: 50.0% {10815ms} WorldState>>doOneCycleNowFor: |48.4% {10469ms} HandMorph>>processEvents | |48.4% {10467ms} HandMorph>>handleEvent: | | 48.3% {10454ms} HandMorph>>sendKeyboardEvent: | | 48.3% {10454ms} HandMorph>>sendEvent:focus:clear: | | 48.3% {10454ms} HandMorph>>sendFocusEvent:to:clear: | | 48.3% {10454ms} PluggableListMorphPlus(Morph)>>handleFocusEvent: | | 48.3% {10454ms} PluggableListMorphPlus(Morph)>>handleEvent: | | 48.3% {10454ms} KeyboardEvent>>sentTo: | | 48.3% {10454ms} PluggableListMorphPlus(Morph)>>handleKeystroke: | | 48.3% {10454ms} PluggableListMorphPlus(PluggableListMorph)>>keyStroke: | | 48.3% {10454ms} PluggableListMorphPlus(PluggableListMorph)>>specialKeyPressed: | | 48.3% {10454ms} PluggableListMorphPlus(PluggableListMorph)>>changeModelSelection: | | 48.3% {10454ms} MessageSet>>messageListIndex: | | 29.9% {6474ms} MessageSet(CodeHolder)>>contentsChanged | | |18.5% {4001ms} MessageSet(Object)>>contentsChanged | | | |18.5% {4001ms} MessageSet(Object)>>changed: | | | | 18.5% {3997ms} PluggableTextMorphPlus>>update: | | | | 18.5% {3997ms} PluggableTextMorphPlus(PluggableTextMorph)>>update: | | | | 18.4% {3977ms} PluggableTextMorphPlus(PluggableTextMorph)>>getText | | | | 18.4% {3977ms} MessageSet>>contents | | | | 18.4% {3977ms} MessageSet(CodeHolder)>>editContents | | | | 18.4% {3977ms} MessageSet>>selectedMessage | | | | 9.6% {2087ms} ActionSequence class(Behavior)>>sourceMethodAt:ifAbsent: | | | | |9.6% {2087ms} ActionSequence class(Behavior)>>sourceCodeAt:ifAbsent: | | | | | 9.6% {2087ms} CompiledMethod>>getSourceFor:in: | | | | | 9.6% {2087ms} CompiledMethod>>getSourceFromFileAt: | | | | | 9.6% {2087ms} RemoteString>>text | | | | | 9.6% {2087ms} CurrentReadOnlySourceFiles class>>at: | | | | | 9.6% {2087ms} CurrentReadOnlySourceFiles class(Exception class)>>signal | | | | | 9.6% {2087ms} CurrentReadOnlySourceFiles(Exception)>>signal | | | | | 9.6% {2087ms} MethodContext(ContextPart)>>handleSignal: | | | | | 9.6% {2086ms} MethodContext(ContextPart)>>handleSignal: | | | | | 9.6% {2086ms} MethodContext(ContextPart)>>handleSignal: | | | | | 9.6% {2086ms} UndefinedObject>>handleSignal: | | | | | 9.6% {2086ms} CurrentReadOnlySourceFiles>>defaultAction | | | | | 9.6% {2086ms} MultiByteFileStream(StandardFileStream)>>readOnlyCopy | | | | | 9.6% {2086ms} MultiByteFileStream class(StandardFileStream class)>>readOnlyFileNamed: | | | | | 9.6% {2086ms} MultiByteFileStream>>open:forWrite: | | | | | 9.6% {2086ms} MultiByteFileStream(StandardFileStream)>>open:forWrite: | | | | | 9.6% {2084ms} primitives | | | | 8.7% {1889ms} MessageSet(CodeHolder)>>sourceStringPrettifiedAndDiffed | | | | 8.7% {1887ms} ActionSequence class(Behavior)>>ultimateSourceCodeAt:ifAbsent: | | | | 8.7% {1887ms} ActionSequence class(Behavior)>>sourceCodeAt:ifAbsent: | | | | 8.7% {1887ms} CompiledMethod>>getSourceFor:in: | | | | 8.7% {1887ms} CompiledMethod>>getSourceFromFileAt: | | | | 8.7% {1887ms} RemoteString>>text | | | | 8.7% {1886ms} CurrentReadOnlySourceFiles class>>at: | | | | 8.7% {1886ms} CurrentReadOnlySourceFiles class(Exception class)>>signal | | | | 8.7% {1886ms} CurrentReadOnlySourceFiles(Exception)>>signal | | | | 8.7% {1886ms} MethodContext(ContextPart)>>handleSignal: | | | | 8.7% {1886ms} MethodContext(ContextPart)>>handleSignal: | | | | 8.7% {1886ms} MethodContext(ContextPart)>>handleSignal: | | | | 8.7% {1886ms} UndefinedObject>>handleSignal: | | | | 8.7% {1886ms} CurrentReadOnlySourceFiles>>defaultAction | | | | 8.7% {1886ms} MultiByteFileStream(StandardFileStream)>>readOnlyCopy | | | | 8.7% {1886ms} MultiByteFileStream class(StandardFileStream class)>>readOnlyFileNamed: | | | | 8.7% {1886ms} MultiByteFileStream>>open:forWrite: | | | | 8.7% {1885ms} MultiByteFileStream(StandardFileStream)>>open:forWrite: | | |11.4% {2473ms} MessageSet(Object)>>changed: | | | 11.4% {2470ms} PluggableTextMorphPlus>>update: | | | 11.4% {2470ms} PluggableTextMorphPlus(PluggableTextMorph)>>update: | | | 11.4% {2457ms} PluggableTextMorphPlus(PluggableTextMorph)>>getText | | | 11.4% {2457ms} MessageSet(CodeHolder)>>annotation | | | 11.4% {2456ms} MessageSet(CodeHolder)>>annotationForSelector:ofClass: | | | 10.6% {2301ms} MessageSet(StringHolder)>>timeStamp | | | 10.6% {2301ms} Utilities class>>timeStampForMethod: | | | 10.6% {2301ms} CompiledMethod>>timeStamp | | | 10.6% {2297ms} CompiledMethod>>preamble | | | 10.6% {2296ms} CurrentReadOnlySourceFiles class>>at: | | | 10.6% {2296ms} CurrentReadOnlySourceFiles class(Exception class)>>signal | | | 10.6% {2296ms} CurrentReadOnlySourceFiles(Exception)>>signal | | | 10.6% {2296ms} MethodContext(ContextPart)>>handleSignal: | | | 10.6% {2296ms} MethodContext(ContextPart)>>handleSignal: | | | 10.6% {2296ms} UndefinedObject>>handleSignal: | | | 10.6% {2296ms} CurrentReadOnlySourceFiles>>defaultAction | | | 10.6% {2296ms} MultiByteFileStream(StandardFileStream)>>readOnlyCopy | | | 10.6% {2296ms} MultiByteFileStream class(StandardFileStream class)>>readOnlyFileNamed: | | | 10.6% {2296ms} MultiByteFileStream>>open:forWrite: | | | 10.6% {2296ms} MultiByteFileStream(StandardFileStream)>>open:forWrite: | | | 10.6% {2295ms} primitives | | 18.4% {3970ms} MessageSet>>selectedMessage | | 10.1% {2195ms} ActionSequence class(Behavior)>>sourceMethodAt:ifAbsent: | | |10.1% {2193ms} ActionSequence class(Behavior)>>sourceCodeAt:ifAbsent: | | | 10.1% {2193ms} CompiledMethod>>getSourceFor:in: | | | 10.1% {2193ms} CompiledMethod>>getSourceFromFileAt: | | | 10.1% {2193ms} RemoteString>>text | | | 9.5% {2057ms} CurrentReadOnlySourceFiles class>>at: | | | 9.5% {2056ms} CurrentReadOnlySourceFiles class(Exception class)>>signal | | | 9.5% {2056ms} CurrentReadOnlySourceFiles(Exception)>>signal | | | 9.5% {2056ms} MethodContext(ContextPart)>>handleSignal: | | | 9.5% {2056ms} MethodContext(ContextPart)>>handleSignal: | | | 9.5% {2056ms} MethodContext(ContextPart)>>handleSignal: | | | 9.5% {2056ms} UndefinedObject>>handleSignal: | | | 9.5% {2056ms} CurrentReadOnlySourceFiles>>defaultAction | | | 9.5% {2056ms} MultiByteFileStream(StandardFileStream)>>readOnlyCopy | | | 9.5% {2056ms} MultiByteFileStream class(StandardFileStream class)>>readOnlyFileNamed: | | | 9.5% {2056ms} MultiByteFileStream>>open:forWrite: | | | 9.5% {2056ms} MultiByteFileStream(StandardFileStream)>>open:forWrite: | | 8.2% {1774ms} MessageSet(CodeHolder)>>sourceStringPrettifiedAndDiffed | | 8.2% {1773ms} ActionSequence class(Behavior)>>ultimateSourceCodeAt:ifAbsent: | | 8.2% {1773ms} ActionSequence class(Behavior)>>sourceCodeAt:ifAbsent: | | 8.2% {1773ms} CompiledMethod>>getSourceFor:in: | | 8.2% {1772ms} CompiledMethod>>getSourceFromFileAt: | | 8.2% {1772ms} RemoteString>>text | | 8.2% {1771ms} CurrentReadOnlySourceFiles class>>at: | | 8.2% {1771ms} CurrentReadOnlySourceFiles class(Exception class)>>signal | | 8.2% {1771ms} CurrentReadOnlySourceFiles(Exception)>>signal | | 8.2% {1771ms} MethodContext(ContextPart)>>handleSignal: | | 8.2% {1771ms} MethodContext(ContextPart)>>handleSignal: | | 8.2% {1771ms} MethodContext(ContextPart)>>handleSignal: | | 8.2% {1771ms} UndefinedObject>>handleSignal: | | 8.2% {1771ms} CurrentReadOnlySourceFiles>>defaultAction | | 8.2% {1771ms} MultiByteFileStream(StandardFileStream)>>readOnlyCopy | | 8.2% {1771ms} MultiByteFileStream class(StandardFileStream class)>>readOnlyFileNamed: | | 8.2% {1771ms} MultiByteFileStream>>open:forWrite: | | 8.2% {1771ms} MultiByteFileStream(StandardFileStream)>>open:forWrite: | | 8.2% {1770ms} primitives |1.6% {343ms} WorldState>>displayWorldSafely: | 1.6% {343ms} PasteUpMorph>>displayWorld | 1.6% {343ms} PasteUpMorph>>privateOuterDisplayWorld | 1.6% {343ms} WorldState>>displayWorld:submorphs: | 1.5% {315ms} WorldState>>drawWorld:submorphs:invalidAreasOn: | 1.4% {295ms} FormCanvas(Canvas)>>fullDrawMorph: | 1.4% {295ms} FormCanvas(Canvas)>>fullDraw: | 1.4% {295ms} DockingBarMorph(Morph)>>fullDrawOn: 2.6% {566ms} WorldState>>interCyclePause: 2.6% {566ms} Delay>>wait 2.6% {565ms} primitives
**Leaves** 46.6% {10089ms} MultiByteFileStream(StandardFileStream)>>open:forWrite: 35.6% {7693ms} ProcessorScheduler class>>idleProcess 14.2% {3077ms} Delay>>wait
**Memory** old +84,176 bytes young -1,132,448 bytes used -1,048,272 bytes free +1,048,272 bytes
**GCs** full 0 totalling 0 ms (0% uptime) incr 28 totalling 44 ms (0.2% uptime), avg 1.6 ms tenures 1 (avg 28 GCs/tenure) root table 0 overflows
Vaidotas.
Once upon a time that was the case when the mousedown logic paused a bit (to see if drag was starting IIRC) before making the selection.
On 1/20/13 1:23 PM, Frank Shearar wrote:
What I_did_ find was that choosing a method by clicking on it was noticeably slower ( than choosing a new method by using the up or down arrows, which is quite interesting.
On 20.01.2013, at 10:23, Frank Shearar frank.shearar@gmail.com wrote:
On 20 January 2013 18:20, Vaidotas Didžbalis vaidasd@gmail.com wrote:
Hello, Sorry regarding previous email, accidentally hit Send. Just wanted to report that changing focus while browsing implementers, degraded a lot through releases. Checked 3.6 (instant), 3.8.1 ( slower, but ok, it was first release with unicode support AFAIK), 4.1 is so-so and 4.4 it takes ~1sec to look implementer on Cog.
Ah, I was about to ask if you had any numbers :)
I tried hopping between methods, and couldn't really see any difference in speed between 4.3 and 4.4.
What I _did_ find was that choosing a method by clicking on it was noticeably slower ( than choosing a new method by using the up or down arrows, which is quite interesting.
frank
Seems instantaneous for me on Mac. Might be a platform issue? Which VM, which OS?
- Bert -
Seems instantaneous for me on Mac. Might be a platform issue? Which VM, which OS?
- Bert -
Windows 7 64 bit, Cog Dec 12, 2012 bottleneck in method CurrentReadOnlySourceFiles>>defaultAction slow part is accessing changes file: time to run: [SourceFiles second readOnlyCopy] is ~ 100 ms. Caching is introduced here some time after 4.1. On XP 32 bit without antivirus there is no issue.. aha, perhaps this is antivirus related. Quite common in corporate policy in environments today. Will try tomorrow to disable antivirus and report. Vaidas
IMO the readOnlyCopy logic is broken. e should modify SourceFiles to keep a *single* read-only copy alongside each writable copy, and supply that when asked for a read-only copy. The read-only copy is effectively a cache. It needs to be flushed when a source file changes and when the image starts up. Again I have code for this from a modified 3.9 image if anyone is interested. IMO this is important.
On Mon, Jan 21, 2013 at 11:35 AM, Vaidotas Didžbalis vaidasd@gmail.comwrote:
Seems instantaneous for me on Mac. Might be a platform issue? Which VM,
which OS?
- Bert -
Windows 7 64 bit, Cog Dec 12, 2012 bottleneck in method CurrentReadOnlySourceFiles>>defaultAction slow part is accessing changes file: time to run: [SourceFiles second readOnlyCopy] is ~ 100 ms. Caching is introduced here some time after 4.1. On XP 32 bit without antivirus there is no issue.. aha, perhaps this is antivirus related. Quite common in corporate policy in environments today. Will try tomorrow to disable antivirus and report. Vaidas
How do we make that single copy thread-safe?
- Bert -
On 21.01.2013, at 15:06, Eliot Miranda eliot.miranda@gmail.com wrote:
IMO the readOnlyCopy logic is broken. e should modify SourceFiles to keep a *single* read-only copy alongside each writable copy, and supply that when asked for a read-only copy. The read-only copy is effectively a cache. It needs to be flushed when a source file changes and when the image starts up. Again I have code for this from a modified 3.9 image if anyone is interested. IMO this is important.
On Mon, Jan 21, 2013 at 11:35 AM, Vaidotas Didžbalis vaidasd@gmail.com wrote:
Seems instantaneous for me on Mac. Might be a platform issue? Which VM, which OS?
- Bert -
Windows 7 64 bit, Cog Dec 12, 2012 bottleneck in method CurrentReadOnlySourceFiles>>defaultAction slow part is accessing changes file: time to run: [SourceFiles second readOnlyCopy] is ~ 100 ms. Caching is introduced here some time after 4.1. On XP 32 bit without antivirus there is no issue.. aha, perhaps this is antivirus related. Quite common in corporate policy in environments today. Will try tomorrow to disable antivirus and report. Vaidas
-- best, Eliot
On 21-01-2013, at 3:21 PM, Bert Freudenberg bert@freudenbergs.de wrote:
How do we make that single copy thread-safe?
If you refer to the problem that I am familiar with, by getting rid of the four primitives primitiveFileRead, primitiveFileWrite, primitiveFileGetPosition & primitiveFileSetPosition; replace them with primitiveFileReadFileIDFilePtrIntoArrayStartingAtCount & primitiveFileWriteFileIDFilePtrFromArrayStartingAtCount
That way there is no gap between setting the file position and reading/writing. Some OS's (coughRISC OS) have this as the base api anyway.
tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim "How many Teela Browns does it take to change a lightbulb?" "Stupid question."
Hi Tim,
On Mon, Jan 21, 2013 at 3:42 PM, tim Rowledge tim@rowledge.org wrote:
On 21-01-2013, at 3:21 PM, Bert Freudenberg bert@freudenbergs.de wrote:
How do we make that single copy thread-safe?
If you refer to the problem that I am familiar with, by getting rid of the four primitives primitiveFileRead, primitiveFileWrite, primitiveFileGetPosition & primitiveFileSetPosition; replace them with primitiveFileReadFileIDFilePtrIntoArrayStartingAtCount & primitiveFileWriteFileIDFilePtrFromArrayStartingAtCount
Alas it bites at a slightly higher-level than that also. Yes, the decoupling of positioning and reading is a problem for thread-safety. But so is the single buffer and the single position. e.g. if one were to call your unified primitive below to fill the buffer that wouldn't prevent another thread reading at a different position into the same buffer and trashing the contents from the POV of the first thread. Since the programming tools are essentially single-threaded it's not *that* bad a problem, unless you're debugging source access (I *think*).
That way there is no gap between setting the file position and
reading/writing. Some OS's (coughRISC OS) have this as the base api anyway.
tim
tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim "How many Teela Browns does it take to change a lightbulb?" "Stupid question."
On 21-01-2013, at 3:48 PM, Eliot Miranda eliot.miranda@gmail.com wrote:
Alas it bites at a slightly higher-level than that also. Yes, the decoupling of positioning and reading is a problem for thread-safety. But so is the single buffer and the single position. e.g. if one were to call your unified primitive below to fill the buffer that wouldn't prevent another thread reading at a different position into the same buffer and trashing the contents from the POV of the first thread. Since the programming tools are essentially single-threaded it's not *that* bad a problem, unless you're debugging source access (I *think*).
Gotta start somewhere. Bottom is often good. Then other people can build upon that.
tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Ubi dubium ibi libertas
On Mon, Jan 21, 2013 at 3:51 PM, tim Rowledge tim@rowledge.org wrote:
On 21-01-2013, at 3:48 PM, Eliot Miranda eliot.miranda@gmail.com wrote:
Alas it bites at a slightly higher-level than that also. Yes, the
decoupling of positioning and reading is a problem for thread-safety. But so is the single buffer and the single position. e.g. if one were to call your unified primitive below to fill the buffer that wouldn't prevent another thread reading at a different position into the same buffer and trashing the contents from the POV of the first thread. Since the programming tools are essentially single-threaded it's not *that* bad a problem, unless you're debugging source access (I *think*).
Gotta start somewhere. Bottom is often good. Then other people can build upon that.
Sure, but can't solve the immediate problem this way because it takes time for a VM change to percolate through.
On 21-01-2013, at 3:55 PM, Eliot Miranda eliot.miranda@gmail.com wrote:
Sure, but can't solve the immediate problem this way because it takes time for a VM change to percolate through.
I call that 'a forcing function'.
tim -- tim Rowledge; tim@rowledge.org; http://www.rowledge.org/tim Strange OpCodes: IXM: Initiate X-rated error Messages
Eliot, What is your opinion about this. Is this a problem good to solved? If so, what is the process, shall information about issue be filled into bugs.squeak.org? Vaidas 2013/1/22 Eliot Miranda eliot.miranda@gmail.com:
On Mon, Jan 21, 2013 at 3:51 PM, tim Rowledge tim@rowledge.org wrote:
On 21-01-2013, at 3:48 PM, Eliot Miranda eliot.miranda@gmail.com wrote:
Alas it bites at a slightly higher-level than that also. Yes, the decoupling of positioning and reading is a problem for thread-safety. But so is the single buffer and the single position. e.g. if one were to call your unified primitive below to fill the buffer that wouldn't prevent another thread reading at a different position into the same buffer and trashing the contents from the POV of the first thread. Since the programming tools are essentially single-threaded it's not *that* bad a problem, unless you're debugging source access (I *think*).
Gotta start somewhere. Bottom is often good. Then other people can build upon that.
Sure, but can't solve the immediate problem this way because it takes time for a VM change to percolate through. -- best, Eliot
On Mon, Jan 21, 2013 at 3:21 PM, Bert Freudenberg bert@freudenbergs.dewrote:
How do we make that single copy thread-safe?
IMO the only context in which its really important that source access is thread-safe is the debugger; one is debugging source access and the Debugger is fetching source from methods as one is debugging, hence screwing up the source access one is debugging. So what if the Debugger took care to save the readOnlyCopy's position around each source fetch and restored it? Wouldn't that be good enough and allow one to get away without making it thread-safe?
- Bert -
On 21.01.2013, at 15:06, Eliot Miranda eliot.miranda@gmail.com wrote:
IMO the readOnlyCopy logic is broken. e should modify SourceFiles to keep a *single* read-only copy alongside each writable copy, and supply that when asked for a read-only copy. The read-only copy is effectively a cache. It needs to be flushed when a source file changes and when the image starts up. Again I have code for this from a modified 3.9 image if anyone is interested. IMO this is important.
On Mon, Jan 21, 2013 at 11:35 AM, Vaidotas Didžbalis vaidasd@gmail.comwrote:
Seems instantaneous for me on Mac. Might be a platform issue? Which VM,
which OS?
- Bert -
Windows 7 64 bit, Cog Dec 12, 2012 bottleneck in method CurrentReadOnlySourceFiles>>defaultAction slow part is accessing changes file: time to run: [SourceFiles second readOnlyCopy] is ~ 100 ms. Caching is introduced here some time after 4.1. On XP 32 bit without antivirus there is no issue.. aha, perhaps this is antivirus related. Quite common in corporate policy in environments today. Will try tomorrow to disable antivirus and report. Vaidas
-- best, Eliot
This is ESET NOD32 Antivirus 4.2.7 Protection configured to a maximum. Squeak 4.4 is no longer fun to use then antivirus is running, while Squeak 4.1, or, I believe other release that does not have CurrentReadOnlySourceFiles, is no problem. Vaidas
squeak-dev@lists.squeakfoundation.org