diff options
| author | Robert Pluim | 2020-01-24 14:11:44 +0100 |
|---|---|---|
| committer | Robert Pluim | 2020-03-02 09:59:34 +0100 |
| commit | fe1a447d52f548441d19af580ed11ef56d4459d2 (patch) | |
| tree | baa0419db5d8a8b7605c80b55cefe6fbefc0d7f6 /src/font.c | |
| parent | b42b894d1def7180ab715615116fe6af65b76bd8 (diff) | |
| download | emacs-fe1a447d52f548441d19af580ed11ef56d4459d2.tar.gz emacs-fe1a447d52f548441d19af580ed11ef56d4459d2.zip | |
Don't attempt to cache glyph metrics for FONT_INVALID_CODE
This was causing massive slowdown in redisplay when eg #xfe0f
(VARIATION SELECTOR-16) was present, as the cache ended up very large,
unused, and being recreated on every call to font_fill_lglyph_metrics
(Bug#39133).
* src/composite.c (fill_gstring_body): Hoist FONT_OBJECT_P check out
of loop. Calculate glyph code and check for FONT_INVALID_CODE before
calling font_fill_lglyph_metrics. Pass glyph code to it.
* src/font.c (font_fill_lglyph_metrics): Add code parameter, move
glyph code calculation up the call stack into fill_gstring_body.
* src/font.h: Adjust font_fill_lglyph_metrics prototype.
Diffstat (limited to 'src/font.c')
| -rw-r--r-- | src/font.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/src/font.c b/src/font.c index 2b90903c909..39ec1b3562a 100644 --- a/src/font.c +++ b/src/font.c | |||
| @@ -4416,10 +4416,8 @@ DEFUN ("clear-font-cache", Fclear_font_cache, Sclear_font_cache, 0, 0, 0, | |||
| 4416 | 4416 | ||
| 4417 | 4417 | ||
| 4418 | void | 4418 | void |
| 4419 | font_fill_lglyph_metrics (Lisp_Object glyph, Lisp_Object font_object) | 4419 | font_fill_lglyph_metrics (Lisp_Object glyph, struct font *font, unsigned int code) |
| 4420 | { | 4420 | { |
| 4421 | struct font *font = XFONT_OBJECT (font_object); | ||
| 4422 | unsigned code = font->driver->encode_char (font, LGLYPH_CHAR (glyph)); | ||
| 4423 | struct font_metrics metrics; | 4421 | struct font_metrics metrics; |
| 4424 | 4422 | ||
| 4425 | LGLYPH_SET_CODE (glyph, code); | 4423 | LGLYPH_SET_CODE (glyph, code); |