Branch: refs/heads/master
Home: https://github.com/yi-editor/yi
Commit: 9437fbccd98083e72d8ba83b18b41162138a952d
https://github.com/yi-editor/yi/commit/9437fbccd98083e72d8ba83b18b41162138a952d
Author: Mateusz Kowalczyk <[email protected]>
Date: 2014-09-29 (Mon, 29 Sep 2014)
Changed paths:
M yi/src/library/Yi/Buffer/Implementation.hs
M yi/src/library/Yi/Buffer/Misc.hs
M yi/src/library/Yi/Buffer/TextUnit.hs
M yi/yi.cabal
Log Message:
-----------
Optimise TextUnit to work over YiString
Additionally we optimise the case for going to EOL. I think we can still
do better however as a 100MB line takes 50 CPU seconds still (but it
does complete and doesn't OOM like before). It seems there's 10x memory
improvement but I suspect it's much more as evident by the where we
spend most of our resources in unrelated functions.
We can probably do a similar optimisation for words.
The biggest problem the previous approach had was looking for bounds on
character-by-character basis instead of making bigger jumps, in this
case just making one jump.
Some perf for a line with 10240 characters, after this commit:
Mon Sep 29 12:07 2014 Time and Allocation Profiling Report (Final)
C-e with betweenB offset, no move, optimise for lines
yi +RTS -P -hc -RTS --as=emacs -y /tmp /tmp/supershort
total time = 0.09 secs (87 ticks @ 1000 us, 1 processor)
total alloc = 35,225,576 bytes (excludes profiling overheads)
COST CENTRE MODULE %time %alloc ticks
bytes
render.\ Yi.UI.Pango 35.6 0.0 31
11952
updatePango Yi.UI.Pango 19.5 18.5 17
6523392
startNoMsgGtkHook Yi.UI.Pango 9.2 0.1 8
28472
appUserDataCond Yi.Paths 5.7 27.4 5
9636944
fmap Yi.Buffer.Misc 5.7 5.8 5
2044104
yiDriver Yi.Boot 5.7 27.7 5
9766192
newWindow Yi.UI.Pango 4.6 0.0 4
15616
>>= Yi.Keymap 2.3 0.3 2
>> 94992
CAF GHC.IO.Encoding.Iconv 1.1 0.0 1
232
canAccept Text.Regex.TDFA.CorePattern 1.1 0.0 1
1856
loadIcon Yi.UI.Pango.Utils 1.1 0.0 1
1936
askBuffer Yi.UI.Pango 1.1 0.0 1
0
listify Yi.String 1.1 0.0 1
6288
withGivenBufferAndWindow0.edit Yi.Editor 1.1 0.0 1
16416
checkFileChanges.\ Yi.Core 1.1 0.1 1
32752
checkFileChanges.fileModTime Yi.Core 1.1 0.1 1
34272
>>= Yi.Buffer.Misc 1.1 1.9 1
>> 657920
runBuffer.(...) Yi.Buffer.Misc 1.1 0.0 1
4256
editFile.fileToNewBuffer Yi.File 0.0 2.8 0
981432
Before this commit:
Mon Sep 29 05:41 2014 Time and Allocation Profiling Report (Final)
C-e in /tmp/supershort (10240 chars) pre boundry-fixes
yi +RTS -P -hc -RTS --as=emacs -y /tmp /tmp/supershort
total time = 0.61 secs (613 ticks @ 1000 us, 1 processor)
total alloc = 472,973,992 bytes (excludes profiling overheads)
COST CENTRE MODULE %time %alloc ticks bytes
>>= Yi.Buffer.Misc 23.3 19.6 143 92822024
getStream' Yi.Buffer.Implementation 15.7 42.2 96 199410456
startNoMsgGtkHook Yi.UI.Pango 5.7 0.0 35 30560
render.\ Yi.UI.Pango 4.6 0.0 28 11952
fmap Yi.Buffer.Misc 3.6 5.1 22 23918328
moveTo Yi.Buffer.Misc 3.3 3.4 20 16222288
getMarksRaw Yi.Buffer.Misc 2.9 4.2 18 19710880
getMarks Yi.Buffer.Misc 2.8 3.3 17 15601832
modifyMarkBI Yi.Buffer.Implementation 2.4 1.4 15 6636192
state Yi.Buffer.Misc 2.3 2.5 14 11638456
updatePango Yi.UI.Pango 2.1 1.4 13 6523392
yiDriver Yi.Boot 2.0 2.1 12 9766192
markPointA.getter Yi.Buffer.Misc 1.8 0.2 11 1149472
savingPrefCol Yi.Buffer.Misc 1.6 1.6 10 7455648
doUntilB.loop Yi.Buffer.TextUnit 1.5 0.7 9 3195032
savingPointB Yi.Buffer.Misc 1.5 1.1 9 5079616
forgetPreferCol Yi.Buffer.Misc 1.5 2.0 9 9340824
appUserDataCond Yi.Paths 1.3 2.0 8 9636944
moveN Yi.Buffer.Misc 1.3 0.5 8 2293984
markPointA Yi.Buffer.Misc 0.7 1.7 4 8205280
--
--
Yi development mailing list
[email protected]
http://groups.google.com/group/yi-devel
---
You received this message because you are subscribed to the Google Groups
"yi.devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.