* bug#233: Analysis of redisplay performance on Windows
@ 2008-07-25 0:22 Jason Rumney
2008-07-25 0:52 ` Lennart Borgman (gmail)
0 siblings, 1 reply; 2+ messages in thread
From: Jason Rumney @ 2008-07-25 0:22 UTC (permalink / raw
To: 233
The redisplay performance problems on Windows seem to be mostly caused
by the left_overwriting and right_overwriting functions. These functions
analyse all glyphs, one by one, before and after (respectively) the
current glyph string on the same row to see if the glyphs overlap the
current glyph string.
To determine the overlap for each glyph, it is necessary to encode it
into a glyph code point in the font used to display it, then measure its
text extents. Even with caching of the text extents, the Windows code
is still especially slow here because of the encoding to glyph code points.
Currently we cache glyph code points at the glyph_string level. Perhaps
caching them at the glyph row level would help, as we could then reuse
them after we have finished with the glyph string. Alternatively we
could keep all the glyph strings for the row until we are finished so we
could use glyph code points and other information from there. This might
reduce the number of iterations we need to find the left and right
overwriting glyphs, since we can check the glyph strings for overlaps
first, and only check the glyphs inside glyph strings that overlap.
There may also be a problem with the setting of
row->contains_overlapping_glyphs_p on Windows. The above functions
should only be called when that is set, but after inserting debugging
code I can see them being called frequently even when using fonts that
contain no overlapping glyphs (confirmed by further debugging code in
w32font_text_metrics).
^ permalink raw reply [flat|nested] 2+ messages in thread
* bug#233: Analysis of redisplay performance on Windows
2008-07-25 0:22 bug#233: Analysis of redisplay performance on Windows Jason Rumney
@ 2008-07-25 0:52 ` Lennart Borgman (gmail)
0 siblings, 0 replies; 2+ messages in thread
From: Lennart Borgman (gmail) @ 2008-07-25 0:52 UTC (permalink / raw
To: Jason Rumney, 233
Jason Rumney wrote:
> The redisplay performance problems on Windows seem to be mostly caused
> by the left_overwriting and right_overwriting functions. These functions
> analyse all glyphs, one by one, before and after (respectively) the
> current glyph string on the same row to see if the glyphs overlap the
> current glyph string.
>
> To determine the overlap for each glyph, it is necessary to encode it
> into a glyph code point in the font used to display it, then measure its
> text extents. Even with caching of the text extents, the Windows code
> is still especially slow here because of the encoding to glyph code points.
>
> Currently we cache glyph code points at the glyph_string level. Perhaps
> caching them at the glyph row level would help, as we could then reuse
> them after we have finished with the glyph string. Alternatively we
> could keep all the glyph strings for the row until we are finished so we
> could use glyph code points and other information from there. This might
> reduce the number of iterations we need to find the left and right
> overwriting glyphs, since we can check the glyph strings for overlaps
> first, and only check the glyphs inside glyph strings that overlap.
>
> There may also be a problem with the setting of
> row->contains_overlapping_glyphs_p on Windows. The above functions
> should only be called when that is set, but after inserting debugging
> code I can see them being called frequently even when using fonts that
> contain no overlapping glyphs (confirmed by further debugging code in
> w32font_text_metrics).
Is this handled differently on GNU/Linux?
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2008-07-25 0:52 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-07-25 0:22 bug#233: Analysis of redisplay performance on Windows Jason Rumney
2008-07-25 0:52 ` Lennart Borgman (gmail)
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.