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 <[hidden email]> 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:
|
In reply to this post by Frank Shearar-3
On 20.01.2013, at 10:23, Frank Shearar <[hidden email]> wrote: > On 20 January 2013 18:20, Vaidotas Didžbalis <[hidden email]> 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 <[hidden email]> wrote:
best, Eliot
|
How do we make that single copy thread-safe? - Bert - On 21.01.2013, at 15:06, Eliot Miranda <[hidden email]> wrote:
|
On 21-01-2013, at 3:21 PM, Bert Freudenberg <[hidden email]> 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; [hidden email]; http://www.rowledge.org/tim "How many Teela Browns does it take to change a lightbulb?" "Stupid question." |
In reply to this post by Bert Freudenberg
On Mon, Jan 21, 2013 at 3:21 PM, Bert Freudenberg <[hidden email]> wrote:
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?
best, Eliot
|
In reply to this post by timrowledge
Hi Tim,
On Mon, Jan 21, 2013 at 3:42 PM, tim Rowledge <[hidden email]> 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*).
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. best, Eliot
|
On 21-01-2013, at 3:48 PM, Eliot Miranda <[hidden email]> 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; [hidden email]; http://www.rowledge.org/tim Ubi dubium ibi libertas |
On Mon, Jan 21, 2013 at 3:51 PM, tim Rowledge <[hidden email]> wrote: --
Sure, but can't solve the immediate problem this way because it takes time for a VM change to percolate through.
best, Eliot
|
On 21-01-2013, at 3:55 PM, Eliot Miranda <[hidden email]> 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; [hidden email]; http://www.rowledge.org/tim Strange OpCodes: IXM: Initiate X-rated error Messages |
In reply to this post by vaidasd
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 |
In reply to this post by Eliot Miranda-2
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 <[hidden email]>: > > > > On Mon, Jan 21, 2013 at 3:51 PM, tim Rowledge <[hidden email]> wrote: >> >> >> On 21-01-2013, at 3:48 PM, Eliot Miranda <[hidden email]> 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 > > > |
http://bugs.squeak.org/view.php?id=7733
2013/1/30 Eliot Miranda <[hidden email]>: > > Personally I think it's important. But I want to hear form others whether > they find the hack I proposed acceptable or not. >> > On Mon, Jan 21, 2013 at 3:51 PM, tim Rowledge <[hidden email]> wrote: >> >> >> >> >> >> On 21-01-2013, at 3:48 PM, Eliot Miranda <[hidden email]> >> >> 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 >> > >> > >> > > > > > > -- > best, > Eliot |
Free forum by Nabble | Edit this page |