[Bug 30627] New: Appending text to a large richedit is very slow

wine-bugs at winehq.org wine-bugs at winehq.org
Tue May 8 19:50:25 CDT 2012


http://bugs.winehq.org/show_bug.cgi?id=30627

             Bug #: 30627
           Summary: Appending text to a large richedit is very slow
           Product: Wine
           Version: 1.5.3
          Platform: x86
        OS/Version: Linux
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: richedit
        AssignedTo: wine-bugs at winehq.org
        ReportedBy: dank at kegel.com
    Classification: Unclassified


Although the pathological case reported in bug 30614 is now fixed,
all is not yet well.

When repeatedly appending lines, builtin riched20 starts out about 3x slower
than native, and at 40k lines, is about 10x slower than native.
This is painful for long-running apps that use richedit for verbose logs.

(Measured with the attached program and today's git on my i5, 
appending 1000 lines to an empty richedit control takes
builtin hidden:  907 ms
builtin visible: 4862 ms 
native hidden:   368 ms 
native visible:  4530 ms
Appending 1000 lines to a richedit control which already contains 40000 lines
takes:
builtin hidden:  22169 ms 
builtin visible: 33002 ms 
native hidden:   1750 ms 
native visible:  4807 ms )

Building wine's riched20 with -O1 -fno-inline and profiling with 'perf' shows
   62.60%  ME_WrapMarkedParagraphs
   12.07%  ME_PaintContent
    9.99%  ME_InvalidateMarkedParagraph
at 50k lines.

Initial inspection seems to show that most of the time in
ME_WrapMarkedParagraphs is in the function itself, not in any
called functions.

Adding trace statements to all callers of ME_WrapMarkedParagraphs, I see
one call during EM_EXSETSEL:
ME_Repaint Calling ME_WrapMarkedParagraphs
and four calls during EM_REPLACESEL:
ME_UpdateRepaint Calling ME_WrapMarkedParagraphs
ME_UpdateScrollBar Calling ME_WrapMarkedParagraphs
ME_Repaint Calling ME_WrapMarkedParagraphs
ME_UpdateScrollBar Calling ME_WrapMarkedParagraphs

This is the case whether the window is hidden or not.

Bug 13355 (which Dylan says is separate, since it's about richedit 
being slow on a single large call to WM_SETTEXT) suggests in comment 14
ways to remove some redundant calls to ME_WrapMarkedParagraphs,
and to let one of them return early.

In addition to those ideas, for this bug, it would be useful if
ME_WrapMarkedParagraphs (and ME_InvalidateMarkedParagraph) could 
avoid making a linear scan across all paragraphs.

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.



More information about the wine-bugs mailing list