Subject: bug#24634: 25.1 on Windows (native and cygwin+w32): high CPU load with "wavy" characters

From: Georges Ko <[email-masked]>
Date: Sat, 08 Oct 2016 01:01:40 +0800

Eli Zaretskii <[email-masked]> writes:

>> ﹏
>> 
>> 
>> 
>> ⌇
>
> What font(s) is/are used on your system to display these characters?

I did some tests with "runemacs -Q", with the following results as an
org-mode buffer.

I can mitigate the problem by using language environment "English" and
font "MingLiu-SIZE" (2nd step), the worst case being language
environment "UTF-8" and font "Courier NEw-SIZE" (3rd step).

* Summary
  |---------+----------+-------+------+------+---------------------------------------------------------|
  | Step    | current- | frame | WAVY | WAVY | Font of set-frame-font, WAVY LINE and WAVY LOW LINE     |
  |         | language | font  | LINE | LOW  | O=outline NNN=normal-normal-normal                      |
  |         | environ  |       |      | LINE |                                                         |
  |---------+----------+-------+------+------+---------------------------------------------------------|
  | Initial | English  | CN-10 |      |      | -O-Courier New-NNN-mono-13-*-*-*-c-*-iso8859-1 (#x1E)   |
  |         |          |       | OK   |      | -O-Symbola-NNN-serif-13-*-*-*-p-*-iso8859-1 (#x640)     |
  |         |          |       |      | NOK  | -O-MingLiU-NNN-mono-13-*-*-*-c-*-iso10646-1 (#x7096)    |
  |---------+----------+-------+------+------+---------------------------------------------------------|
  | (s-f-f  | English  | ML-10 |      |      | -O-MingLiU-NNN-mono-13-*-*-*-c-*-iso8859-1 (#x29)       |
  | ML-10)  |          |       | OK   |      | -O-MingLiU-NNN-mono-13-*-*-*-c-*-iso8859-1 (#x286)      |
  |         |          |       |      | OK   | -O-MingLiU-NNN-mono-13-*-*-*-c-*-gb2312.1980-0 (#x7096) |
  |---------+----------+-------+------+------+---------------------------------------------------------|
  | s-l-e   | UTF-8    | ML-10 |      |      | -O-MingLiU-NNN-mono-13-*-*-*-c-*-iso8859-1 (#x55)       |
  | UTF-8   |          |       | OK   |      | -O-MingLiU-NNN-mono-13-*-*-*-c-*-iso8859-1 (#x286)      |
  |         |          |       |      | NOK  | -O-MingLiU-NNN-mono-13-*-*-*-c-*-iso10646-1 (#x7096)    |
  |---------+----------+-------+------+------+---------------------------------------------------------|
  | (s-f-f  | UTF-8    | CN-10 |      |      | -O-Courier New-NNN-mono-13-*-*-*-c-*-iso8859-1 (#x03)   |
  | CN-10)  |          |       | NOK  |      | -O-Symbola-NNN-serif-13-*-*-*-p-*-iso8859-1 (#x640)     |
  |         |          |       |      | NOK  | -O-MingLiU-NNN-mono-13-*-*-*-c-*-iso10646-1 (#x7096)    |
  |---------+----------+-------+------+------+---------------------------------------------------------|
  - WAVY LINE    : script: symbol, category: .:Base
  - WAVY LOW LINE: script: han,    category: .:Base, c:Chinese

* Details

** Environment
  - C:\emacs-25.1-x86_64-w64-mingw32\bin\runemacs.exe -Q
  - current-language-environment -> "English"
  - w32-ansi-code-page -> 1252
  - Character info (C-u C-x =) of some ASCII character in *scratch*:
    #+BEGIN_SRC fundamental
                   position: 1 of 145 (0%), column: 0
                  character: ; (displayed as ;) (codepoint 59, #o73, #x3b)
          preferred charset: ascii (ASCII (ISO646 IRV))
      code point in charset: 0x3B
                     script: latin
                     syntax: <        which means: comment
                   category: .:Base, a:ASCII, l:Latin, r:Roman
                   to input: type "C-x 8 RET 3b" or "C-x 8 RET SEMICOLON"
                buffer code: #x3B
                  file code: #x3B (encoded by coding system iso-latin-1-dos)
                    display: by this font (glyph code)
          uniscribe:-outline-Courier New-normal-normal-normal-mono-13-*-*-*-c-*-iso8859-1 (#x1E)

      Character code properties: customize what to show
        name: SEMICOLON
        general-category: Po (Punctuation, Other)
        decomposition: (59) (';')

      There are text properties here:
        face                 font-lock-comment-delimiter-face
        fontified            nil
    #+END_SRC

** Initial setup
  - Insert "WAVY LINE": (insert-char 8967 1 t)
    - OK: no high CPU load
    - Character info of wavy line:
      #+BEGIN_SRC fundamental
                     position: 184 of 189 (97%), column: 0
                    character: ⌇ (displayed as ⌇) (codepoint 8967, #o21407, #x2307)
            preferred charset: unicode (Unicode (ISO10646))
        code point in charset: 0x2307
                       script: symbol
                       syntax: .        which means: punctuation
                     category: .:Base
                     to input: type "C-x 8 RET 2307" or "C-x 8 RET WAVY LINE"
                  buffer code: #xE2 #x8C #x87
                    file code: not encodable by coding system iso-latin-1-dos
                      display: by this font (glyph code)
            uniscribe:-outline-Symbola-normal-normal-normal-serif-13-*-*-*-p-*-iso8859-1 (#x640)

        Character code properties: customize what to show
          name: WAVY LINE
          general-category: So (Symbol, Other)
          decomposition: (8967) ('⌇')

        There are text properties here:
          fontified            t
      #+END_SRC
  - Insert "WAVY LOW LINE": (insert-char 65103 1 t)
    - NOK: high CPU load
    - Character info of wavy low line:
      #+BEGIN_SRC fundamental
                     position: 187 of 194 (96%), column: 0
                    character: ﹏ (displayed as ﹏) (codepoint 65103, #o177117, #xfe4f)
            preferred charset: unicode (Unicode (ISO10646))
        code point in charset: 0xFE4F
                       script: han
                       syntax: w        which means: word
                     category: .:Base, c:Chinese
                     to input: type "C-x 8 RET fe4f" or "C-x 8 RET WAVY LOW LINE"
                  buffer code: #xEF #xB9 #x8F
                    file code: not encodable by coding system iso-latin-1-dos
                      display: by this font (glyph code)
            uniscribe:-outline-MingLiU-normal-normal-normal-mono-13-*-*-*-c-*-iso10646-1 (#x7096)

        Character code properties: customize what to show
          name: WAVY LOW LINE
          old-name: SPACING WAVY UNDERSCORE
          general-category: Pc (Punctuation, Connector)
          decomposition: (compat 95) (compat '_')

        There are text properties here:
          fontified            t
      #+END_SRC
    - At this moment, Emacs is very jerky due to the presence of wavy 
      low line character.

** (set-frame-font "MingLiu-10")
  - Right after switching to this font, everything is smooth again!
  - Check "WAVY LINE":
    - OK: no high CPU load
    - Character info of wavy line:
      #+BEGIN_SRC fundamental
                     position: 184 of 194 (94%), column: 0
                    character: ⌇ (displayed as ⌇) (codepoint 8967, #o21407, #x2307)
            preferred charset: unicode (Unicode (ISO10646))
        code point in charset: 0x2307
                       script: symbol
                       syntax: .        which means: punctuation
                     category: .:Base
                     to input: type "C-x 8 RET 2307" or "C-x 8 RET WAVY LINE"
                  buffer code: #xE2 #x8C #x87
                    file code: not encodable by coding system iso-latin-1-dos
                      display: by this font (glyph code)
            uniscribe:-outline-MingLiU-normal-normal-normal-mono-13-*-*-*-c-*-iso8859-1 (#x286)

        Character code properties: customize what to show
          name: WAVY LINE
          general-category: So (Symbol, Other)
          decomposition: (8967) ('⌇')

        There are text properties here:
          fontified            t
      #+END_SRC
  - check "WAVY LOW LINE":
    - OK: no high CPU load
    - Character info of wavy low line:
      #+BEGIN_SRC fundamental
                     position: 187 of 194 (96%), column: 0
                    character: ﹏ (displayed as ﹏) (codepoint 65103, #o177117, #xfe4f)
            preferred charset: unicode (Unicode (ISO10646))
        code point in charset: 0xFE4F
                       script: han
                       syntax: w        which means: word
                     category: .:Base, c:Chinese
                     to input: type "C-x 8 RET fe4f" or "C-x 8 RET WAVY LOW LINE"
                  buffer code: #xEF #xB9 #x8F
                    file code: not encodable by coding system iso-latin-1-dos
                      display: by this font (glyph code)
            uniscribe:-outline-MingLiU-normal-normal-normal-mono-13-*-*-*-c-*-gb2312.1980-0 (#x7096)

        Character code properties: customize what to show
          name: WAVY LOW LINE
          old-name: SPACING WAVY UNDERSCORE
          general-category: Pc (Punctuation, Connector)
          decomposition: (compat 95) (compat '_')

        There are text properties here:
          fontified            t
      #+END_SRC

** (set-language-environment) to UTF-8:
  - Check "WAVY LINE":
    - OK: no high CPU load
    - Character info of wavy line:
      #+BEGIN_SRC fundamental
                     position: 184 of 196 (93%), column: 0
                    character: ⌇ (displayed as ⌇) (codepoint 8967, #o21407, #x2307)
            preferred charset: unicode-bmp (Unicode Basic Multilingual Plane (U+0000..U+FFFF))
        code point in charset: 0x2307
                       script: symbol
                       syntax: .        which means: punctuation
                     category: .:Base
                     to input: type "C-x 8 RET 2307" or "C-x 8 RET WAVY LINE"
                  buffer code: #xE2 #x8C #x87
                    file code: #xE2 #x8C #x87 (encoded by coding system utf-8-dos)
                      display: by this font (glyph code)
            uniscribe:-outline-MingLiU-normal-normal-normal-mono-13-*-*-*-c-*-iso8859-1 (#x286)

        Character code properties: customize what to show
          name: WAVY LINE
          general-category: So (Symbol, Other)
          decomposition: (8967) ('⌇')

        There are text properties here:
          fontified            t
      #+END_SRC
  - Check "WAVY LOW LINE":
    - NOK: high CPU load
    - Character info of wavy low line:
      #+BEGIN_SRC fundamental
                     position: 189 of 196 (96%), column: 0
                    character: ﹏ (displayed as ﹏) (codepoint 65103, #o177117, #xfe4f)
            preferred charset: unicode-bmp (Unicode Basic Multilingual Plane (U+0000..U+FFFF))
        code point in charset: 0xFE4F
                       script: han
                       syntax: w        which means: word
                     category: .:Base, c:Chinese
                     to input: type "C-x 8 RET fe4f" or "C-x 8 RET WAVY LOW LINE"
                  buffer code: #xEF #xB9 #x8F
                    file code: #xEF #xB9 #x8F (encoded by coding system utf-8-dos)
                      display: by this font (glyph code)
            uniscribe:-outline-MingLiU-normal-normal-normal-mono-13-*-*-*-c-*-iso10646-1 (#x7096)

        Character code properties: customize what to show
          name: WAVY LOW LINE
          old-name: SPACING WAVY UNDERSCORE
          general-category: Pc (Punctuation, Connector)
          decomposition: (compat 95) (compat '_')

        There are text properties here:
          fontified            t
      #+END_SRC

** (set-frame-font "Courier New-10")
  - Check "WAVY LINE":
    - NOK: high CPU load
    - Character info of wavy line:
      #+BEGIN_SRC fundamental
                     position: 184 of 196 (93%), column: 0
                    character: ⌇ (displayed as ⌇) (codepoint 8967, #o21407, #x2307)
            preferred charset: unicode-bmp (Unicode Basic Multilingual Plane (U+0000..U+FFFF))
        code point in charset: 0x2307
                       script: symbol
                       syntax: .        which means: punctuation
                     category: .:Base
                     to input: type "C-x 8 RET 2307" or "C-x 8 RET WAVY LINE"
                  buffer code: #xE2 #x8C #x87
                    file code: #xE2 #x8C #x87 (encoded by coding system utf-8-dos)
                      display: by this font (glyph code)
            uniscribe:-outline-Symbola-normal-normal-normal-serif-13-*-*-*-p-*-iso8859-1 (#x640)

        Character code properties: customize what to show
          name: WAVY LINE
          general-category: So (Symbol, Other)
          decomposition: (8967) ('⌇')

        There are text properties here:
          fontified            t
      #+END_SRC
  - Check "WAVY LOW LINE":
    - NOK: high CPU load
    - Character info of wavy low line:
      #+BEGIN_SRC fundamental
                     position: 189 of 196 (96%), column: 0
                    character: ﹏ (displayed as ﹏) (codepoint 65103, #o177117, #xfe4f)
            preferred charset: unicode-bmp (Unicode Basic Multilingual Plane (U+0000..U+FFFF))
        code point in charset: 0xFE4F
                       script: han
                       syntax: w        which means: word
                     category: .:Base, c:Chinese
                     to input: type "C-x 8 RET fe4f" or "C-x 8 RET WAVY LOW LINE"
                  buffer code: #xEF #xB9 #x8F
                    file code: #xEF #xB9 #x8F (encoded by coding system utf-8-dos)
                      display: by this font (glyph code)
            uniscribe:-outline-MingLiU-normal-normal-normal-mono-13-*-*-*-c-*-iso10646-1 (#x7096)

        Character code properties: customize what to show
          name: WAVY LOW LINE
          old-name: SPACING WAVY UNDERSCORE
          general-category: Pc (Punctuation, Connector)
          decomposition: (compat 95) (compat '_')

        There are text properties here:
          fontified            t
      #+END_SRC
-- 
 Georges Ko                     [email-masked]                      2016-10-08