From unknown Wed Jun 18 23:14:39 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#41200 <41200@debbugs.gnu.org> To: bug#41200 <41200@debbugs.gnu.org> Subject: Status: Displaying a tooltip with x-show-tip gets very slow as more faces are defined Reply-To: bug#41200 <41200@debbugs.gnu.org> Date: Thu, 19 Jun 2025 06:14:39 +0000 retitle 41200 Displaying a tooltip with x-show-tip gets very slow as more f= aces are defined reassign 41200 emacs submitter 41200 Cl=C3=A9ment Pit-Claudel severity 41200 normal tag 41200 patch moreinfo thanks From debbugs-submit-bounces@debbugs.gnu.org Tue May 12 00:30:35 2020 Received: (at submit) by debbugs.gnu.org; 12 May 2020 04:30:35 +0000 Received: from localhost ([127.0.0.1]:53879 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jYMYr-0006Mk-SJ for submit@debbugs.gnu.org; Tue, 12 May 2020 00:30:35 -0400 Received: from lists.gnu.org ([209.51.188.17]:43248) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jYMYo-0006MZ-EO for submit@debbugs.gnu.org; Tue, 12 May 2020 00:30:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37396) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jYMYo-0002cs-7V for bug-gnu-emacs@gnu.org; Tue, 12 May 2020 00:30:30 -0400 Received: from mail-qt1-x82e.google.com ([2607:f8b0:4864:20::82e]:38518) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jYMYk-0004HM-Sm for bug-gnu-emacs@gnu.org; Tue, 12 May 2020 00:30:29 -0400 Received: by mail-qt1-x82e.google.com with SMTP id i68so10043388qtb.5 for ; Mon, 11 May 2020 21:30:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=to:from:subject:message-id:date:user-agent:mime-version :content-language; bh=z1C+rxoZyx3NQElvIUvKQXSv3XhhXvUjCEp+IpdY+MA=; b=ZJvk6nfGlfa31ME/IfeZmXjlp2VZ+vNgNTJUsIX55VratugnIeh0Ip1B8HcbrcSlFT rco6wKIx8uwjlyE2+JWrBMwZRJYmhrrHlE5q9EQvb9K0BlIO0teQQa8cFscrZDGiDKi+ u7lalclnnjSdz3ZW+vjTMH5PaVgb/sy1GjsZ/2iK6zZQSYdbtXza/3Tf+/Sq7R82zqb6 xXJlT1h4iBckpUzHyikRBrmsnXxSJkacnLP+dw6w+ovcLSuENp2HO/bKJ/8vbheCoSju NPY1zPedhtIiAXrGTzQCRrdsVP+HeqttfwOX07ubqGNrKxyAjjWtPdD+MHJdurvEew48 S+FQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:from:subject:message-id:date:user-agent :mime-version:content-language; bh=z1C+rxoZyx3NQElvIUvKQXSv3XhhXvUjCEp+IpdY+MA=; b=dP39PuVr++lj2IJ6BiL34Roz64H3aOUGXiL6foff01isDXT82X5wbVE5laat1iM7Ji ixu4yD+uExiLrLbRy/dRVA5n3waxEunh5hX0NzUk8DgcZAqWcTxa7rRXLqhoPb8+nnjX fq0kG1dx1VhFy7x9AT1735uly11MRz5ralc8TLd3PgGziBF+8d2MgYwjDkRyuXIi81Dv mVCMES6+9L9R95kr66qCs4Z6j/oYQXbB8V/9nQEOi7+XVmiii6C4ZoCXWRgt0/WJ7mKv LRlaMq+gDoC8Tu8DGuLCyZWoSLnn9DS4sLvPLulBFb405TykG0jjl2py+4mtBPoPFdeJ GpJQ== X-Gm-Message-State: AGi0PuYKNrhV3fRqQ9FBGE3iD5si0EcFHo6eetpKGYo2GRnp3nShabwe GjPXHbEuApW+9r9Lpt/WB4wH2y3nX+Y= X-Google-Smtp-Source: APiQypJ1qs/h/NtWnO/l6i9mvZo5vXYw2U9piUscDq30xOG0PLqWptn/Jd64r2j0Ti//GKBkQep6Vg== X-Received: by 2002:aed:3aa3:: with SMTP id o32mr20858456qte.364.1589257825266; Mon, 11 May 2020 21:30:25 -0700 (PDT) Received: from ?IPv6:2601:184:4180:66e7:4d17:b25e:8d9:2188? ([2601:184:4180:66e7:4d17:b25e:8d9:2188]) by smtp.googlemail.com with ESMTPSA id g11sm10030722qkk.106.2020.05.11.21.30.24 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 11 May 2020 21:30:24 -0700 (PDT) To: bug-gnu-emacs From: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= Subject: Displaying a tooltip with x-show-tip gets very slow as more faces are defined Message-ID: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> Date: Tue, 12 May 2020 00:30:23 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------6B3BC16CBBDC72B8800AD96F" Content-Language: en-GB Received-SPF: pass client-ip=2607:f8b0:4864:20::82e; envelope-from=cpitclaudel@gmail.com; helo=mail-qt1-x82e.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-Spam-Score: 0.7 (/) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.3 (--) This is a multi-part message in MIME format. --------------6B3BC16CBBDC72B8800AD96F Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Hi all, I've recently noticed that opening a tooltip on my machine takes about 0.5s when x-gtk-use-system-tooltips is set to nil. I bisected my config, and… nothing. It's not one package: instead, it's an accumulation of small slowdowns. Is seems that defining a face makes x-show-tip a tiny bit slower, but these effects stack. Here is a repro: (defun my-def-many-faces (nfaces) (dotimes (i nfaces) (custom-declare-face (intern (format "my-face-%d" i)) '((t)) "A face." :group 'basic-faces))) (defun my-bench-x-tip (nfaces) (setq x-gtk-use-system-tooltips nil) (my-def-many-faces nfaces) (benchmark-run 1 (x-show-tip "Test" (selected-frame) nil 5 nil nil))) (my-bench-x-tip 100) ;; ⇒ (0.035934318 1 0.015908304000000012) (my-bench-x-tip 200) ;; ⇒ (0.049593474 1 0.01508625500000002) (my-bench-x-tip 300) ;; ⇒ (0.094929297 2 0.03376510099999999) (my-bench-x-tip 400) ;; ⇒ (0.094900665 2 0.03254889999999999) (my-bench-x-tip 500) ;; ⇒ (0.118183442 2 0.03218763600000002) (my-bench-x-tip 600) ;; ⇒ (0.154759438 3 0.04923829399999996) (my-bench-x-tip 700) ;; ⇒ (0.183241646 3 0.04901039700000004) (my-bench-x-tip 800) ;; ⇒ (0.212218872 3 0.050182316999999976) (my-bench-x-tip 900) ;; ⇒ (0.248743542 3 0.04915146899999995) (my-bench-x-tip 1000) ;; ⇒ (0.29221963 3 0.04943874300000006) (my-bench-x-tip 1100) ;; ⇒ (0.334084605 3 0.05403986499999991) (my-bench-x-tip 1200) ;; ⇒ (0.397292289 4 0.06869684599999992) (my-bench-x-tip 1300) ;; ⇒ (0.442873256 4 0.06865671799999995) (my-bench-x-tip 1400) ;; ⇒ (0.492474982 4 0.06888139900000001) (my-bench-x-tip 1500) ;; ⇒ (0.579180262 5 0.08583425400000011) (my-bench-x-tip 1600) ;; ⇒ (0.63504114 5 0.08973981699999989) (my-bench-x-tip 1700) ;; ⇒ (0.723722857 5 0.09094433899999999) (my-bench-x-tip 1800) ;; ⇒ (0.791952279 5 0.08777533800000015) (my-bench-x-tip 1900) ;; ⇒ (0.902377982 6 0.10768666300000018) (my-bench-x-tip 2000) ;; ⇒ (0.998815784 6 0.11384837999999986) Be sure to run it in emacs -q, not emacs -Q, because emacs -Q ignores X resources and hence skips the body of make-face-x-resource-internal, which contributes greatly to the issue. For some reasons the effects are a bit worse in my config — roughly a factor 3 to 5 (I have 600 faces defined, and each tooltip takes .5s to display). The profiles below suggest that face-spec-set-2 is called in my config, but not in my repro, which could explain part of the difference. This is what the profile in emacs -q looks like: - command-execute 1742 97% - call-interactively 1742 97% - funcall-interactively 1720 96% - eval-defun 1711 95% - elisp--eval-defun 1711 95% - eval-region 1711 95% - let 1711 95% - list 1711 95% - let 1711 95% - x-show-tip 1708 95% - face-set-after-frame-default 1708 95% - face-spec-recalc 1654 92% - make-face-x-resource-internal 1414 78% - set-face-attributes-from-resources 1413 78% - set-face-attribute-from-resource 1394 77% - face-name 1353 75% - check-face 1348 75% facep 1344 75% - face-spec-reset-face 239 13% - apply 239 13% set-face-attribute 234 13% And this is what it looks like in my config: - command-execute 1423 87% - call-interactively 1423 87% - apply 1423 87% - call-interactively@ido-cr+-record-current-command 1423 87% - apply 1423 87% - # 1423 87% - funcall-interactively 1423 87% - eval-defun 1345 83% - apply 1345 83% - # 1345 83% - elisp--eval-defun 1345 83% - eval-region 1344 83% - apply 1344 83% - # 1344 83% - endless/eval-overlay 1344 83% - apply 1343 83% - # 1343 83% - my-bench-x-tip 1343 83% - let 1280 79% - list 1280 79% - let 1280 79% - x-show-tip 1277 78% - face-set-after-frame-default 1277 78% - face-spec-recalc 1218 75% - face-spec-set-2 673 41% - apply 672 41% - set-face-attribute 671 41% - internal-set-lisp-face-attribute 669 41% - frame-set-background-mode 651 40% - face-spec-recalc 411 25% - make-face-x-resource-internal 352 21% - set-face-attributes-from-resources 350 21% - set-face-attribute-from-resource 343 21% - face-name 312 19% - check-face 309 19% facep 308 19% + face-spec-reset-face 56 3% face-spec-choose 1 0% + face-spec-set-2 1 0% - face-attr-match-p 235 14% face-attribute 235 14% - make-face-x-resource-internal 321 19% - set-face-attributes-from-resources 320 19% - set-face-attribute-from-resource 316 19% - face-name 296 18% - check-face 294 18% facep 293 18% - face-spec-reset-face 223 13% - apply 223 13% set-face-attribute 219 13% + my-def-many-faces 63 3% + cider--make-result-overlay 1 0% + end-of-defun 1 0% + smex 78 4% + ... 188 11% + timer-event-handler 4 0% + redisplay_internal (C function) 2 0% + flyspell-post-command-hook 1 0% I've attached both profiles. Clément. Configured using: 'configure -C' Configured features: XPM JPEG TIFF GIF PNG RSVG CAIRO SOUND GPM DBUS GSETTINGS GLIB NOTIFY INOTIFY ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE HARFBUZZ M17N_FLT LIBOTF ZLIB TOOLKIT_SCROLL_BARS GTK3 X11 XDBE XIM MODULES THREADS LIBSYSTEMD JSON PDUMPER LCMS2 GMP Important settings: value of $LC_MONETARY: en_DK.UTF-8 value of $LC_NUMERIC: en_DK.UTF-8 value of $LC_TIME: en_DK.UTF-8 value of $LANG: en_US.UTF-8 value of $XMODIFIERS: @im=ibus locale-coding-system: utf-8-unix Major mode: Fundamental Minor modes in effect: tooltip-mode: t global-eldoc-mode: t electric-indent-mode: t mouse-wheel-mode: t tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t blink-cursor-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t buffer-read-only: t line-number-mode: t transient-mark-mode: t Load-path shadows: None found. Features: (shadow sort mail-extr emacsbug message rmc puny dired dired-loaddefs format-spec rfc822 mml easymenu mml-sec password-cache epa derived epg epg-config gnus-util rmail rmail-loaddefs text-property-search time-date subr-x seq byte-opt gv bytecomp byte-compile cconv mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader cl-loaddefs cl-lib sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode elisp-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch timer select scroll-bar mouse jit-lock font-lock syntax facemenu font-core term/tty-colors frame minibuffer cl-generic cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite charscript charprop case-table epa-hook jka-cmpr-hook help simple abbrev obarray cl-preloaded nadvice loaddefs button faces cus-face macroexp files text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote threads dbusbind inotify lcms2 dynamic-setting system-font-setting font-render-setting cairo move-toolbar gtk x-toolkit x multi-tty make-network-process emacs) Memory information: ((conses 16 48162 5363) (symbols 48 6344 1) (strings 32 15896 1092) (string-bytes 1 517314) (vectors 16 10213) (vector-slots 8 140571 9444) (floats 8 19 41) (intervals 56 230 7) (buffers 992 11)) --------------6B3BC16CBBDC72B8800AD96F Content-Type: text/plain; charset=UTF-8; name="tip.emacs-q.prof" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="tip.emacs-q.prof" Cltwcm9maWxlci1wcm9maWxlICIyNC4zIiBjcHUgI3MoaGFzaC10YWJsZSBzaXplIDY1IHRl c3QgZXF1YWwgcmVoYXNoLXNpemUgMS41IHJlaGFzaC10aHJlc2hvbGQgMC44MTI1IGRhdGEg KFtyZWRpc3BsYXkgc2l0LWZvciBleGVjdXRlLWV4dGVuZGVkLWNvbW1hbmQgZnVuY2FsbC1p bnRlcmFjdGl2ZWx5IGNhbGwtaW50ZXJhY3RpdmVseSBjb21tYW5kLWV4ZWN1dGUgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsXSA0IFtzaXQtZm9yIGV4ZWN1dGUt ZXh0ZW5kZWQtY29tbWFuZCBmdW5jYWxsLWludGVyYWN0aXZlbHkgY2FsbC1pbnRlcmFjdGl2 ZWx5IGNvbW1hbmQtZXhlY3V0ZSBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsXSAzIFtsZXQgbGlzdCBsZXQgZXZhbC1yZWdpb24gZWxpc3AtLWV2YWwtZGVm dW4gZXZhbC1kZWZ1biBmdW5jYWxsLWludGVyYWN0aXZlbHkgY2FsbC1pbnRlcmFjdGl2ZWx5 IGNvbW1hbmQtZXhlY3V0ZSBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWxdIDMgW2ZhY2Vw IGNoZWNrLWZhY2UgZmFjZS1uYW1lIHNldC1mYWNlLWF0dHJpYnV0ZS1mcm9tLXJlc291cmNl IHNldC1mYWNlLWF0dHJpYnV0ZXMtZnJvbS1yZXNvdXJjZXMgbWFrZS1mYWNlLXgtcmVzb3Vy Y2UtaW50ZXJuYWwgZmFjZS1zcGVjLXJlY2FsYyBmYWNlLXNldC1hZnRlci1mcmFtZS1kZWZh dWx0IHgtc2hvdy10aXAgbGV0IGxpc3QgbGV0IGV2YWwtcmVnaW9uIGVsaXNwLS1ldmFsLWRl ZnVuIGV2YWwtZGVmdW4gZnVuY2FsbC1pbnRlcmFjdGl2ZWx5XSAxMzQ0IFtzZXQtZmFjZS1h dHRyaWJ1dGUtZnJvbS1yZXNvdXJjZSBzZXQtZmFjZS1hdHRyaWJ1dGVzLWZyb20tcmVzb3Vy Y2VzIG1ha2UtZmFjZS14LXJlc291cmNlLWludGVybmFsIGZhY2Utc3BlYy1yZWNhbGMgZmFj ZS1zZXQtYWZ0ZXItZnJhbWUtZGVmYXVsdCB4LXNob3ctdGlwIGxldCBsaXN0IGxldCBldmFs LXJlZ2lvbiBlbGlzcC0tZXZhbC1kZWZ1biBldmFsLWRlZnVuIGZ1bmNhbGwtaW50ZXJhY3Rp dmVseSBjYWxsLWludGVyYWN0aXZlbHkgY29tbWFuZC1leGVjdXRlIG5pbF0gNDEgW2ZhY2Ut bmFtZSBzZXQtZmFjZS1hdHRyaWJ1dGUtZnJvbS1yZXNvdXJjZSBzZXQtZmFjZS1hdHRyaWJ1 dGVzLWZyb20tcmVzb3VyY2VzIG1ha2UtZmFjZS14LXJlc291cmNlLWludGVybmFsIGZhY2Ut c3BlYy1yZWNhbGMgZmFjZS1zZXQtYWZ0ZXItZnJhbWUtZGVmYXVsdCB4LXNob3ctdGlwIGxl dCBsaXN0IGxldCBldmFsLXJlZ2lvbiBlbGlzcC0tZXZhbC1kZWZ1biBldmFsLWRlZnVuIGZ1 bmNhbGwtaW50ZXJhY3RpdmVseSBjYWxsLWludGVyYWN0aXZlbHkgY29tbWFuZC1leGVjdXRl XSA1IFtzZXQtZmFjZS1hdHRyaWJ1dGVzLWZyb20tcmVzb3VyY2VzIG1ha2UtZmFjZS14LXJl c291cmNlLWludGVybmFsIGZhY2Utc3BlYy1yZWNhbGMgZmFjZS1zZXQtYWZ0ZXItZnJhbWUt ZGVmYXVsdCB4LXNob3ctdGlwIGxldCBsaXN0IGxldCBldmFsLXJlZ2lvbiBlbGlzcC0tZXZh bC1kZWZ1biBldmFsLWRlZnVuIGZ1bmNhbGwtaW50ZXJhY3RpdmVseSBjYWxsLWludGVyYWN0 aXZlbHkgY29tbWFuZC1leGVjdXRlIG5pbCBuaWxdIDE5IFtmYWNlLXNldC1hZnRlci1mcmFt ZS1kZWZhdWx0IHgtc2hvdy10aXAgbGV0IGxpc3QgbGV0IGV2YWwtcmVnaW9uIGVsaXNwLS1l dmFsLWRlZnVuIGV2YWwtZGVmdW4gZnVuY2FsbC1pbnRlcmFjdGl2ZWx5IGNhbGwtaW50ZXJh Y3RpdmVseSBjb21tYW5kLWV4ZWN1dGUgbmlsIG5pbCBuaWwgbmlsIG5pbF0gNTQgW3NldC1m YWNlLWF0dHJpYnV0ZSBhcHBseSBmYWNlLXNwZWMtcmVzZXQtZmFjZSBmYWNlLXNwZWMtcmVj YWxjIGZhY2Utc2V0LWFmdGVyLWZyYW1lLWRlZmF1bHQgeC1zaG93LXRpcCBsZXQgbGlzdCBs ZXQgZXZhbC1yZWdpb24gZWxpc3AtLWV2YWwtZGVmdW4gZXZhbC1kZWZ1biBmdW5jYWxsLWlu dGVyYWN0aXZlbHkgY2FsbC1pbnRlcmFjdGl2ZWx5IGNvbW1hbmQtZXhlY3V0ZSBuaWxdIDIz NCBbZmFjZS1zcGVjLXJlY2FsYyBmYWNlLXNldC1hZnRlci1mcmFtZS1kZWZhdWx0IHgtc2hv dy10aXAgbGV0IGxpc3QgbGV0IGV2YWwtcmVnaW9uIGVsaXNwLS1ldmFsLWRlZnVuIGV2YWwt ZGVmdW4gZnVuY2FsbC1pbnRlcmFjdGl2ZWx5IGNhbGwtaW50ZXJhY3RpdmVseSBjb21tYW5k LWV4ZWN1dGUgbmlsIG5pbCBuaWwgbmlsXSAxIFtjaGVjay1mYWNlIGZhY2UtbmFtZSBzZXQt ZmFjZS1hdHRyaWJ1dGUtZnJvbS1yZXNvdXJjZSBzZXQtZmFjZS1hdHRyaWJ1dGVzLWZyb20t cmVzb3VyY2VzIG1ha2UtZmFjZS14LXJlc291cmNlLWludGVybmFsIGZhY2Utc3BlYy1yZWNh bGMgZmFjZS1zZXQtYWZ0ZXItZnJhbWUtZGVmYXVsdCB4LXNob3ctdGlwIGxldCBsaXN0IGxl dCBldmFsLXJlZ2lvbiBlbGlzcC0tZXZhbC1kZWZ1biBldmFsLWRlZnVuIGZ1bmNhbGwtaW50 ZXJhY3RpdmVseSBjYWxsLWludGVyYWN0aXZlbHldIDQgW21ha2UtZmFjZS14LXJlc291cmNl LWludGVybmFsIGZhY2Utc3BlYy1yZWNhbGMgZmFjZS1zZXQtYWZ0ZXItZnJhbWUtZGVmYXVs dCB4LXNob3ctdGlwIGxldCBsaXN0IGxldCBldmFsLXJlZ2lvbiBlbGlzcC0tZXZhbC1kZWZ1 biBldmFsLWRlZnVuIGZ1bmNhbGwtaW50ZXJhY3RpdmVseSBjYWxsLWludGVyYWN0aXZlbHkg Y29tbWFuZC1leGVjdXRlIG5pbCBuaWwgbmlsXSAxIFthcHBseSBmYWNlLXNwZWMtcmVzZXQt ZmFjZSBmYWNlLXNwZWMtcmVjYWxjIGZhY2Utc2V0LWFmdGVyLWZyYW1lLWRlZmF1bHQgeC1z aG93LXRpcCBsZXQgbGlzdCBsZXQgZXZhbC1yZWdpb24gZWxpc3AtLWV2YWwtZGVmdW4gZXZh bC1kZWZ1biBmdW5jYWxsLWludGVyYWN0aXZlbHkgY2FsbC1pbnRlcmFjdGl2ZWx5IGNvbW1h bmQtZXhlY3V0ZSBuaWwgbmlsXSA1IFtuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWxdIDIgW3Rvb2x0aXAtaGlkZSBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p bF0gMSBbY29tcGxldGluZy1yZWFkLWRlZmF1bHQgY29tcGxldGluZy1yZWFkIHJlYWQtZXh0 ZW5kZWQtY29tbWFuZCBieXRlLWNvZGUgY2FsbC1pbnRlcmFjdGl2ZWx5IGNvbW1hbmQtZXhl Y3V0ZSBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWxdIDEzIFtyZWFk LWZyb20tbWluaWJ1ZmZlciBjb21wbGV0aW5nLXJlYWQtZGVmYXVsdCBjb21wbGV0aW5nLXJl YWQgcmVhZC1leHRlbmRlZC1jb21tYW5kIGJ5dGUtY29kZSBjYWxsLWludGVyYWN0aXZlbHkg Y29tbWFuZC1leGVjdXRlIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsXSA5 IFtwcm9maWxlci1yZXBvcnQgZnVuY2FsbC1pbnRlcmFjdGl2ZWx5IGNhbGwtaW50ZXJhY3Rp dmVseSBjb21tYW5kLWV4ZWN1dGUgZXhlY3V0ZS1leHRlbmRlZC1jb21tYW5kIGZ1bmNhbGwt aW50ZXJhY3RpdmVseSBjYWxsLWludGVyYWN0aXZlbHkgY29tbWFuZC1leGVjdXRlIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWxdIDIgW0F1dG9tYXRpY1wgR0NdIDQ3KSkgKDI0 MjUwIDc3OTcgNjM3NTIgNTIwMDAwKSBuaWxdCg== --------------6B3BC16CBBDC72B8800AD96F Content-Type: text/plain; charset=UTF-8; name="tip.personal-config.prof" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="tip.personal-config.prof" Cltwcm9maWxlci1wcm9maWxlICIyNC4zIiBjcHUgI3MoaGFzaC10YWJsZSBzaXplIDY1IHRl c3QgZXF1YWwgcmVoYXNoLXNpemUgMS41IHJlaGFzaC10aHJlc2hvbGQgMC44MTI1IGRhdGEg KFtzZXQtZmFjZS1hdHRyaWJ1dGUgcGFnZS1icmVhay1saW5lcy0tdXBkYXRlLWRpc3BsYXkt dGFibGUgbWFwYyBwYWdlLWJyZWFrLWxpbmVzLS11cGRhdGUtZGlzcGxheS10YWJsZXMgcmVk aXNwbGF5X2ludGVybmFsXCBcKENcIGZ1bmN0aW9uXCkgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbF0g MSBbbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsXSAxNDAgW2lzcGVs bC1zZW5kLXN0cmluZyBmbHlzcGVsbC13b3JkIGZseXNwZWxsLXBvc3QtY29tbWFuZC1ob29r IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbF0gMSBbYXBwbHkgZWxkb2MtbWluaWJ1ZmZl ci1tZXNzYWdlIGVsZG9jLW1lc3NhZ2UgZWxkb2MtcHJpbnQtY3VycmVudC1zeW1ib2wtaW5m byAiIzxjb21waWxlZCAweDE2ZjY5NzVhZGFjZTNhZGY+IiBhcHBseSB0aW1lci1ldmVudC1o YW5kbGVyIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsXSAyIFtzeW50YXgtcHBzcyBiZWdpbm5pbmctb2YtZGVmdW4t cmF3IGVuZC1vZi1kZWZ1biBlbGlzcC0tZXZhbC1kZWZ1biAiIzxjb21waWxlZCAweDFmYTVk MWRjMzlkZWJjOWU+IiBhcHBseSBldmFsLWRlZnVuIGZ1bmNhbGwtaW50ZXJhY3RpdmVseSAi IzxzdWJyIGNhbGwtaW50ZXJhY3RpdmVseT4iIGFwcGx5IGNhbGwtaW50ZXJhY3RpdmVseUBp ZG8tY3IrLXJlY29yZC1jdXJyZW50LWNvbW1hbmQgYXBwbHkgY2FsbC1pbnRlcmFjdGl2ZWx5 IGNvbW1hbmQtZXhlY3V0ZSBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls XSAxIFtlbGlzcC0tYmVnaW5uaW5nLW9mLXNleHAgZWxpc3AtLWZuc3ltLWluLWN1cnJlbnQt c2V4cCBlbGlzcC1lbGRvYy1kb2N1bWVudGF0aW9uLWZ1bmN0aW9uIHJ1bi1ob29rLXdpdGgt YXJncy11bnRpbC1zdWNjZXNzIGVsZG9jLWRvY3VtZW50YXRpb24tZGVmYXVsdCBlbGRvYy1w cmludC1jdXJyZW50LXN5bWJvbC1pbmZvICIjPGNvbXBpbGVkIDB4MTZmNjk3NWFkYWNlM2Fk Zj4iIGFwcGx5IHRpbWVyLWV2ZW50LWhhbmRsZXIgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsXSAxIFtpbnRlcm4gY3VzdG9tLWRl Y2xhcmUtZmFjZSB3aGlsZSBsZXQgbXktZGVmLW1hbnktZmFjZXMgbXktYmVuY2gteC10aXAg IiM8c3ViciBldmFsLXJlZ2lvbj4iIGFwcGx5IGVuZGxlc3MvZXZhbC1vdmVybGF5ICIjPGxh bWJkYSAtMHgxMjA5MzBkODQ3MTE5MTM4PiIgYXBwbHkgZXZhbC1yZWdpb24gZWxpc3AtLWV2 YWwtZGVmdW4gIiM8Y29tcGlsZWQgMHgxZmE1ZDFkYzM5ZGViYzllPiIgYXBwbHkgZXZhbC1k ZWZ1biBmdW5jYWxsLWludGVyYWN0aXZlbHkgIiM8c3ViciBjYWxsLWludGVyYWN0aXZlbHk+ IiBhcHBseSBjYWxsLWludGVyYWN0aXZlbHlAaWRvLWNyKy1yZWNvcmQtY3VycmVudC1jb21t YW5kIGFwcGx5IGNhbGwtaW50ZXJhY3RpdmVseSBjb21tYW5kLWV4ZWN1dGUgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbF0gMSBbbWFr ZS1mYWNlIG1ha2UtZW1wdHktZmFjZSBmYWNlLXNwZWMtc2V0IGN1c3RvbS1kZWNsYXJlLWZh Y2Ugd2hpbGUgbGV0IG15LWRlZi1tYW55LWZhY2VzIG15LWJlbmNoLXgtdGlwICIjPHN1YnIg ZXZhbC1yZWdpb24+IiBhcHBseSBlbmRsZXNzL2V2YWwtb3ZlcmxheSAiIzxsYW1iZGEgLTB4 MTIwOTMwZDg0NzExOTEzOD4iIGFwcGx5IGV2YWwtcmVnaW9uIGVsaXNwLS1ldmFsLWRlZnVu ICIjPGNvbXBpbGVkIDB4MWZhNWQxZGMzOWRlYmM5ZT4iIGFwcGx5IGV2YWwtZGVmdW4gZnVu Y2FsbC1pbnRlcmFjdGl2ZWx5ICIjPHN1YnIgY2FsbC1pbnRlcmFjdGl2ZWx5PiIgYXBwbHkg Y2FsbC1pbnRlcmFjdGl2ZWx5QGlkby1jcistcmVjb3JkLWN1cnJlbnQtY29tbWFuZCBhcHBs eSBjYWxsLWludGVyYWN0aXZlbHkgY29tbWFuZC1leGVjdXRlIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsXSAxOCBbc2V0LWZhY2UtYXR0cmlidXRl LWZyb20tcmVzb3VyY2Ugc2V0LWZhY2UtYXR0cmlidXRlcy1mcm9tLXJlc291cmNlcyBtYWtl LWZhY2UteC1yZXNvdXJjZS1pbnRlcm5hbCBmYWNlLXNwZWMtcmVjYWxjIGZhY2Utc3BlYy1z ZXQgY3VzdG9tLWRlY2xhcmUtZmFjZSB3aGlsZSBsZXQgbXktZGVmLW1hbnktZmFjZXMgbXkt YmVuY2gteC10aXAgIiM8c3ViciBldmFsLXJlZ2lvbj4iIGFwcGx5IGVuZGxlc3MvZXZhbC1v dmVybGF5ICIjPGxhbWJkYSAtMHgxMjA5MzBkODQ3MTE5MTM4PiIgYXBwbHkgZXZhbC1yZWdp b24gZWxpc3AtLWV2YWwtZGVmdW4gIiM8Y29tcGlsZWQgMHgxZmE1ZDFkYzM5ZGViYzllPiIg YXBwbHkgZXZhbC1kZWZ1biBmdW5jYWxsLWludGVyYWN0aXZlbHkgIiM8c3ViciBjYWxsLWlu dGVyYWN0aXZlbHk+IiBhcHBseSBjYWxsLWludGVyYWN0aXZlbHlAaWRvLWNyKy1yZWNvcmQt Y3VycmVudC1jb21tYW5kIGFwcGx5IGNhbGwtaW50ZXJhY3RpdmVseSBjb21tYW5kLWV4ZWN1 dGUgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsXSA1IFtjdXN0b20t aGFuZGxlLWtleXdvcmQgY3VzdG9tLWhhbmRsZS1hbGwta2V5d29yZHMgY3VzdG9tLWRlY2xh cmUtZmFjZSB3aGlsZSBsZXQgbXktZGVmLW1hbnktZmFjZXMgbXktYmVuY2gteC10aXAgIiM8 c3ViciBldmFsLXJlZ2lvbj4iIGFwcGx5IGVuZGxlc3MvZXZhbC1vdmVybGF5ICIjPGxhbWJk YSAtMHgxMjA5MzBkODQ3MTE5MTM4PiIgYXBwbHkgZXZhbC1yZWdpb24gZWxpc3AtLWV2YWwt ZGVmdW4gIiM8Y29tcGlsZWQgMHgxZmE1ZDFkYzM5ZGViYzllPiIgYXBwbHkgZXZhbC1kZWZ1 biBmdW5jYWxsLWludGVyYWN0aXZlbHkgIiM8c3ViciBjYWxsLWludGVyYWN0aXZlbHk+IiBh cHBseSBjYWxsLWludGVyYWN0aXZlbHlAaWRvLWNyKy1yZWNvcmQtY3VycmVudC1jb21tYW5k IGFwcGx5IGNhbGwtaW50ZXJhY3RpdmVseSBjb21tYW5kLWV4ZWN1dGUgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsXSAxMyBbZmFjZXAgbWFr ZS1mYWNlIG1ha2UtZW1wdHktZmFjZSBmYWNlLXNwZWMtc2V0IGN1c3RvbS1kZWNsYXJlLWZh Y2Ugd2hpbGUgbGV0IG15LWRlZi1tYW55LWZhY2VzIG15LWJlbmNoLXgtdGlwICIjPHN1YnIg ZXZhbC1yZWdpb24+IiBhcHBseSBlbmRsZXNzL2V2YWwtb3ZlcmxheSAiIzxsYW1iZGEgLTB4 MTIwOTMwZDg0NzExOTEzOD4iIGFwcGx5IGV2YWwtcmVnaW9uIGVsaXNwLS1ldmFsLWRlZnVu ICIjPGNvbXBpbGVkIDB4MWZhNWQxZGMzOWRlYmM5ZT4iIGFwcGx5IGV2YWwtZGVmdW4gZnVu Y2FsbC1pbnRlcmFjdGl2ZWx5ICIjPHN1YnIgY2FsbC1pbnRlcmFjdGl2ZWx5PiIgYXBwbHkg Y2FsbC1pbnRlcmFjdGl2ZWx5QGlkby1jcistcmVjb3JkLWN1cnJlbnQtY29tbWFuZCBhcHBs eSBjYWxsLWludGVyYWN0aXZlbHkgY29tbWFuZC1leGVjdXRlIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWxdIDE1IFtzZXQtZmFjZS1hdHRyaWJ1dGVzLWZy b20tcmVzb3VyY2VzIG1ha2UtZmFjZS14LXJlc291cmNlLWludGVybmFsIG1ha2UtZmFjZSBt YWtlLWVtcHR5LWZhY2UgZmFjZS1zcGVjLXNldCBjdXN0b20tZGVjbGFyZS1mYWNlIHdoaWxl IGxldCBteS1kZWYtbWFueS1mYWNlcyBteS1iZW5jaC14LXRpcCAiIzxzdWJyIGV2YWwtcmVn aW9uPiIgYXBwbHkgZW5kbGVzcy9ldmFsLW92ZXJsYXkgIiM8bGFtYmRhIC0weDEyMDkzMGQ4 NDcxMTkxMzg+IiBhcHBseSBldmFsLXJlZ2lvbiBlbGlzcC0tZXZhbC1kZWZ1biAiIzxjb21w aWxlZCAweDFmYTVkMWRjMzlkZWJjOWU+IiBhcHBseSBldmFsLWRlZnVuIGZ1bmNhbGwtaW50 ZXJhY3RpdmVseSAiIzxzdWJyIGNhbGwtaW50ZXJhY3RpdmVseT4iIGFwcGx5IGNhbGwtaW50 ZXJhY3RpdmVseUBpZG8tY3IrLXJlY29yZC1jdXJyZW50LWNvbW1hbmQgYXBwbHkgY2FsbC1p bnRlcmFjdGl2ZWx5IGNvbW1hbmQtZXhlY3V0ZSBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWxdIDEgW2ZhY2UtbmFtZSBzZXQtZmFjZS1hdHRyaWJ1dGUtZnJvbS1y ZXNvdXJjZSBzZXQtZmFjZS1hdHRyaWJ1dGVzLWZyb20tcmVzb3VyY2VzIG1ha2UtZmFjZS14 LXJlc291cmNlLWludGVybmFsIG1ha2UtZmFjZSBtYWtlLWVtcHR5LWZhY2UgZmFjZS1zcGVj LXNldCBjdXN0b20tZGVjbGFyZS1mYWNlIHdoaWxlIGxldCBteS1kZWYtbWFueS1mYWNlcyBt eS1iZW5jaC14LXRpcCAiIzxzdWJyIGV2YWwtcmVnaW9uPiIgYXBwbHkgZW5kbGVzcy9ldmFs LW92ZXJsYXkgIiM8bGFtYmRhIC0weDEyMDkzMGQ4NDcxMTkxMzg+IiBhcHBseSBldmFsLXJl Z2lvbiBlbGlzcC0tZXZhbC1kZWZ1biAiIzxjb21waWxlZCAweDFmYTVkMWRjMzlkZWJjOWU+ IiBhcHBseSBldmFsLWRlZnVuIGZ1bmNhbGwtaW50ZXJhY3RpdmVseSAiIzxzdWJyIGNhbGwt aW50ZXJhY3RpdmVseT4iIGFwcGx5IGNhbGwtaW50ZXJhY3RpdmVseUBpZG8tY3IrLXJlY29y ZC1jdXJyZW50LWNvbW1hbmQgYXBwbHkgY2FsbC1pbnRlcmFjdGl2ZWx5IGNvbW1hbmQtZXhl Y3V0ZSBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsXSAxIFthcHBseSBmYWNlLXNw ZWMtcmVzZXQtZmFjZSBmYWNlLXNwZWMtcmVjYWxjIGZhY2Utc3BlYy1zZXQgY3VzdG9tLWRl Y2xhcmUtZmFjZSB3aGlsZSBsZXQgbXktZGVmLW1hbnktZmFjZXMgbXktYmVuY2gteC10aXAg IiM8c3ViciBldmFsLXJlZ2lvbj4iIGFwcGx5IGVuZGxlc3MvZXZhbC1vdmVybGF5ICIjPGxh bWJkYSAtMHgxMjA5MzBkODQ3MTE5MTM4PiIgYXBwbHkgZXZhbC1yZWdpb24gZWxpc3AtLWV2 YWwtZGVmdW4gIiM8Y29tcGlsZWQgMHgxZmE1ZDFkYzM5ZGViYzllPiIgYXBwbHkgZXZhbC1k ZWZ1biBmdW5jYWxsLWludGVyYWN0aXZlbHkgIiM8c3ViciBjYWxsLWludGVyYWN0aXZlbHk+ IiBhcHBseSBjYWxsLWludGVyYWN0aXZlbHlAaWRvLWNyKy1yZWNvcmQtY3VycmVudC1jb21t YW5kIGFwcGx5IGNhbGwtaW50ZXJhY3RpdmVseSBjb21tYW5kLWV4ZWN1dGUgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbF0gMSBbZmFjZXAgY2hlY2stZmFj ZSBmYWNlLW5hbWUgc2V0LWZhY2UtYXR0cmlidXRlLWZyb20tcmVzb3VyY2Ugc2V0LWZhY2Ut YXR0cmlidXRlcy1mcm9tLXJlc291cmNlcyBtYWtlLWZhY2UteC1yZXNvdXJjZS1pbnRlcm5h bCBtYWtlLWZhY2UgbWFrZS1lbXB0eS1mYWNlIGZhY2Utc3BlYy1zZXQgY3VzdG9tLWRlY2xh cmUtZmFjZSB3aGlsZSBsZXQgbXktZGVmLW1hbnktZmFjZXMgbXktYmVuY2gteC10aXAgIiM8 c3ViciBldmFsLXJlZ2lvbj4iIGFwcGx5IGVuZGxlc3MvZXZhbC1vdmVybGF5ICIjPGxhbWJk YSAtMHgxMjA5MzBkODQ3MTE5MTM4PiIgYXBwbHkgZXZhbC1yZWdpb24gZWxpc3AtLWV2YWwt ZGVmdW4gIiM8Y29tcGlsZWQgMHgxZmE1ZDFkYzM5ZGViYzllPiIgYXBwbHkgZXZhbC1kZWZ1 biBmdW5jYWxsLWludGVyYWN0aXZlbHkgIiM8c3ViciBjYWxsLWludGVyYWN0aXZlbHk+IiBh cHBseSBjYWxsLWludGVyYWN0aXZlbHlAaWRvLWNyKy1yZWNvcmQtY3VycmVudC1jb21tYW5k IGFwcGx5IGNhbGwtaW50ZXJhY3RpdmVseSBjb21tYW5kLWV4ZWN1dGUgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWxdIDEgW21ha2UtZmFjZS14LXJlc291cmNlLWludGVybmFsIG1ha2UtZmFj ZSBtYWtlLWVtcHR5LWZhY2UgZmFjZS1zcGVjLXNldCBjdXN0b20tZGVjbGFyZS1mYWNlIHdo aWxlIGxldCBteS1kZWYtbWFueS1mYWNlcyBteS1iZW5jaC14LXRpcCAiIzxzdWJyIGV2YWwt cmVnaW9uPiIgYXBwbHkgZW5kbGVzcy9ldmFsLW92ZXJsYXkgIiM8bGFtYmRhIC0weDEyMDkz MGQ4NDcxMTkxMzg+IiBhcHBseSBldmFsLXJlZ2lvbiBlbGlzcC0tZXZhbC1kZWZ1biAiIzxj b21waWxlZCAweDFmYTVkMWRjMzlkZWJjOWU+IiBhcHBseSBldmFsLWRlZnVuIGZ1bmNhbGwt aW50ZXJhY3RpdmVseSAiIzxzdWJyIGNhbGwtaW50ZXJhY3RpdmVseT4iIGFwcGx5IGNhbGwt aW50ZXJhY3RpdmVseUBpZG8tY3IrLXJlY29yZC1jdXJyZW50LWNvbW1hbmQgYXBwbHkgY2Fs bC1pbnRlcmFjdGl2ZWx5IGNvbW1hbmQtZXhlY3V0ZSBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsXSAyIFtzZXQtZmFjZS1hdHRyaWJ1dGUtZnJvbS1yZXNv dXJjZSBzZXQtZmFjZS1hdHRyaWJ1dGVzLWZyb20tcmVzb3VyY2VzIG1ha2UtZmFjZS14LXJl c291cmNlLWludGVybmFsIG1ha2UtZmFjZSBtYWtlLWVtcHR5LWZhY2UgZmFjZS1zcGVjLXNl dCBjdXN0b20tZGVjbGFyZS1mYWNlIHdoaWxlIGxldCBteS1kZWYtbWFueS1mYWNlcyBteS1i ZW5jaC14LXRpcCAiIzxzdWJyIGV2YWwtcmVnaW9uPiIgYXBwbHkgZW5kbGVzcy9ldmFsLW92 ZXJsYXkgIiM8bGFtYmRhIC0weDEyMDkzMGQ4NDcxMTkxMzg+IiBhcHBseSBldmFsLXJlZ2lv biBlbGlzcC0tZXZhbC1kZWZ1biAiIzxjb21waWxlZCAweDFmYTVkMWRjMzlkZWJjOWU+IiBh cHBseSBldmFsLWRlZnVuIGZ1bmNhbGwtaW50ZXJhY3RpdmVseSAiIzxzdWJyIGNhbGwtaW50 ZXJhY3RpdmVseT4iIGFwcGx5IGNhbGwtaW50ZXJhY3RpdmVseUBpZG8tY3IrLXJlY29yZC1j dXJyZW50LWNvbW1hbmQgYXBwbHkgY2FsbC1pbnRlcmFjdGl2ZWx5IGNvbW1hbmQtZXhlY3V0 ZSBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbF0gMyBbY2hlY2stZmFjZSBm YWNlLW5hbWUgc2V0LWZhY2UtYXR0cmlidXRlLWZyb20tcmVzb3VyY2Ugc2V0LWZhY2UtYXR0 cmlidXRlcy1mcm9tLXJlc291cmNlcyBtYWtlLWZhY2UteC1yZXNvdXJjZS1pbnRlcm5hbCBt YWtlLWZhY2UgbWFrZS1lbXB0eS1mYWNlIGZhY2Utc3BlYy1zZXQgY3VzdG9tLWRlY2xhcmUt ZmFjZSB3aGlsZSBsZXQgbXktZGVmLW1hbnktZmFjZXMgbXktYmVuY2gteC10aXAgIiM8c3Vi ciBldmFsLXJlZ2lvbj4iIGFwcGx5IGVuZGxlc3MvZXZhbC1vdmVybGF5ICIjPGxhbWJkYSAt MHgxMjA5MzBkODQ3MTE5MTM4PiIgYXBwbHkgZXZhbC1yZWdpb24gZWxpc3AtLWV2YWwtZGVm dW4gIiM8Y29tcGlsZWQgMHgxZmE1ZDFkYzM5ZGViYzllPiIgYXBwbHkgZXZhbC1kZWZ1biBm dW5jYWxsLWludGVyYWN0aXZlbHkgIiM8c3ViciBjYWxsLWludGVyYWN0aXZlbHk+IiBhcHBs eSBjYWxsLWludGVyYWN0aXZlbHlAaWRvLWNyKy1yZWNvcmQtY3VycmVudC1jb21tYW5kIGFw cGx5IGNhbGwtaW50ZXJhY3RpdmVseSBjb21tYW5kLWV4ZWN1dGUgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsXSAxIFtmYWNlbWVudS1hZGQtbmV3LWZhY2UgbWFrZS1mYWNlIG1ha2Ut ZW1wdHktZmFjZSBmYWNlLXNwZWMtc2V0IGN1c3RvbS1kZWNsYXJlLWZhY2Ugd2hpbGUgbGV0 IG15LWRlZi1tYW55LWZhY2VzIG15LWJlbmNoLXgtdGlwICIjPHN1YnIgZXZhbC1yZWdpb24+ IiBhcHBseSBlbmRsZXNzL2V2YWwtb3ZlcmxheSAiIzxsYW1iZGEgLTB4MTIwOTMwZDg0NzEx OTEzOD4iIGFwcGx5IGV2YWwtcmVnaW9uIGVsaXNwLS1ldmFsLWRlZnVuICIjPGNvbXBpbGVk IDB4MWZhNWQxZGMzOWRlYmM5ZT4iIGFwcGx5IGV2YWwtZGVmdW4gZnVuY2FsbC1pbnRlcmFj dGl2ZWx5ICIjPHN1YnIgY2FsbC1pbnRlcmFjdGl2ZWx5PiIgYXBwbHkgY2FsbC1pbnRlcmFj dGl2ZWx5QGlkby1jcistcmVjb3JkLWN1cnJlbnQtY29tbWFuZCBhcHBseSBjYWxsLWludGVy YWN0aXZlbHkgY29tbWFuZC1leGVjdXRlIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWxdIDEgW2xldCBsaXN0IGxldCBteS1iZW5jaC14LXRpcCAiIzxzdWJy IGV2YWwtcmVnaW9uPiIgYXBwbHkgZW5kbGVzcy9ldmFsLW92ZXJsYXkgIiM8bGFtYmRhIC0w eDEyMDkzMGQ4NDcxMTkxMzg+IiBhcHBseSBldmFsLXJlZ2lvbiBlbGlzcC0tZXZhbC1kZWZ1 biAiIzxjb21waWxlZCAweDFmYTVkMWRjMzlkZWJjOWU+IiBhcHBseSBldmFsLWRlZnVuIGZ1 bmNhbGwtaW50ZXJhY3RpdmVseSAiIzxzdWJyIGNhbGwtaW50ZXJhY3RpdmVseT4iIGFwcGx5 IGNhbGwtaW50ZXJhY3RpdmVseUBpZG8tY3IrLXJlY29yZC1jdXJyZW50LWNvbW1hbmQgYXBw bHkgY2FsbC1pbnRlcmFjdGl2ZWx5IGNvbW1hbmQtZXhlY3V0ZSBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWxdIDMgW2Zy YW1lLXNldC1iYWNrZ3JvdW5kLW1vZGUgaW50ZXJuYWwtc2V0LWxpc3AtZmFjZS1hdHRyaWJ1 dGUgc2V0LWZhY2UtYXR0cmlidXRlIGFwcGx5IGZhY2Utc3BlYy1zZXQtMiBmYWNlLXNwZWMt cmVjYWxjIGZhY2Utc2V0LWFmdGVyLWZyYW1lLWRlZmF1bHQgeC1zaG93LXRpcCBsZXQgbGlz dCBsZXQgbXktYmVuY2gteC10aXAgIiM8c3ViciBldmFsLXJlZ2lvbj4iIGFwcGx5IGVuZGxl c3MvZXZhbC1vdmVybGF5ICIjPGxhbWJkYSAtMHgxMjA5MzBkODQ3MTE5MTM4PiIgYXBwbHkg ZXZhbC1yZWdpb24gZWxpc3AtLWV2YWwtZGVmdW4gIiM8Y29tcGlsZWQgMHgxZmE1ZDFkYzM5 ZGViYzllPiIgYXBwbHkgZXZhbC1kZWZ1biBmdW5jYWxsLWludGVyYWN0aXZlbHkgIiM8c3Vi ciBjYWxsLWludGVyYWN0aXZlbHk+IiBhcHBseSBjYWxsLWludGVyYWN0aXZlbHlAaWRvLWNy Ky1yZWNvcmQtY3VycmVudC1jb21tYW5kIGFwcGx5IGNhbGwtaW50ZXJhY3RpdmVseSBjb21t YW5kLWV4ZWN1dGUgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbF0gNSBbZmFjZS1h dHRyaWJ1dGUgZmFjZS1hdHRyLW1hdGNoLXAgZnJhbWUtc2V0LWJhY2tncm91bmQtbW9kZSBp bnRlcm5hbC1zZXQtbGlzcC1mYWNlLWF0dHJpYnV0ZSBzZXQtZmFjZS1hdHRyaWJ1dGUgYXBw bHkgZmFjZS1zcGVjLXNldC0yIGZhY2Utc3BlYy1yZWNhbGMgZmFjZS1zZXQtYWZ0ZXItZnJh bWUtZGVmYXVsdCB4LXNob3ctdGlwIGxldCBsaXN0IGxldCBteS1iZW5jaC14LXRpcCAiIzxz dWJyIGV2YWwtcmVnaW9uPiIgYXBwbHkgZW5kbGVzcy9ldmFsLW92ZXJsYXkgIiM8bGFtYmRh IC0weDEyMDkzMGQ4NDcxMTkxMzg+IiBhcHBseSBldmFsLXJlZ2lvbiBlbGlzcC0tZXZhbC1k ZWZ1biAiIzxjb21waWxlZCAweDFmYTVkMWRjMzlkZWJjOWU+IiBhcHBseSBldmFsLWRlZnVu IGZ1bmNhbGwtaW50ZXJhY3RpdmVseSAiIzxzdWJyIGNhbGwtaW50ZXJhY3RpdmVseT4iIGFw cGx5IGNhbGwtaW50ZXJhY3RpdmVseUBpZG8tY3IrLXJlY29yZC1jdXJyZW50LWNvbW1hbmQg YXBwbHkgY2FsbC1pbnRlcmFjdGl2ZWx5IGNvbW1hbmQtZXhlY3V0ZSBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbF0gMjM1IFtpbnRlcm5hbC1zZXQtbGlzcC1mYWNlLWF0dHJpYnV0ZSBzZXQt ZmFjZS1hdHRyaWJ1dGUgYXBwbHkgZmFjZS1zcGVjLXNldC0yIGZhY2Utc3BlYy1yZWNhbGMg ZmFjZS1zZXQtYWZ0ZXItZnJhbWUtZGVmYXVsdCB4LXNob3ctdGlwIGxldCBsaXN0IGxldCBt eS1iZW5jaC14LXRpcCAiIzxzdWJyIGV2YWwtcmVnaW9uPiIgYXBwbHkgZW5kbGVzcy9ldmFs LW92ZXJsYXkgIiM8bGFtYmRhIC0weDEyMDkzMGQ4NDcxMTkxMzg+IiBhcHBseSBldmFsLXJl Z2lvbiBlbGlzcC0tZXZhbC1kZWZ1biAiIzxjb21waWxlZCAweDFmYTVkMWRjMzlkZWJjOWU+ IiBhcHBseSBldmFsLWRlZnVuIGZ1bmNhbGwtaW50ZXJhY3RpdmVseSAiIzxzdWJyIGNhbGwt aW50ZXJhY3RpdmVseT4iIGFwcGx5IGNhbGwtaW50ZXJhY3RpdmVseUBpZG8tY3IrLXJlY29y ZC1jdXJyZW50LWNvbW1hbmQgYXBwbHkgY2FsbC1pbnRlcmFjdGl2ZWx5IGNvbW1hbmQtZXhl Y3V0ZSBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbF0gMTggW2ZhY2VwIGNo ZWNrLWZhY2UgZmFjZS1uYW1lIHNldC1mYWNlLWF0dHJpYnV0ZS1mcm9tLXJlc291cmNlIHNl dC1mYWNlLWF0dHJpYnV0ZXMtZnJvbS1yZXNvdXJjZXMgbWFrZS1mYWNlLXgtcmVzb3VyY2Ut aW50ZXJuYWwgZmFjZS1zcGVjLXJlY2FsYyBmcmFtZS1zZXQtYmFja2dyb3VuZC1tb2RlIGlu dGVybmFsLXNldC1saXNwLWZhY2UtYXR0cmlidXRlIHNldC1mYWNlLWF0dHJpYnV0ZSBhcHBs eSBmYWNlLXNwZWMtc2V0LTIgZmFjZS1zcGVjLXJlY2FsYyBmYWNlLXNldC1hZnRlci1mcmFt ZS1kZWZhdWx0IHgtc2hvdy10aXAgbGV0IGxpc3QgbGV0IG15LWJlbmNoLXgtdGlwICIjPHN1 YnIgZXZhbC1yZWdpb24+IiBhcHBseSBlbmRsZXNzL2V2YWwtb3ZlcmxheSAiIzxsYW1iZGEg LTB4MTIwOTMwZDg0NzExOTEzOD4iIGFwcGx5IGV2YWwtcmVnaW9uIGVsaXNwLS1ldmFsLWRl ZnVuICIjPGNvbXBpbGVkIDB4MWZhNWQxZGMzOWRlYmM5ZT4iIGFwcGx5IGV2YWwtZGVmdW4g ZnVuY2FsbC1pbnRlcmFjdGl2ZWx5ICIjPHN1YnIgY2FsbC1pbnRlcmFjdGl2ZWx5PiIgYXBw bHkgY2FsbC1pbnRlcmFjdGl2ZWx5QGlkby1jcistcmVjb3JkLWN1cnJlbnQtY29tbWFuZCBh cHBseSBjYWxsLWludGVyYWN0aXZlbHkgY29tbWFuZC1leGVjdXRlIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbF0gMzA4IFtzZXQt ZmFjZS1hdHRyaWJ1dGUtZnJvbS1yZXNvdXJjZSBzZXQtZmFjZS1hdHRyaWJ1dGVzLWZyb20t cmVzb3VyY2VzIG1ha2UtZmFjZS14LXJlc291cmNlLWludGVybmFsIGZhY2Utc3BlYy1yZWNh bGMgZnJhbWUtc2V0LWJhY2tncm91bmQtbW9kZSBpbnRlcm5hbC1zZXQtbGlzcC1mYWNlLWF0 dHJpYnV0ZSBzZXQtZmFjZS1hdHRyaWJ1dGUgYXBwbHkgZmFjZS1zcGVjLXNldC0yIGZhY2Ut c3BlYy1yZWNhbGMgZmFjZS1zZXQtYWZ0ZXItZnJhbWUtZGVmYXVsdCB4LXNob3ctdGlwIGxl dCBsaXN0IGxldCBteS1iZW5jaC14LXRpcCAiIzxzdWJyIGV2YWwtcmVnaW9uPiIgYXBwbHkg ZW5kbGVzcy9ldmFsLW92ZXJsYXkgIiM8bGFtYmRhIC0weDEyMDkzMGQ4NDcxMTkxMzg+IiBh cHBseSBldmFsLXJlZ2lvbiBlbGlzcC0tZXZhbC1kZWZ1biAiIzxjb21waWxlZCAweDFmYTVk MWRjMzlkZWJjOWU+IiBhcHBseSBldmFsLWRlZnVuIGZ1bmNhbGwtaW50ZXJhY3RpdmVseSAi IzxzdWJyIGNhbGwtaW50ZXJhY3RpdmVseT4iIGFwcGx5IGNhbGwtaW50ZXJhY3RpdmVseUBp ZG8tY3IrLXJlY29yZC1jdXJyZW50LWNvbW1hbmQgYXBwbHkgY2FsbC1pbnRlcmFjdGl2ZWx5 IGNvbW1hbmQtZXhlY3V0ZSBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWxdIDMxIFtzZXQtZmFjZS1hdHRyaWJ1 dGUgYXBwbHkgZmFjZS1zcGVjLXJlc2V0LWZhY2UgZmFjZS1zcGVjLXJlY2FsYyBmcmFtZS1z ZXQtYmFja2dyb3VuZC1tb2RlIGludGVybmFsLXNldC1saXNwLWZhY2UtYXR0cmlidXRlIHNl dC1mYWNlLWF0dHJpYnV0ZSBhcHBseSBmYWNlLXNwZWMtc2V0LTIgZmFjZS1zcGVjLXJlY2Fs YyBmYWNlLXNldC1hZnRlci1mcmFtZS1kZWZhdWx0IHgtc2hvdy10aXAgbGV0IGxpc3QgbGV0 IG15LWJlbmNoLXgtdGlwICIjPHN1YnIgZXZhbC1yZWdpb24+IiBhcHBseSBlbmRsZXNzL2V2 YWwtb3ZlcmxheSAiIzxsYW1iZGEgLTB4MTIwOTMwZDg0NzExOTEzOD4iIGFwcGx5IGV2YWwt cmVnaW9uIGVsaXNwLS1ldmFsLWRlZnVuICIjPGNvbXBpbGVkIDB4MWZhNWQxZGMzOWRlYmM5 ZT4iIGFwcGx5IGV2YWwtZGVmdW4gZnVuY2FsbC1pbnRlcmFjdGl2ZWx5ICIjPHN1YnIgY2Fs bC1pbnRlcmFjdGl2ZWx5PiIgYXBwbHkgY2FsbC1pbnRlcmFjdGl2ZWx5QGlkby1jcistcmVj b3JkLWN1cnJlbnQtY29tbWFuZCBhcHBseSBjYWxsLWludGVyYWN0aXZlbHkgY29tbWFuZC1l eGVjdXRlIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbF0gNTMgW3NldC1mYWNlLWF0dHJpYnV0ZXMtZnJvbS1y ZXNvdXJjZXMgbWFrZS1mYWNlLXgtcmVzb3VyY2UtaW50ZXJuYWwgZmFjZS1zcGVjLXJlY2Fs YyBmcmFtZS1zZXQtYmFja2dyb3VuZC1tb2RlIGludGVybmFsLXNldC1saXNwLWZhY2UtYXR0 cmlidXRlIHNldC1mYWNlLWF0dHJpYnV0ZSBhcHBseSBmYWNlLXNwZWMtc2V0LTIgZmFjZS1z cGVjLXJlY2FsYyBmYWNlLXNldC1hZnRlci1mcmFtZS1kZWZhdWx0IHgtc2hvdy10aXAgbGV0 IGxpc3QgbGV0IG15LWJlbmNoLXgtdGlwICIjPHN1YnIgZXZhbC1yZWdpb24+IiBhcHBseSBl bmRsZXNzL2V2YWwtb3ZlcmxheSAiIzxsYW1iZGEgLTB4MTIwOTMwZDg0NzExOTEzOD4iIGFw cGx5IGV2YWwtcmVnaW9uIGVsaXNwLS1ldmFsLWRlZnVuICIjPGNvbXBpbGVkIDB4MWZhNWQx ZGMzOWRlYmM5ZT4iIGFwcGx5IGV2YWwtZGVmdW4gZnVuY2FsbC1pbnRlcmFjdGl2ZWx5ICIj PHN1YnIgY2FsbC1pbnRlcmFjdGl2ZWx5PiIgYXBwbHkgY2FsbC1pbnRlcmFjdGl2ZWx5QGlk by1jcistcmVjb3JkLWN1cnJlbnQtY29tbWFuZCBhcHBseSBjYWxsLWludGVyYWN0aXZlbHkg Y29tbWFuZC1leGVjdXRlIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWxdIDcgW21ha2UtZmFjZS14LXJl c291cmNlLWludGVybmFsIGZhY2Utc3BlYy1yZWNhbGMgZnJhbWUtc2V0LWJhY2tncm91bmQt bW9kZSBpbnRlcm5hbC1zZXQtbGlzcC1mYWNlLWF0dHJpYnV0ZSBzZXQtZmFjZS1hdHRyaWJ1 dGUgYXBwbHkgZmFjZS1zcGVjLXNldC0yIGZhY2Utc3BlYy1yZWNhbGMgZmFjZS1zZXQtYWZ0 ZXItZnJhbWUtZGVmYXVsdCB4LXNob3ctdGlwIGxldCBsaXN0IGxldCBteS1iZW5jaC14LXRp cCAiIzxzdWJyIGV2YWwtcmVnaW9uPiIgYXBwbHkgZW5kbGVzcy9ldmFsLW92ZXJsYXkgIiM8 bGFtYmRhIC0weDEyMDkzMGQ4NDcxMTkxMzg+IiBhcHBseSBldmFsLXJlZ2lvbiBlbGlzcC0t ZXZhbC1kZWZ1biAiIzxjb21waWxlZCAweDFmYTVkMWRjMzlkZWJjOWU+IiBhcHBseSBldmFs LWRlZnVuIGZ1bmNhbGwtaW50ZXJhY3RpdmVseSAiIzxzdWJyIGNhbGwtaW50ZXJhY3RpdmVs eT4iIGFwcGx5IGNhbGwtaW50ZXJhY3RpdmVseUBpZG8tY3IrLXJlY29yZC1jdXJyZW50LWNv bW1hbmQgYXBwbHkgY2FsbC1pbnRlcmFjdGl2ZWx5IGNvbW1hbmQtZXhlY3V0ZSBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbF0gMiBbZmFjZS1zcGVjLXJlY2FsYyBmcmFtZS1zZXQtYmFja2dy b3VuZC1tb2RlIGludGVybmFsLXNldC1saXNwLWZhY2UtYXR0cmlidXRlIHNldC1mYWNlLWF0 dHJpYnV0ZSBhcHBseSBmYWNlLXNwZWMtc2V0LTIgZmFjZS1zcGVjLXJlY2FsYyBmYWNlLXNl dC1hZnRlci1mcmFtZS1kZWZhdWx0IHgtc2hvdy10aXAgbGV0IGxpc3QgbGV0IG15LWJlbmNo LXgtdGlwICIjPHN1YnIgZXZhbC1yZWdpb24+IiBhcHBseSBlbmRsZXNzL2V2YWwtb3Zlcmxh eSAiIzxsYW1iZGEgLTB4MTIwOTMwZDg0NzExOTEzOD4iIGFwcGx5IGV2YWwtcmVnaW9uIGVs aXNwLS1ldmFsLWRlZnVuICIjPGNvbXBpbGVkIDB4MWZhNWQxZGMzOWRlYmM5ZT4iIGFwcGx5 IGV2YWwtZGVmdW4gZnVuY2FsbC1pbnRlcmFjdGl2ZWx5ICIjPHN1YnIgY2FsbC1pbnRlcmFj dGl2ZWx5PiIgYXBwbHkgY2FsbC1pbnRlcmFjdGl2ZWx5QGlkby1jcistcmVjb3JkLWN1cnJl bnQtY29tbWFuZCBhcHBseSBjYWxsLWludGVyYWN0aXZlbHkgY29tbWFuZC1leGVjdXRlIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbF0gMSBbY2hlY2stZmFjZSBmYWNlLW5hbWUgc2V0 LWZhY2UtYXR0cmlidXRlLWZyb20tcmVzb3VyY2Ugc2V0LWZhY2UtYXR0cmlidXRlcy1mcm9t LXJlc291cmNlcyBtYWtlLWZhY2UteC1yZXNvdXJjZS1pbnRlcm5hbCBmYWNlLXNwZWMtcmVj YWxjIGZyYW1lLXNldC1iYWNrZ3JvdW5kLW1vZGUgaW50ZXJuYWwtc2V0LWxpc3AtZmFjZS1h dHRyaWJ1dGUgc2V0LWZhY2UtYXR0cmlidXRlIGFwcGx5IGZhY2Utc3BlYy1zZXQtMiBmYWNl LXNwZWMtcmVjYWxjIGZhY2Utc2V0LWFmdGVyLWZyYW1lLWRlZmF1bHQgeC1zaG93LXRpcCBs ZXQgbGlzdCBsZXQgbXktYmVuY2gteC10aXAgIiM8c3ViciBldmFsLXJlZ2lvbj4iIGFwcGx5 IGVuZGxlc3MvZXZhbC1vdmVybGF5ICIjPGxhbWJkYSAtMHgxMjA5MzBkODQ3MTE5MTM4PiIg YXBwbHkgZXZhbC1yZWdpb24gZWxpc3AtLWV2YWwtZGVmdW4gIiM8Y29tcGlsZWQgMHgxZmE1 ZDFkYzM5ZGViYzllPiIgYXBwbHkgZXZhbC1kZWZ1biBmdW5jYWxsLWludGVyYWN0aXZlbHkg IiM8c3ViciBjYWxsLWludGVyYWN0aXZlbHk+IiBhcHBseSBjYWxsLWludGVyYWN0aXZlbHlA aWRvLWNyKy1yZWNvcmQtY3VycmVudC1jb21tYW5kIGFwcGx5IGNhbGwtaW50ZXJhY3RpdmVs eSBjb21tYW5kLWV4ZWN1dGUgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbF0gMSBbYXBwbHkgZmFjZS1zcGVjLXJlc2V0LWZh Y2UgZmFjZS1zcGVjLXJlY2FsYyBmcmFtZS1zZXQtYmFja2dyb3VuZC1tb2RlIGludGVybmFs LXNldC1saXNwLWZhY2UtYXR0cmlidXRlIHNldC1mYWNlLWF0dHJpYnV0ZSBhcHBseSBmYWNl LXNwZWMtc2V0LTIgZmFjZS1zcGVjLXJlY2FsYyBmYWNlLXNldC1hZnRlci1mcmFtZS1kZWZh dWx0IHgtc2hvdy10aXAgbGV0IGxpc3QgbGV0IG15LWJlbmNoLXgtdGlwICIjPHN1YnIgZXZh bC1yZWdpb24+IiBhcHBseSBlbmRsZXNzL2V2YWwtb3ZlcmxheSAiIzxsYW1iZGEgLTB4MTIw OTMwZDg0NzExOTEzOD4iIGFwcGx5IGV2YWwtcmVnaW9uIGVsaXNwLS1ldmFsLWRlZnVuICIj PGNvbXBpbGVkIDB4MWZhNWQxZGMzOWRlYmM5ZT4iIGFwcGx5IGV2YWwtZGVmdW4gZnVuY2Fs bC1pbnRlcmFjdGl2ZWx5ICIjPHN1YnIgY2FsbC1pbnRlcmFjdGl2ZWx5PiIgYXBwbHkgY2Fs bC1pbnRlcmFjdGl2ZWx5QGlkby1jcistcmVjb3JkLWN1cnJlbnQtY29tbWFuZCBhcHBseSBj YWxsLWludGVyYWN0aXZlbHkgY29tbWFuZC1leGVjdXRlIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWxd IDMgW2ZhY2UtbmFtZSBzZXQtZmFjZS1hdHRyaWJ1dGUtZnJvbS1yZXNvdXJjZSBzZXQtZmFj ZS1hdHRyaWJ1dGVzLWZyb20tcmVzb3VyY2VzIG1ha2UtZmFjZS14LXJlc291cmNlLWludGVy bmFsIGZhY2Utc3BlYy1yZWNhbGMgZnJhbWUtc2V0LWJhY2tncm91bmQtbW9kZSBpbnRlcm5h bC1zZXQtbGlzcC1mYWNlLWF0dHJpYnV0ZSBzZXQtZmFjZS1hdHRyaWJ1dGUgYXBwbHkgZmFj ZS1zcGVjLXNldC0yIGZhY2Utc3BlYy1yZWNhbGMgZmFjZS1zZXQtYWZ0ZXItZnJhbWUtZGVm YXVsdCB4LXNob3ctdGlwIGxldCBsaXN0IGxldCBteS1iZW5jaC14LXRpcCAiIzxzdWJyIGV2 YWwtcmVnaW9uPiIgYXBwbHkgZW5kbGVzcy9ldmFsLW92ZXJsYXkgIiM8bGFtYmRhIC0weDEy MDkzMGQ4NDcxMTkxMzg+IiBhcHBseSBldmFsLXJlZ2lvbiBlbGlzcC0tZXZhbC1kZWZ1biAi Izxjb21waWxlZCAweDFmYTVkMWRjMzlkZWJjOWU+IiBhcHBseSBldmFsLWRlZnVuIGZ1bmNh bGwtaW50ZXJhY3RpdmVseSAiIzxzdWJyIGNhbGwtaW50ZXJhY3RpdmVseT4iIGFwcGx5IGNh bGwtaW50ZXJhY3RpdmVseUBpZG8tY3IrLXJlY29yZC1jdXJyZW50LWNvbW1hbmQgYXBwbHkg Y2FsbC1pbnRlcmFjdGl2ZWx5IGNvbW1hbmQtZXhlY3V0ZSBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbF0gMyBbZmFj ZS1zcGVjLWNob29zZSBmYWNlLXNwZWMtcmVjYWxjIGZyYW1lLXNldC1iYWNrZ3JvdW5kLW1v ZGUgaW50ZXJuYWwtc2V0LWxpc3AtZmFjZS1hdHRyaWJ1dGUgc2V0LWZhY2UtYXR0cmlidXRl IGFwcGx5IGZhY2Utc3BlYy1zZXQtMiBmYWNlLXNwZWMtcmVjYWxjIGZhY2Utc2V0LWFmdGVy LWZyYW1lLWRlZmF1bHQgeC1zaG93LXRpcCBsZXQgbGlzdCBsZXQgbXktYmVuY2gteC10aXAg IiM8c3ViciBldmFsLXJlZ2lvbj4iIGFwcGx5IGVuZGxlc3MvZXZhbC1vdmVybGF5ICIjPGxh bWJkYSAtMHgxMjA5MzBkODQ3MTE5MTM4PiIgYXBwbHkgZXZhbC1yZWdpb24gZWxpc3AtLWV2 YWwtZGVmdW4gIiM8Y29tcGlsZWQgMHgxZmE1ZDFkYzM5ZGViYzllPiIgYXBwbHkgZXZhbC1k ZWZ1biBmdW5jYWxsLWludGVyYWN0aXZlbHkgIiM8c3ViciBjYWxsLWludGVyYWN0aXZlbHk+ IiBhcHBseSBjYWxsLWludGVyYWN0aXZlbHlAaWRvLWNyKy1yZWNvcmQtY3VycmVudC1jb21t YW5kIGFwcGx5IGNhbGwtaW50ZXJhY3RpdmVseSBjb21tYW5kLWV4ZWN1dGUgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWxdIDEgW3NldC1mYWNlLWF0dHJpYnV0ZSBhcHBseSBmYWNlLXNwZWMt c2V0LTIgZmFjZS1zcGVjLXJlY2FsYyBmcmFtZS1zZXQtYmFja2dyb3VuZC1tb2RlIGludGVy bmFsLXNldC1saXNwLWZhY2UtYXR0cmlidXRlIHNldC1mYWNlLWF0dHJpYnV0ZSBhcHBseSBm YWNlLXNwZWMtc2V0LTIgZmFjZS1zcGVjLXJlY2FsYyBmYWNlLXNldC1hZnRlci1mcmFtZS1k ZWZhdWx0IHgtc2hvdy10aXAgbGV0IGxpc3QgbGV0IG15LWJlbmNoLXgtdGlwICIjPHN1YnIg ZXZhbC1yZWdpb24+IiBhcHBseSBlbmRsZXNzL2V2YWwtb3ZlcmxheSAiIzxsYW1iZGEgLTB4 MTIwOTMwZDg0NzExOTEzOD4iIGFwcGx5IGV2YWwtcmVnaW9uIGVsaXNwLS1ldmFsLWRlZnVu ICIjPGNvbXBpbGVkIDB4MWZhNWQxZGMzOWRlYmM5ZT4iIGFwcGx5IGV2YWwtZGVmdW4gZnVu Y2FsbC1pbnRlcmFjdGl2ZWx5ICIjPHN1YnIgY2FsbC1pbnRlcmFjdGl2ZWx5PiIgYXBwbHkg Y2FsbC1pbnRlcmFjdGl2ZWx5QGlkby1jcistcmVjb3JkLWN1cnJlbnQtY29tbWFuZCBhcHBs eSBjYWxsLWludGVyYWN0aXZlbHkgY29tbWFuZC1leGVjdXRlIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbF0g MSBbc2V0LWZhY2UtYXR0cmlidXRlIGFwcGx5IGZhY2Utc3BlYy1zZXQtMiBmYWNlLXNwZWMt cmVjYWxjIGZhY2Utc2V0LWFmdGVyLWZyYW1lLWRlZmF1bHQgeC1zaG93LXRpcCBsZXQgbGlz dCBsZXQgbXktYmVuY2gteC10aXAgIiM8c3ViciBldmFsLXJlZ2lvbj4iIGFwcGx5IGVuZGxl c3MvZXZhbC1vdmVybGF5ICIjPGxhbWJkYSAtMHgxMjA5MzBkODQ3MTE5MTM4PiIgYXBwbHkg ZXZhbC1yZWdpb24gZWxpc3AtLWV2YWwtZGVmdW4gIiM8Y29tcGlsZWQgMHgxZmE1ZDFkYzM5 ZGViYzllPiIgYXBwbHkgZXZhbC1kZWZ1biBmdW5jYWxsLWludGVyYWN0aXZlbHkgIiM8c3Vi ciBjYWxsLWludGVyYWN0aXZlbHk+IiBhcHBseSBjYWxsLWludGVyYWN0aXZlbHlAaWRvLWNy Ky1yZWNvcmQtY3VycmVudC1jb21tYW5kIGFwcGx5IGNhbGwtaW50ZXJhY3RpdmVseSBjb21t YW5kLWV4ZWN1dGUgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsXSAy IFtmYWNlcCBjaGVjay1mYWNlIGZhY2UtbmFtZSBzZXQtZmFjZS1hdHRyaWJ1dGUtZnJvbS1y ZXNvdXJjZSBzZXQtZmFjZS1hdHRyaWJ1dGVzLWZyb20tcmVzb3VyY2VzIG1ha2UtZmFjZS14 LXJlc291cmNlLWludGVybmFsIGZhY2Utc3BlYy1yZWNhbGMgZmFjZS1zZXQtYWZ0ZXItZnJh bWUtZGVmYXVsdCB4LXNob3ctdGlwIGxldCBsaXN0IGxldCBteS1iZW5jaC14LXRpcCAiIzxz dWJyIGV2YWwtcmVnaW9uPiIgYXBwbHkgZW5kbGVzcy9ldmFsLW92ZXJsYXkgIiM8bGFtYmRh IC0weDEyMDkzMGQ4NDcxMTkxMzg+IiBhcHBseSBldmFsLXJlZ2lvbiBlbGlzcC0tZXZhbC1k ZWZ1biAiIzxjb21waWxlZCAweDFmYTVkMWRjMzlkZWJjOWU+IiBhcHBseSBldmFsLWRlZnVu IGZ1bmNhbGwtaW50ZXJhY3RpdmVseSAiIzxzdWJyIGNhbGwtaW50ZXJhY3RpdmVseT4iIGFw cGx5IGNhbGwtaW50ZXJhY3RpdmVseUBpZG8tY3IrLXJlY29yZC1jdXJyZW50LWNvbW1hbmQg YXBwbHkgY2FsbC1pbnRlcmFjdGl2ZWx5IGNvbW1hbmQtZXhlY3V0ZSBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWxdIDI5MyBbc2V0LWZhY2UtYXR0cmlidXRlIGFwcGx5IGZhY2Utc3Bl Yy1yZXNldC1mYWNlIGZhY2Utc3BlYy1yZWNhbGMgZmFjZS1zZXQtYWZ0ZXItZnJhbWUtZGVm YXVsdCB4LXNob3ctdGlwIGxldCBsaXN0IGxldCBteS1iZW5jaC14LXRpcCAiIzxzdWJyIGV2 YWwtcmVnaW9uPiIgYXBwbHkgZW5kbGVzcy9ldmFsLW92ZXJsYXkgIiM8bGFtYmRhIC0weDEy MDkzMGQ4NDcxMTkxMzg+IiBhcHBseSBldmFsLXJlZ2lvbiBlbGlzcC0tZXZhbC1kZWZ1biAi Izxjb21waWxlZCAweDFmYTVkMWRjMzlkZWJjOWU+IiBhcHBseSBldmFsLWRlZnVuIGZ1bmNh bGwtaW50ZXJhY3RpdmVseSAiIzxzdWJyIGNhbGwtaW50ZXJhY3RpdmVseT4iIGFwcGx5IGNh bGwtaW50ZXJhY3RpdmVseUBpZG8tY3IrLXJlY29yZC1jdXJyZW50LWNvbW1hbmQgYXBwbHkg Y2FsbC1pbnRlcmFjdGl2ZWx5IGNvbW1hbmQtZXhlY3V0ZSBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWxdIDIxOSBbZmFjZS1zZXQtYWZ0ZXItZnJhbWUtZGVmYXVs dCB4LXNob3ctdGlwIGxldCBsaXN0IGxldCBteS1iZW5jaC14LXRpcCAiIzxzdWJyIGV2YWwt cmVnaW9uPiIgYXBwbHkgZW5kbGVzcy9ldmFsLW92ZXJsYXkgIiM8bGFtYmRhIC0weDEyMDkz MGQ4NDcxMTkxMzg+IiBhcHBseSBldmFsLXJlZ2lvbiBlbGlzcC0tZXZhbC1kZWZ1biAiIzxj b21waWxlZCAweDFmYTVkMWRjMzlkZWJjOWU+IiBhcHBseSBldmFsLWRlZnVuIGZ1bmNhbGwt aW50ZXJhY3RpdmVseSAiIzxzdWJyIGNhbGwtaW50ZXJhY3RpdmVseT4iIGFwcGx5IGNhbGwt aW50ZXJhY3RpdmVseUBpZG8tY3IrLXJlY29yZC1jdXJyZW50LWNvbW1hbmQgYXBwbHkgY2Fs bC1pbnRlcmFjdGl2ZWx5IGNvbW1hbmQtZXhlY3V0ZSBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsXSA1OSBbc2V0LWZhY2UtYXR0cmli dXRlLWZyb20tcmVzb3VyY2Ugc2V0LWZhY2UtYXR0cmlidXRlcy1mcm9tLXJlc291cmNlcyBt YWtlLWZhY2UteC1yZXNvdXJjZS1pbnRlcm5hbCBmYWNlLXNwZWMtcmVjYWxjIGZhY2Utc2V0 LWFmdGVyLWZyYW1lLWRlZmF1bHQgeC1zaG93LXRpcCBsZXQgbGlzdCBsZXQgbXktYmVuY2gt eC10aXAgIiM8c3ViciBldmFsLXJlZ2lvbj4iIGFwcGx5IGVuZGxlc3MvZXZhbC1vdmVybGF5 ICIjPGxhbWJkYSAtMHgxMjA5MzBkODQ3MTE5MTM4PiIgYXBwbHkgZXZhbC1yZWdpb24gZWxp c3AtLWV2YWwtZGVmdW4gIiM8Y29tcGlsZWQgMHgxZmE1ZDFkYzM5ZGViYzllPiIgYXBwbHkg ZXZhbC1kZWZ1biBmdW5jYWxsLWludGVyYWN0aXZlbHkgIiM8c3ViciBjYWxsLWludGVyYWN0 aXZlbHk+IiBhcHBseSBjYWxsLWludGVyYWN0aXZlbHlAaWRvLWNyKy1yZWNvcmQtY3VycmVu dC1jb21tYW5kIGFwcGx5IGNhbGwtaW50ZXJhY3RpdmVseSBjb21tYW5kLWV4ZWN1dGUgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsXSAyMCBbc2V0LWZhY2UtYXR0 cmlidXRlcy1mcm9tLXJlc291cmNlcyBtYWtlLWZhY2UteC1yZXNvdXJjZS1pbnRlcm5hbCBm YWNlLXNwZWMtcmVjYWxjIGZhY2Utc2V0LWFmdGVyLWZyYW1lLWRlZmF1bHQgeC1zaG93LXRp cCBsZXQgbGlzdCBsZXQgbXktYmVuY2gteC10aXAgIiM8c3ViciBldmFsLXJlZ2lvbj4iIGFw cGx5IGVuZGxlc3MvZXZhbC1vdmVybGF5ICIjPGxhbWJkYSAtMHgxMjA5MzBkODQ3MTE5MTM4 PiIgYXBwbHkgZXZhbC1yZWdpb24gZWxpc3AtLWV2YWwtZGVmdW4gIiM8Y29tcGlsZWQgMHgx ZmE1ZDFkYzM5ZGViYzllPiIgYXBwbHkgZXZhbC1kZWZ1biBmdW5jYWxsLWludGVyYWN0aXZl bHkgIiM8c3ViciBjYWxsLWludGVyYWN0aXZlbHk+IiBhcHBseSBjYWxsLWludGVyYWN0aXZl bHlAaWRvLWNyKy1yZWNvcmQtY3VycmVudC1jb21tYW5kIGFwcGx5IGNhbGwtaW50ZXJhY3Rp dmVseSBjb21tYW5kLWV4ZWN1dGUgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbF0gNCBbZmFjZS1zcGVjLXJlY2FsYyBmYWNlLXNldC1hZnRlci1mcmFtZS1k ZWZhdWx0IHgtc2hvdy10aXAgbGV0IGxpc3QgbGV0IG15LWJlbmNoLXgtdGlwICIjPHN1YnIg ZXZhbC1yZWdpb24+IiBhcHBseSBlbmRsZXNzL2V2YWwtb3ZlcmxheSAiIzxsYW1iZGEgLTB4 MTIwOTMwZDg0NzExOTEzOD4iIGFwcGx5IGV2YWwtcmVnaW9uIGVsaXNwLS1ldmFsLWRlZnVu ICIjPGNvbXBpbGVkIDB4MWZhNWQxZGMzOWRlYmM5ZT4iIGFwcGx5IGV2YWwtZGVmdW4gZnVu Y2FsbC1pbnRlcmFjdGl2ZWx5ICIjPHN1YnIgY2FsbC1pbnRlcmFjdGl2ZWx5PiIgYXBwbHkg Y2FsbC1pbnRlcmFjdGl2ZWx5QGlkby1jcistcmVjb3JkLWN1cnJlbnQtY29tbWFuZCBhcHBs eSBjYWxsLWludGVyYWN0aXZlbHkgY29tbWFuZC1leGVjdXRlIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbF0gMSBbZmFjZS1uYW1lIHNldC1m YWNlLWF0dHJpYnV0ZS1mcm9tLXJlc291cmNlIHNldC1mYWNlLWF0dHJpYnV0ZXMtZnJvbS1y ZXNvdXJjZXMgbWFrZS1mYWNlLXgtcmVzb3VyY2UtaW50ZXJuYWwgZmFjZS1zcGVjLXJlY2Fs YyBmYWNlLXNldC1hZnRlci1mcmFtZS1kZWZhdWx0IHgtc2hvdy10aXAgbGV0IGxpc3QgbGV0 IG15LWJlbmNoLXgtdGlwICIjPHN1YnIgZXZhbC1yZWdpb24+IiBhcHBseSBlbmRsZXNzL2V2 YWwtb3ZlcmxheSAiIzxsYW1iZGEgLTB4MTIwOTMwZDg0NzExOTEzOD4iIGFwcGx5IGV2YWwt cmVnaW9uIGVsaXNwLS1ldmFsLWRlZnVuICIjPGNvbXBpbGVkIDB4MWZhNWQxZGMzOWRlYmM5 ZT4iIGFwcGx5IGV2YWwtZGVmdW4gZnVuY2FsbC1pbnRlcmFjdGl2ZWx5ICIjPHN1YnIgY2Fs bC1pbnRlcmFjdGl2ZWx5PiIgYXBwbHkgY2FsbC1pbnRlcmFjdGl2ZWx5QGlkby1jcistcmVj b3JkLWN1cnJlbnQtY29tbWFuZCBhcHBseSBjYWxsLWludGVyYWN0aXZlbHkgY29tbWFuZC1l eGVjdXRlIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsXSAyIFthcHBseSBm YWNlLXNwZWMtcmVzZXQtZmFjZSBmYWNlLXNwZWMtcmVjYWxjIGZhY2Utc2V0LWFmdGVyLWZy YW1lLWRlZmF1bHQgeC1zaG93LXRpcCBsZXQgbGlzdCBsZXQgbXktYmVuY2gteC10aXAgIiM8 c3ViciBldmFsLXJlZ2lvbj4iIGFwcGx5IGVuZGxlc3MvZXZhbC1vdmVybGF5ICIjPGxhbWJk YSAtMHgxMjA5MzBkODQ3MTE5MTM4PiIgYXBwbHkgZXZhbC1yZWdpb24gZWxpc3AtLWV2YWwt ZGVmdW4gIiM8Y29tcGlsZWQgMHgxZmE1ZDFkYzM5ZGViYzllPiIgYXBwbHkgZXZhbC1kZWZ1 biBmdW5jYWxsLWludGVyYWN0aXZlbHkgIiM8c3ViciBjYWxsLWludGVyYWN0aXZlbHk+IiBh cHBseSBjYWxsLWludGVyYWN0aXZlbHlAaWRvLWNyKy1yZWNvcmQtY3VycmVudC1jb21tYW5k IGFwcGx5IGNhbGwtaW50ZXJhY3RpdmVseSBjb21tYW5kLWV4ZWN1dGUgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbF0gNCBbbWFrZS1mYWNlLXgtcmVzb3Vy Y2UtaW50ZXJuYWwgZmFjZS1zcGVjLXJlY2FsYyBmYWNlLXNldC1hZnRlci1mcmFtZS1kZWZh dWx0IHgtc2hvdy10aXAgbGV0IGxpc3QgbGV0IG15LWJlbmNoLXgtdGlwICIjPHN1YnIgZXZh bC1yZWdpb24+IiBhcHBseSBlbmRsZXNzL2V2YWwtb3ZlcmxheSAiIzxsYW1iZGEgLTB4MTIw OTMwZDg0NzExOTEzOD4iIGFwcGx5IGV2YWwtcmVnaW9uIGVsaXNwLS1ldmFsLWRlZnVuICIj PGNvbXBpbGVkIDB4MWZhNWQxZGMzOWRlYmM5ZT4iIGFwcGx5IGV2YWwtZGVmdW4gZnVuY2Fs bC1pbnRlcmFjdGl2ZWx5ICIjPHN1YnIgY2FsbC1pbnRlcmFjdGl2ZWx5PiIgYXBwbHkgY2Fs bC1pbnRlcmFjdGl2ZWx5QGlkby1jcistcmVjb3JkLWN1cnJlbnQtY29tbWFuZCBhcHBseSBj YWxsLWludGVyYWN0aXZlbHkgY29tbWFuZC1leGVjdXRlIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsXSAxIFthcHBseSBmYWNlLXNwZWMtc2V0LTIg ZmFjZS1zcGVjLXJlY2FsYyBmYWNlLXNldC1hZnRlci1mcmFtZS1kZWZhdWx0IHgtc2hvdy10 aXAgbGV0IGxpc3QgbGV0IG15LWJlbmNoLXgtdGlwICIjPHN1YnIgZXZhbC1yZWdpb24+IiBh cHBseSBlbmRsZXNzL2V2YWwtb3ZlcmxheSAiIzxsYW1iZGEgLTB4MTIwOTMwZDg0NzExOTEz OD4iIGFwcGx5IGV2YWwtcmVnaW9uIGVsaXNwLS1ldmFsLWRlZnVuICIjPGNvbXBpbGVkIDB4 MWZhNWQxZGMzOWRlYmM5ZT4iIGFwcGx5IGV2YWwtZGVmdW4gZnVuY2FsbC1pbnRlcmFjdGl2 ZWx5ICIjPHN1YnIgY2FsbC1pbnRlcmFjdGl2ZWx5PiIgYXBwbHkgY2FsbC1pbnRlcmFjdGl2 ZWx5QGlkby1jcistcmVjb3JkLWN1cnJlbnQtY29tbWFuZCBhcHBseSBjYWxsLWludGVyYWN0 aXZlbHkgY29tbWFuZC1leGVjdXRlIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWxdIDEgW2NoZWNrLWZhY2UgZmFjZS1uYW1lIHNldC1mYWNlLWF0dHJpYnV0 ZS1mcm9tLXJlc291cmNlIHNldC1mYWNlLWF0dHJpYnV0ZXMtZnJvbS1yZXNvdXJjZXMgbWFr ZS1mYWNlLXgtcmVzb3VyY2UtaW50ZXJuYWwgZmFjZS1zcGVjLXJlY2FsYyBmYWNlLXNldC1h ZnRlci1mcmFtZS1kZWZhdWx0IHgtc2hvdy10aXAgbGV0IGxpc3QgbGV0IG15LWJlbmNoLXgt dGlwICIjPHN1YnIgZXZhbC1yZWdpb24+IiBhcHBseSBlbmRsZXNzL2V2YWwtb3ZlcmxheSAi IzxsYW1iZGEgLTB4MTIwOTMwZDg0NzExOTEzOD4iIGFwcGx5IGV2YWwtcmVnaW9uIGVsaXNw LS1ldmFsLWRlZnVuICIjPGNvbXBpbGVkIDB4MWZhNWQxZGMzOWRlYmM5ZT4iIGFwcGx5IGV2 YWwtZGVmdW4gZnVuY2FsbC1pbnRlcmFjdGl2ZWx5ICIjPHN1YnIgY2FsbC1pbnRlcmFjdGl2 ZWx5PiIgYXBwbHkgY2FsbC1pbnRlcmFjdGl2ZWx5QGlkby1jcistcmVjb3JkLWN1cnJlbnQt Y29tbWFuZCBhcHBseSBjYWxsLWludGVyYWN0aXZlbHkgY29tbWFuZC1leGVjdXRlIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWxdIDEgW2ZhY2Utc3BlYy1zZXQtMiBmYWNlLXNw ZWMtcmVjYWxjIGZhY2Utc2V0LWFmdGVyLWZyYW1lLWRlZmF1bHQgeC1zaG93LXRpcCBsZXQg bGlzdCBsZXQgbXktYmVuY2gteC10aXAgIiM8c3ViciBldmFsLXJlZ2lvbj4iIGFwcGx5IGVu ZGxlc3MvZXZhbC1vdmVybGF5ICIjPGxhbWJkYSAtMHgxMjA5MzBkODQ3MTE5MTM4PiIgYXBw bHkgZXZhbC1yZWdpb24gZWxpc3AtLWV2YWwtZGVmdW4gIiM8Y29tcGlsZWQgMHgxZmE1ZDFk YzM5ZGViYzllPiIgYXBwbHkgZXZhbC1kZWZ1biBmdW5jYWxsLWludGVyYWN0aXZlbHkgIiM8 c3ViciBjYWxsLWludGVyYWN0aXZlbHk+IiBhcHBseSBjYWxsLWludGVyYWN0aXZlbHlAaWRv LWNyKy1yZWNvcmQtY3VycmVudC1jb21tYW5kIGFwcGx5IGNhbGwtaW50ZXJhY3RpdmVseSBj b21tYW5kLWV4ZWN1dGUgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWxdIDEgW2ZvcndhcmQtc2V4cCBiYWNrd2FyZC1zZXhwIGNsb2p1cmUtYmFja3dh cmQtbG9naWNhbC1zZXhwIGNpZGVyLS1tYWtlLXJlc3VsdC1vdmVybGF5IGVuZGxlc3MvZXZh bC1vdmVybGF5ICIjPGxhbWJkYSAtMHgxMjA5MzBkODQ3MTE5MTM4PiIgYXBwbHkgZXZhbC1y ZWdpb24gZWxpc3AtLWV2YWwtZGVmdW4gIiM8Y29tcGlsZWQgMHgxZmE1ZDFkYzM5ZGViYzll PiIgYXBwbHkgZXZhbC1kZWZ1biBmdW5jYWxsLWludGVyYWN0aXZlbHkgIiM8c3ViciBjYWxs LWludGVyYWN0aXZlbHk+IiBhcHBseSBjYWxsLWludGVyYWN0aXZlbHlAaWRvLWNyKy1yZWNv cmQtY3VycmVudC1jb21tYW5kIGFwcGx5IGNhbGwtaW50ZXJhY3RpdmVseSBjb21tYW5kLWV4 ZWN1dGUgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWxdIDEgW2V2YWwgZm9ybWF0LW1vZGUtbGluZSBzbWwv ZmlsbC13aWR0aC1hdmFpbGFibGUgc21sL2dlbmVyYXRlLW1pbm9yLW1vZGVzIGV2YWwgcmVk aXNwbGF5X2ludGVybmFsXCBcKENcIGZ1bmN0aW9uXCkgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsXSAxIFsi Izxjb21waWxlZCAweGE3MjFmMGZmNjQ4Mzk+IiBhcHBseSB0aW1lci1ldmVudC1oYW5kbGVy IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbF0gMSBbIiM8Y29tcGlsZWQgMHhkZTE0ODM4 Mzk4OGU3NTM+IiBtYXBhdG9tcyBzbWV4LWRldGVjdC1uZXctY29tbWFuZHMgc21leCBmdW5j YWxsLWludGVyYWN0aXZlbHkgIiM8c3ViciBjYWxsLWludGVyYWN0aXZlbHk+IiBhcHBseSBj YWxsLWludGVyYWN0aXZlbHlAaWRvLWNyKy1yZWNvcmQtY3VycmVudC1jb21tYW5kIGFwcGx5 IGNhbGwtaW50ZXJhY3RpdmVseSBjb21tYW5kLWV4ZWN1dGUgbmlsIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbF0gNCBbbWFwYXRvbXMgc21leC1kZXRl Y3QtbmV3LWNvbW1hbmRzIHNtZXggZnVuY2FsbC1pbnRlcmFjdGl2ZWx5ICIjPHN1YnIgY2Fs bC1pbnRlcmFjdGl2ZWx5PiIgYXBwbHkgY2FsbC1pbnRlcmFjdGl2ZWx5QGlkby1jcistcmVj b3JkLWN1cnJlbnQtY29tbWFuZCBhcHBseSBjYWxsLWludGVyYWN0aXZlbHkgY29tbWFuZC1l eGVjdXRlIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsXSAxIFsiIzxjb21waWxlZCAtMHgzYWM2ZWNhYjc0YWZkNjQ+IiBtYXBjIGlkby1z ZXQtbWF0Y2hlcy0xIGlkby1zZXQtbWF0Y2hlcyBpZG8tcmVhZC1pbnRlcm5hbCAiIzxjb21w aWxlZCAweGQ5NzEwYTk3Nzc4YWU2NT4iIGFwcGx5IGlkby1jb21wbGV0aW5nLXJlYWRAaWRv LWNyKy1yZXBsYWNlIGFwcGx5IGlkby1jb21wbGV0aW5nLXJlYWQgc21leC1jb21wbGV0aW5n LXJlYWQgc21leC1yZWFkLWFuZC1ydW4gc21leCBmdW5jYWxsLWludGVyYWN0aXZlbHkgIiM8 c3ViciBjYWxsLWludGVyYWN0aXZlbHk+IiBhcHBseSBjYWxsLWludGVyYWN0aXZlbHlAaWRv LWNyKy1yZWNvcmQtY3VycmVudC1jb21tYW5kIGFwcGx5IGNhbGwtaW50ZXJhY3RpdmVseSBj b21tYW5kLWV4ZWN1dGUgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbF0gMSBbaWRvLXNldC1tYXRjaGVzLTEgaWRv LXNldC1tYXRjaGVzIGlkby1yZWFkLWludGVybmFsICIjPGNvbXBpbGVkIDB4ZDk3MTBhOTc3 NzhhZTY1PiIgYXBwbHkgaWRvLWNvbXBsZXRpbmctcmVhZEBpZG8tY3IrLXJlcGxhY2UgYXBw bHkgaWRvLWNvbXBsZXRpbmctcmVhZCBzbWV4LWNvbXBsZXRpbmctcmVhZCBzbWV4LXJlYWQt YW5kLXJ1biBzbWV4IGZ1bmNhbGwtaW50ZXJhY3RpdmVseSAiIzxzdWJyIGNhbGwtaW50ZXJh Y3RpdmVseT4iIGFwcGx5IGNhbGwtaW50ZXJhY3RpdmVseUBpZG8tY3IrLXJlY29yZC1jdXJy ZW50LWNvbW1hbmQgYXBwbHkgY2FsbC1pbnRlcmFjdGl2ZWx5IGNvbW1hbmQtZXhlY3V0ZSBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWxdIDEgWyIjPGNvbXBpbGVkIC0weDNhYzZlY2FiNzRhZmQ2 ND4iIG1hcGMgaWRvLXNldC1tYXRjaGVzLTEgaWRvLXNldC1tYXRjaGVzICIjPGNvbXBpbGVk IDB4MTY2OTgzYzNiZTUxYjU2YT4iIGFwcGx5IGlkby1leGhpYml0IHJlYWQtZnJvbS1taW5p YnVmZmVyIGlkby1yZWFkLWludGVybmFsICIjPGNvbXBpbGVkIDB4ZDk3MTBhOTc3NzhhZTY1 PiIgYXBwbHkgaWRvLWNvbXBsZXRpbmctcmVhZEBpZG8tY3IrLXJlcGxhY2UgYXBwbHkgaWRv LWNvbXBsZXRpbmctcmVhZCBzbWV4LWNvbXBsZXRpbmctcmVhZCBzbWV4LXJlYWQtYW5kLXJ1 biBzbWV4IGZ1bmNhbGwtaW50ZXJhY3RpdmVseSAiIzxzdWJyIGNhbGwtaW50ZXJhY3RpdmVs eT4iIGFwcGx5IGNhbGwtaW50ZXJhY3RpdmVseUBpZG8tY3IrLXJlY29yZC1jdXJyZW50LWNv bW1hbmQgYXBwbHkgY2FsbC1pbnRlcmFjdGl2ZWx5IGNvbW1hbmQtZXhlY3V0ZSBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWxdIDE2IFttYXBj IGlkby1zZXQtbWF0Y2hlcy0xIGlkby1zZXQtbWF0Y2hlcyAiIzxjb21waWxlZCAweDE2Njk4 M2MzYmU1MWI1NmE+IiBhcHBseSBpZG8tZXhoaWJpdCByZWFkLWZyb20tbWluaWJ1ZmZlciBp ZG8tcmVhZC1pbnRlcm5hbCAiIzxjb21waWxlZCAweGQ5NzEwYTk3Nzc4YWU2NT4iIGFwcGx5 IGlkby1jb21wbGV0aW5nLXJlYWRAaWRvLWNyKy1yZXBsYWNlIGFwcGx5IGlkby1jb21wbGV0 aW5nLXJlYWQgc21leC1jb21wbGV0aW5nLXJlYWQgc21leC1yZWFkLWFuZC1ydW4gc21leCBm dW5jYWxsLWludGVyYWN0aXZlbHkgIiM8c3ViciBjYWxsLWludGVyYWN0aXZlbHk+IiBhcHBs eSBjYWxsLWludGVyYWN0aXZlbHlAaWRvLWNyKy1yZWNvcmQtY3VycmVudC1jb21tYW5kIGFw cGx5IGNhbGwtaW50ZXJhY3RpdmVseSBjb21tYW5kLWV4ZWN1dGUgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbF0gNSBbaWRvLWNvbXBs ZXRpb25zICIjPGNvbXBpbGVkIDB4MTY2OTgzYzNiZTUxYjU2YT4iIGFwcGx5IGlkby1leGhp Yml0IHJlYWQtZnJvbS1taW5pYnVmZmVyIGlkby1yZWFkLWludGVybmFsICIjPGNvbXBpbGVk IDB4ZDk3MTBhOTc3NzhhZTY1PiIgYXBwbHkgaWRvLWNvbXBsZXRpbmctcmVhZEBpZG8tY3Ir LXJlcGxhY2UgYXBwbHkgaWRvLWNvbXBsZXRpbmctcmVhZCBzbWV4LWNvbXBsZXRpbmctcmVh ZCBzbWV4LXJlYWQtYW5kLXJ1biBzbWV4IGZ1bmNhbGwtaW50ZXJhY3RpdmVseSAiIzxzdWJy IGNhbGwtaW50ZXJhY3RpdmVseT4iIGFwcGx5IGNhbGwtaW50ZXJhY3RpdmVseUBpZG8tY3Ir LXJlY29yZC1jdXJyZW50LWNvbW1hbmQgYXBwbHkgY2FsbC1pbnRlcmFjdGl2ZWx5IGNvbW1h bmQtZXhlY3V0ZSBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWxdIDEgW3JlYWQtZnJvbS1taW5pYnVmZmVyIGlkby1yZWFk LWludGVybmFsICIjPGNvbXBpbGVkIDB4ZDk3MTBhOTc3NzhhZTY1PiIgYXBwbHkgaWRvLWNv bXBsZXRpbmctcmVhZEBpZG8tY3IrLXJlcGxhY2UgYXBwbHkgaWRvLWNvbXBsZXRpbmctcmVh ZCBzbWV4LWNvbXBsZXRpbmctcmVhZCBzbWV4LXJlYWQtYW5kLXJ1biBzbWV4IGZ1bmNhbGwt aW50ZXJhY3RpdmVseSAiIzxzdWJyIGNhbGwtaW50ZXJhY3RpdmVseT4iIGFwcGx5IGNhbGwt aW50ZXJhY3RpdmVseUBpZG8tY3IrLXJlY29yZC1jdXJyZW50LWNvbW1hbmQgYXBwbHkgY2Fs bC1pbnRlcmFjdGl2ZWx5IGNvbW1hbmQtZXhlY3V0ZSBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsXSAzNCBbaWRvLXJlYWQtaW50ZXJuYWwgIiM8Y29tcGlsZWQgMHhkOTcxMGE5Nzc3OGFl NjU+IiBhcHBseSBpZG8tY29tcGxldGluZy1yZWFkQGlkby1jcistcmVwbGFjZSBhcHBseSBp ZG8tY29tcGxldGluZy1yZWFkIHNtZXgtY29tcGxldGluZy1yZWFkIHNtZXgtcmVhZC1hbmQt cnVuIHNtZXggZnVuY2FsbC1pbnRlcmFjdGl2ZWx5ICIjPHN1YnIgY2FsbC1pbnRlcmFjdGl2 ZWx5PiIgYXBwbHkgY2FsbC1pbnRlcmFjdGl2ZWx5QGlkby1jcistcmVjb3JkLWN1cnJlbnQt Y29tbWFuZCBhcHBseSBjYWxsLWludGVyYWN0aXZlbHkgY29tbWFuZC1leGVjdXRlIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsXSAxMCBbbWFwY2FyIGlkby1maW5kLWNvbW1vbi1z dWJzdHJpbmcgaWRvLXNldC1jb21tb24tY29tcGxldGlvbiAiIzxjb21waWxlZCAweDE2Njk4 M2MzYmU1MWI1NmE+IiBhcHBseSBpZG8tZXhoaWJpdCByZWFkLWZyb20tbWluaWJ1ZmZlciBp ZG8tcmVhZC1pbnRlcm5hbCAiIzxjb21waWxlZCAweGQ5NzEwYTk3Nzc4YWU2NT4iIGFwcGx5 IGlkby1jb21wbGV0aW5nLXJlYWRAaWRvLWNyKy1yZXBsYWNlIGFwcGx5IGlkby1jb21wbGV0 aW5nLXJlYWQgc21leC1jb21wbGV0aW5nLXJlYWQgc21leC1yZWFkLWFuZC1ydW4gc21leCBm dW5jYWxsLWludGVyYWN0aXZlbHkgIiM8c3ViciBjYWxsLWludGVyYWN0aXZlbHk+IiBhcHBs eSBjYWxsLWludGVyYWN0aXZlbHlAaWRvLWNyKy1yZWNvcmQtY3VycmVudC1jb21tYW5kIGFw cGx5IGNhbGwtaW50ZXJhY3RpdmVseSBjb21tYW5kLWV4ZWN1dGUgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbF0gMSBbYXBwbHkgaWRv LXRpZHkgcmVhZC1mcm9tLW1pbmlidWZmZXIgaWRvLXJlYWQtaW50ZXJuYWwgIiM8Y29tcGls ZWQgMHhkOTcxMGE5Nzc3OGFlNjU+IiBhcHBseSBpZG8tY29tcGxldGluZy1yZWFkQGlkby1j cistcmVwbGFjZSBhcHBseSBpZG8tY29tcGxldGluZy1yZWFkIHNtZXgtY29tcGxldGluZy1y ZWFkIHNtZXgtcmVhZC1hbmQtcnVuIHNtZXggZnVuY2FsbC1pbnRlcmFjdGl2ZWx5ICIjPHN1 YnIgY2FsbC1pbnRlcmFjdGl2ZWx5PiIgYXBwbHkgY2FsbC1pbnRlcmFjdGl2ZWx5QGlkby1j cistcmVjb3JkLWN1cnJlbnQtY29tbWFuZCBhcHBseSBjYWxsLWludGVyYWN0aXZlbHkgY29t bWFuZC1leGVjdXRlIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsXSAxIFtpZG8td29yZC1tYXRjaGluZy1z dWJzdHJpbmcgbWFwY2FyIGlkby1maW5kLWNvbW1vbi1zdWJzdHJpbmcgaWRvLXNldC1jb21t b24tY29tcGxldGlvbiAiIzxjb21waWxlZCAweDE2Njk4M2MzYmU1MWI1NmE+IiBhcHBseSBp ZG8tZXhoaWJpdCByZWFkLWZyb20tbWluaWJ1ZmZlciBpZG8tcmVhZC1pbnRlcm5hbCAiIzxj b21waWxlZCAweGQ5NzEwYTk3Nzc4YWU2NT4iIGFwcGx5IGlkby1jb21wbGV0aW5nLXJlYWRA aWRvLWNyKy1yZXBsYWNlIGFwcGx5IGlkby1jb21wbGV0aW5nLXJlYWQgc21leC1jb21wbGV0 aW5nLXJlYWQgc21leC1yZWFkLWFuZC1ydW4gc21leCBmdW5jYWxsLWludGVyYWN0aXZlbHkg IiM8c3ViciBjYWxsLWludGVyYWN0aXZlbHk+IiBhcHBseSBjYWxsLWludGVyYWN0aXZlbHlA aWRvLWNyKy1yZWNvcmQtY3VycmVudC1jb21tYW5kIGFwcGx5IGNhbGwtaW50ZXJhY3RpdmVs eSBjb21tYW5kLWV4ZWN1dGUgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5p bCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwg bmlsIG5pbCBuaWwgbmlsXSAxIFtzZWxmLWluc2VydC1jb21tYW5kIGZ1bmNhbGwtaW50ZXJh Y3RpdmVseSAiIzxzdWJyIGNhbGwtaW50ZXJhY3RpdmVseT4iIGFwcGx5IGNhbGwtaW50ZXJh Y3RpdmVseUBpZG8tY3IrLXJlY29yZC1jdXJyZW50LWNvbW1hbmQgYXBwbHkgY2FsbC1pbnRl cmFjdGl2ZWx5IGNvbW1hbmQtZXhlY3V0ZSByZWFkLWZyb20tbWluaWJ1ZmZlciBpZG8tcmVh ZC1pbnRlcm5hbCAiIzxjb21waWxlZCAweGQ5NzEwYTk3Nzc4YWU2NT4iIGFwcGx5IGlkby1j b21wbGV0aW5nLXJlYWRAaWRvLWNyKy1yZXBsYWNlIGFwcGx5IGlkby1jb21wbGV0aW5nLXJl YWQgc21leC1jb21wbGV0aW5nLXJlYWQgc21leC1yZWFkLWFuZC1ydW4gc21leCBmdW5jYWxs LWludGVyYWN0aXZlbHkgIiM8c3ViciBjYWxsLWludGVyYWN0aXZlbHk+IiBhcHBseSBjYWxs LWludGVyYWN0aXZlbHlAaWRvLWNyKy1yZWNvcmQtY3VycmVudC1jb21tYW5kIGFwcGx5IGNh bGwtaW50ZXJhY3RpdmVseSBjb21tYW5kLWV4ZWN1dGUgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWxdIDEgW3Byb2ZpbGVyLXJlcG9ydCBmdW5jYWxs LWludGVyYWN0aXZlbHkgIiM8c3ViciBjYWxsLWludGVyYWN0aXZlbHk+IiBhcHBseSBjYWxs LWludGVyYWN0aXZlbHlAaWRvLWNyKy1yZWNvcmQtY3VycmVudC1jb21tYW5kIGFwcGx5IGNh bGwtaW50ZXJhY3RpdmVseSBjb21tYW5kLWV4ZWN1dGUgZXhlY3V0ZS1leHRlbmRlZC1jb21t YW5kIHNtZXgtcmVhZC1hbmQtcnVuIHNtZXggZnVuY2FsbC1pbnRlcmFjdGl2ZWx5ICIjPHN1 YnIgY2FsbC1pbnRlcmFjdGl2ZWx5PiIgYXBwbHkgY2FsbC1pbnRlcmFjdGl2ZWx5QGlkby1j cistcmVjb3JkLWN1cnJlbnQtY29tbWFuZCBhcHBseSBjYWxsLWludGVyYWN0aXZlbHkgY29t bWFuZC1leGVjdXRlIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmls IG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBu aWwgbmlsIG5pbCBuaWwgbmlsIG5pbCBuaWwgbmlsIG5pbF0gMSBbQXV0b21hdGljXCBHQ10g MTg4KSkgKDI0MjUwIDk1MjQgMTc5MDA3IDgwMzAwMCkgbmlsXQo= --------------6B3BC16CBBDC72B8800AD96F-- From debbugs-submit-bounces@debbugs.gnu.org Tue May 12 02:42:59 2020 Received: (at 41200) by debbugs.gnu.org; 12 May 2020 06:42:59 +0000 Received: from localhost ([127.0.0.1]:53952 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jYOd1-0001VP-Ct for submit@debbugs.gnu.org; Tue, 12 May 2020 02:42:59 -0400 Received: from mout.gmx.net ([212.227.17.20]:48933) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jYOd0-0001VA-CZ for 41200@debbugs.gnu.org; Tue, 12 May 2020 02:42:58 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1589265771; bh=L9xesa8557SDVKwggRNTsMpUHnGv3TyTSFdIp7mCKVg=; h=X-UI-Sender-Class:Subject:To:References:From:Date:In-Reply-To; b=YTYc0QobqJIm73UMt35TECJoyr9ljt5jWU3cqFYPdH7zoye9abB8yVzkNXIJueKJ7 VIG2MMRO+OsQBSV3mQcQTvM0gcTFK2ardIcel1fX2bfchHBZ0UBUBKoP3zrow3Db+N 9UaX6g57j3s+c/wmHsWnuuI2mL9U12wGiBb0A1zw= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.1.101] ([212.95.5.251]) by mail.gmx.com (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1Mj8qj-1iwK7i2gnV-00fEjo; Tue, 12 May 2020 08:42:51 +0200 Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined To: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= , 41200@debbugs.gnu.org References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> From: martin rudalics Message-ID: <2050d979-369b-f546-eb48-2a34befb5602@gmx.at> Date: Tue, 12 May 2020 08:42:50 +0200 MIME-Version: 1.0 In-Reply-To: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K1:kKzGBMjsZkk4WEBo/cOtiZ7OB6T/adBNBaksU7P8XuR/ClvqZ18 YGMCBOoewqDg6ZSU6jxZ9JMrPULIH4HEu+eijy7/CSTqkCxW1miTIch8VZf1fImsjbROFKO GUiHoA6o9MC2jhMLHRToHBXVPKuW5/1w+JxKJVqpAg6vEAViSi9EXn5KQOQ26qaQbN7CF+H EHB3XCRskrWR2NGv3X9YA== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:CITVrP0ORsM=:2CCLfurWR6NqBZD0NWIphw d0Piq/QaGPWUyrbhEmS/Wa9UAertT2KwdW/56oLjMCTsNo9/t/yxxshySvjfVxlMvx2zDah0c aTwEzS0XhvrSGR1qmYodcc52N80H+UrOrT2t0tV2Lk5+iGfQ9CzbpYT/LI/TfcMURrvGc0lPD +NEEJwHOS6qf5k05SmE7iVM8q23ziWpbF/tc+GVv23Tz/Qx/a9BjIwBStdCi8NwSRT4cvnLdC ZKbep4n8jaGFsagIRuYrYTdtCN/7URzYhFY4iAO3QsyAg7foeD7nJtX18wH/payYvn4erHkeE WitJBd02x4KFrgFGaV4O17h+AdeJyksZVmnaab56gXWSPv/cJ/h/UcgrSKkHhOyLK9rqFS7Qo JtOSBx2t20aqAeksUCZ1rkXMfenrVdNwH+cAzN3Kx4IyL2UUb5bertYC/O7LfdXTWJ0XH7X5x wyVIlEXR0lqPz52fGrXo1hsLFThbRnv96xlCZiQYklWtWxmWZQPIgEtnvdjv6SNUx935H/+ip ZXURdsMaUf9mzAbW80lSb0hv+olwNggWKfPS//3NUCPTF0NdTjaiocgg8lnTxT6Hoqn9Nz8yc CModZ8xt/slDX/HVQBHVVkvSOPUNcyS/sPc6TwehWN7Kwfg8fXFMm8SagZx6QFST8TAUuWcwn ziZLpj8p9U5Qq542uC34dstRrAWcPqzFZE4q+qeuR1xRHLKxZrjmqtVQh/ioKUbVE/ZtWg3iD iMr6pRnGn1SASJkAFA71l2pryxoAjpGH8gJRWuX44RmmywnaaO9CrUIIT1Tf2JTwJ9wwSo5F+ NWCD2cXIhaZfHNdFoYpPSKG7LSj7AseaIwmIH819eD0Czj+G19oHPKCVEG5sqpjJKbiO5RN1+ tPPnx+LsHmY2x7JSY4vyG/NF5Fgcc9GMtL+H95OYpNYJ7fxNDAGJCwl0Sh8OnJzuvapyFxjQu tdRW7rmwcQ1PFI30v75DQ+iqB5Vpx77FnlAg11UOQKajG2q6/V29kQ1nhF490Xy8Ty4znlqAg hi0TO0oqG2j3N5/91Eiv26kqzpdLh7jev9Xl8bXBEm5q9051+lrZuLStW2vNsFaOPNN0XZTLe 0AX5xgQM9dY4FICciS4dZtLam9Immg/+OK/8OAyCJ52G2hArx4PMai3h+Mn0wz24ebbSzqUnQ B+Cz8vLr0wqAbSJyxkeXVo/HmtLfsJLqOKRQ0IkaXQzc193Ouy7m4r+99SBP+YHHJxRkm2c1U qeZEaVz/72gWCJfSk X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 41200 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > Is seems that defining a face makes x-show-tip a tiny bit slower, but > these effects stack. Please try with 'tooltip-reuse-hidden-frame' non-nil (there's nothing we can do about a session's first tooltip appearance, though). martin From debbugs-submit-bounces@debbugs.gnu.org Tue May 12 07:30:11 2020 Received: (at 41200) by debbugs.gnu.org; 12 May 2020 11:30:11 +0000 Received: from localhost ([127.0.0.1]:54411 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jYT6w-0000rl-K6 for submit@debbugs.gnu.org; Tue, 12 May 2020 07:30:10 -0400 Received: from mail-qt1-f170.google.com ([209.85.160.170]:43374) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jYT6u-0000k5-TQ for 41200@debbugs.gnu.org; Tue, 12 May 2020 07:30:09 -0400 Received: by mail-qt1-f170.google.com with SMTP id z90so10630212qtd.10 for <41200@debbugs.gnu.org>; Tue, 12 May 2020 04:30:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-language:content-transfer-encoding; bh=d6vgVxJGKJBlEp4f998eqUDkJdY5JfVcXnDNyuXD82s=; b=tiAyF8kcpw0UMzfDx8NlhZg1OJ/JXifwTXPHa9lIDNIbjFvhqH8oMvghfWhZf4rZVT zTCtkY4CM4uYnOilpByOITNcC0T0eAYIW487SpSMcE/AsD85W7w3D0uR3YsknVdJXFuU Ttv0B9rNLeK/7s7ucq0T69ikhU9ryCbDie5OpzRVMnV2NYH/53DmOHr07umZVzuYhhJY FLsv281pqVnjJgazlulOnboSVJqinR2etiWMtN2PUC/M7d7MOBnH+yVB0v5xSl1ri4oa i+diwQCb5vu2Zk94chmvhgbFEamfBlQxyoGqngOZW9f2At7DuHUTQuBreKuDDGf0RvMq yzag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=d6vgVxJGKJBlEp4f998eqUDkJdY5JfVcXnDNyuXD82s=; b=jU2eNTaOVwZ83D5Q7T1WSVA1V41kGBSl9egD6FzrRahouumsOeRm8ZrCZZP9MHBNnL GeWDHDGSUibHfneQb0V2h0XpPHxnahPm03whaH7e1aoAdnsTpzOSQfLOADjtTeFKFgCQ ISl9GMIPoLcxbIHDFpOnB8PgxF/ne+aBqnb9wnb43iMf61Q54f/ElMW5nJIZ4tmX41it Qgh7ftciU5xawV96mrgTBmwU+iE6xxtQ+p1R8VR6Naq2THNPsiKV1geXho667AQ1ubgO ukiPpJ/GH35dAsCKXhmxbtdOyW4d3BOo6QXvs39Q06Z4h+8czwu6SAiFiXOjZ/GPxqcv Dtpw== X-Gm-Message-State: AGi0PubCXDnqS+VDZrCr3eF1CE2t5AZZO7tXHQ2lILiYE+urwFWc6gMZ TfFBOwoZE5CXCVrMfF+6b9PrAxr1+zQ= X-Google-Smtp-Source: APiQypKY1CqxH9rxwYFjts+/Rs/f6WBDIsFt3qLYETemY5hYgjKslOkVAo3GTjiK37EKT8sLagRpvA== X-Received: by 2002:ac8:4b45:: with SMTP id e5mr21018416qts.86.1589283003211; Tue, 12 May 2020 04:30:03 -0700 (PDT) Received: from ?IPv6:2601:184:4180:66e7:4d17:b25e:8d9:2188? ([2601:184:4180:66e7:4d17:b25e:8d9:2188]) by smtp.googlemail.com with ESMTPSA id l9sm11716747qth.60.2020.05.12.04.30.02 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 12 May 2020 04:30:02 -0700 (PDT) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined To: martin rudalics , 41200@debbugs.gnu.org References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <2050d979-369b-f546-eb48-2a34befb5602@gmx.at> From: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= Message-ID: <3c3cbd2d-3a05-297a-3019-13253180a4e2@gmail.com> Date: Tue, 12 May 2020 07:30:01 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <2050d979-369b-f546-eb48-2a34befb5602@gmx.at> Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41200 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 12/05/2020 02.42, martin rudalics wrote: >> Is seems that defining a face makes x-show-tip a tiny bit slower, but >> these effects stack. > > Please try with 'tooltip-reuse-hidden-frame' non-nil (there's nothing we > can do about a session's first tooltip appearance, though). I'm not seeing a difference here. I used this code to test: (defun my-def-many-faces (nfaces) (dotimes (i nfaces) (custom-declare-face (intern (format "my-face-%d" i)) '((t)) "A face." :group 'basic-faces))) (defun my-bench-x-tip (nfaces) (setq x-gtk-use-system-tooltips nil tooltip-reuse-hidden-frame t) (my-def-many-faces nfaces) (benchmark-run 1 (x-show-tip "Test" (selected-frame) nil 5 nil nil))) From debbugs-submit-bounces@debbugs.gnu.org Tue May 12 11:13:09 2020 Received: (at 41200) by debbugs.gnu.org; 12 May 2020 15:13:09 +0000 Received: from localhost ([127.0.0.1]:56355 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jYWai-0004or-US for submit@debbugs.gnu.org; Tue, 12 May 2020 11:13:09 -0400 Received: from mout.gmx.net ([212.227.15.19]:52901) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jYWah-0004oI-5C for 41200@debbugs.gnu.org; Tue, 12 May 2020 11:13:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1589296380; bh=DiQpSvrLAsjnP+H6OMGtNVJwMiZ1SDjZ0nTfNBy1j2E=; h=X-UI-Sender-Class:Subject:To:References:From:Date:In-Reply-To; b=c2pTfcx+/hOl5KaZ2wp24myksEz3k71qgaUUSO5/WVFIaYBGGUBgTn6uYhPOXGJLO BNzf8aR7fki8/1KI29woqBqDF/H0KgJWLea1tXHO7t7BX6vTUO8g3qCqWneyWy0X4n fQHxMmAOQsYpV5DW7drindRDt6Q+ZNMJnKuQGXD8= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.1.101] ([212.95.5.251]) by mail.gmx.com (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MHXBj-1jLY9F094L-00DWoa; Tue, 12 May 2020 17:13:00 +0200 Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined To: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= , 41200@debbugs.gnu.org References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <2050d979-369b-f546-eb48-2a34befb5602@gmx.at> <3c3cbd2d-3a05-297a-3019-13253180a4e2@gmail.com> From: martin rudalics Message-ID: <94f4ec10-9ac8-b12f-9bf5-896f573161de@gmx.at> Date: Tue, 12 May 2020 17:12:58 +0200 MIME-Version: 1.0 In-Reply-To: <3c3cbd2d-3a05-297a-3019-13253180a4e2@gmail.com> Content-Type: multipart/mixed; boundary="------------F4BBAAA002A0E0E4024F980B" Content-Language: en-US X-Provags-ID: V03:K1:3ywq4wb7kdM92zPl1ATiyArEEAKGMHu0V70dhwia0xR+sZpjJTk WdZGUhIlXnPFZjegwUE3vByndfeN61MFkc6YhXrG6varhOZQbEAXTwiIbo2oOxeB6rUh5Bh 4YHQlymxLUAos7Nx//oTN6c0HDUc4Hvfcv4ChN9t7o2M0Xh+3f+GiTuQODQ88q5P1TG/Ml1 EbGuAkgiONTZMnFHtyKyA== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:jTmrtYAa73g=:2gJt2tJouH/vr4XVKcVRT4 itpI4TCGh1fMWLw6S16NtPHs/9mj16EKTWMMeGzNxt9mYnFJHnNwiGJ1gDxWXSeeFXpq077rM VnnLab71s1WShPIYbVfpfn0g4tPSFs40JJLfTeOIPMYkTZP3x496FEEWh3jlHYNuZfpJ67m5r EcqDLoMRPqqhW09Ljv2Czg5PvnFpztQM0flBiBVoiABiQWEPonsl3m05GbiGHCJAwR2Y1eEB3 R8bMrLPYToVbj16rfF0NwpzkBXsvRj/uzll7SYaTb9UtPmSjhT+X7IJCn6Xk0/sUfMDNmYbBG pi+41ZtjMKjhxhL2C3zxOHIebMv7I2CaPCy1DoIG1z0csUaaff0X13UdXc0bcT69HlmMiq3WY ZHDup9bjKfaZxZrtmeqpcgc9xgVkBGaBJFODYi81zbr61Wj0ugk0eWZYBSPAOcRUQeYa+h0ZL KByUFUKBholeGz1i5+XPIoVIYgT0CyOha8d/ILceImguZnDrXKEEGLdAz5Vvu1rdNrk/uFVuY zRn3ScR+VvK8imfhByF0Xb6MZg5NiNYe0MA7PPxPnK08yQH7hbIMJ/3zXki0XGz5HwpyEOyCr x7fkAgVIsxAmT0pNfrpLr+zmodiFdQI9VMvbZBuUlTam4nwjlmnnAMlp6EVpPsNkemcvP1Oav Lhh36mzGutwaS8EWdEGC8CXSa6etNSnAKC+e53DkbOtkQn/ZJTZOW5mTXL3G7XA5jM8UpTIAn Bh6353Uhb0m3SxmBSDpCqlKUip4cO9umJ59N9RhE9YkuKXYx5VkAA7DnPNLkqMXE411IRh7Iq /7Tx+vWS4HW77CqwRs7utl1qfu7FIxx7YimraBVtXJ26h/+4g+8TmCg4dHETbKOo2mSUNsoUA bPdo0c6jEt8+JN8m/2b63DZSwHET+jLaHC7s/tltIHaDXsQQXTqnlNZC9GY/CSYM75Cxn9vDu EOVU3VYNpmYcrjXKpWmz33/nxnrA5LBNyKLw6L4/oKcCWJWtXtnY7nGJifbhyhNHCDyHn7yl+ uajoYWAi/DYt69xRPL7o7iIvVid2ESeLVFyDOeppOqz0jCyljed9R/a4tWAyQRLpyapOFpNP2 Bbzh8uMuGVbOclRNm+PqtVaHaVisfbujQGS5Bil7//s8GVBLDe0Urbu9ymiBWOr3yASArbdkI 0CKnPRdIlbxQOXwKxRNySWrZCGCkkgQZte5cr1t+04Gl+w+XpVLu74plDHMUZIupuXQniEZks zpW9xuvLczbD8IFev X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 41200 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) This is a multi-part message in MIME format. --------------F4BBAAA002A0E0E4024F980B Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit >> Please try with 'tooltip-reuse-hidden-frame' non-nil (there's nothing we >> can do about a session's first tooltip appearance, though). > > I'm not seeing a difference here. I used this code to test: Looks like a devastating bug in the GTK builds. Can you try with the attached patch? Thanks, martin --------------F4BBAAA002A0E0E4024F980B Content-Type: text/x-patch; name="tooltip-hide.diff" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="tooltip-hide.diff" diff --git a/src/xfns.c b/src/xfns.c index a5431aa890..a8cdd66b57 100644 =2D-- a/src/xfns.c +++ b/src/xfns.c @@ -6748,7 +6748,8 @@ x_hide_tip (bool delete) /* Reset tip_last_frame, it will be reassigned when showing the next GTK+ system tooltip. */ - tip_last_frame =3D Qnil; + if (x_gtk_use_system_tooltips) + tip_last_frame =3D Qnil; /* Now look whether there's an Emacs tip around. */ if (FRAMEP (tip_frame)) --------------F4BBAAA002A0E0E4024F980B-- From debbugs-submit-bounces@debbugs.gnu.org Tue May 12 11:28:30 2020 Received: (at 41200) by debbugs.gnu.org; 12 May 2020 15:28:30 +0000 Received: from localhost ([127.0.0.1]:56360 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jYWpa-0005DN-8M for submit@debbugs.gnu.org; Tue, 12 May 2020 11:28:30 -0400 Received: from eggs.gnu.org ([209.51.188.92]:35666) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jYWpY-0005D7-Kj for 41200@debbugs.gnu.org; Tue, 12 May 2020 11:28:29 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:43200) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jYWpT-0000yJ-CX; Tue, 12 May 2020 11:28:23 -0400 Received: from [176.228.60.248] (port=1750 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jYWpN-0002Yc-Cb; Tue, 12 May 2020 11:28:19 -0400 Date: Tue, 12 May 2020 18:27:57 +0300 Message-Id: <83lflx896q.fsf@gnu.org> From: Eli Zaretskii To: =?utf-8?Q?Cl=C3=A9ment?= Pit-Claudel In-Reply-To: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> (message from =?utf-8?Q?Cl=C3=A9ment?= Pit-Claudel on Tue, 12 May 2020 00:30:23 -0400) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 41200 Cc: 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Resent-From: Clément Pit-Claudel > Original-Sender: "Debbugs-submit" > Resent-CC: bug-gnu-emacs@gnu.org > Resent-Sender: help-debbugs@gnu.org > From: Clément Pit-Claudel > Date: Tue, 12 May 2020 00:30:23 -0400 > > > [1:text/plain Hide] > > Hi all, > > (defun my-def-many-faces (nfaces) > (dotimes (i nfaces) > (custom-declare-face > (intern (format "my-face-%d" i)) > '((t)) "A face." > :group 'basic-faces))) > > (defun my-bench-x-tip (nfaces) > (setq x-gtk-use-system-tooltips nil) > (my-def-many-faces nfaces) > (benchmark-run 1 (x-show-tip "Test" (selected-frame) nil 5 nil nil))) > > (my-bench-x-tip 100) ;; ⇒ (0.035934318 1 0.015908304000000012) > (my-bench-x-tip 200) ;; ⇒ (0.049593474 1 0.01508625500000002) > (my-bench-x-tip 300) ;; ⇒ (0.094929297 2 0.03376510099999999) > (my-bench-x-tip 400) ;; ⇒ (0.094900665 2 0.03254889999999999) > (my-bench-x-tip 500) ;; ⇒ (0.118183442 2 0.03218763600000002) > (my-bench-x-tip 600) ;; ⇒ (0.154759438 3 0.04923829399999996) > (my-bench-x-tip 700) ;; ⇒ (0.183241646 3 0.04901039700000004) > (my-bench-x-tip 800) ;; ⇒ (0.212218872 3 0.050182316999999976) > (my-bench-x-tip 900) ;; ⇒ (0.248743542 3 0.04915146899999995) > (my-bench-x-tip 1000) ;; ⇒ (0.29221963 3 0.04943874300000006) > (my-bench-x-tip 1100) ;; ⇒ (0.334084605 3 0.05403986499999991) > (my-bench-x-tip 1200) ;; ⇒ (0.397292289 4 0.06869684599999992) > (my-bench-x-tip 1300) ;; ⇒ (0.442873256 4 0.06865671799999995) > (my-bench-x-tip 1400) ;; ⇒ (0.492474982 4 0.06888139900000001) > (my-bench-x-tip 1500) ;; ⇒ (0.579180262 5 0.08583425400000011) > (my-bench-x-tip 1600) ;; ⇒ (0.63504114 5 0.08973981699999989) > (my-bench-x-tip 1700) ;; ⇒ (0.723722857 5 0.09094433899999999) > (my-bench-x-tip 1800) ;; ⇒ (0.791952279 5 0.08777533800000015) > (my-bench-x-tip 1900) ;; ⇒ (0.902377982 6 0.10768666300000018) > (my-bench-x-tip 2000) ;; ⇒ (0.998815784 6 0.11384837999999986) > > Be sure to run it in emacs -q, not emacs -Q, because emacs -Q ignores X resources and hence skips the body of make-face-x-resource-internal, which contributes greatly to the issue. > For some reasons the effects are a bit worse in my config — roughly a factor 3 to 5 (I have 600 faces defined, and each tooltip takes .5s to display). The profiles below suggest that face-spec-set-2 is called in my config, but not in my repro, which could explain part of the difference. > > This is what the profile in emacs -q looks like: > > - command-execute 1742 97% > - call-interactively 1742 97% > - funcall-interactively 1720 96% > - eval-defun 1711 95% > - elisp--eval-defun 1711 95% > - eval-region 1711 95% > - let 1711 95% > - list 1711 95% > - let 1711 95% > - x-show-tip 1708 95% > - face-set-after-frame-default 1708 95% > - face-spec-recalc 1654 92% > - make-face-x-resource-internal 1414 78% > - set-face-attributes-from-resources 1413 78% > - set-face-attribute-from-resource 1394 77% > - face-name 1353 75% > - check-face 1348 75% > facep 1344 75% If you look at internal-lisp-face-p, which is the workhorse of facep, you will see that it does the moral equivalent of (assq FACE (frame-face-alist)) (The code is actually in a subroutine called by internal-lisp-face-p.) Which means face-set-after-frame-default, which loops over all of the faces, runs with O(n²) complexity in the number of faces. So I think if we want to support such large amounts of faces, we should not store them in alists, but in a more efficient data structure. > Configured using: > 'configure -C' > > Configured features: > XPM JPEG TIFF GIF PNG RSVG CAIRO SOUND GPM DBUS GSETTINGS GLIB NOTIFY > INOTIFY ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE HARFBUZZ M17N_FLT LIBOTF > ZLIB TOOLKIT_SCROLL_BARS GTK3 X11 XDBE XIM MODULES THREADS LIBSYSTEMD > JSON PDUMPER LCMS2 GMP No Emacs version information? From debbugs-submit-bounces@debbugs.gnu.org Tue May 12 13:19:16 2020 Received: (at 41200) by debbugs.gnu.org; 12 May 2020 17:19:16 +0000 Received: from localhost ([127.0.0.1]:56430 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jYYYl-0001jm-SG for submit@debbugs.gnu.org; Tue, 12 May 2020 13:19:16 -0400 Received: from mail-qv1-f50.google.com ([209.85.219.50]:47066) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jYYYk-0001ja-4L for 41200@debbugs.gnu.org; Tue, 12 May 2020 13:19:14 -0400 Received: by mail-qv1-f50.google.com with SMTP id 59so6800749qva.13 for <41200@debbugs.gnu.org>; Tue, 12 May 2020 10:19:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-language:content-transfer-encoding; bh=C2LaFqQvUtRHvd1w/RnVymdADGdMExGxFy71UPiTFU4=; b=PLNEGsTb/64RRZIyDkNkMsEai9RjQ5X6oKdTvHtBSI9JQUcrLT4Kxfm0m0DetcLdHH Dr4wX/dM3lRsGUt+aIj2K+ZjoTp2DynPzTfIJmd7sgHn5qLtI3VqvxnWl6TUlS+GRo1L i8KHqKYypm508CmgJ2KZoZs63K6CJVZwGvq8eVGDNCk0D0Kq6QTDv8FKe2up/i36/uyb HovWCDLtkHrx9qwalLVeR790S6aWmEhssggQKtyIi6U14Q+hupRsk+ARQihXTZ2NQL1T E7LV8gMJ55SUdhjUEmcDv0psyHuOO7aFfcBEf4RCgFQmUPrRjIDxBtGGLoJd3/gUFUwJ jJjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=C2LaFqQvUtRHvd1w/RnVymdADGdMExGxFy71UPiTFU4=; b=oKrS7IIFgadiPF6jyKa9ILe4Xm7o1kw2dUvR1xlBfAoIIwCHIO04BikKjgb6+TWpKX gLPlbLfsxZnUq4n2Y2MsnTlFykS4ed8YVunl3H2Aars/BmaSWLr1GWX9IeHUhtJgwbDx IvhLRoPgpiEqnleyIKqfNeIHVI2TsWHUdtGzjogWK8M4drjPLrdKlY86py2F46Vrq/e2 vQuU5bs5ESVyTZjQVIswwZNjsesbtWNJzHJrDeL3aja4Vv9SNb8H1xtylC6z60r73tiT lm9pxaInkmNPD7pg1p/SilYwQIMlPQHUG8AIOA8LansZhcU/FKEvQcI47PyvP8pgRx94 zLIQ== X-Gm-Message-State: AGi0Pubb0AcmGBIn96gtKi47TuD4dIa0RuqrHURX5JH0COOVmuY3sF75 aUOgr/BObQkpVVrU7Hvm01lsziGoL2M= X-Google-Smtp-Source: APiQypK48oIBDNRq2CUhdVVldkHkZpivbmtzdhzaRzAGr9iEHklvZ9rDep44pfbk+dHuPdYzOO4rTg== X-Received: by 2002:a05:6214:14e2:: with SMTP id k2mr22287811qvw.142.1589303948495; Tue, 12 May 2020 10:19:08 -0700 (PDT) Received: from ?IPv6:2601:184:4180:66e7:4d17:b25e:8d9:2188? ([2601:184:4180:66e7:4d17:b25e:8d9:2188]) by smtp.googlemail.com with ESMTPSA id x22sm12365181qtr.57.2020.05.12.10.19.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 12 May 2020 10:19:07 -0700 (PDT) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined To: martin rudalics , 41200@debbugs.gnu.org References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <2050d979-369b-f546-eb48-2a34befb5602@gmx.at> <3c3cbd2d-3a05-297a-3019-13253180a4e2@gmail.com> <94f4ec10-9ac8-b12f-9bf5-896f573161de@gmx.at> From: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= Message-ID: <49ee1a74-2bbc-47b0-6db0-1a2489091c3f@gmail.com> Date: Tue, 12 May 2020 13:19:06 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <94f4ec10-9ac8-b12f-9bf5-896f573161de@gmx.at> Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 8bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41200 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 12/05/2020 11.12, martin rudalics wrote: >>> Please try with 'tooltip-reuse-hidden-frame' non-nil (there's nothing we >>> can do about a session's first tooltip appearance, though). >> >> I'm not seeing a difference here.  I used this code to test: > > Looks like a devastating bug in the GTK builds.  Can you try with the > attached patch? > > Thanks, martin Indeed, with tooltip-reuse-hidden-frame t and your patch, creating a tooltip is instantaneous (after the first tooltip is created) The docstring suggests that with this option, results won't always be correct. Is there a chance that we could rebuild the frame when needed and then make that option the default? From debbugs-submit-bounces@debbugs.gnu.org Tue May 12 13:43:01 2020 Received: (at 41200) by debbugs.gnu.org; 12 May 2020 17:43:01 +0000 Received: from localhost ([127.0.0.1]:56463 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jYYvl-0002OZ-8F for submit@debbugs.gnu.org; Tue, 12 May 2020 13:43:01 -0400 Received: from mout.gmx.net ([212.227.17.21]:42777) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jYYvj-0002OM-NT for 41200@debbugs.gnu.org; Tue, 12 May 2020 13:43:00 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1589305373; bh=0M5uE37pchtIP3t02a4ow0WpWvHe4X/Xbdj6PIQPCQA=; h=X-UI-Sender-Class:Subject:To:References:From:Date:In-Reply-To; b=LEQJuYI2HSu4jOL4Q5Of7PSNykpPKt0WIaqDZmD93D7wnjG64Hffc5E+51Sn9xXTa JN+vmnjQPrphcPRC25EyypvT+4yiu1Fmv09h7Vqk3eu48367YfRHZwbBVbcbt2sVop upiZavsXZOXkTUcpHNsuXpSp4HL2vGj53LxmybA0= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.1.101] ([212.95.5.251]) by mail.gmx.com (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1M4s51-1jZOXa1MZz-0021zP; Tue, 12 May 2020 19:42:53 +0200 Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined To: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= , 41200@debbugs.gnu.org References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <2050d979-369b-f546-eb48-2a34befb5602@gmx.at> <3c3cbd2d-3a05-297a-3019-13253180a4e2@gmail.com> <94f4ec10-9ac8-b12f-9bf5-896f573161de@gmx.at> <49ee1a74-2bbc-47b0-6db0-1a2489091c3f@gmail.com> From: martin rudalics Message-ID: <18cd985b-5a76-2274-1783-8c8cad6395e6@gmx.at> Date: Tue, 12 May 2020 19:42:52 +0200 MIME-Version: 1.0 In-Reply-To: <49ee1a74-2bbc-47b0-6db0-1a2489091c3f@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K1:SON8cpiPfHuEsSHV4lCSUBVWg+7fC7PeyVu06ZVOpee+kWN1+3J cBJTPQmDxunw9o3Af9vjwwlmARCyNUOZQuJqCd3Kiqut13dwMWp5RNx9Ha0OpuWb4d9UyLD g+FM6VtDLrP8zKv30VJrJpzTHTW2IY5WzUgEaWPqnvpUVwIaWZCn1/QLwECu1gknF66dsEb 7fXstk0UF+8DUoW+z2evg== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:YrQNbWEann0=:tPYgzwAUXdOszwrr1H3K/v 5rGTizbsjzJIffTr2G7lu3/9xI0rvge2ht6CQnxilMibmQj8t416Gcumo4GuTgiq80qDyHIpM wFhXENVQ3E1IsB1GZ3W9EZ/TIf4JsLDvJSRbhoCxvxLAvfQN4UKXsQM8ydn2FXdxW83zmXuLR eeumg8UkmjZfrRTFScAWX9BASGnPzfZdDXh7Z0AJ3LJ9qDK6lcnXZL6CV6eyjYG2P8R4TrjvN Zfq2JmxCPy1DMhihZ9KPuMbBxEMUYX/O63uHd63mb04hmQfdOHFy6Yay3BPXNYXkeYwo644g+ fDD/lD16D+q/DrY7NHToxZAijWssLLgT1VDlgAyOI/wPZryeDQRHR966sr7GqA6VLcwP8PPoS i+kVbuqWLMKbPLeGYErG+xk3oHJ7P3mCGRtlNZ+HhR/pA56MW1Rarjvp+bpdEJGfef6nQSo3j LXxZDU4WeTFBNWTOPDBqdsDLvSmmDCmcJr/SxkAylqoOA6/A5OXloLX2GRLUF15pjbRN2ndyI SFn7a0YsnpIftyD97dsJIfDndViL1aTtklFF3YrjL+TUt8dVT8jAdZMLpIl2HQvAIdwydrtZ9 oWFTs9e4v1atQNt76onQaHOWnviJ5jux/lDkFXeD6IUHulkawVgNq4eSHejL7jT3XjwsM7KfX S5Ux5UjyRK9MqX5+HcU1g7OkvLt4BfFFdS+ktNLfixlEk7ra2HVtTGxBQ4KTq3Susy4MiiDzH hJDGbqniqyFDyYDI9fk8sUqm5hi/dbZMTfGPfsPuTSKgQCdv10EXSbuSyoIlJEAD4fAWxRRlp ChystGgErV8+immOGBPNMo7fAu7fD7DLaES0ORMzdKJe0euUZTirinvj4HMUppFJM6nccv7yc xM0C6ldU266XmnO1V5ABp5i5uIL45tl0aM7MSJUby45PfuAHOG66Pm6CfFoTY+UrzZivXT/u7 MyB0ERPA1dItbMHrBnXa4+ZN8Ng+FNH//qLTrlIDwuIn7ZX8ow3SyRE6X09R9wWX+bN79pKjW zrakaRzkKmhSsSCfafdKKOWJQu+bBdbv0VcUmKMkZA7HEPO8ZYohNyQyRPLnj5sVWNldS/8+Y Q0cSwT7XGNPHyGYREekeuaoffJu+K95tm6uVtvT5dcVCsvojT2E6aE+Ie9yy9NXr8g5r5tBdc oqYdg+nhTOzMXXOEnPIxk9e8a2IarbM5mwmb9B5+UEtUv5l1r+As6cIf5rUl/uTllPVs2skNH jGAITlkb8N2Lf9pmd X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 41200 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > Indeed, with tooltip-reuse-hidden-frame t and your patch, creating a > tooltip is instantaneous (after the first tooltip is created) Eli, any problems to fix this in Emacs 27? > The docstring suggests that with this option, results won't always be > correct. Is there a chance that we could rebuild the frame when > needed and then make that option the default? It depends on what "when needed" stands for. Basically, the results may be incorrect when some sort of face change happens. But, as I recently mentioned in another thread, the code not reusing a hidden frame already fails picking up an internal border face specified via (set-face-background 'internal-border "red") so such annoyances are already present in the default code. In principle, you can always add or remove some non-position-specifying alist entry and the tooltip frame will be recreated from scratch. So if we can identify the "when needed", it should be easy to add such an entry and remove it as soon as the next tooltip frame has been created. martin From debbugs-submit-bounces@debbugs.gnu.org Tue May 12 13:58:49 2020 Received: (at 41200) by debbugs.gnu.org; 12 May 2020 17:58:49 +0000 Received: from localhost ([127.0.0.1]:56476 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jYZB2-0002oD-W0 for submit@debbugs.gnu.org; Tue, 12 May 2020 13:58:49 -0400 Received: from eggs.gnu.org ([209.51.188.92]:60668) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jYZB1-0002nz-1u for 41200@debbugs.gnu.org; Tue, 12 May 2020 13:58:47 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:46772) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jYZAv-0003yz-JZ; Tue, 12 May 2020 13:58:41 -0400 Received: from [176.228.60.248] (port=3111 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jYZAu-0002LE-4W; Tue, 12 May 2020 13:58:40 -0400 Date: Tue, 12 May 2020 20:58:19 +0300 Message-Id: <83zhad6nno.fsf@gnu.org> From: Eli Zaretskii To: martin rudalics In-Reply-To: <18cd985b-5a76-2274-1783-8c8cad6395e6@gmx.at> (message from martin rudalics on Tue, 12 May 2020 19:42:52 +0200) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <2050d979-369b-f546-eb48-2a34befb5602@gmx.at> <3c3cbd2d-3a05-297a-3019-13253180a4e2@gmail.com> <94f4ec10-9ac8-b12f-9bf5-896f573161de@gmx.at> <49ee1a74-2bbc-47b0-6db0-1a2489091c3f@gmail.com> <18cd985b-5a76-2274-1783-8c8cad6395e6@gmx.at> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 41200 Cc: cpitclaudel@gmail.com, 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: martin rudalics > Date: Tue, 12 May 2020 19:42:52 +0200 > > > Indeed, with tooltip-reuse-hidden-frame t and your patch, creating a > > tooltip is instantaneous (after the first tooltip is created) > > Eli, any problems to fix this in Emacs 27? No, please go ahead. From debbugs-submit-bounces@debbugs.gnu.org Tue May 12 22:41:35 2020 Received: (at 41200) by debbugs.gnu.org; 13 May 2020 02:41:35 +0000 Received: from localhost ([127.0.0.1]:57006 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jYhKw-000272-6q for submit@debbugs.gnu.org; Tue, 12 May 2020 22:41:35 -0400 Received: from mail-qk1-f175.google.com ([209.85.222.175]:39341) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jYhKu-00026j-7T for 41200@debbugs.gnu.org; Tue, 12 May 2020 22:41:33 -0400 Received: by mail-qk1-f175.google.com with SMTP id a136so6984529qkg.6 for <41200@debbugs.gnu.org>; Tue, 12 May 2020 19:41:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language; bh=yi61qkNXk+D9+Dvj1IhmA+DARRUctBqYF6aadcg/PeE=; b=PZ3iBCNWPMW+W5tsPC7zQFbMWyqbA0tkUcgsZPSLMlPggA4txkDnRa0LQAXB2/KFQc S83rOQl2dRaoydTml/rY5ukOc7lTcF76n/m8B+xgxP9//aVZ34WSUCWJvM68tI/TIvMb Io+MCdkiLjEX+BOeO9imUdL/VkbfqbaUu4jNz6Dm3My2/Hxb3dmDTBblQw6zMw04SNwy yc4Yf7IX/0Du/mVw0w/+ylfGrQjxNtB6MGKoUbf66DkSunvwrnpvoYBjpWtJmzq15UmA nYa0ocWskhB/dewLjNs/3E7Fuqo/q2BfJMCIlCeXaPwtQcATa5z/D4nSTWmf4llTISoI hYJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language; bh=yi61qkNXk+D9+Dvj1IhmA+DARRUctBqYF6aadcg/PeE=; b=orw5jV7KET137JrY5IcR0gMJf50gH+Al8Gm16dw1vZrxzZrfvLg6RLgn0OxbKu6vGn Z8EKlLia6nbT/XSysWhxNN6qMI6cgl4hJXf+YPGw19U9ZUJZXVrZERGHxngH50i/h+py dC7RmVT/AB0hAhqMCAnWVNuTYVE+kQ6pBfgoh214n6G5DXRvpVu6IYSMzCX2nZYPMYBx JJGaOvXQjrgJE1ECMTr45FkRLlsuEuif8fh2tOq1lZzd4srJGRQ5t9eqz/v06RuGqmjL UMt3kW4IXeH+TnG2ArgCgG0vQNZ3PSHrA3wWyJ56lq0Uo6F10vKzANmz090uhLoJyMCt 3CKw== X-Gm-Message-State: AGi0Pub98WMi8agnSiG8XXVuKKGQLZqxixKLjMIG8yMuEGw981bOGVTa eh8ihuCNMgx+wDczBPHX+ASZnDdCmvE= X-Google-Smtp-Source: APiQypKxIKYxyN4PqAFt5yT9SKqBFarjz0yCeCcfk3GbSZEdyFC0gAqkWGk/09vSdDy25y9ush0MeA== X-Received: by 2002:a37:48c8:: with SMTP id v191mr22458155qka.268.1589337686278; Tue, 12 May 2020 19:41:26 -0700 (PDT) Received: from ?IPv6:2601:184:4180:66e7:4d17:b25e:8d9:2188? ([2601:184:4180:66e7:4d17:b25e:8d9:2188]) by smtp.googlemail.com with ESMTPSA id e3sm1992203qtg.61.2020.05.12.19.41.25 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 12 May 2020 19:41:25 -0700 (PDT) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined To: Eli Zaretskii References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> From: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= Message-ID: Date: Tue, 12 May 2020 22:41:24 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <83lflx896q.fsf@gnu.org> Content-Type: multipart/mixed; boundary="------------203724E7FFC950361B806F14" Content-Language: en-GB X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41200 Cc: 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is a multi-part message in MIME format. --------------203724E7FFC950361B806F14 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit On 12/05/2020 11.27, Eli Zaretskii wrote: > (The code is actually in a subroutine called by internal-lisp-face-p.) > Which means face-set-after-frame-default, which loops over all of the > faces, runs with O(n²) complexity in the number of faces. > > So I think if we want to support such large amounts of faces, we > should not store them in alists, but in a more efficient data > structure. Indeed, you're completely right; thanks! Replacing face_alist and Vface_new_frame_defaults with hash tables makes the worst example about 10 times faster, and with that change tooltips now take 30 to 50ms to display instead of 500-600ms in my real-life use case (my usual config). I have attached a patch. I left a few questions in the code; I hope that's OK. I have a few more questions that are not part of the code: * I removed the function frame-face-alist and changed the type of the variable face-new-frame-defaults. Both were documented as internal. Should I add an ELisp implementation of frame-face-alist for compatibility? (It wouldn't be a perfect shim, since modifying its return value wouldn't do the same). For face-new-frame-defaults it's a bit trickier, since the variable now holds a hash table. Should I change its name to make the change obvious, at least? * The name face_hash isn't ideal, since there's already a distinct notion of face hashes (hash codes). Can you think of a better name? * I imagine that this change needs to be advertised somewhere, but I'm not sure where; NEWS? Lastly, do the following new profiles suggest other opportunities for improvement? - ... 499 52% Automatic GC 499 52% - command-execute 454 47% - call-interactively 454 47% - funcall-interactively 433 45% - eval-defun 427 44% - elisp--eval-defun 427 44% - eval-region 426 44% - my-bench-x-tip 426 44% - let 406 42% - list 406 42% - let 406 42% - x-show-tip 390 40% - face-set-after-frame-default 387 40% - face-spec-recalc 374 39% - make-face-x-resource-internal 296 30% - set-face-attributes-from-resources 273 28% - set-face-attribute-from-resource 219 22% + face-name 65 6% + face-spec-reset-face 62 6% + face-spec-set-2 6 0% + face-spec-choose 2 0% + face-list 2 0% + frame-windows-min-size 1 0% + my-def-many-faces 20 2% + end-of-defun 1 0% + execute-extended-command 6 0% + byte-code 21 2% + redisplay_internal (C function) 2 0% tooltip-hide 1 0% - command-execute 768 80% - call-interactively 768 80% - apply 768 80% - call-interactively@ido-cr+-record-current-command 768 80% - apply 768 80% - # 768 80% - funcall-interactively 768 80% - eval-defun 715 74% - apply 713 74% - # 712 74% - elisp--eval-defun 712 74% - eval-region 709 74% - apply 709 74% - # 709 74% - endless/eval-overlay 709 74% - apply 709 74% - # 707 74% - my-bench-x-tip 707 74% - let 689 72% - list 689 72% - let 689 72% - x-show-tip 676 70% - face-set-after-frame-default 674 70% - face-spec-recalc 660 69% - face-spec-set-2 350 36% - apply 348 36% - set-face-attribute 342 35% - internal-set-lisp-face-attribute 342 35% - frame-set-background-mode 331 34% - face-spec-recalc 284 29% - make-face-x-resource-internal 235 24% - set-face-attributes-from-resources 216 22% - set-face-attribute-from-resource 174 18% - face-name 36 3% + check-face 21 2% + face-spec-reset-face 40 4% + face-spec-set-2 4 0% + face-attr-match-p 24 2% face-spec-choose 1 0% + face-list 1 0% - make-face-x-resource-internal 248 25% - set-face-attributes-from-resources 215 22% - set-face-attribute-from-resource 169 17% + face-name 36 3% + face-spec-reset-face 54 5% + face-spec-choose 2 0% + face-list 1 0% + my-def-many-faces 18 1% + beginning-of-defun 1 0% end-of-defun 1 0% + # 2 0% + smex 53 5% - ... 182 19% Automatic GC 182 19% + redisplay_internal (C function) 3 0% Also, since the GC seems to be a significant part, here's a memory profile: - command-execute 305,314,261 99% - call-interactively 305,314,261 99% - funcall-interactively 305,262,257 99% - eval-defun 303,318,241 98% - elisp--eval-defun 303,317,185 98% - eval-region 303,296,332 98% - my-bench-x-tip 303,295,276 98% - let 273,049,377 89% - list 273,049,377 89% - let 273,049,377 89% - x-show-tip 177,538,262 57% - face-set-after-frame-default 175,519,190 57% - face-spec-recalc 174,935,046 57% - make-face-x-resource-internal 138,435,960 45% + set-face-attributes-from-resources 138,407,728 45% + face-spec-reset-face 36,126,838 11% + face-spec-choose 74,360 0% + face-spec-set-2 21,216 0% + face-list 554,400 0% + frame-windows-min-size 7,676 0% + run-at-time 4,352 0% setq 4,224 0% + float-time 3,888 0% + my-def-many-faces 30,245,899 9% + internal-macroexpand-for-load 1,056 0% + end-of-defun 4,160 0% + beginning-of-defun 2,112 0% + execute-extended-command 1,944,016 0% + byte-code 52,004 0% + redisplay_internal (C function) 1,427,117 0% > No Emacs version information? Woops. Sorry! GNU Emacs 28.0.50 (build 10, x86_64-pc-linux-gnu, GTK+ Version 3.22.30, cairo version 1.15.10) of 2020-05-10 Thanks again for the pointers, Clément. --------------203724E7FFC950361B806F14 Content-Type: text/x-patch; charset=UTF-8; name="0001-Store-frame-faces-in-hash-tables-instead-of-alists.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename*0="0001-Store-frame-faces-in-hash-tables-instead-of-alists.patc"; filename*1="h" >From 6d3d5d94189ae31fdbc29b2db0707d6b13a5c362 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pit-Claudel?= Date: Tue, 12 May 2020 21:48:32 -0400 Subject: [PATCH] Store frame faces in hash tables instead of alists * lisp/emacs-lisp/edebug.el (edebug-eval-defun): * lisp/progmodes/elisp-mode.el (elisp--eval-defun-1): * lisp/faces.el (face-list): * lisp/frame.el (frame-set-background-mode): Update to work with hash tables instead of alists. * src/frame.h (struct frame): Remove face_alist, add face_hash. (fset_face_alist): Remove. (fset_face_hash): New function. * src/frame.c (make_frame): Initialize f->face_hash. (Fmake_terminal_frame): Update to work with hash tables instead of alists. * src/xfaces.c (lface_from_face_name_no_resolve): (Finternal_make_lisp_face): (update_face_from_frame_parameter): Update to work with hash tables instead of alists. * src/xfaces.c (Fframe_face_hash): New function. (Fframe_face_alist): Remove. (init_xfaces): Compute face IDs from they face property, not from their position in face_alist. (syms_of_xfaces): Remove frame_face_alist, add frame_face_hash; change Vface_new_frame_defaults into a hash table. --- lisp/emacs-lisp/edebug.el | 3 +- lisp/faces.el | 4 ++- lisp/frame.el | 2 +- lisp/progmodes/elisp-mode.el | 3 +- src/frame.c | 21 ++++++++---- src/frame.h | 8 ++--- src/xfaces.c | 64 ++++++++++++++++++++---------------- 7 files changed, 59 insertions(+), 46 deletions(-) diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el index 78461185d3..97ca964eef 100644 --- a/lisp/emacs-lisp/edebug.el +++ b/lisp/emacs-lisp/edebug.el @@ -488,8 +488,7 @@ edebug-eval-defun (set-default (nth 1 form) (eval (nth 2 form) lexical-binding))) ((eq (car form) 'defface) ;; Reset the face. - (setq face-new-frame-defaults - (assq-delete-all (nth 1 form) face-new-frame-defaults)) + (remhash (nth 1 form) face-new-frame-defaults) (put (nth 1 form) 'face-defface-spec nil) (put (nth 1 form) 'face-documentation (nth 3 form)) ;; See comments in `eval-defun-1' for purpose of code below diff --git a/lisp/faces.el b/lisp/faces.el index e707f6f4b6..1764f3da75 100644 --- a/lisp/faces.el +++ b/lisp/faces.el @@ -179,7 +179,9 @@ face-font-registry-alternatives (defun face-list () "Return a list of all defined faces." - (mapcar #'car face-new-frame-defaults)) + (let ((faces nil)) + (maphash (lambda (face _) (push face faces)) face-new-frame-defaults) + (nreverse faces))) (defun make-face (face) "Define a new face with name FACE, a symbol. diff --git a/lisp/frame.el b/lisp/frame.el index 6c2f774709..bab3c2a1c2 100644 --- a/lisp/frame.el +++ b/lisp/frame.el @@ -1227,7 +1227,7 @@ frame-set-background-mode ;; during startup with -rv on the command ;; line for the initial frame, because frames ;; are not recorded in the pdump file. - (assq face (frame-face-alist)) + (gethash face (frame-face-hash)) (face-spec-match-p face (face-user-default-spec face) ;; FIXME: why selected-frame and diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el index b737134f90..dc8688c864 100644 --- a/lisp/progmodes/elisp-mode.el +++ b/lisp/progmodes/elisp-mode.el @@ -1304,8 +1304,7 @@ elisp--eval-defun-1 ((eq (car form) 'custom-declare-face) ;; Reset the face. (let ((face-symbol (eval (nth 1 form) lexical-binding))) - (setq face-new-frame-defaults - (assq-delete-all face-symbol face-new-frame-defaults)) + (remhash face-new-frame-defaults face-symbol) (put face-symbol 'face-defface-spec nil) (put face-symbol 'face-override-spec nil)) form) diff --git a/src/frame.c b/src/frame.c index c871e4fd99..4423965a01 100644 --- a/src/frame.c +++ b/src/frame.c @@ -946,6 +946,11 @@ make_frame (bool mini_p) rw->total_lines = mini_p ? 9 : 10; rw->pixel_height = rw->total_lines * FRAME_LINE_HEIGHT (f); + // QUESTION: is this where this should be initialized? + fset_face_hash + (f, make_hash_table(hashtest_eq, DEFAULT_HASH_SIZE, DEFAULT_REHASH_SIZE, + DEFAULT_REHASH_THRESHOLD, Qnil, Qnil)); + if (mini_p) { mw->top_line = rw->total_lines; @@ -1254,7 +1259,7 @@ DEFUN ("make-terminal-frame", Fmake_terminal_frame, Smake_terminal_frame, { struct frame *f; struct terminal *t = NULL; - Lisp_Object frame, tem; + Lisp_Object frame; struct frame *sf = SELECTED_FRAME (); #ifdef MSDOS @@ -1336,14 +1341,16 @@ DEFUN ("make-terminal-frame", Fmake_terminal_frame, Smake_terminal_frame, store_in_alist (&parms, Qminibuffer, Qt); Fmodify_frame_parameters (frame, parms); - /* Make the frame face alist be frame-specific, so that each + /* Make the frame face hash be frame-specific, so that each frame could change its face definitions independently. */ - fset_face_alist (f, Fcopy_alist (sf->face_alist)); - /* Simple Fcopy_alist isn't enough, because we need the contents of - the vectors which are the CDRs of associations in face_alist to + fset_face_hash (f, Fcopy_hash_table (sf->face_hash)); + /* Simple copy_hash_table isn't enough, because we need the contents of + the vectors which are the values in face_hash to be copied as well. */ - for (tem = f->face_alist; CONSP (tem); tem = XCDR (tem)) - XSETCDR (XCAR (tem), Fcopy_sequence (XCDR (XCAR (tem)))); + ptrdiff_t idx = 0; + struct Lisp_Hash_Table *table = XHASH_TABLE(f->face_hash); + for (idx = 0; idx < table->count; ++idx) + set_hash_value_slot (table, idx, Fcopy_sequence(HASH_VALUE (table, idx))); f->can_set_window_size = true; f->after_make_frame = true; diff --git a/src/frame.h b/src/frame.h index 476bac67fa..0a324414a6 100644 --- a/src/frame.h +++ b/src/frame.h @@ -158,8 +158,8 @@ #define EMACS_FRAME_H There are four additional elements of nil at the end, to terminate. */ Lisp_Object menu_bar_items; - /* Alist of elements (FACE-NAME . FACE-VECTOR-DATA). */ - Lisp_Object face_alist; + /* Hash table of FACE-NAME keys and FACE-VECTOR-DATA values. */ + Lisp_Object face_hash; /* A vector that records the entire structure of this frame's menu bar. For the format of the data, see extensive comments in xmenu.c. @@ -661,9 +661,9 @@ fset_condemned_scroll_bars (struct frame *f, Lisp_Object val) f->condemned_scroll_bars = val; } INLINE void -fset_face_alist (struct frame *f, Lisp_Object val) +fset_face_hash (struct frame *f, Lisp_Object val) { - f->face_alist = val; + f->face_hash = val; } #if defined (HAVE_WINDOW_SYSTEM) INLINE void diff --git a/src/xfaces.c b/src/xfaces.c index 7d7aff95c1..cccf0e4852 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -1843,13 +1843,11 @@ lface_from_face_name_no_resolve (struct frame *f, Lisp_Object face_name, Lisp_Object lface; if (f) - lface = assq_no_quit (face_name, f->face_alist); + lface = Fgethash (face_name, f->face_hash, Qnil); else - lface = assq_no_quit (face_name, Vface_new_frame_defaults); + lface = Fgethash (face_name, Vface_new_frame_defaults, Qnil); - if (CONSP (lface)) - lface = XCDR (lface); - else if (signal_p) + if (signal_p && NILP (lface)) signal_error ("Invalid face", face_name); check_lface (lface); @@ -2736,8 +2734,7 @@ DEFUN ("internal-make-lisp-face", Finternal_make_lisp_face, { global_lface = make_vector (LFACE_VECTOR_SIZE, Qunspecified); ASET (global_lface, 0, Qface); - Vface_new_frame_defaults = Fcons (Fcons (face, global_lface), - Vface_new_frame_defaults); + Fputhash(face, global_lface, Vface_new_frame_defaults); /* Assign the new Lisp face a unique ID. The mapping from Lisp face id to Lisp face is given by the vector lface_id_to_name. @@ -2763,7 +2760,7 @@ DEFUN ("internal-make-lisp-face", Finternal_make_lisp_face, { lface = make_vector (LFACE_VECTOR_SIZE, Qunspecified); ASET (lface, 0, Qface); - fset_face_alist (f, Fcons (Fcons (face, lface), f->face_alist)); + Fputhash (face, lface, f->face_hash); } else for (i = 1; i < LFACE_VECTOR_SIZE; ++i) @@ -3508,7 +3505,7 @@ update_face_from_frame_parameter (struct frame *f, Lisp_Object param, /* If there are no faces yet, give up. This is the case when called from Fx_create_frame, and we do the necessary things later in face-set-after-frame-defaults. */ - if (NILP (f->face_alist)) + if (XFIXNAT(Fhash_table_count(f->face_hash)) == 0) return; if (EQ (param, Qforeground_color)) @@ -4174,14 +4171,14 @@ DEFUN ("internal-lisp-face-empty-p", Finternal_lisp_face_empty_p, return i == LFACE_VECTOR_SIZE ? Qt : Qnil; } - -DEFUN ("frame-face-alist", Fframe_face_alist, Sframe_face_alist, +// QUESTION: Should I add an ELisp version of frame-face-hash? +DEFUN ("frame-face-hash", Fframe_face_hash, Sframe_face_hash, 0, 1, 0, doc: /* Return an alist of frame-local faces defined on FRAME. For internal use only. */) (Lisp_Object frame) { - return decode_live_frame (frame)->face_alist; + return decode_live_frame (frame)->face_hash; } @@ -6678,30 +6675,37 @@ DEFUN ("show-face-resources", Fshow_face_resources, Sshow_face_resources, #ifdef HAVE_PDUMPER /* All the faces defined during loadup are recorded in - face-new-frame-defaults, with the last face first in the list. We - need to set next_lface_id to the next face ID number, so that any - new faces defined in this session will have face IDs different from - those defined during loadup. We also need to set up the - lface_id_to_name[] array for the faces that were defined during - loadup. */ + face-new-frame-defaults. We need to set next_lface_id to the next + face ID number, so that any new faces defined in this session will + have face IDs different from those defined during loadup. We also + need to set up the lface_id_to_name[] array for the faces that were + defined during loadup. */ void init_xfaces (void) { - if (CONSP (Vface_new_frame_defaults)) + int nfaces = XFIXNAT(Fhash_table_count (Vface_new_frame_defaults)); + if (nfaces > 0) { /* Allocate the lface_id_to_name[] array. */ - lface_id_to_name_size = next_lface_id = - XFIXNAT (Flength (Vface_new_frame_defaults)); + lface_id_to_name_size = next_lface_id = nfaces; lface_id_to_name = xnmalloc (next_lface_id, sizeof *lface_id_to_name); /* Store the faces. */ - Lisp_Object tail; - int i = next_lface_id - 1; - for (tail = Vface_new_frame_defaults; CONSP (tail); tail = XCDR (tail)) + struct Lisp_Hash_Table* table = XHASH_TABLE(Vface_new_frame_defaults); + for (ptrdiff_t idx = 0; idx < nfaces; ++idx) { - Lisp_Object lface = XCAR (tail); - eassert (i >= 0); - lface_id_to_name[i--] = XCAR (lface); + Lisp_Object lface = HASH_KEY(table, idx); + Lisp_Object face_id = Fget (lface, Qface); + // FIXME why is (get 'tab-line 'face) 0? + if (!FIXNATP (face_id)) + // FIXME: I'm not sure what to do in this case + printf("Face %s has no id\n", SDATA(SYMBOL_NAME (lface))); + else + { + int id = XFIXNAT(face_id); + eassert (id >= 0); + lface_id_to_name[id] = lface; + } } } face_attr_sym[0] = Qface; @@ -6855,7 +6859,7 @@ syms_of_xfaces (void) defsubr (&Sinternal_copy_lisp_face); defsubr (&Sinternal_merge_in_global_face); defsubr (&Sface_font); - defsubr (&Sframe_face_alist); + defsubr (&Sframe_face_hash); defsubr (&Sdisplay_supports_face_attributes_p); defsubr (&Scolor_distance); defsubr (&Sinternal_set_font_selection_order); @@ -6881,7 +6885,9 @@ syms_of_xfaces (void) DEFVAR_LISP ("face-new-frame-defaults", Vface_new_frame_defaults, doc: /* List of global face definitions (for internal use only.) */); - Vface_new_frame_defaults = Qnil; + Vface_new_frame_defaults = + make_hash_table (hashtest_eq, DEFAULT_HASH_SIZE, DEFAULT_REHASH_SIZE, + DEFAULT_REHASH_THRESHOLD, Qnil, Qnil); DEFVAR_LISP ("face-default-stipple", Vface_default_stipple, doc: /* Default stipple pattern used on monochrome displays. -- 2.17.1 --------------203724E7FFC950361B806F14-- From debbugs-submit-bounces@debbugs.gnu.org Wed May 13 10:58:53 2020 Received: (at 41200) by debbugs.gnu.org; 13 May 2020 14:58:53 +0000 Received: from localhost ([127.0.0.1]:59071 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jYsqT-00055t-JS for submit@debbugs.gnu.org; Wed, 13 May 2020 10:58:53 -0400 Received: from mout.gmx.net ([212.227.15.18]:35037) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jYsqR-00055M-MV for 41200@debbugs.gnu.org; Wed, 13 May 2020 10:58:52 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1589381924; bh=WkNaqULZy852dcWol+vYvJcqvqr3DkQuNXHA5RZ+oRo=; h=X-UI-Sender-Class:Subject:To:Cc:References:From:Date:In-Reply-To; b=gqs7ZqkDPeNV3yTPK4hm68Gha9QfsUxd0GIRLyE2KEaReoR3PQ+4LytlWzY2c02a2 IQX7XKEd8b6bJ5Ad0W7O+sSNWbTnb4pzEevsJ3du6wXJ4GNOiYTx5UP3y54ojJg/Mi p6bb9gFndu9TcK4sTAL3q+D42+OU9NaSn31Y9ltM= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.1.101] ([212.95.5.196]) by mail.gmx.com (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1Mq2nA-1inDx02tSU-00nARk; Wed, 13 May 2020 16:58:44 +0200 Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined To: Eli Zaretskii References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <2050d979-369b-f546-eb48-2a34befb5602@gmx.at> <3c3cbd2d-3a05-297a-3019-13253180a4e2@gmail.com> <94f4ec10-9ac8-b12f-9bf5-896f573161de@gmx.at> <49ee1a74-2bbc-47b0-6db0-1a2489091c3f@gmail.com> <18cd985b-5a76-2274-1783-8c8cad6395e6@gmx.at> <83zhad6nno.fsf@gnu.org> From: martin rudalics Message-ID: <8b42edb0-d3da-e119-618d-a025c3ca1375@gmx.at> Date: Wed, 13 May 2020 16:58:40 +0200 MIME-Version: 1.0 In-Reply-To: <83zhad6nno.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K1:/cmG2EKc9gQshqujX36vjKEhEkfH37ogV8D6hdE3jbO9Tlx1brr kDQUiMKYQGFLWnfVz4KYeP/gJaEYBm1BGSayh++Y9oaGgKMkfkPtuEdKsdLVD4Qw4hpaseu f4V/46rEZv3eZtwPtZc3qD3Bjf/lmip2xwhc6WDuTzB9z/kLnglu8D2Gg1dBkamZyyDWcSC GtLu7E9DzwNX4oFeSJ+gw== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:sSJql+JMWW4=:RH/zKj2YBBa4UJDK0ii36h 2GdU/XhtGnrzRJQe2j8ZpYg9cfZ2srlFDozq6jt+lECK8Y40BnilnrwUoh6rmrc2RuZBVl6iz M3zdZ+rQpiWCtaytuIbdE9iMCGeTQXRjk3NQsHL24oSuX2ug5EI7neHDpHIPSStgVvwXZzZH8 htBgYs5hVZbMypal+VGOQFWJ9m4SWaaUEUyZc4sUeFNoQjUaKmfa83ZxYMNQRxsIdx5nQBdbu 3zZtkKNPvGW2wsNPrsE7/6ZZ/Hsc58KBPGuEWK5T6pp0mIQ0LGHDnVruathnfJ271iYkWdPNS r/fnzXJplGYhqsoYZTOgsipzZ0HPkzuvACL1fljaO4qdRVjNU6T2FV2jO+2zVfF/mLZ9CorD+ wjoJVir0aI/23nESBAC+1JioOclAQv9aZ3fM4U2u/KtlLHqvbJFla3WA4GnbfDEFPKjbR0oOm +/Rx3hA2L74Y9xsvLVPS90pvVdaytaF1zvy/WkmFivx8gibXEamALAXRU4gkDxjlx9OtcgJwm 7SJK9EdXlFhAEeTZWPOA11wKkguZOR1acy9PwdYsx0YrtGYoV+ZA1Y3CJAJ+nvqEr23/nxQNB neJyOO4i6ZG1t6oYhEDLw3562+I1Md88UI+CMocIyz3UNed14LmdIfMevcr8mj6Yfvkdw34CQ toIo3fXGGgCELjDSMLIl0CWKkctmz4HD0xTfcZYVI8DZ61Wd4SCzvNW3bIwGr8FPqLM9Yvdj4 Xkh00SoqvgqU9m4yRa9tx4OFKuMco3mSZ9mgEZCLfVxiHmcZkAKWyJHRWeOb5pzeiVn2t0zG8 KIOPdNd0tft/IhiFt2yb3Ut5zd9o/ZEoRt1wPy7MBRC124xznR8K0CZZwD/G1uteop8GPiIMG cC40Av9vvhdiksxBxKv7w2yIQ6CjYHnjoQDbMF8fQ8mD532kV8lVGbiPrR0mnmG3T1haZ1B/p tl7Vw65/b0tPCSytdnidDKQlFU1uq5gcl47cFVATHo9vYPSEkuYerwSKkXKgNpbffHsJaSnrf T5M/TKyehFfZw+bNnPxAXyQwlq5NRDquO+ZL6ArbF1cp2LmePcDtVdlmXJzrOZeVBogquQcbx ua641dkscDmdEKJ/xf3lA+v0oKwOquypgjltElTQH1a79zGdFvTGl5jwRkSjROuIDSGiPbWAA Rw4ZovLUxSB0HFK4EaPdGBrvq8XvZxhWE12+GTbSgxbPEBkYq8+1WtsKIlWXy9A6d0e5EAJXb /a7PZ0ChqT4lBov7d X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 41200 Cc: cpitclaudel@gmail.com, 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > No, please go ahead. Installed meanwhile. Thanks, martin From debbugs-submit-bounces@debbugs.gnu.org Wed May 13 10:58:59 2020 Received: (at 41200) by debbugs.gnu.org; 13 May 2020 14:58:59 +0000 Received: from localhost ([127.0.0.1]:59075 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jYsqY-00056B-S1 for submit@debbugs.gnu.org; Wed, 13 May 2020 10:58:59 -0400 Received: from mout.gmx.net ([212.227.15.15]:53985) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jYsqW-00055Y-0t for 41200@debbugs.gnu.org; Wed, 13 May 2020 10:58:57 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1589381929; bh=mYbDZjlUa07fi6N9njkwFd/zsnEEgJDC+nWLtGsOtZA=; h=X-UI-Sender-Class:Subject:To:Cc:References:From:Date:In-Reply-To; b=LHwYKJTeLg/t8Uu/b5ItR1P0vd0RFGFndc+rmwqxSDIIRr/cE8lZ430fjWGDdvYUz pQLzjVOiZRuG4i6DsZogjfVtGWVWOZcNKD4ku4j08t3oDQruh5xsMFx4G1R5lXDCa6 GGujFary7y6x+Fm9sPWVt2tNI+GHZPnHk9mtb7EE= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.1.101] ([212.95.5.196]) by mail.gmx.com (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1N1wlv-1j6nAG29qz-012EBw; Wed, 13 May 2020 16:58:49 +0200 Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined To: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= , Eli Zaretskii References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> From: martin rudalics Message-ID: Date: Wed, 13 May 2020 16:58:48 +0200 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:J3tM1VFSZjTO6TB2QSQZfQ9qPKydHG7HBl+eeHDMdJdoFmZ6AdQ xZmr0cNeLPcA6X4ZH7uksDupDG/LT8qI6ExMsJcM2WbI7zRS6bSQ0mRDtVBdaLuFuKOoUrV qXDkuGXDzoJhZf+IxbXA0/s4skGqul92W3SMAloV3acx+FKJOp2Pjv2iSuKqm9sbbowavzv ambU2WSU5Q2nSKHO+ZbMQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:9/Llc9diGik=:zxOtiMobh0P+Oqik13wd3r XGLBVnK9YiEFBI5/5IaaG/BIKDpIwz14+fzvslC8dDTszG+8dEUD9aycBZkTj19a+LLfexVmx tX0ITynQeGsR40CUdn0jeXND0GLRSgBQXjn/qRY4bZLgO1/5DQC87RqrGuWwCw0cXsZ6pSgn3 6PCqN98jFB4W8h1aG36/XpmCj25GALFPHgTo7KvuowbKgnzbRCrUr854wzIRodxJZjhYM5Tl4 HV1mo3o/Wkk9UKScnoLdzaIEUYr5tuMdIjsyLsE37px1eiav9JjYemEmVTywCTJC7wHkqpR0g pCydtNsX9gKx3XapFLWc5UyXhF8G43Jrbrmn2afD4J9Ow32thIv79q6t9UifpbVpp30SGRW9g F5m3pdyWm4GNgxhZbq+TCqpjgdtnI85n7x4e52OY1Azy4k5VNByLhwN4gqKvLzjMY9fZ+y6AJ s/tj8zzCXdMl+7TpICukoxpI+vuwV73mMqyl5krye47KIlwPHXqUiKX9128rdqgLttdmUFhrD fhDjTaBSOTPaYoQLLRZZheYeR5na1qjqh3qhMrWuVRC4mekTkxRYV0ebisEu6jDwabxyaWPUv 1Z5jtccpTded+hq2zxp5BjznTrYRkre/PNYn/7S6znysn59w+Na0uFvW02x+Jl9d9NhhR3scF Gr72mifhpSnvfRNTlA26J0Niay9tsZN/avn0MX4dUcDT1tUoKH3l48U0Svn68aFFotiZJF8bT 9oQ2k/P2YQRpQI61ozxSaVyJTKSWTlQGF5aayfErGibyPlR0CwIKEpy1d/Nv4u8SxY9eEkRAS +SQcW8t/sujnrD26yhh2qUk0VIaoDvsdqo2UctBOxR9LTdAn9i0UVfchiyAEd91ptbUJkJvps y8ie4kDdQucwogYbqSbkuAoqOD8kq/X/U2MOhvlFawB82rKG8i/hPxw4/3NPh+7o4wxwjYVbO gK4T9l4rdlMAU9ud5IOJpMqjMLdEioi7g6jcWrU+G0dNQxhhqRuJ0av1Zhl2w3u961I6jV1N0 cjbweEiuitPQMpELKQf4hQzcxuWppvgfU7+5YDGpgrpCfBtfG4Cp66aw21jLlJfqp4zXkhXe+ +BI5tnKgTipaYeigtq+Q0cwR2zEgaM60WBQ3hdEjjgam+bX0HJHYOZlM22FAqJwUmFv+XaGmr HVPUAX6W0lYCswr5ukZvVDbO4WoXgfSyhi859+XmpXcQmJdv+Kgvc0QR4EKSycYrNb+pgSfkm iyxeX31iHSj2hEwsU X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 41200 Cc: 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > Indeed, you're completely right; thanks! Replacing face_alist and > Vface_new_frame_defaults with hash tables makes the worst example > about 10 times faster, and with that change tooltips now take 30 to > 50ms to display instead of 500-600ms in my real-life use case (my > usual config). I have attached a patch. GCC throws the following error here: CC frame.o In file included from ../../src/lisp.h:954, from ../../src/frame.c:29: =2E./../src/frame.c: In function =E2=80=98make_frame=E2=80=99: =2E/globals.h:6365:14: error: incompatible type for argument 6 of =E2=80=98= make_hash_table=E2=80=99 #define Qnil builtin_lisp_symbol (0) ^~~~~~~~~~~~~~~~~~~~~~~ =2E./../src/frame.c:952:57: note: in expansion of macro =E2=80=98Qnil=E2=80= =99 DEFAULT_REHASH_THRESHOLD, Qnil, Qnil)); ^~~~ In file included from ../../src/conf_post.h:39, from ./config.h:2270, from ../../src/frame.c:20: =2E./../src/lisp.h:3661:43: note: expected =E2=80=98_Bool=E2=80=99 but ar= gument is of type =E2=80=98Lisp_Object=E2=80=99 {aka =E2=80=98struct Lisp= _Object=E2=80=99} Lisp_Object, bool); ^~~~ make[1]: *** [Makefile:402: frame.o] Fehler 1 make[1]: *** Es wird auf noch nicht beendete Prozesse gewartet.... make[1]: Verzeichnis =E2=80=9E/home/martin/emacs-git/release/obj-gtk/src=E2= =80=9C wird verlassen make: *** [Makefile:424: src] Fehler 2 martin From debbugs-submit-bounces@debbugs.gnu.org Wed May 13 11:13:39 2020 Received: (at 41200) by debbugs.gnu.org; 13 May 2020 15:13:39 +0000 Received: from localhost ([127.0.0.1]:59103 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jYt4k-0005Ub-E1 for submit@debbugs.gnu.org; Wed, 13 May 2020 11:13:39 -0400 Received: from mail-qk1-f178.google.com ([209.85.222.178]:35382) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jYt4i-0005UP-Lt for 41200@debbugs.gnu.org; Wed, 13 May 2020 11:13:37 -0400 Received: by mail-qk1-f178.google.com with SMTP id f13so17088885qkh.2 for <41200@debbugs.gnu.org>; Wed, 13 May 2020 08:13:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language; bh=yH5NH6Cfnb91IZSxOHzfp/0FujUazO3CIIyay8K0JlM=; b=Ao4wJyYVYv7OFrextPlfPFUoKLwu2cJIGxp6304+nNBH/93J4/iB4WkGK4lcnYk7m6 Az14CSc70QkMr/vQMtNb2GkmgUC+Ja1HGJMK5pE5mD+GcKuWo3Q+zg+5WTjeUik0SsEe 5lEPxxQ4fVkiBOqj0XvlgGehPeSlwLbAN6LHrzTBur2a/RLIU89wE/AiIuYomh5+txHX xF4e54VG22IuC+naRem0BxLnIKTK+TCPRxyjt1vAOFjZz6XCNUQ15X3kuRx6SD7W/KbC bjddY+2pyd091EfyMYAT9rQjM7FZAMQ2xrwbZXRljCMM9Sc2WdWNc+VPlw73epZAu3bp BPkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language; bh=yH5NH6Cfnb91IZSxOHzfp/0FujUazO3CIIyay8K0JlM=; b=Vk9vrA7mBJZ6JqyZnVQO79LjO9QRE9HpJ6rFuWoTgDiuElssyheyGBUQ8tKH3h3jB0 yuSOjJr8/9eZstfXKQ6nkwO0eckVQzRNp5eaMD4v9fy+4zbVzRt6mjY6x3tPsoLmfcr9 hG+W5QJCl8C0fN2euGifr0IKUoYfye6lfu6Aeso8AvvC/zyGYLOhTYLEpy5GKuXOX8my IViHmTPYqgJ6ePWFG0AgM47oY6M1o451ZXPaqSCPbQfqygFF4OSGWdXTuol7rGMd6QhI TG9aNuZFdBE4secRxo1qkdOpUmxMp0CUlM7FE84wcAIK1vXQfUBDiFlFK0P6c+bM14Hi oa1g== X-Gm-Message-State: AOAM532FQyXOjkUvvUO6uJxO4yxLBmYFbzhyZGnATEqx8iR3DI12adtY Ye3Sh6zZsYO291+jzJRsxUXLH92QiUc= X-Google-Smtp-Source: ABdhPJz7tIySTfFw9v4J6at1MtKkJXePmT/KYwL05UL0bmXAPlVgi9fADo1ZYLd9NXfTykOwwRPpgA== X-Received: by 2002:a05:620a:914:: with SMTP id v20mr119050qkv.107.1589382809491; Wed, 13 May 2020 08:13:29 -0700 (PDT) Received: from ?IPv6:2601:184:4180:66e7:4d17:b25e:8d9:2188? ([2601:184:4180:66e7:4d17:b25e:8d9:2188]) by smtp.googlemail.com with ESMTPSA id c41sm16342255qta.96.2020.05.13.08.13.28 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 13 May 2020 08:13:28 -0700 (PDT) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined To: martin rudalics , Eli Zaretskii References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> From: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= Message-ID: <956a7cf7-bbf0-e15d-36d4-c82279c15f89@gmail.com> Date: Wed, 13 May 2020 11:13:27 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------8E749A14CB345923344EA199" Content-Language: en-GB X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41200 Cc: 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is a multi-part message in MIME format. --------------8E749A14CB345923344EA199 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit On 13/05/2020 10.58, martin rudalics wrote: >> Indeed, you're completely right; thanks!  Replacing face_alist and >> Vface_new_frame_defaults with hash tables makes the worst example >> about 10 times faster, and with that change tooltips now take 30 to >> 50ms to display instead of 500-600ms in my real-life use case (my >> usual config).  I have attached a patch. > > GCC throws the following error here: Woops, thanks. I misread the signature of make_hash_table. I've attached an updated patch. --------------8E749A14CB345923344EA199 Content-Type: text/x-patch; charset=UTF-8; name="0001-Store-frame-faces-in-hash-tables-instead-of-alists.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename*0="0001-Store-frame-faces-in-hash-tables-instead-of-alists.patc"; filename*1="h" >From 75d44050a9277c708c69afe09de334ab3c300da1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pit-Claudel?= Date: Tue, 12 May 2020 21:48:32 -0400 Subject: [PATCH] Store frame faces in hash tables instead of alists * lisp/emacs-lisp/edebug.el (edebug-eval-defun): * lisp/progmodes/elisp-mode.el (elisp--eval-defun-1): * lisp/faces.el (face-list): * lisp/frame.el (frame-set-background-mode): Update to work with hash tables instead of alists. * src/frame.h (struct frame): Remove face_alist, add face_hash. (fset_face_alist): Remove. (fset_face_hash): New function. * src/frame.c (make_frame): Initialize f->face_hash. (Fmake_terminal_frame): Update to work with hash tables instead of alists. * src/xfaces.c (lface_from_face_name_no_resolve): (Finternal_make_lisp_face): (update_face_from_frame_parameter): Update to work with hash tables instead of alists. * src/xfaces.c (Fframe_face_hash): New function. (Fframe_face_alist): Remove. (init_xfaces): Compute face IDs from they face property, not from their position in face_alist. (syms_of_xfaces): Remove frame_face_alist, add frame_face_hash; change Vface_new_frame_defaults into a hash table. --- lisp/emacs-lisp/edebug.el | 3 +- lisp/faces.el | 4 ++- lisp/frame.el | 2 +- lisp/progmodes/elisp-mode.el | 3 +- src/frame.c | 21 ++++++++---- src/frame.h | 8 ++--- src/xfaces.c | 64 ++++++++++++++++++++---------------- 7 files changed, 59 insertions(+), 46 deletions(-) diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el index 78461185d3..97ca964eef 100644 --- a/lisp/emacs-lisp/edebug.el +++ b/lisp/emacs-lisp/edebug.el @@ -488,8 +488,7 @@ edebug-eval-defun (set-default (nth 1 form) (eval (nth 2 form) lexical-binding))) ((eq (car form) 'defface) ;; Reset the face. - (setq face-new-frame-defaults - (assq-delete-all (nth 1 form) face-new-frame-defaults)) + (remhash (nth 1 form) face-new-frame-defaults) (put (nth 1 form) 'face-defface-spec nil) (put (nth 1 form) 'face-documentation (nth 3 form)) ;; See comments in `eval-defun-1' for purpose of code below diff --git a/lisp/faces.el b/lisp/faces.el index e707f6f4b6..1764f3da75 100644 --- a/lisp/faces.el +++ b/lisp/faces.el @@ -179,7 +179,9 @@ face-font-registry-alternatives (defun face-list () "Return a list of all defined faces." - (mapcar #'car face-new-frame-defaults)) + (let ((faces nil)) + (maphash (lambda (face _) (push face faces)) face-new-frame-defaults) + (nreverse faces))) (defun make-face (face) "Define a new face with name FACE, a symbol. diff --git a/lisp/frame.el b/lisp/frame.el index 6c2f774709..bab3c2a1c2 100644 --- a/lisp/frame.el +++ b/lisp/frame.el @@ -1227,7 +1227,7 @@ frame-set-background-mode ;; during startup with -rv on the command ;; line for the initial frame, because frames ;; are not recorded in the pdump file. - (assq face (frame-face-alist)) + (gethash face (frame-face-hash)) (face-spec-match-p face (face-user-default-spec face) ;; FIXME: why selected-frame and diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el index b737134f90..dc8688c864 100644 --- a/lisp/progmodes/elisp-mode.el +++ b/lisp/progmodes/elisp-mode.el @@ -1304,8 +1304,7 @@ elisp--eval-defun-1 ((eq (car form) 'custom-declare-face) ;; Reset the face. (let ((face-symbol (eval (nth 1 form) lexical-binding))) - (setq face-new-frame-defaults - (assq-delete-all face-symbol face-new-frame-defaults)) + (remhash face-new-frame-defaults face-symbol) (put face-symbol 'face-defface-spec nil) (put face-symbol 'face-override-spec nil)) form) diff --git a/src/frame.c b/src/frame.c index c871e4fd99..7cd43e4fec 100644 --- a/src/frame.c +++ b/src/frame.c @@ -946,6 +946,11 @@ make_frame (bool mini_p) rw->total_lines = mini_p ? 9 : 10; rw->pixel_height = rw->total_lines * FRAME_LINE_HEIGHT (f); + // QUESTION: is this where this should be initialized? + fset_face_hash + (f, make_hash_table(hashtest_eq, DEFAULT_HASH_SIZE, DEFAULT_REHASH_SIZE, + DEFAULT_REHASH_THRESHOLD, Qnil, false)); + if (mini_p) { mw->top_line = rw->total_lines; @@ -1254,7 +1259,7 @@ DEFUN ("make-terminal-frame", Fmake_terminal_frame, Smake_terminal_frame, { struct frame *f; struct terminal *t = NULL; - Lisp_Object frame, tem; + Lisp_Object frame; struct frame *sf = SELECTED_FRAME (); #ifdef MSDOS @@ -1336,14 +1341,16 @@ DEFUN ("make-terminal-frame", Fmake_terminal_frame, Smake_terminal_frame, store_in_alist (&parms, Qminibuffer, Qt); Fmodify_frame_parameters (frame, parms); - /* Make the frame face alist be frame-specific, so that each + /* Make the frame face hash be frame-specific, so that each frame could change its face definitions independently. */ - fset_face_alist (f, Fcopy_alist (sf->face_alist)); - /* Simple Fcopy_alist isn't enough, because we need the contents of - the vectors which are the CDRs of associations in face_alist to + fset_face_hash (f, Fcopy_hash_table (sf->face_hash)); + /* Simple copy_hash_table isn't enough, because we need the contents of + the vectors which are the values in face_hash to be copied as well. */ - for (tem = f->face_alist; CONSP (tem); tem = XCDR (tem)) - XSETCDR (XCAR (tem), Fcopy_sequence (XCDR (XCAR (tem)))); + ptrdiff_t idx = 0; + struct Lisp_Hash_Table *table = XHASH_TABLE(f->face_hash); + for (idx = 0; idx < table->count; ++idx) + set_hash_value_slot (table, idx, Fcopy_sequence(HASH_VALUE (table, idx))); f->can_set_window_size = true; f->after_make_frame = true; diff --git a/src/frame.h b/src/frame.h index 476bac67fa..0a324414a6 100644 --- a/src/frame.h +++ b/src/frame.h @@ -158,8 +158,8 @@ #define EMACS_FRAME_H There are four additional elements of nil at the end, to terminate. */ Lisp_Object menu_bar_items; - /* Alist of elements (FACE-NAME . FACE-VECTOR-DATA). */ - Lisp_Object face_alist; + /* Hash table of FACE-NAME keys and FACE-VECTOR-DATA values. */ + Lisp_Object face_hash; /* A vector that records the entire structure of this frame's menu bar. For the format of the data, see extensive comments in xmenu.c. @@ -661,9 +661,9 @@ fset_condemned_scroll_bars (struct frame *f, Lisp_Object val) f->condemned_scroll_bars = val; } INLINE void -fset_face_alist (struct frame *f, Lisp_Object val) +fset_face_hash (struct frame *f, Lisp_Object val) { - f->face_alist = val; + f->face_hash = val; } #if defined (HAVE_WINDOW_SYSTEM) INLINE void diff --git a/src/xfaces.c b/src/xfaces.c index 7d7aff95c1..4f97ba4971 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -1843,13 +1843,11 @@ lface_from_face_name_no_resolve (struct frame *f, Lisp_Object face_name, Lisp_Object lface; if (f) - lface = assq_no_quit (face_name, f->face_alist); + lface = Fgethash (face_name, f->face_hash, Qnil); else - lface = assq_no_quit (face_name, Vface_new_frame_defaults); + lface = Fgethash (face_name, Vface_new_frame_defaults, Qnil); - if (CONSP (lface)) - lface = XCDR (lface); - else if (signal_p) + if (signal_p && NILP (lface)) signal_error ("Invalid face", face_name); check_lface (lface); @@ -2736,8 +2734,7 @@ DEFUN ("internal-make-lisp-face", Finternal_make_lisp_face, { global_lface = make_vector (LFACE_VECTOR_SIZE, Qunspecified); ASET (global_lface, 0, Qface); - Vface_new_frame_defaults = Fcons (Fcons (face, global_lface), - Vface_new_frame_defaults); + Fputhash(face, global_lface, Vface_new_frame_defaults); /* Assign the new Lisp face a unique ID. The mapping from Lisp face id to Lisp face is given by the vector lface_id_to_name. @@ -2763,7 +2760,7 @@ DEFUN ("internal-make-lisp-face", Finternal_make_lisp_face, { lface = make_vector (LFACE_VECTOR_SIZE, Qunspecified); ASET (lface, 0, Qface); - fset_face_alist (f, Fcons (Fcons (face, lface), f->face_alist)); + Fputhash (face, lface, f->face_hash); } else for (i = 1; i < LFACE_VECTOR_SIZE; ++i) @@ -3508,7 +3505,7 @@ update_face_from_frame_parameter (struct frame *f, Lisp_Object param, /* If there are no faces yet, give up. This is the case when called from Fx_create_frame, and we do the necessary things later in face-set-after-frame-defaults. */ - if (NILP (f->face_alist)) + if (XFIXNAT(Fhash_table_count(f->face_hash)) == 0) return; if (EQ (param, Qforeground_color)) @@ -4174,14 +4171,14 @@ DEFUN ("internal-lisp-face-empty-p", Finternal_lisp_face_empty_p, return i == LFACE_VECTOR_SIZE ? Qt : Qnil; } - -DEFUN ("frame-face-alist", Fframe_face_alist, Sframe_face_alist, +// QUESTION: Should I add an ELisp version of frame-face-hash? +DEFUN ("frame-face-hash", Fframe_face_hash, Sframe_face_hash, 0, 1, 0, doc: /* Return an alist of frame-local faces defined on FRAME. For internal use only. */) (Lisp_Object frame) { - return decode_live_frame (frame)->face_alist; + return decode_live_frame (frame)->face_hash; } @@ -6678,30 +6675,37 @@ DEFUN ("show-face-resources", Fshow_face_resources, Sshow_face_resources, #ifdef HAVE_PDUMPER /* All the faces defined during loadup are recorded in - face-new-frame-defaults, with the last face first in the list. We - need to set next_lface_id to the next face ID number, so that any - new faces defined in this session will have face IDs different from - those defined during loadup. We also need to set up the - lface_id_to_name[] array for the faces that were defined during - loadup. */ + face-new-frame-defaults. We need to set next_lface_id to the next + face ID number, so that any new faces defined in this session will + have face IDs different from those defined during loadup. We also + need to set up the lface_id_to_name[] array for the faces that were + defined during loadup. */ void init_xfaces (void) { - if (CONSP (Vface_new_frame_defaults)) + int nfaces = XFIXNAT(Fhash_table_count (Vface_new_frame_defaults)); + if (nfaces > 0) { /* Allocate the lface_id_to_name[] array. */ - lface_id_to_name_size = next_lface_id = - XFIXNAT (Flength (Vface_new_frame_defaults)); + lface_id_to_name_size = next_lface_id = nfaces; lface_id_to_name = xnmalloc (next_lface_id, sizeof *lface_id_to_name); /* Store the faces. */ - Lisp_Object tail; - int i = next_lface_id - 1; - for (tail = Vface_new_frame_defaults; CONSP (tail); tail = XCDR (tail)) + struct Lisp_Hash_Table* table = XHASH_TABLE(Vface_new_frame_defaults); + for (ptrdiff_t idx = 0; idx < nfaces; ++idx) { - Lisp_Object lface = XCAR (tail); - eassert (i >= 0); - lface_id_to_name[i--] = XCAR (lface); + Lisp_Object lface = HASH_KEY(table, idx); + Lisp_Object face_id = Fget (lface, Qface); + // FIXME why is (get 'tab-line 'face) 0? + if (!FIXNATP (face_id)) + // FIXME: I'm not sure what to do in this case + printf("Face %s has no id\n", SDATA(SYMBOL_NAME (lface))); + else + { + int id = XFIXNAT(face_id); + eassert (id >= 0); + lface_id_to_name[id] = lface; + } } } face_attr_sym[0] = Qface; @@ -6855,7 +6859,7 @@ syms_of_xfaces (void) defsubr (&Sinternal_copy_lisp_face); defsubr (&Sinternal_merge_in_global_face); defsubr (&Sface_font); - defsubr (&Sframe_face_alist); + defsubr (&Sframe_face_hash); defsubr (&Sdisplay_supports_face_attributes_p); defsubr (&Scolor_distance); defsubr (&Sinternal_set_font_selection_order); @@ -6881,7 +6885,9 @@ syms_of_xfaces (void) DEFVAR_LISP ("face-new-frame-defaults", Vface_new_frame_defaults, doc: /* List of global face definitions (for internal use only.) */); - Vface_new_frame_defaults = Qnil; + Vface_new_frame_defaults = + make_hash_table (hashtest_eq, DEFAULT_HASH_SIZE, DEFAULT_REHASH_SIZE, + DEFAULT_REHASH_THRESHOLD, Qnil, false); DEFVAR_LISP ("face-default-stipple", Vface_default_stipple, doc: /* Default stipple pattern used on monochrome displays. -- 2.17.1 --------------8E749A14CB345923344EA199-- From debbugs-submit-bounces@debbugs.gnu.org Wed May 13 13:43:02 2020 Received: (at 41200) by debbugs.gnu.org; 13 May 2020 17:43:02 +0000 Received: from localhost ([127.0.0.1]:59427 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jYvPJ-0000vM-S4 for submit@debbugs.gnu.org; Wed, 13 May 2020 13:43:02 -0400 Received: from mout.gmx.net ([212.227.17.21]:49729) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jYvPI-0000v3-NX for 41200@debbugs.gnu.org; Wed, 13 May 2020 13:43:01 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1589391774; bh=7IvaDB+yNHAT4s/vRY0ya7Q02vMUQzMgnzSUrv/R+98=; h=X-UI-Sender-Class:Subject:To:Cc:References:From:Date:In-Reply-To; b=eR3Bxh45N0AFdWVvdw4SvkacTtAaq2dho4GNCyrhRhRip8eQJa6nfb13rLRNYjhAR x40g5PQX/3SlYatZDFesvQFEndRekAVMv5walv3vYVNSbCXx149EMGI27+Djs4PsGs cgrk8l6LOI8tl4PKLQOGJMZcfNsbmu5Rhz/Yxm4g= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.1.100] ([212.95.5.37]) by mail.gmx.com (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1Mi2O1-1ivilb0ILp-00e8aO; Wed, 13 May 2020 19:42:54 +0200 Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined To: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= , Eli Zaretskii References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> <956a7cf7-bbf0-e15d-36d4-c82279c15f89@gmail.com> From: martin rudalics Message-ID: <6ce4613b-970d-0a18-e258-251267730c0c@gmx.at> Date: Wed, 13 May 2020 19:42:52 +0200 MIME-Version: 1.0 In-Reply-To: <956a7cf7-bbf0-e15d-36d4-c82279c15f89@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K1:MA6iL47sZFT7ciFHRgKp99DQpddpY6pv50pu7imzHw81OHCh8br faiMC6bDQSQ6WlyD9Nlr8cXUkEqf+Z/KKiYbqT+3Y+wWKipmouqERIhujCqyAb8tE0OWfDV RKrd6HjVWdAWw82SLZksqWVwlyfA/cz7T77X3OfpbKBIKg4zHNcN8mtqInBTKWoZEwMlgMH OePLADCGosNQEWLAJVqUQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:bSYiwnlMkho=:39cHrdC/ItgJO9MHuRc3EW Pd+Lw6IiHLvYJWlq/zY1utQeg01+0rfDyPAtqB/BQ/2yAOYaA7COd8/aDtHMtEcQAqyaZJC7P ZGrQ9uw5WErC3qRVpk71cCf+5kMoLlLdtTH9IUVX4D3PXCzq6vJqr+yyEY0MrvxBviJKNf/UU FWYmEimteHYF0WLVtITCexA0k2C0YZRXrQGN7C/BzvKHX5Git6V57riaMk2dih8/04CyM/hTE vzflbvOqjit+jr/ayDrn9dREvIm2CDb/SNKNiBKz3CW8dTT1nu4fbyG4GWnBfMHaKtbxo438K //mAAr8uOBQMHGajEJcURcqu5JoxBvXZUpkUMu76D69Fts6TVO16KkxfKalN2QL6TpLdgAXhd HLWQGcbYzQ8/3/85Bj4Fuv46hFAOWocHSqSMJAyFsKbhIuawzZqKHdyKnJOfGSi1xijlmG5Iz yAIP9q26sR6rHAWTfQUr7MSSc+j/uKIv8Miod/R7CjU/SOt0s6B74HzdV/IDWEIMg8exhiSdF KG+b3/6wBiJ6/34BMVCTwt6k/cjQeIDRw+vFq99Ym+jXAydTKRzPdF6JqskeyElnM1NSpr4Sp R3pV+mJl8FdXqtVXz4rSYfjPJM6iH6v/z7e6rQMyygekq+PYD7O+FKEaNlNNqccnPCganQ77z ehInB3lNklXWCxCOne3gdPyCFj5Q7BgUIN2aVJ8zJ5JAQi/gD1l1/scl7F+/038isfqCFv/s3 +dQY8eydW2n1R/XMIXImuRbkhqQDWTs+quGuRcdW2yRVhOfNmnjI8jAiB1vD49oa3nhOhznSn ulhppqVova6cmB7B2IvKYlPqerpB0gr91cXQfus1sirW85T0pUixaW4yKS5X7RAR8NMmIE/Q3 FfTxZr8UX/rldn/xoZnfS1ahQAl7sl6Z2ZnoXThWkVg6qDkAs0KukDMNPblf8P7dsNOlBxsth jLWlR4NigtKM/mLR0mHYcdJG9LTorbyWz3QeL5JFKm5AWiuMVjYdRAfdjCw3UbD9MoZhkzBB0 X8+oWC71HIJHpcXCFPhHRe1c8PHbyOBYfqGkrCXLI25kuIm2AzlLfXlwcNwYZKBadPpRHHZRa 9SCCCYlEJ8lvAAFy0uW4aHxKJZFCIXwg9jAA5c77UpMXpSsH7jI9Jly3ichMEk3Q3CRhw1/AC /AtzK+Ef3XiaOFmsTcO+Cr2aovye/+/wZBR1BQyWYFHhhffdsZgPDeCmE2xbEbQCpXTwZJDKe LM/CVoxECtJwaDovM X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 41200 Cc: 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > Woops, thanks. I misread the signature of make_hash_table. I've attached an updated patch. Thanks. Builds now and I'm running with it. martin From debbugs-submit-bounces@debbugs.gnu.org Thu May 14 14:58:23 2020 Received: (at control) by debbugs.gnu.org; 14 May 2020 18:58:23 +0000 Received: from localhost ([127.0.0.1]:34836 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZJ3n-0007Hg-5U for submit@debbugs.gnu.org; Thu, 14 May 2020 14:58:23 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45074) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZJ3m-0007HN-4H; Thu, 14 May 2020 14:58:22 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:40477) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jZJ3g-0000u7-M6; Thu, 14 May 2020 14:58:16 -0400 Received: from [176.228.60.248] (port=1169 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jZJ3f-0006T9-KX; Thu, 14 May 2020 14:58:16 -0400 Date: Thu, 14 May 2020 21:57:59 +0300 Message-Id: <83lflu4a4o.fsf@gnu.org> From: Eli Zaretskii To: Jamie Brandon In-Reply-To: <87wo5e4b7a.fsf@scattered-thoughts.net> (message from Jamie Brandon on Thu, 14 May 2020 11:34:49 -0700) Subject: Re: bug#41267: 26.3; Frame creation spends 1-2s in face-set-after-frame-default References: <87wo5e4b7a.fsf@scattered-thoughts.net> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: control Cc: 41267@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) merge 41267 41200 thanks > From: Jamie Brandon > Date: Thu, 14 May 2020 11:34:49 -0700 > > When I launch emacsclient or make a new frame it spends 1-2s in: > > - make-frame 312 42% > - frame-creation-function 311 42% > - apply 311 42% > - # 311 42% > - x-create-frame-with-faces 311 42% > - face-set-after-frame-default 287 39% > + face-spec-recalc 274 37% > > If I replace face-spec-recalc with an empty function then the new frame loads instantly so I'm pretty sure that's the culprit. > > I have 523 faces in frame-face-alist but they all seem to be from packages I use regularly so I can't just get rid off them. Magit and notmuch account for a large minority of them. > > https://emacs.stackexchange.com/questions/58505/emacsclient-spending-a-lot-of-time-resetting-faces suggested that this is unexpected and should be reported as a bug. Thanks, this is a duplicate of bug#41200. From debbugs-submit-bounces@debbugs.gnu.org Fri May 15 07:05:45 2020 Received: (at 41200) by debbugs.gnu.org; 15 May 2020 11:05:45 +0000 Received: from localhost ([127.0.0.1]:35986 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZY9w-0006wg-Pz for submit@debbugs.gnu.org; Fri, 15 May 2020 07:05:45 -0400 Received: from eggs.gnu.org ([209.51.188.92]:46580) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZY9v-0006wN-CX for 41200@debbugs.gnu.org; Fri, 15 May 2020 07:05:43 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:34554) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jZY9q-0006rd-5u; Fri, 15 May 2020 07:05:38 -0400 Received: from [176.228.60.248] (port=4703 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jZY9p-0003HL-7H; Fri, 15 May 2020 07:05:38 -0400 Date: Fri, 15 May 2020 14:05:24 +0300 Message-Id: <837dxd31cb.fsf@gnu.org> From: Eli Zaretskii To: =?utf-8?Q?Cl=C3=A9ment?= Pit-Claudel In-Reply-To: (message from =?utf-8?Q?Cl=C3=A9ment?= Pit-Claudel on Tue, 12 May 2020 22:41:24 -0400) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 41200 Cc: 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: 41200@debbugs.gnu.org > From: Clément Pit-Claudel > Date: Tue, 12 May 2020 22:41:24 -0400 > > > So I think if we want to support such large amounts of faces, we > > should not store them in alists, but in a more efficient data > > structure. > > Indeed, you're completely right; thanks! Replacing face_alist and Vface_new_frame_defaults with hash tables makes the worst example about 10 times faster, and with that change tooltips now take 30 to 50ms to display instead of 500-600ms in my real-life use case (my usual config). I have attached a patch. > > I left a few questions in the code; I hope that's OK. I have a few more questions that are not part of the code: > > * I removed the function frame-face-alist and changed the type of the variable face-new-frame-defaults. Both were documented as internal. Should I add an ELisp implementation of frame-face-alist for compatibility? (It wouldn't be a perfect shim, since modifying its return value wouldn't do the same). For face-new-frame-defaults it's a bit trickier, since the variable now holds a hash table. Should I change its name to make the change obvious, at least? I'd like to keep the old face-new-frame-defaults and frame-face-alist for compatibility, but mention in the doc strings that they no longer return modifiable values, and perhaps deprecate them. > * The name face_hash isn't ideal, since there's already a distinct notion of face hashes (hash codes). Can you think of a better name? face_hash_table? > * I imagine that this change needs to be advertised somewhere, but I'm not sure where; NEWS? Let's think about this after we figured out what changes are needed in the current functions and variables. > Lastly, do the following new profiles suggest other opportunities for improvement? I don't think so, but if the behavior is now linear or sub-linear, it's the best we can expect, since creating a new frame must walk over all the faces. > + // QUESTION: is this where this should be initialized? Yes, I think so. But do we need to do anything when frame is deleted as well? > + fset_face_hash > + (f, make_hash_table(hashtest_eq, DEFAULT_HASH_SIZE, DEFAULT_REHASH_SIZE, ^^ Our C coding conventions are to leave one space between the function's name and the opening parenthesis (here and elsewhere in the patch). > -DEFUN ("frame-face-alist", Fframe_face_alist, Sframe_face_alist, > +// QUESTION: Should I add an ELisp version of frame-face-hash? You mean, frame-face-alist, right? Yes, most definitely: I imagine a lot of code out there uses that, and we wouldn't want to break that. And I'm not sure we should have it only in Lisp: perhaps we should maintain the alist as well, and add/remove to/from it when a face is added or removed in the hash table. Otherwise this change of internals will have painful effect on packages that use the current APIs. > + Lisp_Object lface = HASH_KEY(table, idx); > + Lisp_Object face_id = Fget (lface, Qface); > + // FIXME why is (get 'tab-line 'face) 0? A bug, I guess. > + if (!FIXNATP (face_id)) > + // FIXME: I'm not sure what to do in this case I'm not sure I understand why do you need to look at the existing face's 'face' property? The original code didn't. > DEFVAR_LISP ("face-new-frame-defaults", Vface_new_frame_defaults, > doc: /* List of global face definitions (for internal use only.) */); > - Vface_new_frame_defaults = Qnil; > + Vface_new_frame_defaults = > + make_hash_table (hashtest_eq, DEFAULT_HASH_SIZE, DEFAULT_REHASH_SIZE, > + DEFAULT_REHASH_THRESHOLD, Qnil, Qnil); Why do we need to start with a non-default hash-table? From debbugs-submit-bounces@debbugs.gnu.org Fri May 15 10:04:08 2020 Received: (at 41200) by debbugs.gnu.org; 15 May 2020 14:04:08 +0000 Received: from localhost ([127.0.0.1]:38227 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZawZ-0005Tn-Nk for submit@debbugs.gnu.org; Fri, 15 May 2020 10:04:08 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:24153) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZawY-0005TO-Qr for 41200@debbugs.gnu.org; Fri, 15 May 2020 10:04:07 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 622558081D; Fri, 15 May 2020 10:04:01 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 1BA87806A5; Fri, 15 May 2020 10:03:59 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1589551439; bh=9ga0gpLL3w551GG+c8W5y3aygVWhXJvr+LOlVL6HbAM=; h=From:To:Cc:Subject:Date:In-Reply-To:From; b=lcm78NmZtok75TjbTRnvee0j7OpXWQOkHai14UG1SOywV+f001u6ViEfG4oLQqQMK jAykrUpv0+L+2dF1qCetYax7InP3Z0Tj7BSBYf4GQOvM/RAheq5b/X/0bG36GsVlQB uWhmuRT3Uogv9knthKmk1SiBWCb4JYuuFEZQDNuc/nhvVZu4o0AL2viKlNlFQqAdsv KK6Qq0pQLBcDVaj6CFt1oSGcWJXR9H7QUmowxDSQ/z7KCvI87EeXvJuW0RnNcecWD9 9Kp/LaZIWOO+7yDJxnzyu8nagDs5jBrcbVe3S1M+/MiTOyffq4G1mY2bKBqmmhWike 00jtxRNO5qr1w== Received: from alfajor (unknown [216.154.3.202]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 4580A120736; Fri, 15 May 2020 10:03:58 -0400 (EDT) From: Stefan Monnier To: =?windows-1252?Q?Cl=E9ment?= Pit-Claudel Subject: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined Message-ID: Date: Fri, 15 May 2020 10:03:44 -0400 In-Reply-To: nobody's message of "(unknown date)" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.085 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 41200 Cc: Eli Zaretskii , 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Indeed, you're completely right; thanks! Replacing face_alist and > Vface_new_frame_defaults with hash tables makes the worst example > about 10 times faster, and with that change tooltips now take 30 to > 50ms to display instead of 500-600ms in my real-life use case (my > usual config). I have attached a patch. Oh, this is great, makes a very noticeable difference. I'm hoping it can make it into Emacs-27.1, tho it is probably rather late for such a significant change. > * I removed the function frame-face-alist and changed the type of the > variable face-new-frame-defaults. Both were documented as internal. > Should I add an ELisp implementation of frame-face-alist for > compatibility? (It wouldn't be a perfect shim, since modifying its > return value wouldn't do the same). For face-new-frame-defaults it's > a bit trickier, since the variable now holds a hash table. > Should I change its name to make the change obvious, at least? The variable's name did not say "alist", so I don't see a need to change it from that point of view. But I think it deserves a "--" since it's supposed to be internal. A quick grep revealed: elpa/packages/context-coloring/fixtures/benchmark/faces.el: (mapcar #'car face-new-frame-defaults)) That doesn't seem very serious, but I haven't grep'd the MELPA packages. I saw no such comparable use of `frame-face-alist` in the wild. > * The name face_hash isn't ideal, since there's already a distinct > notion of face hashes (hash codes). Can you think of a better name? Yes: it's not a hash, it's a table. I think the better names refer to the "conceptual" type rather than the specific implementation type, so I prefer "map" or "table" to "hash", "alist", "obarray", and whatnot. > - command-execute 454 47% [...] > - face-set-after-frame-default 387 40% > - face-spec-recalc 374 39% > - make-face-x-resource-internal 296 30% > - set-face-attributes-from-resources 273 28% > - set-face-attribute-from-resource 219 22% [...] > - command-execute 768 80% [...] > - face-set-after-frame-default 674 70% > - face-spec-recalc 660 69% > - face-spec-set-2 350 36% > - apply 348 36% > - set-face-attribute 342 35% > - internal-set-lisp-face-attribute 342 35% > - frame-set-background-mode 331 34% > - face-spec-recalc 284 29% > - make-face-x-resource-internal 235 24% Both of those profiles suggest that most of the time is still spent in `face-spec-recalc`, so it would be worth trying harder to avoid calling it or to speed it up somehow (presumably with some better memozing/caching). The first profile also suggests that we spend too much time in `make-face-x-resource-internal`. What caught my eye in the second profile is the fact that we call `face-spec-recalc` recursively. I suspect that recursion is not desired. Stefan PS: Maybe another way to speed this up is to do the `face-spec-recalc` lazily (i.e. only when we encounter the face during redisplay), but that's probably harder to do and not as good (since it will still be slow in the case where the frame happens to display hundreds of faces). From debbugs-submit-bounces@debbugs.gnu.org Fri May 15 10:34:45 2020 Received: (at 41200) by debbugs.gnu.org; 15 May 2020 14:34:45 +0000 Received: from localhost ([127.0.0.1]:38438 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZbQC-0000BA-U0 for submit@debbugs.gnu.org; Fri, 15 May 2020 10:34:45 -0400 Received: from eggs.gnu.org ([209.51.188.92]:34080) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZbQB-0000At-3R for 41200@debbugs.gnu.org; Fri, 15 May 2020 10:34:43 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:42551) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jZbQ5-0007XF-NS; Fri, 15 May 2020 10:34:37 -0400 Received: from [176.228.60.248] (port=1834 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jZbQ1-00028C-VB; Fri, 15 May 2020 10:34:34 -0400 Date: Fri, 15 May 2020 17:34:22 +0300 Message-Id: <83k11d1d3l.fsf@gnu.org> From: Eli Zaretskii To: Stefan Monnier In-Reply-To: (message from Stefan Monnier on Fri, 15 May 2020 10:03:44 -0400) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined References: X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 41200 Cc: cpitclaudel@gmail.com, 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Stefan Monnier > Cc: Eli Zaretskii , 41200@debbugs.gnu.org > Date: Fri, 15 May 2020 10:03:44 -0400 > > I'm hoping it can make it into Emacs-27.1, tho it is probably rather > late for such a significant change. It's too late. Such a significant change on such a low level is got to cause some issues, especially as parts of it are backward-incompatible. From debbugs-submit-bounces@debbugs.gnu.org Fri May 15 10:59:46 2020 Received: (at 41200) by debbugs.gnu.org; 15 May 2020 14:59:47 +0000 Received: from localhost ([127.0.0.1]:38467 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZboQ-00011x-4H for submit@debbugs.gnu.org; Fri, 15 May 2020 10:59:46 -0400 Received: from mail-qk1-f173.google.com ([209.85.222.173]:44660) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZboO-00011g-I0 for 41200@debbugs.gnu.org; Fri, 15 May 2020 10:59:45 -0400 Received: by mail-qk1-f173.google.com with SMTP id b6so2774746qkh.11 for <41200@debbugs.gnu.org>; Fri, 15 May 2020 07:59:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language; bh=UsMYgset5nGusdhgmMfFdgV2cZxg5QQZrABcZZzB3bI=; b=HVfHUsFIx6L+dKdSGKIJhAPIjtlqRh8E4G5r59F5Ki1wKX95lxChfG+Qs/PjzleQlo LF7FEIcBiouN6zTyBbpTH+yf5sZ/shRf5gIKpmVcseXAiuNishrNJK4tQ3DXk3q2+a+7 2k5xXhw07BoppL9ozUOLvPe1AIFdnn/ol1+l5+WvJ+fe+fgbgcrpT1+pDDgUNZuPu99N lq+wlXtw4BDG/pAXudo0/WJQbIrtF7uUu5QjbrLDBjup2/srdwXh9lbGvOxEJfaP4SMd bMbjv691oXQBR/IbeUPCSAUb+ufGDzHzGqHwCd46vk4jq0yMOu5h6a+/oTnHtDMdwGjG chYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language; bh=UsMYgset5nGusdhgmMfFdgV2cZxg5QQZrABcZZzB3bI=; b=EyR+Qbf2BLtOmnqZknwtiDvw9bN3evziAI4/nD/Dkv12leMUNE+kqygS1Z7WmSIzQ5 IAhNnGEf64d3Tw5hZ3PfYHCQ/5kuC6cXEcR+fAh4P1gdRyn9xeDlC7PHdr5sWYralMQw HpCQlytXJTyjQ6EFKM7qxmKuLBFKWi25+LExaLmOaEFNkFo+FEsJz+hmLc1I1/sYtmmN kG2dF/IQXOW7LGOx4/MFIb+jWn7WS0qgbOuCg1EbK3fKke6QRs4TgLZ5fGO/6hNcdZxp fYhKBZBxkagizqZIoLc7d5tCHYS4HFrczgqkf+eIWY8AucpGbPhrV1Ff1Yq60KRPl0HX sFyw== X-Gm-Message-State: AOAM531kOxHr4ARLexsLzZ1N3viXJmVyYPqtUD7zbKTzOMiLpi3Gw99c 4RwKiFE2MpyBMe3teCazxD9ItZWP X-Google-Smtp-Source: ABdhPJxA9wPQgdWbw0o8XcE8Hu8rjal6RpPOraOra2aiwHwW0W5IO15PI2RL7dQvQHX4x6M1zJas/w== X-Received: by 2002:a05:620a:4c9:: with SMTP id 9mr2136702qks.487.1589554778632; Fri, 15 May 2020 07:59:38 -0700 (PDT) Received: from ?IPv6:2601:184:4180:66e7:4d17:b25e:8d9:2188? ([2601:184:4180:66e7:4d17:b25e:8d9:2188]) by smtp.googlemail.com with ESMTPSA id x20sm2199987qtc.3.2020.05.15.07.59.37 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 15 May 2020 07:59:37 -0700 (PDT) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined To: Eli Zaretskii References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> <837dxd31cb.fsf@gnu.org> From: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= Message-ID: <789d786d-a07a-65c1-c0e4-433e4c18d64e@gmail.com> Date: Fri, 15 May 2020 10:59:36 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <837dxd31cb.fsf@gnu.org> Content-Type: multipart/mixed; boundary="------------BE1646C852BDDA7C590FE83E" Content-Language: en-GB X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41200 Cc: 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is a multi-part message in MIME format. --------------BE1646C852BDDA7C590FE83E Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Hi Eli, Thanks a lot for the review. I have attached an updated version of the patch. On 15/05/2020 07.05, Eli Zaretskii wrote: > I'd like to keep the old face-new-frame-defaults and frame-face-alist > for compatibility, but mention in the doc strings that they no longer > return modifiable values, and perhaps deprecate them. Done for frame-face-alist. But how can one do a read-only variable? Using the new variable watchers facility? >> * The name face_hash isn't ideal, since there's already a distinct notion of face hashes (hash codes). Can you think of a better name? > > face_hash_table? Thanks, good idea. I also liked Stefan's frame_face_map. >> + // QUESTION: is this where this should be initialized? > > Yes, I think so. But do we need to do anything when frame is deleted > as well? I'm not sure (I don't know how garbage collection works on the C side in Elisp; I assumed the map would be collected). >> -DEFUN ("frame-face-alist", Fframe_face_alist, Sframe_face_alist, >> +// QUESTION: Should I add an ELisp version of frame-face-hash? > > You mean, frame-face-alist, right? Yes, most definitely: I imagine a > lot of code out there uses that, and we wouldn't want to break that. Done. I looked around, but I didn't find many uses at all (for example, there are none in ELPA). I think this is likely because the function is documented as "For internal use only." There are no uses of face-new-frame-defaults in ELPA either; online, I found many copies of lisp-mode and emacs-lisp-mode, which refer it, and a few functions derived from edebug-eval-defun, which references it. > And I'm not sure we should have it only in Lisp: perhaps we should > maintain the alist as well, and add/remove to/from it when a face is > added or removed in the hash table. Otherwise this change of > internals will have painful effect on packages that use the current > APIs. frame-face-alist is likely less crucial than face-new-frame-defaults, because it was already a function, so the return value has to be mutated in place to modify it (it couldn't be directly assigned). For both of these, however, how would we ensure that the alist remains in sync with the hashmap (that is, how do we catch modifications?) >> + Lisp_Object lface = HASH_KEY(table, idx); >> + Lisp_Object face_id = Fget (lface, Qface); >> + // FIXME why is (get 'tab-line 'face) 0? > > A bug, I guess. As far as I can see, these IDs are assigned by Finternal_make_lisp_face, and I *think* it is never called for tab-line? Should I make sure that it is? If so, where from? > >> + if (!FIXNATP (face_id)) >> + // FIXME: I'm not sure what to do in this case > > I'm not sure I understand why do you need to look at the existing > face's 'face' property? The original code didn't. The original code iterated over face-frame-alist in the order in which entries were added to it. If I understand correctly, iteration order isn't guaranteed on hash tables (is it?), so I had to find a different source of truth for these. > >> DEFVAR_LISP ("face-new-frame-defaults", Vface_new_frame_defaults, >> doc: /* List of global face definitions (for internal use only.) */); >> - Vface_new_frame_defaults = Qnil; >> + Vface_new_frame_defaults = >> + make_hash_table (hashtest_eq, DEFAULT_HASH_SIZE, DEFAULT_REHASH_SIZE, >> + DEFAULT_REHASH_THRESHOLD, Qnil, Qnil); > > Why do we need to start with a non-default hash-table? I wanted to use `eq' instead of `eql' as the test (is that what you were asking?) --------------BE1646C852BDDA7C590FE83E Content-Type: text/x-patch; charset=UTF-8; name="0001-Store-frame-faces-in-hash-tables-instead-of-alists.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename*0="0001-Store-frame-faces-in-hash-tables-instead-of-alists.patc"; filename*1="h" >From 86ea2f96e4e3a2161f68f13b251620b98489fd35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pit-Claudel?= Date: Tue, 12 May 2020 21:48:32 -0400 Subject: [PATCH] Store frame faces in hash tables instead of alists * lisp/emacs-lisp/edebug.el (edebug-eval-defun): * lisp/progmodes/elisp-mode.el (elisp--eval-defun-1): * lisp/frame.el (frame-set-background-mode): * lisp/faces.el (face-list): Update to work with hash tables instead of alists. (frame-face-alist): Reimplement using frame-face-map. * src/frame.h (struct frame): Remove face_alist, add face_map. (fset_face_alist): Remove. (fset_face_map): New function. * src/frame.c (make_frame): Initialize f->face_map. (Fmake_terminal_frame): Update to work with hash tables instead of alists. * src/xfaces.c (lface_from_face_name_no_resolve): (Finternal_make_lisp_face): (update_face_from_frame_parameter): Update to work with hash tables instead of alists. * src/xfaces.c (Fframe_face_map): New function. (Fframe_face_alist): Move to face.el. (init_xfaces): Compute face IDs from they face property, not from their position in face_alist. (syms_of_xfaces): Remove frame_face_alist, add frame_face_map; change Vface_new_frame_defaults into a hash table. --- lisp/emacs-lisp/edebug.el | 3 +- lisp/faces.el | 13 +++++++- lisp/frame.el | 2 +- lisp/progmodes/elisp-mode.el | 3 +- src/frame.c | 20 +++++++---- src/frame.h | 8 ++--- src/xfaces.c | 65 +++++++++++++++++++----------------- 7 files changed, 67 insertions(+), 47 deletions(-) diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el index 78461185d3..97ca964eef 100644 --- a/lisp/emacs-lisp/edebug.el +++ b/lisp/emacs-lisp/edebug.el @@ -488,8 +488,7 @@ edebug-eval-defun (set-default (nth 1 form) (eval (nth 2 form) lexical-binding))) ((eq (car form) 'defface) ;; Reset the face. - (setq face-new-frame-defaults - (assq-delete-all (nth 1 form) face-new-frame-defaults)) + (remhash (nth 1 form) face-new-frame-defaults) (put (nth 1 form) 'face-defface-spec nil) (put (nth 1 form) 'face-documentation (nth 3 form)) ;; See comments in `eval-defun-1' for purpose of code below diff --git a/lisp/faces.el b/lisp/faces.el index e707f6f4b6..c45921bb48 100644 --- a/lisp/faces.el +++ b/lisp/faces.el @@ -176,10 +176,21 @@ face-font-registry-alternatives ;;; Creation, copying. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(defun frame-face-alist (&optional frame) + "Return an alist of frame-local faces defined on FRAME. +This alist is a copy of the contents of `frame-face-map'. +For internal use only." + (declare (obsolete frame-face-map "28.1")) + (let ((faces)) + (maphash (lambda (face spec) (push (cons face spec) faces)) + (frame-face-map frame)) + faces)) (defun face-list () "Return a list of all defined faces." - (mapcar #'car face-new-frame-defaults)) + (let ((faces nil)) + (maphash (lambda (face _) (push face faces)) face-new-frame-defaults) + faces)) (defun make-face (face) "Define a new face with name FACE, a symbol. diff --git a/lisp/frame.el b/lisp/frame.el index 6c2f774709..14c9112aad 100644 --- a/lisp/frame.el +++ b/lisp/frame.el @@ -1227,7 +1227,7 @@ frame-set-background-mode ;; during startup with -rv on the command ;; line for the initial frame, because frames ;; are not recorded in the pdump file. - (assq face (frame-face-alist)) + (gethash face (frame-face-map)) (face-spec-match-p face (face-user-default-spec face) ;; FIXME: why selected-frame and diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el index b737134f90..dc8688c864 100644 --- a/lisp/progmodes/elisp-mode.el +++ b/lisp/progmodes/elisp-mode.el @@ -1304,8 +1304,7 @@ elisp--eval-defun-1 ((eq (car form) 'custom-declare-face) ;; Reset the face. (let ((face-symbol (eval (nth 1 form) lexical-binding))) - (setq face-new-frame-defaults - (assq-delete-all face-symbol face-new-frame-defaults)) + (remhash face-new-frame-defaults face-symbol) (put face-symbol 'face-defface-spec nil) (put face-symbol 'face-override-spec nil)) form) diff --git a/src/frame.c b/src/frame.c index c871e4fd99..514b390910 100644 --- a/src/frame.c +++ b/src/frame.c @@ -946,6 +946,10 @@ make_frame (bool mini_p) rw->total_lines = mini_p ? 9 : 10; rw->pixel_height = rw->total_lines * FRAME_LINE_HEIGHT (f); + fset_face_map + (f, make_hash_table (hashtest_eq, DEFAULT_HASH_SIZE, DEFAULT_REHASH_SIZE, + DEFAULT_REHASH_THRESHOLD, Qnil, false)); + if (mini_p) { mw->top_line = rw->total_lines; @@ -1254,7 +1258,7 @@ DEFUN ("make-terminal-frame", Fmake_terminal_frame, Smake_terminal_frame, { struct frame *f; struct terminal *t = NULL; - Lisp_Object frame, tem; + Lisp_Object frame; struct frame *sf = SELECTED_FRAME (); #ifdef MSDOS @@ -1336,14 +1340,16 @@ DEFUN ("make-terminal-frame", Fmake_terminal_frame, Smake_terminal_frame, store_in_alist (&parms, Qminibuffer, Qt); Fmodify_frame_parameters (frame, parms); - /* Make the frame face alist be frame-specific, so that each + /* Make the frame face hash be frame-specific, so that each frame could change its face definitions independently. */ - fset_face_alist (f, Fcopy_alist (sf->face_alist)); - /* Simple Fcopy_alist isn't enough, because we need the contents of - the vectors which are the CDRs of associations in face_alist to + fset_face_map (f, Fcopy_hash_table (sf->face_map)); + /* Simple copy_hash_table isn't enough, because we need the contents of + the vectors which are the values in face_map to be copied as well. */ - for (tem = f->face_alist; CONSP (tem); tem = XCDR (tem)) - XSETCDR (XCAR (tem), Fcopy_sequence (XCDR (XCAR (tem)))); + ptrdiff_t idx = 0; + struct Lisp_Hash_Table *table = XHASH_TABLE (f->face_map); + for (idx = 0; idx < table->count; ++idx) + set_hash_value_slot (table, idx, Fcopy_sequence (HASH_VALUE (table, idx))); f->can_set_window_size = true; f->after_make_frame = true; diff --git a/src/frame.h b/src/frame.h index 476bac67fa..f8915b3c1a 100644 --- a/src/frame.h +++ b/src/frame.h @@ -158,8 +158,8 @@ #define EMACS_FRAME_H There are four additional elements of nil at the end, to terminate. */ Lisp_Object menu_bar_items; - /* Alist of elements (FACE-NAME . FACE-VECTOR-DATA). */ - Lisp_Object face_alist; + /* Hash table of FACE-NAME keys and FACE-VECTOR-DATA values. */ + Lisp_Object face_map; /* A vector that records the entire structure of this frame's menu bar. For the format of the data, see extensive comments in xmenu.c. @@ -661,9 +661,9 @@ fset_condemned_scroll_bars (struct frame *f, Lisp_Object val) f->condemned_scroll_bars = val; } INLINE void -fset_face_alist (struct frame *f, Lisp_Object val) +fset_face_map (struct frame *f, Lisp_Object val) { - f->face_alist = val; + f->face_map = val; } #if defined (HAVE_WINDOW_SYSTEM) INLINE void diff --git a/src/xfaces.c b/src/xfaces.c index 7d7aff95c1..89e9a10a0a 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -1843,13 +1843,11 @@ lface_from_face_name_no_resolve (struct frame *f, Lisp_Object face_name, Lisp_Object lface; if (f) - lface = assq_no_quit (face_name, f->face_alist); + lface = Fgethash (face_name, f->face_map, Qnil); else - lface = assq_no_quit (face_name, Vface_new_frame_defaults); + lface = Fgethash (face_name, Vface_new_frame_defaults, Qnil); - if (CONSP (lface)) - lface = XCDR (lface); - else if (signal_p) + if (signal_p && NILP (lface)) signal_error ("Invalid face", face_name); check_lface (lface); @@ -2736,8 +2734,7 @@ DEFUN ("internal-make-lisp-face", Finternal_make_lisp_face, { global_lface = make_vector (LFACE_VECTOR_SIZE, Qunspecified); ASET (global_lface, 0, Qface); - Vface_new_frame_defaults = Fcons (Fcons (face, global_lface), - Vface_new_frame_defaults); + Fputhash (face, global_lface, Vface_new_frame_defaults); /* Assign the new Lisp face a unique ID. The mapping from Lisp face id to Lisp face is given by the vector lface_id_to_name. @@ -2763,7 +2760,7 @@ DEFUN ("internal-make-lisp-face", Finternal_make_lisp_face, { lface = make_vector (LFACE_VECTOR_SIZE, Qunspecified); ASET (lface, 0, Qface); - fset_face_alist (f, Fcons (Fcons (face, lface), f->face_alist)); + Fputhash (face, lface, f->face_map); } else for (i = 1; i < LFACE_VECTOR_SIZE; ++i) @@ -3508,7 +3505,7 @@ update_face_from_frame_parameter (struct frame *f, Lisp_Object param, /* If there are no faces yet, give up. This is the case when called from Fx_create_frame, and we do the necessary things later in face-set-after-frame-defaults. */ - if (NILP (f->face_alist)) + if (XFIXNAT (Fhash_table_count (f->face_map)) == 0) return; if (EQ (param, Qforeground_color)) @@ -4174,14 +4171,13 @@ DEFUN ("internal-lisp-face-empty-p", Finternal_lisp_face_empty_p, return i == LFACE_VECTOR_SIZE ? Qt : Qnil; } - -DEFUN ("frame-face-alist", Fframe_face_alist, Sframe_face_alist, +DEFUN ("frame-face-map", Fframe_face_map, Sframe_face_map, 0, 1, 0, - doc: /* Return an alist of frame-local faces defined on FRAME. + doc: /* Return a hash table of frame-local faces defined on FRAME. For internal use only. */) (Lisp_Object frame) { - return decode_live_frame (frame)->face_alist; + return decode_live_frame (frame)->face_map; } @@ -6678,30 +6674,37 @@ DEFUN ("show-face-resources", Fshow_face_resources, Sshow_face_resources, #ifdef HAVE_PDUMPER /* All the faces defined during loadup are recorded in - face-new-frame-defaults, with the last face first in the list. We - need to set next_lface_id to the next face ID number, so that any - new faces defined in this session will have face IDs different from - those defined during loadup. We also need to set up the - lface_id_to_name[] array for the faces that were defined during - loadup. */ + face-new-frame-defaults. We need to set next_lface_id to the next + face ID number, so that any new faces defined in this session will + have face IDs different from those defined during loadup. We also + need to set up the lface_id_to_name[] array for the faces that were + defined during loadup. */ void init_xfaces (void) { - if (CONSP (Vface_new_frame_defaults)) + int nfaces = XFIXNAT (Fhash_table_count (Vface_new_frame_defaults)); + if (nfaces > 0) { /* Allocate the lface_id_to_name[] array. */ - lface_id_to_name_size = next_lface_id = - XFIXNAT (Flength (Vface_new_frame_defaults)); + lface_id_to_name_size = next_lface_id = nfaces; lface_id_to_name = xnmalloc (next_lface_id, sizeof *lface_id_to_name); /* Store the faces. */ - Lisp_Object tail; - int i = next_lface_id - 1; - for (tail = Vface_new_frame_defaults; CONSP (tail); tail = XCDR (tail)) + struct Lisp_Hash_Table* table = XHASH_TABLE (Vface_new_frame_defaults); + for (ptrdiff_t idx = 0; idx < nfaces; ++idx) { - Lisp_Object lface = XCAR (tail); - eassert (i >= 0); - lface_id_to_name[i--] = XCAR (lface); + Lisp_Object lface = HASH_KEY (table, idx); + Lisp_Object face_id = Fget (lface, Qface); + // FIXME why is (get 'tab-line 'face) 0? + if (!FIXNATP (face_id)) + // FIXME: I'm not sure what to do in this case + printf ("Face %s has no id\n", SDATA (SYMBOL_NAME (lface))); + else + { + int id = XFIXNAT (face_id); + eassert (id >= 0); + lface_id_to_name[id] = lface; + } } } face_attr_sym[0] = Qface; @@ -6855,7 +6858,7 @@ syms_of_xfaces (void) defsubr (&Sinternal_copy_lisp_face); defsubr (&Sinternal_merge_in_global_face); defsubr (&Sface_font); - defsubr (&Sframe_face_alist); + defsubr (&Sframe_face_map); defsubr (&Sdisplay_supports_face_attributes_p); defsubr (&Scolor_distance); defsubr (&Sinternal_set_font_selection_order); @@ -6881,7 +6884,9 @@ syms_of_xfaces (void) DEFVAR_LISP ("face-new-frame-defaults", Vface_new_frame_defaults, doc: /* List of global face definitions (for internal use only.) */); - Vface_new_frame_defaults = Qnil; + Vface_new_frame_defaults = + make_hash_table (hashtest_eq, DEFAULT_HASH_SIZE, DEFAULT_REHASH_SIZE, + DEFAULT_REHASH_THRESHOLD, Qnil, false); DEFVAR_LISP ("face-default-stipple", Vface_default_stipple, doc: /* Default stipple pattern used on monochrome displays. -- 2.17.1 --------------BE1646C852BDDA7C590FE83E-- From debbugs-submit-bounces@debbugs.gnu.org Fri May 15 11:18:17 2020 Received: (at 41200) by debbugs.gnu.org; 15 May 2020 15:18:17 +0000 Received: from localhost ([127.0.0.1]:38488 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZc6L-0003o1-5g for submit@debbugs.gnu.org; Fri, 15 May 2020 11:18:17 -0400 Received: from eggs.gnu.org ([209.51.188.92]:43348) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZc6I-0003nl-UB for 41200@debbugs.gnu.org; Fri, 15 May 2020 11:18:15 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:43269) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jZc6C-0006Kp-NJ; Fri, 15 May 2020 11:18:08 -0400 Received: from [176.228.60.248] (port=4485 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jZc6B-0007nx-3R; Fri, 15 May 2020 11:18:07 -0400 Date: Fri, 15 May 2020 18:17:53 +0300 Message-Id: <835zcxgrby.fsf@gnu.org> From: Eli Zaretskii To: =?utf-8?Q?Cl=C3=A9ment?= Pit-Claudel In-Reply-To: <789d786d-a07a-65c1-c0e4-433e4c18d64e@gmail.com> (message from =?utf-8?Q?Cl=C3=A9ment?= Pit-Claudel on Fri, 15 May 2020 10:59:36 -0400) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> <837dxd31cb.fsf@gnu.org> <789d786d-a07a-65c1-c0e4-433e4c18d64e@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 41200 Cc: 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: 41200@debbugs.gnu.org > From: Clément Pit-Claudel > Date: Fri, 15 May 2020 10:59:36 -0400 > > > I'd like to keep the old face-new-frame-defaults and frame-face-alist > > for compatibility, but mention in the doc strings that they no longer > > return modifiable values, and perhaps deprecate them. > > Done for frame-face-alist. But how can one do a read-only variable? Using the new variable watchers facility? At the very least mention in the doc string. I don't think using watchable symbols is needed here, it sounds gross. If there's an outcry that this breaks too much code out there, we could revisit this. > >> * The name face_hash isn't ideal, since there's already a distinct notion of face hashes (hash codes). Can you think of a better name? > > > > face_hash_table? > > Thanks, good idea. I also liked Stefan's frame_face_map. "Map" is too general, IMO, it doesn't tell enough about the kind of object it is. > >> + // QUESTION: is this where this should be initialized? > > > > Yes, I think so. But do we need to do anything when frame is deleted > > as well? > > I'm not sure (I don't know how garbage collection works on the C side in Elisp; I assumed the map would be collected). I guess so. > > You mean, frame-face-alist, right? Yes, most definitely: I imagine a > > lot of code out there uses that, and we wouldn't want to break that. > > Done. > > I looked around, but I didn't find many uses at all (for example, there are none in ELPA). I think this is likely because the function is documented as "For internal use only." > > There are no uses of face-new-frame-defaults in ELPA either; online, I found many copies of lisp-mode and emacs-lisp-mode, which refer it, and a few functions derived from edebug-eval-defun, which references it. That means we will probably be able to remove it earlier than I feared. > > And I'm not sure we should have it only in Lisp: perhaps we should > > maintain the alist as well, and add/remove to/from it when a face is > > added or removed in the hash table. Otherwise this change of > > internals will have painful effect on packages that use the current > > APIs. > > frame-face-alist is likely less crucial than face-new-frame-defaults, because it was already a function, so the return value has to be mutated in place to modify it (it couldn't be directly assigned). For both of these, however, how would we ensure that the alist remains in sync with the hashmap (that is, how do we catch modifications?) I thought about updating the alist when the hash-table is modified. Since you always know whether the face is already in the hash-table, you don't need to scan the alist looking for it. I'd really like to know that no one is using these before we make the final decision about this. > >> + Lisp_Object lface = HASH_KEY(table, idx); > >> + Lisp_Object face_id = Fget (lface, Qface); > >> + // FIXME why is (get 'tab-line 'face) 0? > > > > A bug, I guess. > > As far as I can see, these IDs are assigned by Finternal_make_lisp_face, and I *think* it is never called for tab-line? Most probably. > Should I make sure that it is? Yes, I think so. > If so, where from? I think the problem is that tab-line is declared a basic face, but its defface form is not in faces.el. > >> + if (!FIXNATP (face_id)) > >> + // FIXME: I'm not sure what to do in this case > > > > I'm not sure I understand why do you need to look at the existing > > face's 'face' property? The original code didn't. > > The original code iterated over face-frame-alist in the order in which entries were added to it. If I understand correctly, iteration order isn't guaranteed on hash tables (is it?), so I had to find a different source of truth for these. Maybe we should store the ID with the face? I think we wanted to get rid of the 'face' property of the faces at some point. > >> DEFVAR_LISP ("face-new-frame-defaults", Vface_new_frame_defaults, > >> doc: /* List of global face definitions (for internal use only.) */); > >> - Vface_new_frame_defaults = Qnil; > >> + Vface_new_frame_defaults = > >> + make_hash_table (hashtest_eq, DEFAULT_HASH_SIZE, DEFAULT_REHASH_SIZE, > >> + DEFAULT_REHASH_THRESHOLD, Qnil, Qnil); > > > > Why do we need to start with a non-default hash-table? > > I wanted to use `eq' instead of `eql' as the test (is that what you were asking?) No, I was asking why not start with it as nil and actually make a hash-table when we first need it. From debbugs-submit-bounces@debbugs.gnu.org Fri May 15 11:33:50 2020 Received: (at 41200) by debbugs.gnu.org; 15 May 2020 15:33:50 +0000 Received: from localhost ([127.0.0.1]:38513 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZcLO-0004Gp-3J for submit@debbugs.gnu.org; Fri, 15 May 2020 11:33:50 -0400 Received: from mail-qk1-f181.google.com ([209.85.222.181]:45906) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZcLM-0004GX-MW for 41200@debbugs.gnu.org; Fri, 15 May 2020 11:33:48 -0400 Received: by mail-qk1-f181.google.com with SMTP id i5so2894808qkl.12 for <41200@debbugs.gnu.org>; Fri, 15 May 2020 08:33:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=I1X704DhotDBxU0RNGJQPN5B4RzQUQdTG/FM6WCamsM=; b=cjVB0XBEfMAHKKIEOM0es2TB/WwXoJkFfg9buPDvYz/+ssU2P3QAtzG3JcP+2SPiir iRnlvTmlMhdvJw/6TfKN3an7os3/UsnYmhWE2WRSwm2FjrUpHri3P8Zm42wdvg/bO29I ApT7cQX8fYOCxny4MAWVULBV32uNmGcklbeQrmjHVFEgI76iIw6bLXaNtgAxHNwyD4Qo FGVrEgiCm+/SNKZLW4XInQiD886OdXp6XJUwOd356xHKc/FBYx4Yvgp/u8Y/H2N0WXA/ cgi+FHjfoXLSdo11xxWBbvjDtqwkMoDJn3X73pLJ5tvV0aCQSXmqXLYFsmOQHrPusXwl IZAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=I1X704DhotDBxU0RNGJQPN5B4RzQUQdTG/FM6WCamsM=; b=FHa0y6yr0oKRnW1Ud4xlYt5mAAyUZ1n9XlE4YS5yvgv40vHoL7+GcLM1JunHkGZ+YH LKPU+PiPnXhQ15EZzhzt8Eol7xkdnFK71DgIUeGJQlI3EOLFqdnFKqU/lG/PI18Xtnan +LHfL4HjbuvX2XE31v0tGsSQW14dCgJglb2cpmiHbsZsNV67lz/V3pA2logCLwu163Mt z9XYu7oCYSA+Rs/gHpPVEZXwRLWPctAh48zBtZRENXsSHjR0FdR7lTjjM1w7R6v+joox 3CNO4Q1RYw9lzsF9LBfx37i08/RISnDOjheKmaFPifXiKKBa7jMLssnk0pDjimdVQibV PNQg== X-Gm-Message-State: AOAM533SRrxNWQveu2TnIODK3HuSEWvnFJhhktlGucr/qvCAnSVH5Sdq 7eyiTjElTMEyBC4u7Wz1UcSpK05i X-Google-Smtp-Source: ABdhPJy/bXRtSe03lQJGhhGW5QpAIMWLiu34p7/xKCYVg8egb1LnSfV1K2a89L10JSuvFt25B3LqMA== X-Received: by 2002:a37:6384:: with SMTP id x126mr4024551qkb.355.1589556822828; Fri, 15 May 2020 08:33:42 -0700 (PDT) Received: from vhost2 (CPE001143542e1f-CMf81d0f809fa0.cpe.net.cable.rogers.com. [99.230.38.42]) by smtp.gmail.com with ESMTPSA id c25sm1789378qkm.119.2020.05.15.08.33.42 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 15 May 2020 08:33:42 -0700 (PDT) From: Noam Postavsky To: Eli Zaretskii Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> <837dxd31cb.fsf@gnu.org> <789d786d-a07a-65c1-c0e4-433e4c18d64e@gmail.com> <835zcxgrby.fsf@gnu.org> Date: Fri, 15 May 2020 11:33:40 -0400 In-Reply-To: <835zcxgrby.fsf@gnu.org> (Eli Zaretskii's message of "Fri, 15 May 2020 18:17:53 +0300") Message-ID: <85wo5dfc17.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (windows-nt) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41200 Cc: =?iso-8859-1?Q?Cl=E9ment?= Pit-Claudel , 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Eli Zaretskii writes: >> Done for frame-face-alist. But how can one do a read-only variable? >> Using the new variable watchers facility? > > At the very least mention in the doc string. I don't think using > watchable symbols is needed here, it sounds gross. If there's an > outcry that this breaks too much code out there, we could revisit > this. You can use make_symbol_constant to make a variable read-only. You could also simulate it with a variable watcher that signals an error, but there's no sense in doing that when make_symbol_constant exists. Neither of these makes the list object itself read-only though. From debbugs-submit-bounces@debbugs.gnu.org Fri May 15 12:23:02 2020 Received: (at 41200) by debbugs.gnu.org; 15 May 2020 16:23:02 +0000 Received: from localhost ([127.0.0.1]:38599 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZd70-0005wX-DF for submit@debbugs.gnu.org; Fri, 15 May 2020 12:23:02 -0400 Received: from mail-qv1-f44.google.com ([209.85.219.44]:42347) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZd6y-0005vd-IW for 41200@debbugs.gnu.org; Fri, 15 May 2020 12:23:00 -0400 Received: by mail-qv1-f44.google.com with SMTP id g20so1336850qvb.9 for <41200@debbugs.gnu.org>; Fri, 15 May 2020 09:23:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=tCygyuYx99Yf8Qa20hYMvfKBiNKYY50E6TlPDpPdG6w=; b=LmNBtlbQ7mmrP3CkH7dVEro4trqzhC+7I37UD7wcoEFuUuUsIDz+VbzVV9bTHCIVuR rye2Xe2AOcebqwR547aKLwlRtwgiGnHi0xPsjzXG2yvlWAGxa3Qhh6unfEk0hro28yay gxe97MqcTNYS2ykc86dFLyfB6uMaKcXd7KWWLAeSK7l5a9tfmGaB6pN9I54n3g6jnNMZ B9EOxfGtHt8Mk7UmrlG+Od88V0oMDxs8MFfVVz3UAPx40KcdzRu7gDW2WlU2OHnnO9Sl DEUnb1YN7LNgAUY2ij8Th2htEDp3W2a4kPKM6wRu4DFYRA1TbcNax4dvyrwiEUWjIWqH BlMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=tCygyuYx99Yf8Qa20hYMvfKBiNKYY50E6TlPDpPdG6w=; b=E56VZQUu1ORaA7xy/YujRdyS5GzFr1N4iVrQCRhrvN7x9lXfNa+U1jPFHlmIsuodBF LhGa7HNrEQTHskGfZyZ1IANO1v1zw36nvxyHPWTeXNm1kO08XaU+s4wORHbaNhJYZsDg Y1l7wOfZTSkAm/AqQsi3dtx7x0AqFrSD0yF0m7LP26NPlvYMR6uh/hGqiSAgO4gVRkkL AM6hNbraKVF5RjIUtOo3wFuIboXspAZbqUpmjFs5PxMsNP/pu+kM+FA+0MSzBmUTCi5o hMBeXMF+hv9M7GeEF6nDgn6cMlgmU4uAIiopPhGTkfxiQ5RpPm4kGWSDvFMtaKZBfYoz m1sA== X-Gm-Message-State: AOAM532FmhhTlXlopXVePyDTrfY91tPcxUFnZbFdmtmQbRUH67zNiQPQ fpM8gXxHFbaquEQeAYOO4/k= X-Google-Smtp-Source: ABdhPJzI/onyMgD9nruWA+EhWsw5eLR/gzw6TwplLO2l29OlAAxXJmGbQ3ytJ7xYD19TBnkJNx4SCQ== X-Received: by 2002:ad4:4e65:: with SMTP id ec5mr4287021qvb.204.1589559774883; Fri, 15 May 2020 09:22:54 -0700 (PDT) Received: from ?IPv6:2601:184:4180:66e7:4d17:b25e:8d9:2188? ([2601:184:4180:66e7:4d17:b25e:8d9:2188]) by smtp.googlemail.com with ESMTPSA id k25sm1813884qki.135.2020.05.15.09.22.53 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 15 May 2020 09:22:54 -0700 (PDT) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined To: Eli Zaretskii References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> <837dxd31cb.fsf@gnu.org> <789d786d-a07a-65c1-c0e4-433e4c18d64e@gmail.com> <835zcxgrby.fsf@gnu.org> From: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= Message-ID: Date: Fri, 15 May 2020 12:22:53 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <835zcxgrby.fsf@gnu.org> Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 8bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41200 Cc: 41200@debbugs.gnu.org, Anders Lindgren X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 15/05/2020 11.17, Eli Zaretskii wrote: >>>> * The name face_hash isn't ideal, since there's already a distinct notion of face hashes (hash codes). Can you think of a better name? >>> >>> face_hash_table? >> >> Thanks, good idea. I also liked Stefan's frame_face_map. > > "Map" is too general, IMO, it doesn't tell enough about the kind of > object it is. Got it. Is face_table better? (that was Stefan's other suggestion) >>> And I'm not sure we should have it only in Lisp: perhaps we should >>> maintain the alist as well, and add/remove to/from it when a face is >>> added or removed in the hash table. Otherwise this change of >>> internals will have painful effect on packages that use the current >>> APIs. >> >> frame-face-alist is likely less crucial than face-new-frame-defaults, because it was already a function, so the return value has to be mutated in place to modify it (it couldn't be directly assigned). For both of these, however, how would we ensure that the alist remains in sync with the hashmap (that is, how do we catch modifications?) > > I thought about updating the alist when the hash-table is modified. > Since you always know whether the face is already in the hash-table, > you don't need to scan the alist looking for it. Would that be done in C, or in any place where frame-new-face-defaults is modified? (for example, edebug changes face-new-frame-defaults in one place; if we keep the alist in addition to the hash table, would it modify both or would there be a C mechanism that mirrors hash-table modifications to the alist?) > I'd really like to know that no one is using these before we make the > final decision about this. That's a fair point. While I couldn't find uses of frame-face-alist, there are a few uses of face-new-frame-defaults-alist: https://github.com/pestctrl/emacs-config/commit/31d6bff97dacf60f71066902a23d37e59b4c1288 is from someone who uses that to speed up temporary frame creation(!), https://github.com/Lindydancer/face-explorer/blob/13bd4553bc4b09215a04d0267be1cb4ed834775c/test/face-explorer-test-faces.el is from Anders Lindgren (in CC; hi Andres! We're considering replacing face-new-frame-defaults-alist with a hash table, would that be an issue?), who uses it to remove a face, and https://github.com/Wilfred/elisp-fu/blob/92c491584f466ee729ea1b328234636e65e2c665/elisp-fu.el includes code that's the same as in eval-defun. I have a variant of the patch that keeps the alist variable, but I fear that it's worse than removing it: since changes to the alist won't be propagated to the hash table, it might be better to error out with a compilation error? Btw, I have one more question: some callers of face-list seems to rely on the order of faces added to it, so it would be better to preserve that order. Since hash-tables are not necessarily ordered, should I sort faces by face-id before returning them? >> If so, where from? > > I think the problem is that tab-line is declared a basic face, but its > defface form is not in faces.el. Ah, good catch. Current there's a defface for tab-bar in lisp/tab-bar, and since that's preloaded it works, but the defface for tab-line is in lisp/tab-line.el and so isn't preloaded. Should I move both to faces.el? >>>> + if (!FIXNATP (face_id)) >>>> + // FIXME: I'm not sure what to do in this case >>> >>> I'm not sure I understand why do you need to look at the existing >>> face's 'face' property? The original code didn't. >> >> The original code iterated over face-frame-alist in the order in which entries were added to it. If I understand correctly, iteration order isn't guaranteed on hash tables (is it?), so I had to find a different source of truth for these. > > Maybe we should store the ID with the face? I think we wanted to get > rid of the 'face' property of the faces at some point. Sounds reasonable; but where would we store it? Right now faces are just symbols, right? > No, I was asking why not start with it as nil and actually make a > hash-table when we first need it. Oh, I thought it would be simpler to always have a hash table instead of having to sanity check every time. Thanks a lot, Clément. From debbugs-submit-bounces@debbugs.gnu.org Fri May 15 13:28:34 2020 Received: (at 41200) by debbugs.gnu.org; 15 May 2020 17:28:34 +0000 Received: from localhost ([127.0.0.1]:38664 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZe8P-00085L-PF for submit@debbugs.gnu.org; Fri, 15 May 2020 13:28:34 -0400 Received: from eggs.gnu.org ([209.51.188.92]:37702) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZe8O-000855-JP for 41200@debbugs.gnu.org; Fri, 15 May 2020 13:28:32 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:46307) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jZe8I-000166-AW; Fri, 15 May 2020 13:28:26 -0400 Received: from [176.228.60.248] (port=4530 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jZe8G-0006bE-UU; Fri, 15 May 2020 13:28:25 -0400 Date: Fri, 15 May 2020 20:28:11 +0300 Message-Id: <833681glas.fsf@gnu.org> From: Eli Zaretskii To: =?utf-8?Q?Cl=C3=A9ment?= Pit-Claudel In-Reply-To: (message from =?utf-8?Q?Cl=C3=A9ment?= Pit-Claudel on Fri, 15 May 2020 12:22:53 -0400) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> <837dxd31cb.fsf@gnu.org> <789d786d-a07a-65c1-c0e4-433e4c18d64e@gmail.com> <835zcxgrby.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 41200 Cc: 41200@debbugs.gnu.org, andlind@gmail.com X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: 41200@debbugs.gnu.org, Anders Lindgren > From: Clément Pit-Claudel > Date: Fri, 15 May 2020 12:22:53 -0400 > > >>> face_hash_table? > >> > >> Thanks, good idea. I also liked Stefan's frame_face_map. > > > > "Map" is too general, IMO, it doesn't tell enough about the kind of > > object it is. > > Got it. Is face_table better? (that was Stefan's other suggestion) Is anything wrong with face_hash_table? > > I thought about updating the alist when the hash-table is modified. > > Since you always know whether the face is already in the hash-table, > > you don't need to scan the alist looking for it. > > Would that be done in C, or in any place where frame-new-face-defaults is modified? (for example, edebug changes face-new-frame-defaults in one place; if we keep the alist in addition to the hash table, would it modify both or would there be a C mechanism that mirrors hash-table modifications to the alist?) The latter was what I had in mind. > I have a variant of the patch that keeps the alist variable, but I fear that it's worse than removing it: since changes to the alist won't be propagated to the hash table, it might be better to error out with a compilation error? Not sure yet, it depends on how this is used. > Btw, I have one more question: some callers of face-list seems to rely on the order of faces added to it, so it would be better to preserve that order. Since hash-tables are not necessarily ordered, should I sort faces by face-id before returning them? Yes, I think so. > > I think the problem is that tab-line is declared a basic face, but its > > defface form is not in faces.el. > > Ah, good catch. Current there's a defface for tab-bar in lisp/tab-bar, and since that's preloaded it works, but the defface for tab-line is in lisp/tab-line.el and so isn't preloaded. > Should I move both to faces.el? Yes, I think so. > >>> I'm not sure I understand why do you need to look at the existing > >>> face's 'face' property? The original code didn't. > >> > >> The original code iterated over face-frame-alist in the order in which entries were added to it. If I understand correctly, iteration order isn't guaranteed on hash tables (is it?), so I had to find a different source of truth for these. > > > > Maybe we should store the ID with the face? I think we wanted to get > > rid of the 'face' property of the faces at some point. > > Sounds reasonable; but where would we store it? Right now faces are just symbols, right? Don't hash-tables allow us to store more than one item in each slot? > > No, I was asking why not start with it as nil and actually make a > > hash-table when we first need it. > > Oh, I thought it would be simpler to always have a hash table instead of having to sanity check every time. What is the default size of a hash-table? From debbugs-submit-bounces@debbugs.gnu.org Fri May 15 14:50:30 2020 Received: (at 41200) by debbugs.gnu.org; 15 May 2020 18:50:30 +0000 Received: from localhost ([127.0.0.1]:38730 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZfPe-00066g-47 for submit@debbugs.gnu.org; Fri, 15 May 2020 14:50:30 -0400 Received: from mail-qv1-f47.google.com ([209.85.219.47]:45126) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZfPc-00066R-Nt for 41200@debbugs.gnu.org; Fri, 15 May 2020 14:50:25 -0400 Received: by mail-qv1-f47.google.com with SMTP id z9so1584290qvi.12 for <41200@debbugs.gnu.org>; Fri, 15 May 2020 11:50:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language; bh=ZKChxk8dDfiR/B45KMT10NPSrZp6JyXHhv8oJUDW8Ak=; b=fRkvf61L4ALbptU2JIIBHvhu9bgswrg785RhoaNaImA49mkZiwWhn9zxPyPn1VdSKP sDxrFhUancWF5PGY65lAhVydUKYnEbYVktTL0Apz4oa8uYi65vwsLx2fneytKEF040dh rhdOI5rZTfo4+aDtC1reL89hVRB5WaCfvLqsbkKeuqXsyR+JcyZc8kcA33S6OjVM1UWH b94zU7yhqqtYd8peBb7xaYE6UB7m1I8PvIyk95xsYsB6/W7nX/KmFmgycUeGVThHL4YO JQH7MZdPWbQKjfqAzgKeLBHAJmBNS06XeffJuWjCb/oTY5ZdQGQplaSHSyrH5fopvn/w DWag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language; bh=ZKChxk8dDfiR/B45KMT10NPSrZp6JyXHhv8oJUDW8Ak=; b=ss2JFCSqs3w6bSSyERTfjOA+nrTSUYvsNhy0l0bNaz6NZ5r5/Y0djXQ9g5/OFSNkMI ZJyt6Xj0virqe6YU5RTDNh9hoXJxYShSGQa4hiRVMIRN5ICcUaOsOjs9WbHkpXyWrO0i qFyMIGD6kDu4OmVeJMqsUS4v1bYNq4dsw4Tg4oRLzHZuAdMURd3CffNJqdBofDBwUtBH Cj51YwkleqkwstdxAUnHBZQtQJdG6y4GRRcN3rDC6MKHWqWEfR6d0U9IZkYn+BWHMnts jjKDIalwZ2u1By28URaLzqt3zEIUR2I8RoqR3g9qjHQOK4WlOa82UBXCUGwiTO0nQsV+ aN9g== X-Gm-Message-State: AOAM533PUknQv++J3D7G88x9IDJ37WcyERjqJ4tTMouilKvmD5n3uzxM yuLMj4/DhqO+NDwlNrmj+9M= X-Google-Smtp-Source: ABdhPJx6YtoyOjE2KvHK36ZGGveXP1MvwK+l2koOwEl2mNH4EkCaYWIZlLnjJ+/n8cOAA2nSHST5IA== X-Received: by 2002:a0c:ec44:: with SMTP id n4mr4859433qvq.237.1589568619183; Fri, 15 May 2020 11:50:19 -0700 (PDT) Received: from ?IPv6:2601:184:4180:66e7:4d17:b25e:8d9:2188? ([2601:184:4180:66e7:4d17:b25e:8d9:2188]) by smtp.googlemail.com with ESMTPSA id e27sm2148759qkl.47.2020.05.15.11.50.17 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 15 May 2020 11:50:18 -0700 (PDT) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined To: Eli Zaretskii References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> <837dxd31cb.fsf@gnu.org> <789d786d-a07a-65c1-c0e4-433e4c18d64e@gmail.com> <835zcxgrby.fsf@gnu.org> <833681glas.fsf@gnu.org> From: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= Message-ID: <53252e93-085c-477f-21df-c909082dffc2@gmail.com> Date: Fri, 15 May 2020 14:50:17 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <833681glas.fsf@gnu.org> Content-Type: multipart/mixed; boundary="------------BA64282E6E8C5FE96DAD52F3" Content-Language: en-GB X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41200 Cc: 41200@debbugs.gnu.org, Juri Linkov X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is a multi-part message in MIME format. --------------BA64282E6E8C5FE96DAD52F3 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit On 15/05/2020 13.28, Eli Zaretskii wrote: >> Cc: 41200@debbugs.gnu.org, Anders Lindgren >> From: Clément Pit-Claudel >> Date: Fri, 15 May 2020 12:22:53 -0400 >> >>>>> face_hash_table? >>>> >>>> Thanks, good idea. I also liked Stefan's frame_face_map. >>> >>> "Map" is too general, IMO, it doesn't tell enough about the kind of >>> object it is. >> >> Got it. Is face_table better? (that was Stefan's other suggestion) > > Is anything wrong with face_hash_table? Nope; I've attached a new patch. >> Btw, I have one more question: some callers of face-list seems to rely on the order of faces added to it, so it would be better to preserve that order. Since hash-tables are not necessarily ordered, should I sort faces by face-id before returning them? Done in the attached patch as well. >>> I think the problem is that tab-line is declared a basic face, but its >>> defface form is not in faces.el. >> >> Ah, good catch. Current there's a defface for tab-bar in lisp/tab-bar, and since that's preloaded it works, but the defface for tab-line is in lisp/tab-line.el and so isn't preloaded. >> Should I move both to faces.el? >> > Yes, I think so. Thanks. I will ask Juri to confirm before moving them, because I realize now that they have a custom group. Juri (CC'd; hi Juri!), was there a reason to make tab-bar and tab-line basic faces? I see they are both in their own files and groups, instead of being in faces.el. >>>>> I'm not sure I understand why do you need to look at the existing >>>>> face's 'face' property? The original code didn't. >>>> >>>> The original code iterated over face-frame-alist in the order in which entries were added to it. If I understand correctly, iteration order isn't guaranteed on hash tables (is it?), so I had to find a different source of truth for these. >>> >>> Maybe we should store the ID with the face? I think we wanted to get >>> rid of the 'face' property of the faces at some point. >> >> Sounds reasonable; but where would we store it? Right now faces are just symbols, right? > > Don't hash-tables allow us to store more than one item in each slot? They do, so I can certainly store (face-id . face-vector) in the hash table. Done in the attached patch. I only do this in Vface_new_frame_defaults, not in frame->face_hash_table. >>> No, I was asking why not start with it as nil and actually make a >>> hash-table when we first need it. >> >> Oh, I thought it would be simpler to always have a hash table instead of having to sanity check every time. > > What is the default size of a hash-table? 65 entries, I think. --------------BA64282E6E8C5FE96DAD52F3 Content-Type: text/x-patch; charset=UTF-8; name="0001-Store-frame-faces-in-hash-tables-instead-of-alists.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename*0="0001-Store-frame-faces-in-hash-tables-instead-of-alists.patc"; filename*1="h" >From be915d6d2ea7a739026dc4a53fab64f78efab2bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pit-Claudel?= Date: Tue, 12 May 2020 21:48:32 -0400 Subject: [PATCH] Store frame faces in hash tables instead of alists * src/frame.h (struct frame): Add face_hash_table, remove face_alist. (fset_face_hash_table): New function. (fset_face_alist): Remove. * src/frame.c (make_frame): Initialize f->face_hash_table. (Fmake_terminal_frame): Update to work with hash tables instead of alists. * src/xfaces.c (lface_from_face_name_no_resolve): (Finternal_make_lisp_face): (update_face_from_frame_parameter): Update to work with hash tables instead of alists. (Fframe_face_hash_table): New function. (Fframe_face_alist): Move to faces.el as frame-face-alist. (syms_of_xfaces): Add frame_face_hash_table. * lisp/emacs-lisp/edebug.el (edebug-eval-defun): * lisp/progmodes/elisp-mode.el (elisp--eval-defun-1): * lisp/frame.el (frame-set-background-mode): Update to work with hash tables instead of alists. * lisp/faces.el (face-new-frame-defaults): Mark obsolete. (face-list): Update to use face--new-frame-defaults. (frame-face-alist): Moved here from src/xfaces.c. --- lisp/custom.el | 2 +- lisp/emacs-lisp/edebug.el | 3 +- lisp/faces.el | 23 ++++++++-- lisp/frame.el | 2 +- lisp/progmodes/elisp-mode.el | 3 +- src/frame.c | 20 ++++++--- src/frame.h | 8 ++-- src/xfaces.c | 82 ++++++++++++++++++------------------ 8 files changed, 83 insertions(+), 60 deletions(-) diff --git a/lisp/custom.el b/lisp/custom.el index 885c486c5e..3ac8bac40f 100644 --- a/lisp/custom.el +++ b/lisp/custom.el @@ -898,7 +898,7 @@ custom-push-theme ;; the value to a fake theme, `changed'. If the theme is ;; later disabled, we use this to bring back the old value. ;; - ;; For faces, we just use `face-new-frame-defaults' to + ;; For faces, we just use `face--new-frame-defaults' to ;; recompute when the theme is disabled. (when (and (eq prop 'theme-value) (boundp symbol)) diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el index 78461185d3..76a75c04df 100644 --- a/lisp/emacs-lisp/edebug.el +++ b/lisp/emacs-lisp/edebug.el @@ -488,8 +488,7 @@ edebug-eval-defun (set-default (nth 1 form) (eval (nth 2 form) lexical-binding))) ((eq (car form) 'defface) ;; Reset the face. - (setq face-new-frame-defaults - (assq-delete-all (nth 1 form) face-new-frame-defaults)) + (remhash (nth 1 form) face--new-frame-defaults) (put (nth 1 form) 'face-defface-spec nil) (put (nth 1 form) 'face-documentation (nth 3 form)) ;; See comments in `eval-defun-1' for purpose of code below diff --git a/lisp/faces.el b/lisp/faces.el index e707f6f4b6..bb51797a38 100644 --- a/lisp/faces.el +++ b/lisp/faces.el @@ -176,10 +176,27 @@ face-font-registry-alternatives ;;; Creation, copying. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(make-obsolete-variable + 'face-new-frame-defaults + "use `face--new-frame-defaults' or `face-alist' instead." + "28.1") + +(defun frame-face-alist (&optional frame) + "Return an alist of frame-local faces defined on FRAME. +This alist is a copy of the contents of `frame--face-hash-table'. +For internal use only." + (declare (obsolete frame--face-hash-table "28.1")) + (let ((faces)) + (maphash (lambda (face spec) (push `(,(car spec) ,face . ,(cdr spec)) faces)) + (frame--face-hash-table frame)) + (mapcar #'cdr (sort faces (lambda (f1 f2) (< (car f1) (car f2))))))) (defun face-list () "Return a list of all defined faces." - (mapcar #'car face-new-frame-defaults)) + (let ((faces)) + (maphash (lambda (face spec) (push `(,(car spec) . ,face) faces)) + face--new-frame-defaults) + (mapcar #'cdr (sort faces (lambda (f1 f2) (< (car f1) (car f2))))))) (defun make-face (face) "Define a new face with name FACE, a symbol. @@ -2097,7 +2114,7 @@ x-create-frame-with-faces (defun face-set-after-frame-default (frame &optional parameters) "Initialize the frame-local faces of FRAME. Calculate the face definitions using the face specs, custom theme -settings, X resources, and `face-new-frame-defaults'. +settings, X resources, and `face--new-frame-defaults'. Finally, apply any relevant face attributes found amongst the frame parameters in PARAMETERS." ;; The `reverse' is so that `default' goes first. @@ -2106,7 +2123,7 @@ face-set-after-frame-default (progn ;; Initialize faces from face spec and custom theme. (face-spec-recalc face frame) - ;; Apply attributes specified by face-new-frame-defaults + ;; Apply attributes specified by face--new-frame-defaults (internal-merge-in-global-face face frame)) ;; Don't let invalid specs prevent frame creation. (error nil))) diff --git a/lisp/frame.el b/lisp/frame.el index 6c2f774709..66b5c6aa8d 100644 --- a/lisp/frame.el +++ b/lisp/frame.el @@ -1227,7 +1227,7 @@ frame-set-background-mode ;; during startup with -rv on the command ;; line for the initial frame, because frames ;; are not recorded in the pdump file. - (assq face (frame-face-alist)) + (gethash face (frame--face-hash-table)) (face-spec-match-p face (face-user-default-spec face) ;; FIXME: why selected-frame and diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el index b737134f90..75054b8818 100644 --- a/lisp/progmodes/elisp-mode.el +++ b/lisp/progmodes/elisp-mode.el @@ -1304,8 +1304,7 @@ elisp--eval-defun-1 ((eq (car form) 'custom-declare-face) ;; Reset the face. (let ((face-symbol (eval (nth 1 form) lexical-binding))) - (setq face-new-frame-defaults - (assq-delete-all face-symbol face-new-frame-defaults)) + (remhash face--new-frame-defaults face-symbol) (put face-symbol 'face-defface-spec nil) (put face-symbol 'face-override-spec nil)) form) diff --git a/src/frame.c b/src/frame.c index c871e4fd99..0843d53559 100644 --- a/src/frame.c +++ b/src/frame.c @@ -946,6 +946,10 @@ make_frame (bool mini_p) rw->total_lines = mini_p ? 9 : 10; rw->pixel_height = rw->total_lines * FRAME_LINE_HEIGHT (f); + fset_face_hash_table + (f, make_hash_table (hashtest_eq, DEFAULT_HASH_SIZE, DEFAULT_REHASH_SIZE, + DEFAULT_REHASH_THRESHOLD, Qnil, false)); + if (mini_p) { mw->top_line = rw->total_lines; @@ -1254,7 +1258,7 @@ DEFUN ("make-terminal-frame", Fmake_terminal_frame, Smake_terminal_frame, { struct frame *f; struct terminal *t = NULL; - Lisp_Object frame, tem; + Lisp_Object frame; struct frame *sf = SELECTED_FRAME (); #ifdef MSDOS @@ -1336,14 +1340,16 @@ DEFUN ("make-terminal-frame", Fmake_terminal_frame, Smake_terminal_frame, store_in_alist (&parms, Qminibuffer, Qt); Fmodify_frame_parameters (frame, parms); - /* Make the frame face alist be frame-specific, so that each + /* Make the frame face hash be frame-specific, so that each frame could change its face definitions independently. */ - fset_face_alist (f, Fcopy_alist (sf->face_alist)); - /* Simple Fcopy_alist isn't enough, because we need the contents of - the vectors which are the CDRs of associations in face_alist to + fset_face_hash_table (f, Fcopy_hash_table (sf->face_hash_table)); + /* Simple copy_hash_table isn't enough, because we need the contents of + the vectors which are the values in face_hash_table to be copied as well. */ - for (tem = f->face_alist; CONSP (tem); tem = XCDR (tem)) - XSETCDR (XCAR (tem), Fcopy_sequence (XCDR (XCAR (tem)))); + ptrdiff_t idx = 0; + struct Lisp_Hash_Table *table = XHASH_TABLE (f->face_hash_table); + for (idx = 0; idx < table->count; ++idx) + set_hash_value_slot (table, idx, Fcopy_sequence (HASH_VALUE (table, idx))); f->can_set_window_size = true; f->after_make_frame = true; diff --git a/src/frame.h b/src/frame.h index 476bac67fa..9761253085 100644 --- a/src/frame.h +++ b/src/frame.h @@ -158,8 +158,8 @@ #define EMACS_FRAME_H There are four additional elements of nil at the end, to terminate. */ Lisp_Object menu_bar_items; - /* Alist of elements (FACE-NAME . FACE-VECTOR-DATA). */ - Lisp_Object face_alist; + /* Hash table of FACE-NAME keys and FACE-VECTOR-DATA values. */ + Lisp_Object face_hash_table; /* A vector that records the entire structure of this frame's menu bar. For the format of the data, see extensive comments in xmenu.c. @@ -661,9 +661,9 @@ fset_condemned_scroll_bars (struct frame *f, Lisp_Object val) f->condemned_scroll_bars = val; } INLINE void -fset_face_alist (struct frame *f, Lisp_Object val) +fset_face_hash_table (struct frame *f, Lisp_Object val) { - f->face_alist = val; + f->face_hash_table = val; } #if defined (HAVE_WINDOW_SYSTEM) INLINE void diff --git a/src/xfaces.c b/src/xfaces.c index 7d7aff95c1..eae991d1c2 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -95,9 +95,10 @@ Copyright (C) 1993-1994, 1998-2020 Free Software Foundation, Inc. with the symbol `face' in slot 0, and a slot for each of the face attributes mentioned above. - There is also a global face alist `Vface_new_frame_defaults'. Face - definitions from this list are used to initialize faces of newly - created frames. + There is also a global face map `Vface_new_frame_defaults', + containing conses of (FACE_ID . FACE_DEFINITION). Face definitions + from this table are used to initialize faces of newly created + frames. A face doesn't have to specify all attributes. Those not specified have a value of `unspecified'. Faces specifying all attributes but @@ -1843,13 +1844,11 @@ lface_from_face_name_no_resolve (struct frame *f, Lisp_Object face_name, Lisp_Object lface; if (f) - lface = assq_no_quit (face_name, f->face_alist); + lface = Fgethash (face_name, f->face_hash_table, Qnil); else - lface = assq_no_quit (face_name, Vface_new_frame_defaults); + lface = CDR (Fgethash (face_name, Vface_new_frame_defaults, Qnil)); - if (CONSP (lface)) - lface = XCDR (lface); - else if (signal_p) + if (signal_p && NILP (lface)) signal_error ("Invalid face", face_name); check_lface (lface); @@ -2734,11 +2733,6 @@ DEFUN ("internal-make-lisp-face", Finternal_make_lisp_face, /* Add a global definition if there is none. */ if (NILP (global_lface)) { - global_lface = make_vector (LFACE_VECTOR_SIZE, Qunspecified); - ASET (global_lface, 0, Qface); - Vface_new_frame_defaults = Fcons (Fcons (face, global_lface), - Vface_new_frame_defaults); - /* Assign the new Lisp face a unique ID. The mapping from Lisp face id to Lisp face is given by the vector lface_id_to_name. The mapping from Lisp face to Lisp face id is given by the @@ -2748,9 +2742,14 @@ DEFUN ("internal-make-lisp-face", Finternal_make_lisp_face, xpalloc (lface_id_to_name, &lface_id_to_name_size, 1, MAX_FACE_ID, sizeof *lface_id_to_name); + Lisp_Object face_id = make_fixnum (next_lface_id); lface_id_to_name[next_lface_id] = face; - Fput (face, Qface, make_fixnum (next_lface_id)); + Fput (face, Qface, face_id); ++next_lface_id; + + global_lface = make_vector (LFACE_VECTOR_SIZE, Qunspecified); + ASET (global_lface, 0, Qface); + Fputhash (face, Fcons (face_id, global_lface), Vface_new_frame_defaults); } else if (f == NULL) for (i = 1; i < LFACE_VECTOR_SIZE; ++i) @@ -2763,7 +2762,7 @@ DEFUN ("internal-make-lisp-face", Finternal_make_lisp_face, { lface = make_vector (LFACE_VECTOR_SIZE, Qunspecified); ASET (lface, 0, Qface); - fset_face_alist (f, Fcons (Fcons (face, lface), f->face_alist)); + Fputhash (face, lface, f->face_hash_table); } else for (i = 1; i < LFACE_VECTOR_SIZE; ++i) @@ -2924,7 +2923,7 @@ DEFUN ("internal-set-lisp-face-attribute", Finternal_set_lisp_face_attribute, f = NULL; lface = lface_from_face_name (NULL, face, true); - /* When updating face-new-frame-defaults, we put :ignore-defface + /* When updating face--new-frame-defaults, we put :ignore-defface where the caller wants `unspecified'. This forces the frame defaults to ignore the defface value. Otherwise, the defface will take effect, which is generally not what is intended. @@ -3508,7 +3507,7 @@ update_face_from_frame_parameter (struct frame *f, Lisp_Object param, /* If there are no faces yet, give up. This is the case when called from Fx_create_frame, and we do the necessary things later in face-set-after-frame-defaults. */ - if (NILP (f->face_alist)) + if (XFIXNAT (Fhash_table_count (f->face_hash_table)) == 0) return; if (EQ (param, Qforeground_color)) @@ -4174,14 +4173,13 @@ DEFUN ("internal-lisp-face-empty-p", Finternal_lisp_face_empty_p, return i == LFACE_VECTOR_SIZE ? Qt : Qnil; } - -DEFUN ("frame-face-alist", Fframe_face_alist, Sframe_face_alist, +DEFUN ("frame--face-hash-table", Fframe_face_hash_table, Sframe_face_hash_table, 0, 1, 0, - doc: /* Return an alist of frame-local faces defined on FRAME. + doc: /* Return a hash table of frame-local faces defined on FRAME. For internal use only. */) (Lisp_Object frame) { - return decode_live_frame (frame)->face_alist; + return decode_live_frame (frame)->face_hash_table; } @@ -6678,30 +6676,32 @@ DEFUN ("show-face-resources", Fshow_face_resources, Sshow_face_resources, #ifdef HAVE_PDUMPER /* All the faces defined during loadup are recorded in - face-new-frame-defaults, with the last face first in the list. We - need to set next_lface_id to the next face ID number, so that any - new faces defined in this session will have face IDs different from - those defined during loadup. We also need to set up the - lface_id_to_name[] array for the faces that were defined during - loadup. */ + face-new-frame-defaults. We need to set next_lface_id to the next + face ID number, so that any new faces defined in this session will + have face IDs different from those defined during loadup. We also + need to set up the lface_id_to_name[] array for the faces that were + defined during loadup. */ void init_xfaces (void) { - if (CONSP (Vface_new_frame_defaults)) + int nfaces = XFIXNAT (Fhash_table_count (Vface_new_frame_defaults)); + if (nfaces > 0) { /* Allocate the lface_id_to_name[] array. */ - lface_id_to_name_size = next_lface_id = - XFIXNAT (Flength (Vface_new_frame_defaults)); + lface_id_to_name_size = next_lface_id = nfaces; lface_id_to_name = xnmalloc (next_lface_id, sizeof *lface_id_to_name); /* Store the faces. */ - Lisp_Object tail; - int i = next_lface_id - 1; - for (tail = Vface_new_frame_defaults; CONSP (tail); tail = XCDR (tail)) + struct Lisp_Hash_Table* table = XHASH_TABLE (Vface_new_frame_defaults); + for (ptrdiff_t idx = 0; idx < nfaces; ++idx) { - Lisp_Object lface = XCAR (tail); - eassert (i >= 0); - lface_id_to_name[i--] = XCAR (lface); + Lisp_Object lface = HASH_KEY (table, idx); + Lisp_Object face_id = CAR (HASH_VALUE (table, idx)); + if (FIXNATP (face_id)) { + int id = XFIXNAT (face_id); + eassert (id >= 0); + lface_id_to_name[id] = lface; + } } } face_attr_sym[0] = Qface; @@ -6855,7 +6855,7 @@ syms_of_xfaces (void) defsubr (&Sinternal_copy_lisp_face); defsubr (&Sinternal_merge_in_global_face); defsubr (&Sface_font); - defsubr (&Sframe_face_alist); + defsubr (&Sframe_face_hash_table); defsubr (&Sdisplay_supports_face_attributes_p); defsubr (&Scolor_distance); defsubr (&Sinternal_set_font_selection_order); @@ -6879,9 +6879,11 @@ syms_of_xfaces (void) the "specifity" of a face specification and should be let-bound only for this purpose. */); - DEFVAR_LISP ("face-new-frame-defaults", Vface_new_frame_defaults, - doc: /* List of global face definitions (for internal use only.) */); - Vface_new_frame_defaults = Qnil; + DEFVAR_LISP ("face--new-frame-defaults", Vface_new_frame_defaults, + doc: /* Hash table of global face definitions (for internal use only.) */); + Vface_new_frame_defaults = + make_hash_table (hashtest_eq, DEFAULT_HASH_SIZE, DEFAULT_REHASH_SIZE, + DEFAULT_REHASH_THRESHOLD, Qnil, false); DEFVAR_LISP ("face-default-stipple", Vface_default_stipple, doc: /* Default stipple pattern used on monochrome displays. -- 2.17.1 --------------BA64282E6E8C5FE96DAD52F3-- From debbugs-submit-bounces@debbugs.gnu.org Fri May 15 15:06:21 2020 Received: (at 41200) by debbugs.gnu.org; 15 May 2020 19:06:21 +0000 Received: from localhost ([127.0.0.1]:38745 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZff3-0006ca-7h for submit@debbugs.gnu.org; Fri, 15 May 2020 15:06:21 -0400 Received: from eggs.gnu.org ([209.51.188.92]:48798) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZff2-0006cK-4F for 41200@debbugs.gnu.org; Fri, 15 May 2020 15:06:20 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:47943) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jZfew-0002cU-Ag; Fri, 15 May 2020 15:06:14 -0400 Received: from [176.228.60.248] (port=2050 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jZfeo-0002Bd-IN; Fri, 15 May 2020 15:06:13 -0400 Date: Fri, 15 May 2020 22:05:53 +0300 Message-Id: <83blmpuige.fsf@gnu.org> From: Eli Zaretskii To: =?utf-8?Q?Cl=C3=A9ment?= Pit-Claudel In-Reply-To: <53252e93-085c-477f-21df-c909082dffc2@gmail.com> (message from =?utf-8?Q?Cl=C3=A9ment?= Pit-Claudel on Fri, 15 May 2020 14:50:17 -0400) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> <837dxd31cb.fsf@gnu.org> <789d786d-a07a-65c1-c0e4-433e4c18d64e@gmail.com> <835zcxgrby.fsf@gnu.org> <833681glas.fsf@gnu.org> <53252e93-085c-477f-21df-c909082dffc2@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 41200 Cc: 41200@debbugs.gnu.org, juri@linkov.net X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: 41200@debbugs.gnu.org, Juri Linkov > From: Clément Pit-Claudel > Date: Fri, 15 May 2020 14:50:17 -0400 > > >>> No, I was asking why not start with it as nil and actually make a > >>> hash-table when we first need it. > >> > >> Oh, I thought it would be simpler to always have a hash table instead of having to sanity check every time. > > > > What is the default size of a hash-table? > > 65 entries, I think. The number of basic faces is just 18. Is 65 a good initial size for that? From debbugs-submit-bounces@debbugs.gnu.org Fri May 15 15:10:55 2020 Received: (at 41200) by debbugs.gnu.org; 15 May 2020 19:10:55 +0000 Received: from localhost ([127.0.0.1]:38762 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZfjS-0006lT-Sa for submit@debbugs.gnu.org; Fri, 15 May 2020 15:10:55 -0400 Received: from mail-qt1-f176.google.com ([209.85.160.176]:37277) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZfjR-0006lE-EC for 41200@debbugs.gnu.org; Fri, 15 May 2020 15:10:53 -0400 Received: by mail-qt1-f176.google.com with SMTP id 4so2929123qtb.4 for <41200@debbugs.gnu.org>; Fri, 15 May 2020 12:10:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=tTb7Py8eeG3LXI4jHQF7dCD6b+Up2Nv9u+5sc/08wDQ=; b=Y9548F4uV6mAXVtteG8QTQsS5v6P5JCRcXK68zgWnlxKjaOGEK+zCR8GvQdEe5Pgq1 yidaMvMCpI8Mm0khyOpSfdOkEz8hk5Y3Lap0LFIYVhenwtS7nKq0q0EbleNzfxlvMeBQ 5W9TrJzJI1w1JKMcgHDrt47NDvXkkEYoMQeNAjz3aVZ7TMxWypREx7y5ankeWb01EXOy YH+5pVJoap0Jco3mkih+bX8om6bErR07vj1KqiVa/2FcnnGv6qFmGhM5aMQtCTCu2/r5 CvLq6eIl26ZnolRVe+9d8+CzFjmE7m2iFCvqyFCRGD0RsVDvzjRNm+Kz2VQN8CsCQc8E Iqvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=tTb7Py8eeG3LXI4jHQF7dCD6b+Up2Nv9u+5sc/08wDQ=; b=p9RQWpt+PbBkyC9y/JIttAG16dylXwvxddY8EkTwVgSZf958wUxUOrvf+e/m71Vbi0 nQM2I6r8DAQjODfO5JtSJCzeJr1onxchRDi7ynQ3SEbE2MBeFpazMC5f2xXoduIw7CRl Tz1dSF0XjuA5FHtdKpJB5LbMMOuH9YyRCKTDa91R/5HVPVTmyca0+QOj54b69Q1KPXSy 7IjH3sPyFMtrgxedCcksWS1KXeGuOpg0RGMwmHhTcHusuS9wSS5NtszRcU/LT78y2snE AgnbygmMTNpIdcp9mxuglEgAe1XtbgkdgPjQMQ5GsRDBBzVjPfrNUCLknnRDp5j1NszP fmAQ== X-Gm-Message-State: AOAM532gfaZp+p4t+bNvKHJyBrJl4hxMHZwvNjlzuslhmMJZ5quIxgQv 8IuMp54dB9aeKXxFWM63AjtWtVfy X-Google-Smtp-Source: ABdhPJwVsKdYjdUyQClv3rqPOIKAP37uPD/NoY+ah05yBN12KMIhOjkh+JRFRr6frJl3qZ3Htthq4A== X-Received: by 2002:aed:3bda:: with SMTP id s26mr5209337qte.261.1589569847676; Fri, 15 May 2020 12:10:47 -0700 (PDT) Received: from ?IPv6:2601:184:4180:66e7:4d17:b25e:8d9:2188? ([2601:184:4180:66e7:4d17:b25e:8d9:2188]) by smtp.googlemail.com with ESMTPSA id 17sm2211057qkn.44.2020.05.15.12.10.46 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 15 May 2020 12:10:47 -0700 (PDT) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined To: Stefan Monnier References: From: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= Message-ID: <9c487146-1fad-0301-fe1a-8d98d560c6ea@gmail.com> Date: Fri, 15 May 2020 15:10:46 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41200 Cc: Eli Zaretskii , 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 15/05/2020 10.03, Stefan Monnier wrote: >> Indeed, you're completely right; thanks! Replacing face_alist and >> Vface_new_frame_defaults with hash tables makes the worst example >> about 10 times faster, and with that change tooltips now take 30 to >> 50ms to display instead of 500-600ms in my real-life use case (my >> usual config). I have attached a patch. > > Oh, this is great, makes a very noticeable difference. Thanks for testing! > The variable's name did not say "alist", so I don't see a need to change > it from that point of view. But I think it deserves a "--" since it's > supposed to be internal. Ah, that's a good point. At least, renaming it will make it clear that something changed and make it easy to support older and newer emacsen. > A quick grep revealed: > > elpa/packages/context-coloring/fixtures/benchmark/faces.el: (mapcar #'car face-new-frame-defaults)) AFAICT, this is just a copy of faces.el, used to benchmark syntax highlighting (that is, this code is not run). >> - command-execute 454 47% > [...] >> - face-set-after-frame-default 387 40% >> - face-spec-recalc 374 39% >> - make-face-x-resource-internal 296 30% >> - set-face-attributes-from-resources 273 28% >> - set-face-attribute-from-resource 219 22% > > [...] > >> - command-execute 768 80% > [...] >> - face-set-after-frame-default 674 70% >> - face-spec-recalc 660 69% >> - face-spec-set-2 350 36% >> - apply 348 36% >> - set-face-attribute 342 35% >> - internal-set-lisp-face-attribute 342 35% >> - frame-set-background-mode 331 34% >> - face-spec-recalc 284 29% >> - make-face-x-resource-internal 235 24% > > Both of those profiles suggest that most of the time is still spent in > `face-spec-recalc`, so it would be worth trying harder to avoid calling > it or to speed it up somehow (presumably with some better memozing/caching). Interesting. I also wonder whether we could fast-track the case where the face spec is a vector full of 'undefined, since that seems to be the common case. From debbugs-submit-bounces@debbugs.gnu.org Fri May 15 15:23:10 2020 Received: (at 41200) by debbugs.gnu.org; 15 May 2020 19:23:10 +0000 Received: from localhost ([127.0.0.1]:38778 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZfvK-00077J-1k for submit@debbugs.gnu.org; Fri, 15 May 2020 15:23:10 -0400 Received: from mail-qk1-f173.google.com ([209.85.222.173]:40292) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZfvI-000773-AH for 41200@debbugs.gnu.org; Fri, 15 May 2020 15:23:08 -0400 Received: by mail-qk1-f173.google.com with SMTP id g185so3769570qke.7 for <41200@debbugs.gnu.org>; Fri, 15 May 2020 12:23:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=84RKQUzPVEfjrg5OvonVI0GkzSY5VAJQjQaIE1uMqY0=; b=C1DVubQhCLR1w9LeWlK7gcq4JahYEKojjTQlroqgcT0KzbKF+LXkUnDdLDgZudBs+n 9zJ5QgWKbwunf6u5qeE3PLjO1dJ7OWCViLirWCWJIUKN7wO9nAEMZaXfYftSTAjAl3tH Ua1b5bidnxKuW/wpJaqwz+owPa9FpmywI/5WqEnalYrQjcWLTViz3feWDTRHzSpxdoIu 1r3Kx/k0KN9RqEMKm/a4VIyKGVsG/9tvBPdTTTi3EiNrZRVcvHKGjZqW12bO3GpQSPsI Hip187earQJEbKmhmzb7XitwyAa1JKdBuEq85hu05OM6S8b9oSp+rw5Kml1hZsEr1Jut n1JA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=84RKQUzPVEfjrg5OvonVI0GkzSY5VAJQjQaIE1uMqY0=; b=NIqxcpIciTGNPNP4PWg7V71cLFOJzUsaEZrM9sN1byyroHF/S2bepmpNp3q0FizjYZ 9rTXOKWP7q82OFVg32Dr3de16uXDQx5nTmqIIZFSXC/yXrCoTMtn9FWsgsYX8SWKPXNl GsGXF0uW9pfjeFybZ1INimiK/Yktllcjp2PTq62rSZ8Y2DB1EYkdVrx5SaEaY2lsYFTb elF9NKk4WzyJH6YctolsJr7JVPNU+cvd/CNb52N1gK/rdS5OQJObTzcVQ4xLwqvhpfFB HuITWtokW5b8hUyzLrys0G94AddRaMkR1zsey8AuiPegq1lQ+gDCfPNHrqgDDDYxSzo3 9V9g== X-Gm-Message-State: AOAM531bK30L4BLYd0rDJiKfLg2yEmD7p7eQBM9fbAknHVemYlSTmk1q r68gMzeE7rVYhzE4Q/VHUj0= X-Google-Smtp-Source: ABdhPJwM/T3FeTfwtlDQ9YcQZ0ojvGRFnQSpNVRIN2I0V3Hn2Qp234mi5r2n1aImP6A7gPFOJDSVyQ== X-Received: by 2002:a05:620a:6da:: with SMTP id 26mr4940348qky.196.1589570582738; Fri, 15 May 2020 12:23:02 -0700 (PDT) Received: from ?IPv6:2601:184:4180:66e7:4d17:b25e:8d9:2188? ([2601:184:4180:66e7:4d17:b25e:8d9:2188]) by smtp.googlemail.com with ESMTPSA id p137sm2264570qke.60.2020.05.15.12.23.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 15 May 2020 12:23:01 -0700 (PDT) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined To: Eli Zaretskii References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> <837dxd31cb.fsf@gnu.org> <789d786d-a07a-65c1-c0e4-433e4c18d64e@gmail.com> <835zcxgrby.fsf@gnu.org> <833681glas.fsf@gnu.org> <53252e93-085c-477f-21df-c909082dffc2@gmail.com> <83blmpuige.fsf@gnu.org> From: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= Message-ID: <6a828c8b-2856-7f71-811b-086600d8417e@gmail.com> Date: Fri, 15 May 2020 15:23:00 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <83blmpuige.fsf@gnu.org> Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 8bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41200 Cc: 41200@debbugs.gnu.org, juri@linkov.net X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 15/05/2020 15.05, Eli Zaretskii wrote: >> Cc: 41200@debbugs.gnu.org, Juri Linkov >> From: Clément Pit-Claudel >> Date: Fri, 15 May 2020 14:50:17 -0400 >> >>>>> No, I was asking why not start with it as nil and actually make a >>>>> hash-table when we first need it. >>>> >>>> Oh, I thought it would be simpler to always have a hash table instead of having to sanity check every time. >>> >>> What is the default size of a hash-table? >> >> 65 entries, I think. > > The number of basic faces is just 18. Is 65 a good initial size for > that? I think that map stores more than just the basic faces: in fact, $ emacs -Q --batch --eval '(print (length (frame-face-alist)))' prints 100, so maybe I should even make the map larger by default? Clément. From debbugs-submit-bounces@debbugs.gnu.org Fri May 15 15:38:43 2020 Received: (at 41200) by debbugs.gnu.org; 15 May 2020 19:38:43 +0000 Received: from localhost ([127.0.0.1]:38799 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZgAN-0007WW-Jx for submit@debbugs.gnu.org; Fri, 15 May 2020 15:38:43 -0400 Received: from eggs.gnu.org ([209.51.188.92]:52688) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZgAL-0007W7-6O for 41200@debbugs.gnu.org; Fri, 15 May 2020 15:38:41 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:48420) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jZgAF-0004Pd-DK; Fri, 15 May 2020 15:38:35 -0400 Received: from [176.228.60.248] (port=4068 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jZgAE-0006xh-DD; Fri, 15 May 2020 15:38:34 -0400 Date: Fri, 15 May 2020 22:38:21 +0300 Message-Id: <838shtugya.fsf@gnu.org> From: Eli Zaretskii To: =?utf-8?Q?Cl=C3=A9ment?= Pit-Claudel In-Reply-To: <6a828c8b-2856-7f71-811b-086600d8417e@gmail.com> (message from =?utf-8?Q?Cl=C3=A9ment?= Pit-Claudel on Fri, 15 May 2020 15:23:00 -0400) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> <837dxd31cb.fsf@gnu.org> <789d786d-a07a-65c1-c0e4-433e4c18d64e@gmail.com> <835zcxgrby.fsf@gnu.org> <833681glas.fsf@gnu.org> <53252e93-085c-477f-21df-c909082dffc2@gmail.com> <83blmpuige.fsf@gnu.org> <6a828c8b-2856-7f71-811b-086600d8417e@gmail.com> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 41200 Cc: 41200@debbugs.gnu.org, juri@linkov.net X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: 41200@debbugs.gnu.org, juri@linkov.net > From: Clément Pit-Claudel > Date: Fri, 15 May 2020 15:23:00 -0400 > > >>> What is the default size of a hash-table? > >> > >> 65 entries, I think. > > > > The number of basic faces is just 18. Is 65 a good initial size for > > that? > > I think that map stores more than just the basic faces: in fact, $ emacs -Q --batch --eval '(print (length (frame-face-alist)))' prints 100, so maybe I should even make the map larger by default? We are miscommunicating. I was talking about the size before loadup, i.e. in temacs when it starts up. Later, when we load preloaded packages, the size should grow, but the hash-table takes care of that by itself, doesn't it? From debbugs-submit-bounces@debbugs.gnu.org Fri May 15 15:52:37 2020 Received: (at 41200) by debbugs.gnu.org; 15 May 2020 19:52:37 +0000 Received: from localhost ([127.0.0.1]:38831 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZgNo-0007rY-Kb for submit@debbugs.gnu.org; Fri, 15 May 2020 15:52:37 -0400 Received: from mail-qt1-f181.google.com ([209.85.160.181]:46991) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZgNm-0007rM-Qk for 41200@debbugs.gnu.org; Fri, 15 May 2020 15:52:35 -0400 Received: by mail-qt1-f181.google.com with SMTP id p12so3004947qtn.13 for <41200@debbugs.gnu.org>; Fri, 15 May 2020 12:52:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language; bh=7saN1umCHv+8twkK2Auh4lh05Tm4mURRlktsEUqOgDc=; b=SQW1CwsWLSIACk/VWx5Z+6Fin03yzO4Rqaltw/BZONKmH1FsBSDj1eqALQiz3V0il2 HVcRCkxQxLmWQD4p4hhG2zt4OOdXdpRtcGBezTXZdIydpb/FSo3tD6Q3vsD/dVaN9gPO Y3dAz96/XkT6cQ6oeTbehOiE5KeONNncDlzS40CCcSRERRV9Qse68TaHfc9jR7eSUyj1 zqxSLdhil7YYw/z8oK/5SU4xRJoId0CDtLkHMVYYcnDCrGy204D/uuUUckcra3HWuKaO FMARLyLR87xYq4+MXtu37/MlUfbHf8nOvQAei6Dej7Yc0AxTDHTyF/EjSbEPNU3HVV4i nbpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language; bh=7saN1umCHv+8twkK2Auh4lh05Tm4mURRlktsEUqOgDc=; b=fMQXTluob8MeBZF35rCXxHowMPMuAKwqxBclEB1MQ6/eNsuN98ZqrYHvW3HfNASdPa 1jEwQVs5rdxMCQ5eJDr9ULkwvXSMuGVe3R/OVnoDt8q89xIIOdADDG3g61LOp2MSYA8M 1joIGkWKvdh6H4eRO6V8DEK88ltoZC1qarkc/Ez5fm9T3zzrZ4VSgkq/f/ps3CnfYXCo vmnuG3iTaXDfsUY4dDMYxCm4UsTJqCRYUAyG2kVPJe820UKtGufsT79xdkTtqJcELTTr /j7uzQnuDiR9ZKFCQtd4Q27Ov9GwuxSbzBnmugbcbk3iz/eYmrqaRcgDagfVXgozWCVM zNDA== X-Gm-Message-State: AOAM530+NG8XukSXl5S6jQuUv/x40vHHI3pNNhXKBMMyclESDHljmvOl 6AEEFso7Z5IegNM8aaM/bhY= X-Google-Smtp-Source: ABdhPJwGiaS/ewviudj+Bj6S1bJoJonEPQem0wo5gggmVtgWrtGkb11bI7JCI9bWDv8Nm5kjukTnOQ== X-Received: by 2002:aed:3c0d:: with SMTP id t13mr5353648qte.137.1589572349054; Fri, 15 May 2020 12:52:29 -0700 (PDT) Received: from ?IPv6:2601:184:4180:66e7:4d17:b25e:8d9:2188? ([2601:184:4180:66e7:4d17:b25e:8d9:2188]) by smtp.googlemail.com with ESMTPSA id l184sm2259101qke.115.2020.05.15.12.52.27 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 15 May 2020 12:52:28 -0700 (PDT) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined To: Eli Zaretskii References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> <837dxd31cb.fsf@gnu.org> <789d786d-a07a-65c1-c0e4-433e4c18d64e@gmail.com> <835zcxgrby.fsf@gnu.org> <833681glas.fsf@gnu.org> <53252e93-085c-477f-21df-c909082dffc2@gmail.com> <83blmpuige.fsf@gnu.org> <6a828c8b-2856-7f71-811b-086600d8417e@gmail.com> <838shtugya.fsf@gnu.org> From: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= Message-ID: <3a2c9175-474b-38e7-b22c-0ead63134761@gmail.com> Date: Fri, 15 May 2020 15:52:26 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <838shtugya.fsf@gnu.org> Content-Type: multipart/mixed; boundary="------------027433C9F25EFCB999EF8297" Content-Language: en-GB X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41200 Cc: 41200@debbugs.gnu.org, juri@linkov.net X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is a multi-part message in MIME format. --------------027433C9F25EFCB999EF8297 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit On 15/05/2020 15.38, Eli Zaretskii wrote: >> Cc: 41200@debbugs.gnu.org, juri@linkov.net >> From: Clément Pit-Claudel >> Date: Fri, 15 May 2020 15:23:00 -0400 >> >>>>> What is the default size of a hash-table? >>>> >>>> 65 entries, I think. >>> >>> The number of basic faces is just 18. Is 65 a good initial size for >>> that? >> >> I think that map stores more than just the basic faces: in fact, $ emacs -Q --batch --eval '(print (length (frame-face-alist)))' prints 100, so maybe I should even make the map larger by default? > > We are miscommunicating. I was talking about the size before loadup, > i.e. in temacs when it starts up. Ah, yes. I think I mas mixing up the face_hash_table of each frame and Vface_new_frame_defaults. Attached is a patch that makes Vface_new_frame_defaults 33-entries large. Should I also change the default size for face_hash_table in struct frame? > Later, when we load preloaded packages, the size should grow, but the > hash-table takes care of that by itself, doesn't it? Yes, definitely. --------------027433C9F25EFCB999EF8297 Content-Type: text/x-patch; charset=UTF-8; name="0001-Store-frame-faces-in-hash-tables-instead-of-alists.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename*0="0001-Store-frame-faces-in-hash-tables-instead-of-alists.patc"; filename*1="h" >From 0d28f687046c721c4734aa57d8ae1ba5f23dd5b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pit-Claudel?= Date: Tue, 12 May 2020 21:48:32 -0400 Subject: [PATCH] Store frame faces in hash tables instead of alists * src/frame.h (struct frame): Add face_hash_table, remove face_alist. (fset_face_hash_table): New function. (fset_face_alist): Remove. * src/frame.c (make_frame): Initialize f->face_hash_table. (Fmake_terminal_frame): Update to work with hash tables instead of alists. * src/xfaces.c (lface_from_face_name_no_resolve): (Finternal_make_lisp_face): (update_face_from_frame_parameter): Update to work with hash tables instead of alists. (Fframe_face_hash_table): New function. (Fframe_face_alist): Move to faces.el as frame-face-alist. (syms_of_xfaces): Add frame_face_hash_table. * lisp/emacs-lisp/edebug.el (edebug-eval-defun): * lisp/progmodes/elisp-mode.el (elisp--eval-defun-1): * lisp/frame.el (frame-set-background-mode): Update to work with hash tables instead of alists. * lisp/faces.el (face-new-frame-defaults): Mark obsolete. (face-list): Update to use face--new-frame-defaults. (frame-face-alist): Moved here from src/xfaces.c. --- lisp/custom.el | 2 +- lisp/emacs-lisp/edebug.el | 3 +- lisp/faces.el | 23 ++++++++-- lisp/frame.el | 2 +- lisp/progmodes/elisp-mode.el | 3 +- src/frame.c | 20 ++++++--- src/frame.h | 8 ++-- src/xfaces.c | 83 +++++++++++++++++++----------------- 8 files changed, 84 insertions(+), 60 deletions(-) diff --git a/lisp/custom.el b/lisp/custom.el index 885c486c5e..3ac8bac40f 100644 --- a/lisp/custom.el +++ b/lisp/custom.el @@ -898,7 +898,7 @@ custom-push-theme ;; the value to a fake theme, `changed'. If the theme is ;; later disabled, we use this to bring back the old value. ;; - ;; For faces, we just use `face-new-frame-defaults' to + ;; For faces, we just use `face--new-frame-defaults' to ;; recompute when the theme is disabled. (when (and (eq prop 'theme-value) (boundp symbol)) diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el index 78461185d3..76a75c04df 100644 --- a/lisp/emacs-lisp/edebug.el +++ b/lisp/emacs-lisp/edebug.el @@ -488,8 +488,7 @@ edebug-eval-defun (set-default (nth 1 form) (eval (nth 2 form) lexical-binding))) ((eq (car form) 'defface) ;; Reset the face. - (setq face-new-frame-defaults - (assq-delete-all (nth 1 form) face-new-frame-defaults)) + (remhash (nth 1 form) face--new-frame-defaults) (put (nth 1 form) 'face-defface-spec nil) (put (nth 1 form) 'face-documentation (nth 3 form)) ;; See comments in `eval-defun-1' for purpose of code below diff --git a/lisp/faces.el b/lisp/faces.el index e707f6f4b6..bb51797a38 100644 --- a/lisp/faces.el +++ b/lisp/faces.el @@ -176,10 +176,27 @@ face-font-registry-alternatives ;;; Creation, copying. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(make-obsolete-variable + 'face-new-frame-defaults + "use `face--new-frame-defaults' or `face-alist' instead." + "28.1") + +(defun frame-face-alist (&optional frame) + "Return an alist of frame-local faces defined on FRAME. +This alist is a copy of the contents of `frame--face-hash-table'. +For internal use only." + (declare (obsolete frame--face-hash-table "28.1")) + (let ((faces)) + (maphash (lambda (face spec) (push `(,(car spec) ,face . ,(cdr spec)) faces)) + (frame--face-hash-table frame)) + (mapcar #'cdr (sort faces (lambda (f1 f2) (< (car f1) (car f2))))))) (defun face-list () "Return a list of all defined faces." - (mapcar #'car face-new-frame-defaults)) + (let ((faces)) + (maphash (lambda (face spec) (push `(,(car spec) . ,face) faces)) + face--new-frame-defaults) + (mapcar #'cdr (sort faces (lambda (f1 f2) (< (car f1) (car f2))))))) (defun make-face (face) "Define a new face with name FACE, a symbol. @@ -2097,7 +2114,7 @@ x-create-frame-with-faces (defun face-set-after-frame-default (frame &optional parameters) "Initialize the frame-local faces of FRAME. Calculate the face definitions using the face specs, custom theme -settings, X resources, and `face-new-frame-defaults'. +settings, X resources, and `face--new-frame-defaults'. Finally, apply any relevant face attributes found amongst the frame parameters in PARAMETERS." ;; The `reverse' is so that `default' goes first. @@ -2106,7 +2123,7 @@ face-set-after-frame-default (progn ;; Initialize faces from face spec and custom theme. (face-spec-recalc face frame) - ;; Apply attributes specified by face-new-frame-defaults + ;; Apply attributes specified by face--new-frame-defaults (internal-merge-in-global-face face frame)) ;; Don't let invalid specs prevent frame creation. (error nil))) diff --git a/lisp/frame.el b/lisp/frame.el index 6c2f774709..66b5c6aa8d 100644 --- a/lisp/frame.el +++ b/lisp/frame.el @@ -1227,7 +1227,7 @@ frame-set-background-mode ;; during startup with -rv on the command ;; line for the initial frame, because frames ;; are not recorded in the pdump file. - (assq face (frame-face-alist)) + (gethash face (frame--face-hash-table)) (face-spec-match-p face (face-user-default-spec face) ;; FIXME: why selected-frame and diff --git a/lisp/progmodes/elisp-mode.el b/lisp/progmodes/elisp-mode.el index b737134f90..75054b8818 100644 --- a/lisp/progmodes/elisp-mode.el +++ b/lisp/progmodes/elisp-mode.el @@ -1304,8 +1304,7 @@ elisp--eval-defun-1 ((eq (car form) 'custom-declare-face) ;; Reset the face. (let ((face-symbol (eval (nth 1 form) lexical-binding))) - (setq face-new-frame-defaults - (assq-delete-all face-symbol face-new-frame-defaults)) + (remhash face--new-frame-defaults face-symbol) (put face-symbol 'face-defface-spec nil) (put face-symbol 'face-override-spec nil)) form) diff --git a/src/frame.c b/src/frame.c index c871e4fd99..0843d53559 100644 --- a/src/frame.c +++ b/src/frame.c @@ -946,6 +946,10 @@ make_frame (bool mini_p) rw->total_lines = mini_p ? 9 : 10; rw->pixel_height = rw->total_lines * FRAME_LINE_HEIGHT (f); + fset_face_hash_table + (f, make_hash_table (hashtest_eq, DEFAULT_HASH_SIZE, DEFAULT_REHASH_SIZE, + DEFAULT_REHASH_THRESHOLD, Qnil, false)); + if (mini_p) { mw->top_line = rw->total_lines; @@ -1254,7 +1258,7 @@ DEFUN ("make-terminal-frame", Fmake_terminal_frame, Smake_terminal_frame, { struct frame *f; struct terminal *t = NULL; - Lisp_Object frame, tem; + Lisp_Object frame; struct frame *sf = SELECTED_FRAME (); #ifdef MSDOS @@ -1336,14 +1340,16 @@ DEFUN ("make-terminal-frame", Fmake_terminal_frame, Smake_terminal_frame, store_in_alist (&parms, Qminibuffer, Qt); Fmodify_frame_parameters (frame, parms); - /* Make the frame face alist be frame-specific, so that each + /* Make the frame face hash be frame-specific, so that each frame could change its face definitions independently. */ - fset_face_alist (f, Fcopy_alist (sf->face_alist)); - /* Simple Fcopy_alist isn't enough, because we need the contents of - the vectors which are the CDRs of associations in face_alist to + fset_face_hash_table (f, Fcopy_hash_table (sf->face_hash_table)); + /* Simple copy_hash_table isn't enough, because we need the contents of + the vectors which are the values in face_hash_table to be copied as well. */ - for (tem = f->face_alist; CONSP (tem); tem = XCDR (tem)) - XSETCDR (XCAR (tem), Fcopy_sequence (XCDR (XCAR (tem)))); + ptrdiff_t idx = 0; + struct Lisp_Hash_Table *table = XHASH_TABLE (f->face_hash_table); + for (idx = 0; idx < table->count; ++idx) + set_hash_value_slot (table, idx, Fcopy_sequence (HASH_VALUE (table, idx))); f->can_set_window_size = true; f->after_make_frame = true; diff --git a/src/frame.h b/src/frame.h index 476bac67fa..9761253085 100644 --- a/src/frame.h +++ b/src/frame.h @@ -158,8 +158,8 @@ #define EMACS_FRAME_H There are four additional elements of nil at the end, to terminate. */ Lisp_Object menu_bar_items; - /* Alist of elements (FACE-NAME . FACE-VECTOR-DATA). */ - Lisp_Object face_alist; + /* Hash table of FACE-NAME keys and FACE-VECTOR-DATA values. */ + Lisp_Object face_hash_table; /* A vector that records the entire structure of this frame's menu bar. For the format of the data, see extensive comments in xmenu.c. @@ -661,9 +661,9 @@ fset_condemned_scroll_bars (struct frame *f, Lisp_Object val) f->condemned_scroll_bars = val; } INLINE void -fset_face_alist (struct frame *f, Lisp_Object val) +fset_face_hash_table (struct frame *f, Lisp_Object val) { - f->face_alist = val; + f->face_hash_table = val; } #if defined (HAVE_WINDOW_SYSTEM) INLINE void diff --git a/src/xfaces.c b/src/xfaces.c index 7d7aff95c1..3344558a85 100644 --- a/src/xfaces.c +++ b/src/xfaces.c @@ -95,9 +95,10 @@ Copyright (C) 1993-1994, 1998-2020 Free Software Foundation, Inc. with the symbol `face' in slot 0, and a slot for each of the face attributes mentioned above. - There is also a global face alist `Vface_new_frame_defaults'. Face - definitions from this list are used to initialize faces of newly - created frames. + There is also a global face map `Vface_new_frame_defaults', + containing conses of (FACE_ID . FACE_DEFINITION). Face definitions + from this table are used to initialize faces of newly created + frames. A face doesn't have to specify all attributes. Those not specified have a value of `unspecified'. Faces specifying all attributes but @@ -1843,13 +1844,11 @@ lface_from_face_name_no_resolve (struct frame *f, Lisp_Object face_name, Lisp_Object lface; if (f) - lface = assq_no_quit (face_name, f->face_alist); + lface = Fgethash (face_name, f->face_hash_table, Qnil); else - lface = assq_no_quit (face_name, Vface_new_frame_defaults); + lface = CDR (Fgethash (face_name, Vface_new_frame_defaults, Qnil)); - if (CONSP (lface)) - lface = XCDR (lface); - else if (signal_p) + if (signal_p && NILP (lface)) signal_error ("Invalid face", face_name); check_lface (lface); @@ -2734,11 +2733,6 @@ DEFUN ("internal-make-lisp-face", Finternal_make_lisp_face, /* Add a global definition if there is none. */ if (NILP (global_lface)) { - global_lface = make_vector (LFACE_VECTOR_SIZE, Qunspecified); - ASET (global_lface, 0, Qface); - Vface_new_frame_defaults = Fcons (Fcons (face, global_lface), - Vface_new_frame_defaults); - /* Assign the new Lisp face a unique ID. The mapping from Lisp face id to Lisp face is given by the vector lface_id_to_name. The mapping from Lisp face to Lisp face id is given by the @@ -2748,9 +2742,14 @@ DEFUN ("internal-make-lisp-face", Finternal_make_lisp_face, xpalloc (lface_id_to_name, &lface_id_to_name_size, 1, MAX_FACE_ID, sizeof *lface_id_to_name); + Lisp_Object face_id = make_fixnum (next_lface_id); lface_id_to_name[next_lface_id] = face; - Fput (face, Qface, make_fixnum (next_lface_id)); + Fput (face, Qface, face_id); ++next_lface_id; + + global_lface = make_vector (LFACE_VECTOR_SIZE, Qunspecified); + ASET (global_lface, 0, Qface); + Fputhash (face, Fcons (face_id, global_lface), Vface_new_frame_defaults); } else if (f == NULL) for (i = 1; i < LFACE_VECTOR_SIZE; ++i) @@ -2763,7 +2762,7 @@ DEFUN ("internal-make-lisp-face", Finternal_make_lisp_face, { lface = make_vector (LFACE_VECTOR_SIZE, Qunspecified); ASET (lface, 0, Qface); - fset_face_alist (f, Fcons (Fcons (face, lface), f->face_alist)); + Fputhash (face, lface, f->face_hash_table); } else for (i = 1; i < LFACE_VECTOR_SIZE; ++i) @@ -2924,7 +2923,7 @@ DEFUN ("internal-set-lisp-face-attribute", Finternal_set_lisp_face_attribute, f = NULL; lface = lface_from_face_name (NULL, face, true); - /* When updating face-new-frame-defaults, we put :ignore-defface + /* When updating face--new-frame-defaults, we put :ignore-defface where the caller wants `unspecified'. This forces the frame defaults to ignore the defface value. Otherwise, the defface will take effect, which is generally not what is intended. @@ -3508,7 +3507,7 @@ update_face_from_frame_parameter (struct frame *f, Lisp_Object param, /* If there are no faces yet, give up. This is the case when called from Fx_create_frame, and we do the necessary things later in face-set-after-frame-defaults. */ - if (NILP (f->face_alist)) + if (XFIXNAT (Fhash_table_count (f->face_hash_table)) == 0) return; if (EQ (param, Qforeground_color)) @@ -4174,14 +4173,13 @@ DEFUN ("internal-lisp-face-empty-p", Finternal_lisp_face_empty_p, return i == LFACE_VECTOR_SIZE ? Qt : Qnil; } - -DEFUN ("frame-face-alist", Fframe_face_alist, Sframe_face_alist, +DEFUN ("frame--face-hash-table", Fframe_face_hash_table, Sframe_face_hash_table, 0, 1, 0, - doc: /* Return an alist of frame-local faces defined on FRAME. + doc: /* Return a hash table of frame-local faces defined on FRAME. For internal use only. */) (Lisp_Object frame) { - return decode_live_frame (frame)->face_alist; + return decode_live_frame (frame)->face_hash_table; } @@ -6678,30 +6676,32 @@ DEFUN ("show-face-resources", Fshow_face_resources, Sshow_face_resources, #ifdef HAVE_PDUMPER /* All the faces defined during loadup are recorded in - face-new-frame-defaults, with the last face first in the list. We - need to set next_lface_id to the next face ID number, so that any - new faces defined in this session will have face IDs different from - those defined during loadup. We also need to set up the - lface_id_to_name[] array for the faces that were defined during - loadup. */ + face-new-frame-defaults. We need to set next_lface_id to the next + face ID number, so that any new faces defined in this session will + have face IDs different from those defined during loadup. We also + need to set up the lface_id_to_name[] array for the faces that were + defined during loadup. */ void init_xfaces (void) { - if (CONSP (Vface_new_frame_defaults)) + int nfaces = XFIXNAT (Fhash_table_count (Vface_new_frame_defaults)); + if (nfaces > 0) { /* Allocate the lface_id_to_name[] array. */ - lface_id_to_name_size = next_lface_id = - XFIXNAT (Flength (Vface_new_frame_defaults)); + lface_id_to_name_size = next_lface_id = nfaces; lface_id_to_name = xnmalloc (next_lface_id, sizeof *lface_id_to_name); /* Store the faces. */ - Lisp_Object tail; - int i = next_lface_id - 1; - for (tail = Vface_new_frame_defaults; CONSP (tail); tail = XCDR (tail)) + struct Lisp_Hash_Table* table = XHASH_TABLE (Vface_new_frame_defaults); + for (ptrdiff_t idx = 0; idx < nfaces; ++idx) { - Lisp_Object lface = XCAR (tail); - eassert (i >= 0); - lface_id_to_name[i--] = XCAR (lface); + Lisp_Object lface = HASH_KEY (table, idx); + Lisp_Object face_id = CAR (HASH_VALUE (table, idx)); + if (FIXNATP (face_id)) { + int id = XFIXNAT (face_id); + eassert (id >= 0); + lface_id_to_name[id] = lface; + } } } face_attr_sym[0] = Qface; @@ -6855,7 +6855,7 @@ syms_of_xfaces (void) defsubr (&Sinternal_copy_lisp_face); defsubr (&Sinternal_merge_in_global_face); defsubr (&Sface_font); - defsubr (&Sframe_face_alist); + defsubr (&Sframe_face_hash_table); defsubr (&Sdisplay_supports_face_attributes_p); defsubr (&Scolor_distance); defsubr (&Sinternal_set_font_selection_order); @@ -6879,9 +6879,12 @@ syms_of_xfaces (void) the "specifity" of a face specification and should be let-bound only for this purpose. */); - DEFVAR_LISP ("face-new-frame-defaults", Vface_new_frame_defaults, - doc: /* List of global face definitions (for internal use only.) */); - Vface_new_frame_defaults = Qnil; + DEFVAR_LISP ("face--new-frame-defaults", Vface_new_frame_defaults, + doc: /* Hash table of global face definitions (for internal use only.) */); + Vface_new_frame_defaults = + /* 33 entries is enough to fit all basic faces */ + make_hash_table (hashtest_eq, 33, DEFAULT_REHASH_SIZE, + DEFAULT_REHASH_THRESHOLD, Qnil, false); DEFVAR_LISP ("face-default-stipple", Vface_default_stipple, doc: /* Default stipple pattern used on monochrome displays. -- 2.17.1 --------------027433C9F25EFCB999EF8297-- From debbugs-submit-bounces@debbugs.gnu.org Fri May 15 17:23:27 2020 Received: (at 41200) by debbugs.gnu.org; 15 May 2020 21:23:27 +0000 Received: from localhost ([127.0.0.1]:38968 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZhnj-0001ba-0e for submit@debbugs.gnu.org; Fri, 15 May 2020 17:23:27 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:11999) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZhnh-0001bO-Q1 for 41200@debbugs.gnu.org; Fri, 15 May 2020 17:23:26 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 36BFB440293; Fri, 15 May 2020 17:23:20 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id A805A440280; Fri, 15 May 2020 17:23:18 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1589577798; bh=ttpvBgq7+c46NHvLuc4VR2oMwVjgC+Iy63lh6sOzryc=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=nBmAfG9LQJnsIVkd1vEXF8mdspAvDe35ASYW5rsNII1Cd2EOJDhS1ql9moVwvvvVp 2ALunoakUnJsNXgFg5VTGWPeYFjJIw6W7rcnD3eCnADnCOMO9K0QZ4kIHaNl/Pm7EL /9B6pLLt6p2F+8Vf/o0sl/NadiCFUFa+AzSRy4joAhXB6UoC3xeX7YKCwcq1dp1VN3 7Fo1nxZ36znLvAcYWAGztEBv3vtEZzsVox7XzlUExEZanNNHyA0GCbl9yxY4lsxaSf OBheK5iRBXOnXqwIL58q8hFSV4pL2HXSX/qDsTsUakrK7varjj0qTYmOfHtnwJQps6 kecU/t1Toh/vQ== Received: from alfajor (unknown [216.154.3.202]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 6EA9612024A; Fri, 15 May 2020 17:23:18 -0400 (EDT) From: Stefan Monnier To: =?windows-1252?Q?Cl=E9ment?= Pit-Claudel Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined Message-ID: References: <9c487146-1fad-0301-fe1a-8d98d560c6ea@gmail.com> Date: Fri, 15 May 2020 17:23:17 -0400 In-Reply-To: <9c487146-1fad-0301-fe1a-8d98d560c6ea@gmail.com> (=?windows-1252?Q?=22Cl=E9ment?= Pit-Claudel"'s message of "Fri, 15 May 2020 15:10:46 -0400") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.088 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 41200 Cc: Eli Zaretskii , 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Interesting. I also wonder whether we could fast-track the case where the > face spec is a vector full of 'undefined, since that seems to be the > common case. I was thinking also of the case where no face specs have changed and the frame is "normal" (same frame properties as others, basically) so we could re-use the faces from another frame. [ After all, my Emacs sessions typically have dozens of frames, and only one of them (a minibuffer-only frame) has faces setup differently because it's configured to use a slightly larger font. ] Stefan From debbugs-submit-bounces@debbugs.gnu.org Sat May 16 04:45:37 2020 Received: (at 41200) by debbugs.gnu.org; 16 May 2020 08:45:37 +0000 Received: from localhost ([127.0.0.1]:39755 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZsRt-0003lq-B5 for submit@debbugs.gnu.org; Sat, 16 May 2020 04:45:37 -0400 Received: from mout.gmx.net ([212.227.15.19]:51021) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZsRr-0003lf-HC for 41200@debbugs.gnu.org; Sat, 16 May 2020 04:45:35 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1589618726; bh=6UKAaiS6vLRzu+8NtajyshNJCAHTaxgzhdKEZ3VYwlA=; h=X-UI-Sender-Class:Subject:To:Cc:References:From:Date:In-Reply-To; b=VadBjhilUo0JHRE5hvRLSrO8Ke9B5Rq263x4Kou6zC8Z3JeAJO1gydo59RwX8SXtv z5vRjKi8/rCoriN/xPglI32+9XtGTfKXKzFUZ7rLgu9DJfomd3OlVCex8AJ2IrIpFo QGmZNTSEzlE6yuwGRQiAjgKlcbC62crQYZXMKBwo= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [192.168.1.101] ([212.95.5.16]) by mail.gmx.com (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MPog5-1jmLC91bRz-00Ms56; Sat, 16 May 2020 10:45:26 +0200 Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined To: Stefan Monnier , =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= References: <9c487146-1fad-0301-fe1a-8d98d560c6ea@gmail.com> From: martin rudalics Message-ID: <13eef332-5c47-bc19-d62f-236e54740268@gmx.at> Date: Sat, 16 May 2020 10:45:25 +0200 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K1:AZO9oMLyP5C3pq8XeVCub00MNk3MKkd2vQ/29woBn8fwDubzzoW gf1Atkl8AfwdhgzJbH7djKsL8M8/F2Dr63JlI9xV5U4Zme17ibGUI9MOBby+FPw32vXM14W XAIgr7u3ww6FbKxllBoqjx+l+dyyGLtLuvCpbNJ2METfy5WPbIMzPvDeDw88zhP99qTgQtK Pkearpk2P5itO5arunBSQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:lxGF36Y5Mx0=:DTaTZ27F4uOtoPQKOVRKe5 GC/CculUP+tdQp9qUNGkjN4AbQSMrvFQiKHeMHR9dZ6T3kNdJBP/8rwHv8uRXyWY/j0QoM5Bc ZeFpND9cNriyFMnnSAsX/NaMmUK2lw2jlpeA9hJsyqyGRm+eflp5vdjit6tv7DOWHHVPo6e/E gFkUGoazCm/1+dPrAvdkXSRZumbsSR4Fw48RZcCMIXp9KoclHTIxIKMgvCXDmQJtx4RYgaVjD uurCmD5GBZa5GiqpL2tZumcVUPm7FtpR0Llx5oY7fnyG8P0IPxoAOgfG8b6tpI9yizVQe3pMG LNV1nx6DXOqIXsY7ypLZI1PIHS1Z5yWM3sE0Nwi7I/38ViaBlS4m7+kbsDVjCSD2OAdDpnl23 Mp97mJUrZjl7+w2SzerM13kC5D4n646mxgC5g14IBLvV4OpDvIkPOAeijw7VBWxMKrMu5xB5+ Ta0WwSqyWWYpp0VQTwN2eQLmy0Qyx2UsUdYXxso+DmEANeW8C6lguaVwLegSZ967X6Qpwiuwd qrXXve8oem+jiodj0kep3svQl6cwP6cL9SydxoOd6ztTnIakyw0zEsy0EbW4rag+YC9bflDBR 5YZkO5DYIDLqGyh5lNdttIqFBPKDisEk1vDwnbUg4m1qDQbf8f0AqV2I6M0ve7F8vJo0qLu7V kgclu/shl/MAzMj4Ne2ofLDEP5M4/0vO+yaH0ucUi1wAjDCjDCA5WFGMJV1lBTiuqOQ6KrMpe VutOVQ6hGCNAu9YAU5fuYAMRtJ4FwlNwKciu0oI8J+Qyz6irvBzj4P74FPIsjjCLEJIXZd3gH QMiR2qmdSLbRdXwLBLbi0vlUoeZ0NGFb96mSjGd0WJdWxfnfvwWG9Je83UKK64hcGKt4XdUH3 PtRFgvQLIj4lrj0ax0uNh1Eke4Sn4bU4FW+J8iM2GVj+7+y8utJpWqMgMoJnoOjoMHjxQbO9B pGOgJnkpzYsquKmtnXvgYLy4XYheU9bOD66/vu1v2uGU9mzeesvQ505DBtYn+RSOyjwdr1vZd 8cXlQgEZ4j/E3Z4L3qCLrRr25//zkfYbCOkUBmjiJXgmu3cfPfShOb1/QhlxZJxMRpkUtnUw9 mmBf5B5pC3czf3vkXUfObo8Tk6e1+eM7Y6S9+GdV+4djhO1Kw3Rwek4ihaH27N+y4dbKSj9Hn 6SIaeEcemWzjsiNDXusZ5Qy0ye/s+KyvTSLTS1iX9Q3qRHLqo13NdnceVPUP7Zd/axwHGpxlI ICIB5uorDWwZxbiwr X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 41200 Cc: 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > I was thinking also of the case where no face specs have changed and the > frame is "normal" (same frame properties as others, basically) so we > could re-use the faces from another frame. That's my hope as well. For years now I'm making frames temporarily invisible in order to avoid setting up faces for a new frame. > [ After all, my Emacs sessions typically have dozens of frames, and only > one of them (a minibuffer-only frame) has faces setup differently > because it's configured to use a slightly larger font. ] In my setup the minibuffer-only frame doesn't even do that. martin From debbugs-submit-bounces@debbugs.gnu.org Sat May 16 19:24:54 2020 Received: (at 41200) by debbugs.gnu.org; 16 May 2020 23:24:54 +0000 Received: from localhost ([127.0.0.1]:41912 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ja6Ao-00011T-4q for submit@debbugs.gnu.org; Sat, 16 May 2020 19:24:54 -0400 Received: from relay1-d.mail.gandi.net ([217.70.183.193]:7463) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ja6Am-00010r-3j for 41200@debbugs.gnu.org; Sat, 16 May 2020 19:24:52 -0400 X-Originating-IP: 91.129.104.245 Received: from mail.gandi.net (m91-129-104-245.cust.tele2.ee [91.129.104.245]) (Authenticated sender: juri@linkov.net) by relay1-d.mail.gandi.net (Postfix) with ESMTPSA id 6B1A2240002; Sat, 16 May 2020 23:24:45 +0000 (UTC) From: Juri Linkov To: =?iso-8859-1?Q?Cl=E9ment?= Pit-Claudel Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined Organization: LINKOV.NET References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> <837dxd31cb.fsf@gnu.org> <789d786d-a07a-65c1-c0e4-433e4c18d64e@gmail.com> <835zcxgrby.fsf@gnu.org> <833681glas.fsf@gnu.org> <53252e93-085c-477f-21df-c909082dffc2@gmail.com> Date: Sun, 17 May 2020 02:03:04 +0300 In-Reply-To: <53252e93-085c-477f-21df-c909082dffc2@gmail.com> (=?iso-8859-1?Q?=22Cl=E9ment?= Pit-Claudel"'s message of "Fri, 15 May 2020 14:50:17 -0400") Message-ID: <87367z324f.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 41200 Cc: Eli Zaretskii , 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) >>>> I think the problem is that tab-line is declared a basic face, but its >>>> defface form is not in faces.el. >>> >>> Ah, good catch. Current there's a defface for tab-bar in lisp/tab-bar, and since that's preloaded it works, but the defface for tab-line is in lisp/tab-line.el and so isn't preloaded. >>> Should I move both to faces.el? >>> >> Yes, I think so. > > Thanks. I will ask Juri to confirm before moving them, because I realize now that they have a custom group. > Juri (CC'd; hi Juri!), was there a reason to make tab-bar and tab-line basic faces? I see they are both in their own files and groups, instead of being in faces.el. Actually, no reason other than consistency of faces belonging to the same file where they are used. But if it will fix the technical problem, please move them to faces.el, especially given the fact that their counterpart tool-bar face is already defined in faces.el. From debbugs-submit-bounces@debbugs.gnu.org Sat May 16 19:43:17 2020 Received: (at 41200) by debbugs.gnu.org; 16 May 2020 23:43:17 +0000 Received: from localhost ([127.0.0.1]:41924 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ja6Sa-0001UW-Ui for submit@debbugs.gnu.org; Sat, 16 May 2020 19:43:17 -0400 Received: from mail-qt1-f179.google.com ([209.85.160.179]:46174) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ja6SZ-0001UH-MV for 41200@debbugs.gnu.org; Sat, 16 May 2020 19:43:16 -0400 Received: by mail-qt1-f179.google.com with SMTP id p12so5199745qtn.13 for <41200@debbugs.gnu.org>; Sat, 16 May 2020 16:43:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language; bh=spHTQQBqOaeqOPrEyi4PtSaUaOq+GwH1XSEyzmQ9l/A=; b=IorSVA/lQah/0puPVmNLzBnwOPq4/s1CXzDDoYmOP+TZ1FMSSQOfBgVVFqgYrVKS8W Oa7I2ZTEbeH9xNBQ+rs4Iqo3VU/1S5+h424Nvzqqjy4IzBFv2SfxWeXNuUxMRDsLLTs0 fATOby1C73XctFgmN8UAwYLv7Ax39pWZm8+ovc3B1xjKqrCFi0X4oDE8ZlgS/CduKKnc /gOisKYy/G7576LHXr361AJ6akHhOeCUAXq6NTSC8+JCeO9xgSVC876/j/WtHhJiJIDR MvfzsuFdvMVVCeZUfsNMUEdj/ei0SMIyJU5M7pO1gzH2z7XDeLqxjSo8TM7dJkKEsWd6 cYnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language; bh=spHTQQBqOaeqOPrEyi4PtSaUaOq+GwH1XSEyzmQ9l/A=; b=LMuti+5j/vYgc9G0Sx4I322xECp1KS4nVpc09RjO4p4Btmjd+PgsqUrRjQRFJQkElz hmk6KUIzY5IRYK7n2wYUd9SDLVazp0GvOzE9ZeEy20x+Zf60I71spDle28lNs9iP4TUs UXsv/qJ2eMGp/1o/Py1H+zy8ODzuZ8uLC+eubg8JLuVCTHqKTYIpLqBLVV4VH6sH3wEq NfaSJQWzPgDv6PWI8yCwvAAJtMl9DBcP1O3oGqhRMGWolhIMojr6KEQC8j63xhUyOSnG YUwpjt2vPA5f4zIOM8Z8e4kxUM0B406Nw/scFn3TVwblCV/GjzYAaD0pDAwLo5MNkzd3 hq+g== X-Gm-Message-State: AOAM530eeVHXyGrRzUzSMLr5VAtJdoKExvx40oNrfx0yV9nuJbOw8WNE /sIhjq8jkNjPawdVUenjELH+ozHf X-Google-Smtp-Source: ABdhPJxoSGi9sGKqPqIYcb5zLCsjt1prCP2vWsWpXM9ZTo3fCbUWeLTCIKFitEfIlV1L4mBgbT3Q1w== X-Received: by 2002:ac8:3292:: with SMTP id z18mr9529370qta.32.1589672589782; Sat, 16 May 2020 16:43:09 -0700 (PDT) Received: from ?IPv6:2601:184:4180:66e7:4d17:b25e:8d9:2188? ([2601:184:4180:66e7:4d17:b25e:8d9:2188]) by smtp.googlemail.com with ESMTPSA id n20sm5420300qtk.89.2020.05.16.16.43.08 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 16 May 2020 16:43:09 -0700 (PDT) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined To: Juri Linkov References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> <837dxd31cb.fsf@gnu.org> <789d786d-a07a-65c1-c0e4-433e4c18d64e@gmail.com> <835zcxgrby.fsf@gnu.org> <833681glas.fsf@gnu.org> <53252e93-085c-477f-21df-c909082dffc2@gmail.com> <87367z324f.fsf@mail.linkov.net> From: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= Message-ID: <3fc34671-54ba-e83d-9514-11e0906c2ac0@gmail.com> Date: Sat, 16 May 2020 19:43:07 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <87367z324f.fsf@mail.linkov.net> Content-Type: multipart/mixed; boundary="------------3E979902F5EF3AC0752E533E" Content-Language: en-GB X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41200 Cc: Eli Zaretskii , 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This is a multi-part message in MIME format. --------------3E979902F5EF3AC0752E533E Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit On 16/05/2020 19.03, Juri Linkov wrote: >>>>> I think the problem is that tab-line is declared a basic face, but its >>>>> defface form is not in faces.el. >>>> >>>> Ah, good catch. Current there's a defface for tab-bar in lisp/tab-bar, and since that's preloaded it works, but the defface for tab-line is in lisp/tab-line.el and so isn't preloaded. >>>> Should I move both to faces.el? >>>> >>> Yes, I think so. >> >> Thanks. I will ask Juri to confirm before moving them, because I realize now that they have a custom group. >> Juri (CC'd; hi Juri!), was there a reason to make tab-bar and tab-line basic faces? I see they are both in their own files and groups, instead of being in faces.el. > > Actually, no reason other than consistency of faces belonging to the > same file where they are used. But if it will fix the technical problem, > please move them to faces.el, especially given the fact that their > counterpart tool-bar face is already defined in faces.el. Thanks a lot. The attached patch does that. --------------3E979902F5EF3AC0752E533E Content-Type: text/x-patch; charset=UTF-8; name="0001-Move-tab-bar-and-tab-line-to-faces.el-part-of-bug-41.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename*0="0001-Move-tab-bar-and-tab-line-to-faces.el-part-of-bug-41.pa"; filename*1="tch" >From 4d3349d83791a57cdc01374c82792fff6e1b8a94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Pit-Claudel?= Date: Sat, 16 May 2020 19:36:43 -0400 Subject: [PATCH] Move tab-bar and tab-line to faces.el (part of bug#41200) These are basic faces, so they need to be defined in faces.el (otherwise (get 'tab-line 'face) returns 0). * lisp/tab-bar.el (tab-bar): * lisp/tab-line.el (tab-line): Move from here... * lisp/faces.el (menu): ...to here. --- lisp/faces.el | 27 +++++++++++++++++++++++++++ lisp/tab-bar.el | 13 ------------- lisp/tab-line.el | 14 -------------- 3 files changed, 27 insertions(+), 27 deletions(-) diff --git a/lisp/faces.el b/lisp/faces.el index bb51797a38..b495fb6e87 100644 --- a/lisp/faces.el +++ b/lisp/faces.el @@ -2755,6 +2755,33 @@ tool-bar :version "21.1" :group 'basic-faces) +(defface tab-line + '((((class color) (min-colors 88)) + :inherit variable-pitch + :height 0.9 + :background "grey85" + :foreground "black") + (((class mono)) + :background "grey") + (t + :inverse-video t)) + "Tab line face." + :version "27.1" + :group 'basic-faces) + +(defface tab-bar + '((((class color) (min-colors 88)) + :inherit variable-pitch + :background "grey85" + :foreground "black") + (((class mono)) + :background "grey") + (t + :inverse-video t)) + "Tab bar face." + :version "27.1" + :group 'basic-faces) + (defface menu '((((type tty)) :inverse-video t) diff --git a/lisp/tab-bar.el b/lisp/tab-bar.el index ce6d8c33dd..689481b28b 100644 --- a/lisp/tab-bar.el +++ b/lisp/tab-bar.el @@ -50,19 +50,6 @@ tab-bar-faces :group 'faces :version "27.1") -(defface tab-bar - '((((class color) (min-colors 88)) - :inherit variable-pitch - :background "grey85" - :foreground "black") - (((class mono)) - :background "grey") - (t - :inverse-video t)) - "Tab bar face." - :version "27.1" - :group 'tab-bar-faces) - (defface tab-bar-tab '((default :inherit tab-bar) diff --git a/lisp/tab-line.el b/lisp/tab-line.el index 7a2bdc0b72..50ec40bacf 100644 --- a/lisp/tab-line.el +++ b/lisp/tab-line.el @@ -41,20 +41,6 @@ tab-line-faces :group 'faces :version "27.1") -(defface tab-line - '((((class color) (min-colors 88)) - :inherit variable-pitch - :height 0.9 - :background "grey85" - :foreground "black") - (((class mono)) - :background "grey") - (t - :inverse-video t)) - "Tab line face." - :version "27.1" - :group 'tab-line-faces) - (defface tab-line-tab '((default :inherit tab-line) -- 2.17.1 --------------3E979902F5EF3AC0752E533E-- From debbugs-submit-bounces@debbugs.gnu.org Sun May 17 18:14:41 2020 Received: (at 41200) by debbugs.gnu.org; 17 May 2020 22:14:41 +0000 Received: from localhost ([127.0.0.1]:44987 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jaRYP-0005vn-7f for submit@debbugs.gnu.org; Sun, 17 May 2020 18:14:41 -0400 Received: from relay5-d.mail.gandi.net ([217.70.183.197]:33051) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jaRYO-0005va-00 for 41200@debbugs.gnu.org; Sun, 17 May 2020 18:14:40 -0400 X-Originating-IP: 91.129.104.245 Received: from mail.gandi.net (m91-129-104-245.cust.tele2.ee [91.129.104.245]) (Authenticated sender: juri@linkov.net) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 8B2C91C0003; Sun, 17 May 2020 22:14:23 +0000 (UTC) From: Juri Linkov To: =?iso-8859-1?Q?Cl=E9ment?= Pit-Claudel Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined Organization: LINKOV.NET References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> <837dxd31cb.fsf@gnu.org> <789d786d-a07a-65c1-c0e4-433e4c18d64e@gmail.com> <835zcxgrby.fsf@gnu.org> <833681glas.fsf@gnu.org> <53252e93-085c-477f-21df-c909082dffc2@gmail.com> <87367z324f.fsf@mail.linkov.net> <3fc34671-54ba-e83d-9514-11e0906c2ac0@gmail.com> Date: Mon, 18 May 2020 00:59:20 +0300 In-Reply-To: <3fc34671-54ba-e83d-9514-11e0906c2ac0@gmail.com> (=?iso-8859-1?Q?=22Cl=E9ment?= Pit-Claudel"'s message of "Sat, 16 May 2020 19:43:07 -0400") Message-ID: <87lflqkznj.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 41200 Cc: Eli Zaretskii , 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > + :group 'basic-faces) > + > + :group 'basic-faces) > > - :group 'tab-bar-faces) > - > - :group 'tab-line-faces) Could these faces belong to both groups? :group 'basic-faces :group 'tab-bar-faces From debbugs-submit-bounces@debbugs.gnu.org Sun May 17 21:20:01 2020 Received: (at 41200) by debbugs.gnu.org; 18 May 2020 01:20:01 +0000 Received: from localhost ([127.0.0.1]:45199 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jaURk-0004Cy-Ow for submit@debbugs.gnu.org; Sun, 17 May 2020 21:20:01 -0400 Received: from mail-qt1-f170.google.com ([209.85.160.170]:38410) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jaURj-0004Cn-Qg for 41200@debbugs.gnu.org; Sun, 17 May 2020 21:20:00 -0400 Received: by mail-qt1-f170.google.com with SMTP id i68so6857104qtb.5 for <41200@debbugs.gnu.org>; Sun, 17 May 2020 18:19:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=QWX30+Rn9CYOJcLK293bPCWfqq+ODSYF5ar3V10NYoo=; b=KIfPhhe17zaZ54l/BvRAKpOWcNygPdF0xjXdCW48A3Qx3r7kzt1UmkT+1+kDyibmhC qggT2415kvw+dc1JlNbAqmuUhrub0dbZjKHVIyrR0GH5ht44zelhCqFLLcPaBJZZa1N8 eTfC+RE45YNceWQbsfO8QWv4pMRzJNukB3CiKk5t0MNxwkkPgSPQDuhocRBwzk6zW3vv U4NrnzRv09zhqcT8A8eO4vkCR/snnEI+UFQbo8R5zkZBxhQ4pDqpXmFQ+ICLqV8tlv/K gMOzMLHQvSe67XK715ZzFLh3OxUxnmmy9syTuEwO+YH+qBtu8UQOVHRn1lB3istL7tvj SkAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=QWX30+Rn9CYOJcLK293bPCWfqq+ODSYF5ar3V10NYoo=; b=Lnxi7SmA3XjucXwdLfQQZp9CtJvkzk6bbnCerup1NY0aht+vf0KHFblSdKhIrafIXU D8RpuPG+1E6mDgSgJN9BDFUArJ+LUPNoNZxhhx4+cQUYzH3X5XYO8MRSRB4MG5DMRD7l MRQpqU6tiqJa1bpncxgwCxKSLMC//J5e8IT+U/Z8BGvzCUIaYwzRAqYW4XJwvJvLevVX 0JA5LDkAlSSjp9CNHFhFzudzQPhtBZGs+T4oHdc8UtFq09jFvmo1MfXAEi4M6jIhNQhC XAfoKjpxabti7SR8LUuaZo2Pr7Mol6FS9s/VV1QuO/juz02BwzKeUuAejqjr08FsPGyR rbxQ== X-Gm-Message-State: AOAM531+L6FFoX/hH2mvWdCWAD6rd1QsfDIWpuinn0MJTVE3xbAd3j3W GcO3ibZAAjASsRtreN0m6PKZnjlb X-Google-Smtp-Source: ABdhPJzrvyqAPAh4NLBTla5M+0hWIgUayiTUsf67ftGCZQ9lfnItJ4ibKV9bvEkRODBw4agMOp9/Bw== X-Received: by 2002:aed:2d23:: with SMTP id h32mr13829086qtd.389.1589764794188; Sun, 17 May 2020 18:19:54 -0700 (PDT) Received: from ?IPv6:2601:184:4180:66e7:bda5:ac5c:1de0:b677? ([2601:184:4180:66e7:bda5:ac5c:1de0:b677]) by smtp.googlemail.com with ESMTPSA id i20sm4688595qtv.90.2020.05.17.18.19.52 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 17 May 2020 18:19:53 -0700 (PDT) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined To: Juri Linkov References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> <837dxd31cb.fsf@gnu.org> <789d786d-a07a-65c1-c0e4-433e4c18d64e@gmail.com> <835zcxgrby.fsf@gnu.org> <833681glas.fsf@gnu.org> <53252e93-085c-477f-21df-c909082dffc2@gmail.com> <87367z324f.fsf@mail.linkov.net> <3fc34671-54ba-e83d-9514-11e0906c2ac0@gmail.com> <87lflqkznj.fsf@mail.linkov.net> From: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= Message-ID: Date: Sun, 17 May 2020 21:19:50 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <87lflqkznj.fsf@mail.linkov.net> Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 41200 Cc: Eli Zaretskii , 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 17/05/2020 17.59, Juri Linkov wrote: >> + :group 'basic-faces) >> + >> + :group 'basic-faces) >> >> - :group 'tab-bar-faces) >> - >> - :group 'tab-line-faces) > > Could these faces belong to both groups? > > :group 'basic-faces > :group 'tab-bar-faces Yup, but that won't work well if the face is customized before the group is defined, right? Maybe the trick would be to add the group to the face when tab-bar.el and tab-bar-line.el are loaded? From debbugs-submit-bounces@debbugs.gnu.org Tue May 19 18:25:16 2020 Received: (at 41200) by debbugs.gnu.org; 19 May 2020 22:25:16 +0000 Received: from localhost ([127.0.0.1]:51340 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jbAfj-0003qh-Rp for submit@debbugs.gnu.org; Tue, 19 May 2020 18:25:16 -0400 Received: from relay7-d.mail.gandi.net ([217.70.183.200]:57859) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jbAfh-0003qR-JA for 41200@debbugs.gnu.org; Tue, 19 May 2020 18:25:13 -0400 X-Originating-IP: 91.129.97.200 Received: from mail.gandi.net (m91-129-97-200.cust.tele2.ee [91.129.97.200]) (Authenticated sender: juri@linkov.net) by relay7-d.mail.gandi.net (Postfix) with ESMTPSA id 47F3B20003; Tue, 19 May 2020 22:25:05 +0000 (UTC) From: Juri Linkov To: =?iso-8859-1?Q?Cl=E9ment?= Pit-Claudel Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined Organization: LINKOV.NET References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> <837dxd31cb.fsf@gnu.org> <789d786d-a07a-65c1-c0e4-433e4c18d64e@gmail.com> <835zcxgrby.fsf@gnu.org> <833681glas.fsf@gnu.org> <53252e93-085c-477f-21df-c909082dffc2@gmail.com> <87367z324f.fsf@mail.linkov.net> <3fc34671-54ba-e83d-9514-11e0906c2ac0@gmail.com> <87lflqkznj.fsf@mail.linkov.net> Date: Wed, 20 May 2020 00:48:55 +0300 In-Reply-To: (=?iso-8859-1?Q?=22Cl=E9ment?= Pit-Claudel"'s message of "Sun, 17 May 2020 21:19:50 -0400") Message-ID: <87zha3d29k.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 41200 Cc: Eli Zaretskii , 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) >>> + :group 'basic-faces) >>> + >>> + :group 'basic-faces) >>> >>> - :group 'tab-bar-faces) >>> - >>> - :group 'tab-line-faces) >> >> Could these faces belong to both groups? >> >> :group 'basic-faces >> :group 'tab-bar-faces > > Yup, but that won't work well if the face is customized before the > group is defined, right? Maybe the trick would be to add the group to > the face when tab-bar.el and tab-line.el are loaded? Actually since tab-bar.el is pre-loaded this problem exists only for tab-line.el. Then adding something like (nconc (get 'tab-line-faces 'custom-group) '((tab-line custom-face) ...)) to tab-line.el will add faces when tab-line.el are loaded. From debbugs-submit-bounces@debbugs.gnu.org Sat May 23 04:11:49 2020 Received: (at 41200) by debbugs.gnu.org; 23 May 2020 08:11:49 +0000 Received: from localhost ([127.0.0.1]:33349 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jcPG1-0002ch-89 for submit@debbugs.gnu.org; Sat, 23 May 2020 04:11:49 -0400 Received: from eggs.gnu.org ([209.51.188.92]:55438) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jcPFy-0002cS-T5 for 41200@debbugs.gnu.org; Sat, 23 May 2020 04:11:47 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:40267) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jcPFs-0003tL-3t; Sat, 23 May 2020 04:11:40 -0400 Received: from [176.228.60.248] (port=3308 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jcPFr-0001xf-CA; Sat, 23 May 2020 04:11:39 -0400 Date: Sat, 23 May 2020 11:11:46 +0300 Message-Id: <83a71z135p.fsf@gnu.org> From: Eli Zaretskii To: Juri Linkov In-Reply-To: <87zha3d29k.fsf@mail.linkov.net> (message from Juri Linkov on Wed, 20 May 2020 00:48:55 +0300) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> <837dxd31cb.fsf@gnu.org> <789d786d-a07a-65c1-c0e4-433e4c18d64e@gmail.com> <835zcxgrby.fsf@gnu.org> <833681glas.fsf@gnu.org> <53252e93-085c-477f-21df-c909082dffc2@gmail.com> <87367z324f.fsf@mail.linkov.net> <3fc34671-54ba-e83d-9514-11e0906c2ac0@gmail.com> <87lflqkznj.fsf@mail.linkov.net> <87zha3d29k.fsf@mail.linkov.net> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 41200 Cc: cpitclaudel@gmail.com, 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Juri Linkov > Cc: Eli Zaretskii , 41200@debbugs.gnu.org > Date: Wed, 20 May 2020 00:48:55 +0300 > > >>> + :group 'basic-faces) > >>> + > >>> + :group 'basic-faces) > >>> > >>> - :group 'tab-bar-faces) > >>> - > >>> - :group 'tab-line-faces) > >> > >> Could these faces belong to both groups? > >> > >> :group 'basic-faces > >> :group 'tab-bar-faces > > > > Yup, but that won't work well if the face is customized before the > > group is defined, right? Maybe the trick would be to add the group to > > the face when tab-bar.el and tab-line.el are loaded? > > Actually since tab-bar.el is pre-loaded this problem exists only for > tab-line.el. > > Then adding something like > > (nconc (get 'tab-line-faces 'custom-group) '((tab-line custom-face) ...)) > > to tab-line.el will add faces when tab-line.el are loaded. Could you guys please finalize these issues? I'd like to install these changes on master, for which I'd need a patch that covers both the changes in the face storage and the fix for the tab-line face. Actually, the problem with the tab-line face will probably need to be fixed on emacs-27. Thanks. From debbugs-submit-bounces@debbugs.gnu.org Sat May 23 18:56:42 2020 Received: (at 41200) by debbugs.gnu.org; 23 May 2020 22:56:42 +0000 Received: from localhost ([127.0.0.1]:36007 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jcd4L-00088p-OD for submit@debbugs.gnu.org; Sat, 23 May 2020 18:56:42 -0400 Received: from relay7-d.mail.gandi.net ([217.70.183.200]:33025) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jcd4I-00088T-RL for 41200@debbugs.gnu.org; Sat, 23 May 2020 18:56:39 -0400 X-Originating-IP: 91.129.97.200 Received: from mail.gandi.net (m91-129-97-200.cust.tele2.ee [91.129.97.200]) (Authenticated sender: juri@linkov.net) by relay7-d.mail.gandi.net (Postfix) with ESMTPSA id AB07420003; Sat, 23 May 2020 22:56:31 +0000 (UTC) From: Juri Linkov To: Eli Zaretskii Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined Organization: LINKOV.NET References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> <837dxd31cb.fsf@gnu.org> <789d786d-a07a-65c1-c0e4-433e4c18d64e@gmail.com> <835zcxgrby.fsf@gnu.org> <833681glas.fsf@gnu.org> <53252e93-085c-477f-21df-c909082dffc2@gmail.com> <87367z324f.fsf@mail.linkov.net> <3fc34671-54ba-e83d-9514-11e0906c2ac0@gmail.com> <87lflqkznj.fsf@mail.linkov.net> <87zha3d29k.fsf@mail.linkov.net> <83a71z135p.fsf@gnu.org> Date: Sun, 24 May 2020 01:47:28 +0300 In-Reply-To: <83a71z135p.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 23 May 2020 11:11:46 +0300") Message-ID: <87r1vas1z3.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 41200 Cc: cpitclaudel@gmail.com, 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) >> >> Could these faces belong to both groups? >> >> >> >> :group 'basic-faces >> >> :group 'tab-bar-faces >> > >> > Yup, but that won't work well if the face is customized before the >> > group is defined, right? Maybe the trick would be to add the group to >> > the face when tab-bar.el and tab-line.el are loaded? >> >> Actually since tab-bar.el is pre-loaded this problem exists only for >> tab-line.el. >> >> Then adding something like >> >> (nconc (get 'tab-line-faces 'custom-group) '((tab-line custom-face) ...)) >> >> to tab-line.el will add faces when tab-line.el are loaded. > > Could you guys please finalize these issues? I'd like to install > these changes on master, for which I'd need a patch that covers both > the changes in the face storage and the fix for the tab-line face. > > Actually, the problem with the tab-line face will probably need to be > fixed on emacs-27. I don't recommend using the trick with nconc in emacs-27. It would be less risky if Clément will just move tab faces to faces.el in emacs-27. Or may I suggest to preload tab-line.el in emacs-27? That will solve the problem as well. From debbugs-submit-bounces@debbugs.gnu.org Sat May 23 22:33:05 2020 Received: (at 41200) by debbugs.gnu.org; 24 May 2020 02:33:05 +0000 Received: from localhost ([127.0.0.1]:36108 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jcgRl-0004ju-3p for submit@debbugs.gnu.org; Sat, 23 May 2020 22:33:05 -0400 Received: from eggs.gnu.org ([209.51.188.92]:48602) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jcgRj-0004jQ-MY for 41200@debbugs.gnu.org; Sat, 23 May 2020 22:33:04 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:53833) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jcgRd-00058K-9J; Sat, 23 May 2020 22:32:57 -0400 Received: from [176.228.60.248] (port=4255 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jcgRc-00010w-99; Sat, 23 May 2020 22:32:56 -0400 Date: Sun, 24 May 2020 05:33:03 +0300 Message-Id: <83lflixdsw.fsf@gnu.org> From: Eli Zaretskii To: Juri Linkov In-Reply-To: <87r1vas1z3.fsf@mail.linkov.net> (message from Juri Linkov on Sun, 24 May 2020 01:47:28 +0300) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> <837dxd31cb.fsf@gnu.org> <789d786d-a07a-65c1-c0e4-433e4c18d64e@gmail.com> <835zcxgrby.fsf@gnu.org> <833681glas.fsf@gnu.org> <53252e93-085c-477f-21df-c909082dffc2@gmail.com> <87367z324f.fsf@mail.linkov.net> <3fc34671-54ba-e83d-9514-11e0906c2ac0@gmail.com> <87lflqkznj.fsf@mail.linkov.net> <87zha3d29k.fsf@mail.linkov.net> <83a71z135p.fsf@gnu.org> <87r1vas1z3.fsf@mail.linkov.net> MIME-version: 1.0 Content-type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 41200 Cc: cpitclaudel@gmail.com, 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Juri Linkov > Cc: cpitclaudel@gmail.com, 41200@debbugs.gnu.org > Date: Sun, 24 May 2020 01:47:28 +0300 > > > Actually, the problem with the tab-line face will probably need to be > > fixed on emacs-27. > > I don't recommend using the trick with nconc in emacs-27. It would be > less risky if Clément will just move tab faces to faces.el in emacs-27. Agreed. > Or may I suggest to preload tab-line.el in emacs-27? Doesn't sound justified to me. I don't expect this feature to be so popular as to always have it available. From debbugs-submit-bounces@debbugs.gnu.org Sun May 24 18:10:26 2020 Received: (at 41200) by debbugs.gnu.org; 24 May 2020 22:10:26 +0000 Received: from localhost ([127.0.0.1]:38991 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jcyp8-0000AK-Cr for submit@debbugs.gnu.org; Sun, 24 May 2020 18:10:26 -0400 Received: from relay5-d.mail.gandi.net ([217.70.183.197]:57419) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jcyp3-00009Z-3H for 41200@debbugs.gnu.org; Sun, 24 May 2020 18:10:21 -0400 X-Originating-IP: 91.129.108.6 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id A075F1C0005; Sun, 24 May 2020 22:10:14 +0000 (UTC) From: Juri Linkov To: Eli Zaretskii Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined Organization: LINKOV.NET References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> <837dxd31cb.fsf@gnu.org> <789d786d-a07a-65c1-c0e4-433e4c18d64e@gmail.com> <835zcxgrby.fsf@gnu.org> <833681glas.fsf@gnu.org> <53252e93-085c-477f-21df-c909082dffc2@gmail.com> <87367z324f.fsf@mail.linkov.net> <3fc34671-54ba-e83d-9514-11e0906c2ac0@gmail.com> <87lflqkznj.fsf@mail.linkov.net> <87zha3d29k.fsf@mail.linkov.net> <83a71z135p.fsf@gnu.org> <87r1vas1z3.fsf@mail.linkov.net> <83lflixdsw.fsf@gnu.org> Date: Mon, 25 May 2020 00:50:14 +0300 In-Reply-To: <83lflixdsw.fsf@gnu.org> (Eli Zaretskii's message of "Sun, 24 May 2020 05:33:03 +0300") Message-ID: <87sgfpuhnt.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 41200 Cc: cpitclaudel@gmail.com, 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) >> Or may I suggest to preload tab-line.el in emacs-27? > > Doesn't sound justified to me. I don't expect this feature to be so > popular as to always have it available. Agreed, better to move deffaces to faces.el. From debbugs-submit-bounces@debbugs.gnu.org Sun Jun 07 20:23:10 2020 Received: (at 41200) by debbugs.gnu.org; 8 Jun 2020 00:23:10 +0000 Received: from localhost ([127.0.0.1]:55255 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ji5ZG-0003f1-HM for submit@debbugs.gnu.org; Sun, 07 Jun 2020 20:23:10 -0400 Received: from relay11.mail.gandi.net ([217.70.178.231]:38983) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ji5ZE-0003em-G6 for 41200@debbugs.gnu.org; Sun, 07 Jun 2020 20:23:09 -0400 Received: from mail.gandi.net (m91-129-108-6.cust.tele2.ee [91.129.108.6]) (Authenticated sender: juri@linkov.net) by relay11.mail.gandi.net (Postfix) with ESMTPSA id 59528100006; Mon, 8 Jun 2020 00:23:00 +0000 (UTC) From: Juri Linkov To: Eli Zaretskii Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined Organization: LINKOV.NET References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> <837dxd31cb.fsf@gnu.org> <789d786d-a07a-65c1-c0e4-433e4c18d64e@gmail.com> <835zcxgrby.fsf@gnu.org> <833681glas.fsf@gnu.org> <53252e93-085c-477f-21df-c909082dffc2@gmail.com> <87367z324f.fsf@mail.linkov.net> <3fc34671-54ba-e83d-9514-11e0906c2ac0@gmail.com> <87lflqkznj.fsf@mail.linkov.net> <87zha3d29k.fsf@mail.linkov.net> <83a71z135p.fsf@gnu.org> Date: Mon, 08 Jun 2020 03:21:58 +0300 In-Reply-To: <83a71z135p.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 23 May 2020 11:11:46 +0300") Message-ID: <87img2z9sp.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 41200 Cc: cpitclaudel@gmail.com, 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) >> >>> + :group 'basic-faces) >> >>> + :group 'basic-faces) >> >>> >> >>> - :group 'tab-bar-faces) >> >>> - :group 'tab-line-faces) >> >> >> >> Could these faces belong to both groups? >> >> >> >> :group 'basic-faces >> >> :group 'tab-bar-faces >> > >> > Yup, but that won't work well if the face is customized before the >> > group is defined, right? Maybe the trick would be to add the group to >> > the face when tab-bar.el and tab-line.el are loaded? >> >> Actually since tab-bar.el is pre-loaded this problem exists only for >> tab-line.el. >> >> Then adding something like >> >> (nconc (get 'tab-line-faces 'custom-group) '((tab-line custom-face) ...)) >> >> to tab-line.el will add faces when tab-line.el are loaded. > > Could you guys please finalize these issues? I'd like to install > these changes on master, for which I'd need a patch that covers both > the changes in the face storage and the fix for the tab-line face. > > Actually, the problem with the tab-line face will probably need to be > fixed on emacs-27. I never used the second argument MEMBERS of 'defgroup', but it's exactly what is needed. Now the problem with the tab-line face is fixed on emacs-27 in commit 6eb18a950d. From debbugs-submit-bounces@debbugs.gnu.org Sat Jun 20 03:47:46 2020 Received: (at 41200) by debbugs.gnu.org; 20 Jun 2020 07:47:47 +0000 Received: from localhost ([127.0.0.1]:57208 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jmYE6-0005mQ-Ne for submit@debbugs.gnu.org; Sat, 20 Jun 2020 03:47:46 -0400 Received: from eggs.gnu.org ([209.51.188.92]:57632) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jmYE4-0005mB-1P for 41200@debbugs.gnu.org; Sat, 20 Jun 2020 03:47:45 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:36274) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jmYDy-0001zu-1Z; Sat, 20 Jun 2020 03:47:38 -0400 Received: from [176.228.60.248] (port=2834 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jmYDx-0000hM-GS; Sat, 20 Jun 2020 03:47:37 -0400 Date: Sat, 20 Jun 2020 10:47:29 +0300 Message-Id: <83imfmw54e.fsf@gnu.org> From: Eli Zaretskii To: Juri Linkov , =?iso-8859-1?Q?Cl=E9ment?= Pit-Claudel In-Reply-To: <87img2z9sp.fsf@mail.linkov.net> (message from Juri Linkov on Mon, 08 Jun 2020 03:21:58 +0300) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> <837dxd31cb.fsf@gnu.org> <789d786d-a07a-65c1-c0e4-433e4c18d64e@gmail.com> <835zcxgrby.fsf@gnu.org> <833681glas.fsf@gnu.org> <53252e93-085c-477f-21df-c909082dffc2@gmail.com> <87367z324f.fsf@mail.linkov.net> <3fc34671-54ba-e83d-9514-11e0906c2ac0@gmail.com> <87lflqkznj.fsf@mail.linkov.net> <87zha3d29k.fsf@mail.linkov.net> <83a71z135p.fsf@gnu.org> <87img2z9sp.fsf@mail.linkov.net> MIME-version: 1.0 Content-type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 41200 Cc: 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Juri Linkov > Cc: cpitclaudel@gmail.com, 41200@debbugs.gnu.org > Date: Mon, 08 Jun 2020 03:21:58 +0300 > > > Could you guys please finalize these issues? I'd like to install > > these changes on master, for which I'd need a patch that covers both > > the changes in the face storage and the fix for the tab-line face. > > > > Actually, the problem with the tab-line face will probably need to be > > fixed on emacs-27. > > I never used the second argument MEMBERS of 'defgroup', but it's exactly > what is needed. Now the problem with the tab-line face is fixed on emacs-27 > in commit 6eb18a950d. Thanks. Clément, would you like to rebase your patch on the current master and resubmit? I think we are ready for installing it. From debbugs-submit-bounces@debbugs.gnu.org Sat Jun 20 12:55:30 2020 Received: (at 41200) by debbugs.gnu.org; 20 Jun 2020 16:55:30 +0000 Received: from localhost ([127.0.0.1]:58668 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jmgmA-0006fK-Jx for submit@debbugs.gnu.org; Sat, 20 Jun 2020 12:55:30 -0400 Received: from mail-qk1-f175.google.com ([209.85.222.175]:41876) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jmgm6-0006f5-Nw for 41200@debbugs.gnu.org; Sat, 20 Jun 2020 12:55:28 -0400 Received: by mail-qk1-f175.google.com with SMTP id n11so11970270qkn.8 for <41200@debbugs.gnu.org>; Sat, 20 Jun 2020 09:55:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=AJLpe7snEaaOjGSCTjriOYsN4objI6krXRvFg7Ivluw=; b=orepLN4gSOK6U3pPP9HNZbX1akbhCNb615xn8BCZ3j4Wxcz0eUCx0Akeoq1I5RtIY4 Rck7icX2SC1r4fcfIkih6keLeoLZmG6D5fKRa299L/qJI6E63+fk3g2kZ9pb2RllcQ+d 7V6T1kvkti5BSc40qoAomyrJFHDNWAYVedbGn8lKuuOvm+OiYBK7Gtx6+/7SWv/NBuW1 OJgLf6YQcpstQHpE8RJSY+qgfm5QBT8+t7gYUMqnJjq1GOyg4qgarPMhVZXBWyR/vU8D 4CcmZ08nSl3cOBY8mnWv8EE2Xejxj9rF6Cxw2RWIsyNlap1p1ltUSf2JLM1XQjn91HRZ uTZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=AJLpe7snEaaOjGSCTjriOYsN4objI6krXRvFg7Ivluw=; b=j1oMO9sJZ+wQnUsHNgZfuZselORH3TKJITUzYafZZFgJ8Gc0iRcZjkGb6p46syOyNk k0JQlWEcYXS6H0JDhMo4r3gzrk2D8MYppVHm4JRJeqpdKWrcRBDClFyivlpn11yNS8yh 1C7VPaUcBFPXKcqR7BFMvuJmAWyMl6kS4x3JUfS5zO+MUnNaWaj8OuLmEx12YGJ1fCXN ZJolwr9XzUKEINCAhu+Fai4g4mVdZwb1bySotjflzJwMxE1gxb+WgW6uaJL4H7bn6mxo 7PPWOl9lWPP0+aCvZPkCGKYaZpiyT2hYqebiwCO9O15HrJLsWGADpqvrwtRvep2rSlYR z8wQ== X-Gm-Message-State: AOAM5315Uor6b5lEoZopPIy8BjiMD2VwXfvMWrzlt4oXkdozMoDQMS0H fVpXzgVUss+VSNp6NuXqT3A50eky X-Google-Smtp-Source: ABdhPJw+OI6hQZchUzIlbUn1sBJhTwRP/g0ZzlYCXQNQjs3Av6VgtVsomnxO/CRfcatqgGsc4USWWA== X-Received: by 2002:ae9:c209:: with SMTP id j9mr9095022qkg.174.1592672120873; Sat, 20 Jun 2020 09:55:20 -0700 (PDT) Received: from ?IPv6:2601:184:4180:66e7:7d16:396:5437:aae1? ([2601:184:4180:66e7:7d16:396:5437:aae1]) by smtp.googlemail.com with ESMTPSA id u6sm1721749qtk.9.2020.06.20.09.55.19 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 20 Jun 2020 09:55:20 -0700 (PDT) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined To: Eli Zaretskii , Juri Linkov References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> <837dxd31cb.fsf@gnu.org> <789d786d-a07a-65c1-c0e4-433e4c18d64e@gmail.com> <835zcxgrby.fsf@gnu.org> <833681glas.fsf@gnu.org> <53252e93-085c-477f-21df-c909082dffc2@gmail.com> <87367z324f.fsf@mail.linkov.net> <3fc34671-54ba-e83d-9514-11e0906c2ac0@gmail.com> <87lflqkznj.fsf@mail.linkov.net> <87zha3d29k.fsf@mail.linkov.net> <83a71z135p.fsf@gnu.org> <87img2z9sp.fsf@mail.linkov.net> <83imfmw54e.fsf@gnu.org> From: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= Message-ID: Date: Sat, 20 Jun 2020 12:55:18 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0 MIME-Version: 1.0 In-Reply-To: <83imfmw54e.fsf@gnu.org> Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 8bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41200 Cc: 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 20/06/2020 03.47, Eli Zaretskii wrote: >> From: Juri Linkov >> Cc: cpitclaudel@gmail.com, 41200@debbugs.gnu.org >> Date: Mon, 08 Jun 2020 03:21:58 +0300 >> >>> Could you guys please finalize these issues? I'd like to install >>> these changes on master, for which I'd need a patch that covers both >>> the changes in the face storage and the fix for the tab-line face. >>> >>> Actually, the problem with the tab-line face will probably need to be >>> fixed on emacs-27. >> >> I never used the second argument MEMBERS of 'defgroup', but it's exactly >> what is needed. Now the problem with the tab-line face is fixed on emacs-27 >> in commit 6eb18a950d. > > Thanks. > > Clément, would you like to rebase your patch on the current master and > resubmit? I think we are ready for installing it. Yes, sorry for the delay. I will try to do this today. Thanks for your patience. From debbugs-submit-bounces@debbugs.gnu.org Sat Jul 04 03:58:21 2020 Received: (at 41200) by debbugs.gnu.org; 4 Jul 2020 07:58:22 +0000 Received: from localhost ([127.0.0.1]:57996 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jrd41-0001Ag-Hb for submit@debbugs.gnu.org; Sat, 04 Jul 2020 03:58:21 -0400 Received: from eggs.gnu.org ([209.51.188.92]:34024) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jrd40-0001AU-2U for 41200@debbugs.gnu.org; Sat, 04 Jul 2020 03:58:20 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:59713) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jrd3u-0002FG-Lk; Sat, 04 Jul 2020 03:58:14 -0400 Received: from [176.228.60.248] (port=2435 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jrd3s-0006oo-OE; Sat, 04 Jul 2020 03:58:13 -0400 Date: Sat, 04 Jul 2020 10:58:15 +0300 Message-Id: <83fta7vhig.fsf@gnu.org> From: Eli Zaretskii To: =?utf-8?Q?Cl=C3=A9ment?= Pit-Claudel In-Reply-To: (message from =?utf-8?Q?Cl=C3=A9ment?= Pit-Claudel on Sat, 20 Jun 2020 12:55:18 -0400) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> <837dxd31cb.fsf@gnu.org> <789d786d-a07a-65c1-c0e4-433e4c18d64e@gmail.com> <835zcxgrby.fsf@gnu.org> <833681glas.fsf@gnu.org> <53252e93-085c-477f-21df-c909082dffc2@gmail.com> <87367z324f.fsf@mail.linkov.net> <3fc34671-54ba-e83d-9514-11e0906c2ac0@gmail.com> <87lflqkznj.fsf@mail.linkov.net> <87zha3d29k.fsf@mail.linkov.net> <83a71z135p.fsf@gnu.org> <87img2z9sp.fsf@mail.linkov.net> <83imfmw54e.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 41200 Cc: 41200@debbugs.gnu.org, juri@linkov.net X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: 41200@debbugs.gnu.org > From: Clément Pit-Claudel > Date: Sat, 20 Jun 2020 12:55:18 -0400 > > > Clément, would you like to rebase your patch on the current master and > > resubmit? I think we are ready for installing it. > > Yes, sorry for the delay. I will try to do this today. Thanks for your patience. Ping! From debbugs-submit-bounces@debbugs.gnu.org Sat Sep 12 23:31:01 2020 Received: (at 41200) by debbugs.gnu.org; 13 Sep 2020 03:31:01 +0000 Received: from localhost ([127.0.0.1]:49282 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kHIjE-00062f-J5 for submit@debbugs.gnu.org; Sat, 12 Sep 2020 23:31:01 -0400 Received: from mail-qt1-f177.google.com ([209.85.160.177]:39332) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kHI9V-00057L-8Y for 41200@debbugs.gnu.org; Sat, 12 Sep 2020 22:54:05 -0400 Received: by mail-qt1-f177.google.com with SMTP id h6so10979044qtd.6 for <41200@debbugs.gnu.org>; Sat, 12 Sep 2020 19:54:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:in-reply-to:date:message-id:mime-version :content-transfer-encoding; bh=oADi2goM4DFUHpGbVeLRAzKAdwtPzvFY2E/OfKzc/ko=; b=qQ3Wai2cN8kZW/I9D3E5LUoz2e4hJepykJJvacUVr3Bp1IF8Wz/yjvB/ddwZWR1Fqt pDTgT1Z75Cc+suNSlvlWYXCh1A3tMnPI6rlCyPur9NnOdpzXd4ZC1Hu5lj1am1U7L236 E5PE0AsRHMphQGqBJH+QEuQyYw17LhBJpMKH/9LAlP/SOR2sY9dv2ceKa3xTQxhZ9yIg 5zYTttdoh3MuvuP6rLKQN8UQ1rFkc+sx9wPclM3l45LnbDYJUd6r1F4W7E4louuk9ePi L1unjsgvFVYM+Vlp0+6C3LxsBN7t1sKNeCCwmXt0+8erv5ppPYuu7owNfcUMp9EBcpAx uFLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:in-reply-to:date:message-id :mime-version:content-transfer-encoding; bh=oADi2goM4DFUHpGbVeLRAzKAdwtPzvFY2E/OfKzc/ko=; b=pQ6w4/RnbL4/g5l7qbRvG/hyvEhEMjRnfh6Ty3xqDSkOWXfkcS/J6s36JgyNjeSe0U K20ZTmFxmN/gReym6YhltwBj2O6Yr8CeptxDGq3AAnrS7o16IIigqxT3oT32cAib2z4H NBUuFiKly3y22mBpdQwHJw6HrQAFhlE1ktdf0Rc5siS6niPxA/nH/6One7y8pVwFiBwQ dhK5tZ/ONr5XpgGTejlVKlTylLof6CMhao0xu0wIb8UAb42lBr3/VNNHJJDG/yHDeal7 dimmFBssMMa0G3vwXGnGgROMfmzSlmMv1R3GAlWgIGAKR4JalWffjQnA+RkoMHWXG6+L ObMw== X-Gm-Message-State: AOAM533vc3hd6tNZQbc1sZmRuKbIMnCrza4qZTuruG312KtoIwDR2crZ Z7BE1YM6+eNXXRXeznDdPbGMXovrCrw= X-Google-Smtp-Source: ABdhPJwKzpJGOYZtWvqyDG6Gly2rpi01T1u//yHxxUAdNBkcepCJ1XOjA4eQg4OZZrkDzvotTQU+Zw== X-Received: by 2002:ac8:3713:: with SMTP id o19mr7919435qtb.256.1599965639243; Sat, 12 Sep 2020 19:53:59 -0700 (PDT) Received: from ArchLinuvo ([2600:1700:4270:a8e0::602]) by smtp.gmail.com with ESMTPSA id t1sm9669391qtj.12.2020.09.12.19.53.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 12 Sep 2020 19:53:58 -0700 (PDT) From: Benson Chu To: Eli Zaretskii Subject: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined In-Reply-To: <83fta7vhig.fsf@gnu.org> Date: Sat, 12 Sep 2020 21:53:22 -0500 Message-ID: <87blia75gd.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.3 (/) X-Debbugs-Envelope-To: 41200 X-Mailman-Approved-At: Sat, 12 Sep 2020 23:31:00 -0400 Cc: 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.7 (/) Hey all, I've been using this patch for 3 months now, and it makes my Emacs much snappier! However, every time I want to update master, I have to rebase this patch up. Is there anything preventing this changeset from landing on master? Is there anything I can do to help? Also, I think there's a bug in the latest patch on line 1308 of elisp-mode.el. The arguments for the call to remhash are reversed. Thanks! Benson Eli Zaretskii writes: >> Cc: 41200@debbugs.gnu.org >> From: Cl=C3=A9ment Pit-Claudel >> Date: Sat, 20 Jun 2020 12:55:18 -0400 >>=20 >> > Cl=C3=A9ment, would you like to rebase your patch on the current maste= r and >> > resubmit? I think we are ready for installing it. >>=20 >> Yes, sorry for the delay. I will try to do this today. Thanks for your= patience. > > Ping! From debbugs-submit-bounces@debbugs.gnu.org Sun Sep 13 09:28:50 2020 Received: (at control) by debbugs.gnu.org; 13 Sep 2020 13:28:50 +0000 Received: from localhost ([127.0.0.1]:49728 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kHS3l-0004Ar-Rj for submit@debbugs.gnu.org; Sun, 13 Sep 2020 09:28:50 -0400 Received: from quimby.gnus.org ([95.216.78.240]:44828) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kHS3j-0004Af-TM for control@debbugs.gnu.org; Sun, 13 Sep 2020 09:28:49 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Subject:From:To:Message-Id:Date:Sender:Reply-To:Cc: MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=74OQy8gDEVBhDS+0XaesFHdhSMbfQNWMWoGg7PvijXs=; b=cEjM89ZFKj98iC971j3mW4M3GO uPDpc4JLViULE+GZcLJngtqcSfZ5AeHCKCw9XZBWqjA35IQoBrxWNTmMiwoxFbQ43By32Io6zhvas eSwmxbURYImtp0VEHlfWZSLzSthAGL4Lg/m0vg6lvZ6aee6MJ7hv13lAMUeR0LDSBwDk=; Received: from cm-84.212.202.86.getinternet.no ([84.212.202.86] helo=xo) by quimby with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kHS3b-0003LW-T4 for control@debbugs.gnu.org; Sun, 13 Sep 2020 15:28:42 +0200 Date: Sun, 13 Sep 2020 15:28:38 +0200 Message-Id: <87ft7lyfeh.fsf@gnus.org> To: control@debbugs.gnu.org From: Lars Ingebrigtsen Subject: control message for bug #41200 X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: tags 41200 + patch quit Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: control X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) tags 41200 + patch quit From debbugs-submit-bounces@debbugs.gnu.org Tue Apr 06 06:24:57 2021 Received: (at 41200) by debbugs.gnu.org; 6 Apr 2021 10:24:57 +0000 Received: from localhost ([127.0.0.1]:39276 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lTitC-0004VR-QP for submit@debbugs.gnu.org; Tue, 06 Apr 2021 06:24:57 -0400 Received: from emeralfel.rulingia.com.au ([52.64.96.81]:51935 helo=fort.rulingia.com.au) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lTfJE-0004jb-7v for 41200@debbugs.gnu.org; Tue, 06 Apr 2021 02:35:36 -0400 Received: from alyzon.rulingia.com.au (ppp59-167-172-93.static.internode.on.net [59.167.172.93]) by fort.rulingia.com.au (Postfix) with ESMTPSA id 20E61211138; Tue, 6 Apr 2021 16:35:29 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rulingia.com.au; s=mail; t=1617690929; bh=2hz8bbh6kY7i8/OE9B2lRtb9HjYf53TgC5ry31Lhj1o=; h=Date:From:To:Cc:Subject; b=kqIR/CVx9yOFZdnvtZvxwubzLgiUEZ/i77gA+/QvpPBEo8M5QrIvF8yQhjvY/K0rd Rr08JGwHzR3oAwh3spExb9fwA3euCY/j2nTW9W3P5+NUOYaW4S1tBv2Zcl9Q3rHEnw kMcCaaxDZ1vU5Er0S5OJJfyr/wAarq/oH7iIKCyY= Received: from lisbon.rulingia.com.au. (lisbon.rulingia.com.au [192.168.5.76]) by alyzon.rulingia.com.au (Postfix) with ESMTPA id 0276789688; Tue, 6 Apr 2021 16:35:29 +1000 (AEST) Date: Tue, 06 Apr 2021 16:35:28 +1000 Message-ID: <87tuojhqdr.wl-jashank@rulingia.com.au> From: Jashank Jeremy To: Emacs bug41200 <41200@debbugs.gnu.org> Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM-LB/1.14.9 (=?ISO-8859-4?Q?Goj=F2?=) APEL-LB/10.8 EasyPG/1.0.0 Emacs/28.0.50 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: multipart/signed; boundary="pgp-sign-Multipart_Tue_Apr__6_16:35:26_2021-1"; micalg=pgp-sha256; protocol="application/pgp-signature" Content-Transfer-Encoding: 7bit X-Spam-Score: 2.0 (++) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Hello, I have updated this patch to make it compile and behave on Emacs master at 1d93540371aadec8f877bd781267d38d411c40a0 (current a few hours ago). The updated patch is attached. I queried Clément, who has ok'd my shepherding this patch along. Content analysis details: (2.0 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 2.0 PDS_OTHER_BAD_TLD Untrustworthy TLDs [URI: jashankj.space (space)] X-Debbugs-Envelope-To: 41200 X-Mailman-Approved-At: Tue, 06 Apr 2021 06:24:53 -0400 Cc: =?ISO-8859-1?Q?Cl=E9ment?= Pit-Claudel X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.0 (+) --pgp-sign-Multipart_Tue_Apr__6_16:35:26_2021-1 Content-Type: multipart/mixed; boundary="Multipart_Tue_Apr__6_16:35:26_2021-1" --Multipart_Tue_Apr__6_16:35:26_2021-1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hello, I have updated this patch to make it compile and behave on Emacs master at 1d93540371aadec8f877bd781267d38d411c40a0 (current a few hours ago). The updated patch is attached. I queried Cl=E9ment, who has ok'd my shepherding this patch along. CPU profile data I've gathered suggests this change has almost entirely stamped out the face-related hot-spots I'd seen previously. Hooray! Cheers, ~jashank --=20 Jashank Jeremy WWW jashankj.space pgp FE4D6AA8 3736591C FAD30D97 DCE96CF5 8D931E04 --Multipart_Tue_Apr__6_16:35:26_2021-1 Content-Type: text/x-patch; type=patch; name="0001-Store-frame-faces-in-hash-tables-instead-of-alists-V9.patch"; charset=UTF-8 Content-Disposition: attachment; filename="0001-Store-frame-faces-in-hash-tables-instead-of-alists-V9.patch" Content-Transfer-Encoding: base64 RnJvbSA3OTU4NmIzZWExMTAwYTBmOGNhNTBiZThiNGRkNjI2ODQ1NTg0MDhlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/Q2w9QzM9QTltZW50PTIwUGl0LUNsYXVkZWw/ PSA8Y2xlbWVudC5waXRjbGF1ZGVsQGxpdmUuY29tPgpEYXRlOiBUdWUsIDEyIE1heSAyMDIwIDIx OjQ4OjMyIC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gU3RvcmUgZnJhbWUgZmFjZXMgaW4gaGFzaCB0 YWJsZXMgaW5zdGVhZCBvZiBhbGlzdHMKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0 ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQK Ciogc3JjL2ZyYW1lLmggKHN0cnVjdCBmcmFtZSk6IEFkZCBmYWNlX2hhc2hfdGFibGUsIHJlbW92 ZSBmYWNlX2FsaXN0LgooZnNldF9mYWNlX2hhc2hfdGFibGUpOiBOZXcgZnVuY3Rpb24uCihmc2V0 X2ZhY2VfYWxpc3QpOiBSZW1vdmUuCiogc3JjL2ZyYW1lLmMgKG1ha2VfZnJhbWUpOiBJbml0aWFs aXplIGYtPmZhY2VfaGFzaF90YWJsZS4KKEZtYWtlX3Rlcm1pbmFsX2ZyYW1lKTogVXBkYXRlIHRv IHdvcmsgd2l0aCBoYXNoIHRhYmxlcyBpbnN0ZWFkIG9mCmFsaXN0cy4KKiBzcmMveGZhY2VzLmMg KGxmYWNlX2Zyb21fZmFjZV9uYW1lX25vX3Jlc29sdmUpOgooRmludGVybmFsX21ha2VfbGlzcF9m YWNlKToKKHVwZGF0ZV9mYWNlX2Zyb21fZnJhbWVfcGFyYW1ldGVyKTogVXBkYXRlIHRvIHdvcmsg d2l0aCBoYXNoIHRhYmxlcwppbnN0ZWFkIG9mIGFsaXN0cy4KKEZmcmFtZV9mYWNlX2hhc2hfdGFi bGUpOiBOZXcgZnVuY3Rpb24uCihGZnJhbWVfZmFjZV9hbGlzdCk6IE1vdmUgdG8gZmFjZXMuZWwg YXMgZnJhbWUtZmFjZS1hbGlzdC4KKHN5bXNfb2ZfeGZhY2VzKTogQWRkIGZyYW1lX2ZhY2VfaGFz aF90YWJsZS4KCiogbGlzcC9wcm9nbW9kZXMvZWxpc3AtbW9kZS5lbCAoZWxpc3AtLWV2YWwtZGVm dW4tMSk6CiogbGlzcC9mcmFtZS5lbCAoZnJhbWUtc2V0LWJhY2tncm91bmQtbW9kZSk6IFVwZGF0 ZSB0byB3b3JrIHdpdGggaGFzaAp0YWJsZXMgaW5zdGVhZCBvZiBhbGlzdHMuCiogbGlzcC9mYWNl cy5lbCAoZmFjZS1uZXctZnJhbWUtZGVmYXVsdHMpOiBNYXJrIG9ic29sZXRlLgooZmFjZS1saXN0 KTogVXBkYXRlIHRvIHVzZSBmYWNlLS1uZXctZnJhbWUtZGVmYXVsdHMuCihmcmFtZS1mYWNlLWFs aXN0KTogTW92ZWQgaGVyZSBmcm9tIHNyYy94ZmFjZXMuYy4KKHgtY3JlYXRlLWZyYW1lLXdpdGgt ZmFjZXMpOiBVcGRhdGUgdG8gaGFuZGxlIHN1YnRsZSBzZW1hbnRpYyBjaGFuZ2UKdG8gaG93IGZy YW1lIGZhY2VzIHByb3BhZ2F0ZSwgd2hpY2ggb3RoZXJ3aXNlIGJyZWFrcyBmcmFtZSBjcmVhdGlv bgp3aXRoIHJldmVyc2UgdmlkZW8gZW5hYmxlZC4KCjs7IFBhdGNoIGhpc3Rvcnk6Cjs7Cjs7IFYx ICgyMDIwLTA1LTEyIDIyOjQxOjI0IC0wNDAwKSwgKEJ1ZyM0MTIwMCkgbWVzc2FnZSAyOS4KOzsg ICBBdXRob3JlZC1ieTogQ2zDqW1lbnQgUGl0LUNsYXVkZWwgPGNsZW1lbnQucGl0Y2xhdWRlbCA8 YXQ+IGxpdmUuY29tPgo7Owo7OyBWMiAoMjAyMC0wNS0xMyAxMToxMzoyNyAtMDQwMCksIChCdWcj NDEyMDApIG1lc3NhZ2UgMzguCjs7ICAgRml4ZXMgY29tcGlsYXRpb24gZXJyb3IuCjs7ICAgUmVw b3J0ZWQtYnk6IG1hcnRpbiBydWRhbGljcyA8cnVkYWxpY3MgPGF0PiBnbXguYXQ+Cjs7ICAgQXV0 aG9yZWQtYnk6IENsw6ltZW50IFBpdC1DbGF1ZGVsIDxjbGVtZW50LnBpdGNsYXVkZWwgPGF0PiBs aXZlLmNvbT4KOzsKOzsgVjMgKDIwMjAtMDUtMTUgMTA6NTk6MzYgLTA0MDApLCAoQnVnIzQxMjAw KSBtZXNzYWdlIDU1Lgo7OyAgIEFtZW5kbWVudHMgdG8gcmVzb2x2ZSBpc3N1ZXMgcmFpc2VkIG9y IHJlc29sdmVkIGJ5IEVsaVouCjs7ICAgKiBDb2RlLXN0eWxlIGNsZWFudXAuCjs7ICAgKiBSZW5h bWUgYGZhY2VfaGFzaCcgdG8gYGZhY2VfbWFwJy4KOzsgICBTdWdnZXN0ZWQtYnk6IEVsaSBaYXJl dHNraWkgPGVsaXogPGF0PiBnbnUub3JnPgo7OyAgIEF1dGhvcmVkLWJ5OiBDbMOpbWVudCBQaXQt Q2xhdWRlbCA8Y2xlbWVudC5waXRjbGF1ZGVsIDxhdD4gbGl2ZS5jb20+Cjs7Cjs7IFY0ICgyMDIw LTA1LTE1IDE0OjUwOjE3IC0wNDAwKSwgKEJ1ZyM0MTIwMCkgbWVzc2FnZSA3MC4KOzsgICAqIFNl dHRsZSBvbiBuYW1lIGBmYWNlX2hhc2hfdGFibGUnLgo7OyAgICogUmVuYW1lIGBmYWNlLW5ldy1m cmFtZS1kZWZhdWx0cycgdG8gYGZhY2UtLW5ldy1mcmFtZS1kZWZhdWx0cycuCjs7ICAgKiBBbGxv dyBtdWx0aXBsZSB2YXJpYW50cyBvZiBhIGZhY2UgdG8gZXhpc3QuCjs7ICAgU3VnZ2VzdGVkLWJ5 OiBFbGkgWmFyZXRza2lpIDxlbGl6IDxhdD4gZ251Lm9yZz4KOzsgICBBdXRob3JlZC1ieTogQ2zD qW1lbnQgUGl0LUNsYXVkZWwgPGNsZW1lbnQucGl0Y2xhdWRlbCA8YXQ+IGxpdmUuY29tPgo7Owo7 OyBWNSAoMjAyMC0wNS0xNSAxNDo1MDoxNyAtMDQwMCksIChCdWcjNDEyMDApIG1lc3NhZ2UgODUu Cjs7ICAgTG93ZXIgdGhlIHNpemUgb2YgYGZhY2UtLW5ldy1mcmFtZS1kZWZhdWx0cycuCjs7ICAg U3VnZ2VzdGVkLWJ5OiBFbGkgWmFyZXRza2lpIDxlbGl6IDxhdD4gZ251Lm9yZz4KOzsgICBBdXRo b3JlZC1ieTogQ2zDqW1lbnQgUGl0LUNsYXVkZWwgPGNsZW1lbnQucGl0Y2xhdWRlbCA8YXQ+IGxp dmUuY29tPgo7Owo7OyBWNiAoMjAyMS0wNC0wNSAxNzoxMDo1NSArMTAwMCkuCjs7ICAgUmViYXNl IG9udG8gbWFzdGVyOyBtb3ZlIGh1bmtzIGFyb3VuZC4KOzsgICAqIENoYW5nZXMgdG8gYGVkZWJ1 Zy5lbCcgZHJvcHBlZC4KOzsgICBBdXRob3JlZC1ieTogSmFzaGFuayBKZXJlbXkgPGphc2hhbmsg PGF0PiBydWxpbmdpYS5jb20uYXU+Cjs7Cjs7IFY3ICgyMDIxLTA0LTA2IDEyOjMxOjU1ICsxMDAw KS4KOzsgICBGaXggYGZyYW1lLWZhY2UtYWxpc3QnIHRvIGNvcGUgd2l0aCBjaGFuZ2VzIGZyb20g VjQuCjs7ICAgQXV0aG9yZWQtYnk6IEphc2hhbmsgSmVyZW15IDxqYXNoYW5rIDxhdD4gcnVsaW5n aWEuY29tLmF1Pgo7Owo7OyBWOCAoMjAyMS0wNC0wNiAxMzoxMzozMyArMTAwMCkuCjs7ICAgVGhl cmUgaXMgYSBzdWJ0bGUgY2hhbmdlIHRvIGZhY2UgcHJvcGFnYXRpb24gc2VtYW50aWNzIGF0IGZh Y2UKOzsgICBjcmVhdGlvbiB0aW1lLCB3aGljaCBzdG9wcyBmYWNlIGZyYW1lIGNyZWF0aW9uIHdv cmtpbmcgYXQgYWxsCjs7ICAgb25seSBpZiByZXZlcnNlIHZpZGVvIGlzIGVuYWJsZWQuCjs7ICAg QXV0aG9yZWQtYnk6IEphc2hhbmsgSmVyZW15IDxqYXNoYW5rIDxhdD4gcnVsaW5naWEuY29tLmF1 Pgo7Owo7OyBWOSAoMjAyMS0wNC0wNiAxNjoxNzo1MyArMTAwMCkuCjs7ICAgQ29ycmVjdCBhcmd1 bWVudCBvcmRlciBvZiBgcmVtaGFzaCcgaW4gYGVsaXNwLW1vZGUuZWwnLgo7OyAgIFJlcG9ydGVk LWJ5OiBCZW5zb24gQ2h1IDxiZW5zb25jaHU0NTcgPGF0PiBnbWFpbC5jb20+Cjs7ICAgQXV0aG9y ZWQtYnk6IEphc2hhbmsgSmVyZW15IDxqYXNoYW5rIDxhdD4gcnVsaW5naWEuY29tLmF1PgotLS0K IGxpc3AvY3VzdG9tLmVsICAgICAgICAgICAgICAgfCAgMiArLQogbGlzcC9mYWNlcy5lbCAgICAg ICAgICAgICAgICB8IDI3ICsrKysrKysrKystLQogbGlzcC9mcmFtZS5lbCAgICAgICAgICAgICAg ICB8ICAyICstCiBsaXNwL3Byb2dtb2Rlcy9lbGlzcC1tb2RlLmVsIHwgIDMgKy0KIHNyYy9mcmFt ZS5jICAgICAgICAgICAgICAgICAgfCAyMCArKysrKystLS0KIHNyYy9mcmFtZS5oICAgICAgICAg ICAgICAgICAgfCAgOCArKy0tCiBzcmMveGZhY2VzLmMgICAgICAgICAgICAgICAgIHwgODMgKysr KysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCiA3IGZpbGVzIGNoYW5nZWQsIDg2IGlu c2VydGlvbnMoKyksIDU5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpc3AvY3VzdG9tLmVs IGIvbGlzcC9jdXN0b20uZWwKaW5kZXggODVlNWQ2NWZmYi4uNWIwNzFlZjMxMSAxMDA2NDQKLS0t IGEvbGlzcC9jdXN0b20uZWwKKysrIGIvbGlzcC9jdXN0b20uZWwKQEAgLTkwNiw3ICs5MDYsNyBA QCBjdXN0b20tcHVzaC10aGVtZQogCSAgOzsgdGhlIHZhbHVlIHRvIGEgZmFrZSB0aGVtZSwgYGNo YW5nZWQnLiAgSWYgdGhlIHRoZW1lIGlzCiAJICA7OyBsYXRlciBkaXNhYmxlZCwgd2UgdXNlIHRo aXMgdG8gYnJpbmcgYmFjayB0aGUgb2xkIHZhbHVlLgogCSAgOzsKLQkgIDs7IEZvciBmYWNlcywg d2UganVzdCB1c2UgYGZhY2UtbmV3LWZyYW1lLWRlZmF1bHRzJyB0bworCSAgOzsgRm9yIGZhY2Vz LCB3ZSBqdXN0IHVzZSBgZmFjZS0tbmV3LWZyYW1lLWRlZmF1bHRzJyB0bwogCSAgOzsgcmVjb21w dXRlIHdoZW4gdGhlIHRoZW1lIGlzIGRpc2FibGVkLgogCSAgKHdoZW4gKGFuZCAoZXEgcHJvcCAn dGhlbWUtdmFsdWUpCiAJCSAgICAgKGJvdW5kcCBzeW1ib2wpKQpkaWZmIC0tZ2l0IGEvbGlzcC9m YWNlcy5lbCBiL2xpc3AvZmFjZXMuZWwKaW5kZXggNDJmNGNkZGZiMS4uMjEyN2I5MGM4NiAxMDA2 NDQKLS0tIGEvbGlzcC9mYWNlcy5lbAorKysgYi9saXNwL2ZhY2VzLmVsCkBAIC0xNzYsMTAgKzE3 NiwyOSBAQCBmYWNlLWZvbnQtcmVnaXN0cnktYWx0ZXJuYXRpdmVzCiA7OzsgQ3JlYXRpb24sIGNv cHlpbmcuCiA7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKIAorKG1ha2Utb2Jzb2xldGUtdmFyaWFibGUKKyAnZmFj ZS1uZXctZnJhbWUtZGVmYXVsdHMKKyAidXNlIGBmYWNlLS1uZXctZnJhbWUtZGVmYXVsdHMnIG9y IGBmYWNlLWFsaXN0JyBpbnN0ZWFkLiIKKyAiMjguMSIpCisKKyhkZWZ1biBmcmFtZS1mYWNlLWFs aXN0ICgmb3B0aW9uYWwgZnJhbWUpCisgICJSZXR1cm4gYW4gYWxpc3Qgb2YgZnJhbWUtbG9jYWwg ZmFjZXMgZGVmaW5lZCBvbiBGUkFNRS4KK1RoaXMgYWxpc3QgaXMgYSBjb3B5IG9mIHRoZSBjb250 ZW50cyBvZiBgZnJhbWUtLWZhY2UtaGFzaC10YWJsZScuCitGb3IgaW50ZXJuYWwgdXNlIG9ubHku IgorICAoZGVjbGFyZSAob2Jzb2xldGUgZnJhbWUtLWZhY2UtaGFzaC10YWJsZSAiMjguMSIpKQor ICAobGV0ICgoZmFjZXMpKQorICAgIChtYXBoYXNoIChsYW1iZGEgKGZhY2Ugc3BlYykKKyAgICAg ICAgICAgICAgIChsZXQgKChmYWNlLWlkICAoY2FyIChnZXRoYXNoIGZhY2UgZmFjZS0tbmV3LWZy YW1lLWRlZmF1bHRzKSkpKQorICAgICAgICAgICAgICAgICAocHVzaCBgKCxmYWNlLWlkICxmYWNl IC4gLHNwZWMpIGZhY2VzKSkpCisgICAgICAgICAgICAgKGZyYW1lLS1mYWNlLWhhc2gtdGFibGUg ZnJhbWUpKQorICAgIChtYXBjYXIgIydjZHIgKHNvcnQgZmFjZXMgKGxhbWJkYSAoZjEgZjIpICg8 IChjYXIgZjEpIChjYXIgZjIpKSkpKSkpCiAKIChkZWZ1biBmYWNlLWxpc3QgKCkKICAgIlJldHVy biBhIGxpc3Qgb2YgYWxsIGRlZmluZWQgZmFjZXMuIgotICAobWFwY2FyICMnY2FyIGZhY2UtbmV3 LWZyYW1lLWRlZmF1bHRzKSkKKyAgKGxldCAoKGZhY2VzKSkKKyAgICAobWFwaGFzaCAobGFtYmRh IChmYWNlIHNwZWMpIChwdXNoIGAoLChjYXIgc3BlYykgLiAsZmFjZSkgZmFjZXMpKQorICAgICAg ICAgICAgIGZhY2UtLW5ldy1mcmFtZS1kZWZhdWx0cykKKyAgICAobWFwY2FyICMnY2RyIChzb3J0 IGZhY2VzIChsYW1iZGEgKGYxIGYyKSAoPCAoY2FyIGYxKSAoY2FyIGYyKSkpKSkpKQogCiAoZGVm dW4gbWFrZS1mYWNlIChmYWNlKQogICAiRGVmaW5lIGEgbmV3IGZhY2Ugd2l0aCBuYW1lIEZBQ0Us IGEgc3ltYm9sLgpAQCAtMjExNSw5ICsyMTM0LDkgQEAgeC1jcmVhdGUtZnJhbWUtd2l0aC1mYWNl cwogICAgICh1bndpbmQtcHJvdGVjdAogCShwcm9nbgogCSAgKHgtc2V0dXAtZnVuY3Rpb24ta2V5 cyBmcmFtZSkKKwkgIChmYWNlLXNldC1hZnRlci1mcmFtZS1kZWZhdWx0IGZyYW1lIHBhcmFtZXRl cnMpCiAJICAoeC1oYW5kbGUtcmV2ZXJzZS12aWRlbyBmcmFtZSBwYXJhbWV0ZXJzKQogCSAgKGZy YW1lLXNldC1iYWNrZ3JvdW5kLW1vZGUgZnJhbWUgdCkKLQkgIChmYWNlLXNldC1hZnRlci1mcmFt ZS1kZWZhdWx0IGZyYW1lIHBhcmFtZXRlcnMpCiAJICAoaWYgKG51bGwgdmlzaWJpbGl0eS1zcGVj KQogCSAgICAgIChtYWtlLWZyYW1lLXZpc2libGUgZnJhbWUpCiAJICAgIChtb2RpZnktZnJhbWUt cGFyYW1ldGVycyBmcmFtZSAobGlzdCB2aXNpYmlsaXR5LXNwZWMpKSkKQEAgLTIxMjksNyArMjE0 OCw3IEBAIHgtY3JlYXRlLWZyYW1lLXdpdGgtZmFjZXMKIChkZWZ1biBmYWNlLXNldC1hZnRlci1m cmFtZS1kZWZhdWx0IChmcmFtZSAmb3B0aW9uYWwgcGFyYW1ldGVycykKICAgIkluaXRpYWxpemUg dGhlIGZyYW1lLWxvY2FsIGZhY2VzIG9mIEZSQU1FLgogQ2FsY3VsYXRlIHRoZSBmYWNlIGRlZmlu aXRpb25zIHVzaW5nIHRoZSBmYWNlIHNwZWNzLCBjdXN0b20gdGhlbWUKLXNldHRpbmdzLCBYIHJl c291cmNlcywgYW5kIGBmYWNlLW5ldy1mcmFtZS1kZWZhdWx0cycuCitzZXR0aW5ncywgWCByZXNv dXJjZXMsIGFuZCBgZmFjZS0tbmV3LWZyYW1lLWRlZmF1bHRzJy4KIEZpbmFsbHksIGFwcGx5IGFu eSByZWxldmFudCBmYWNlIGF0dHJpYnV0ZXMgZm91bmQgYW1vbmdzdCB0aGUKIGZyYW1lIHBhcmFt ZXRlcnMgaW4gUEFSQU1FVEVSUy4iCiAgIDs7IFRoZSBgcmV2ZXJzZScgaXMgc28gdGhhdCBgZGVm YXVsdCcgZ29lcyBmaXJzdC4KQEAgLTIxMzgsNyArMjE1Nyw3IEBAIGZhY2Utc2V0LWFmdGVyLWZy YW1lLWRlZmF1bHQKIAkocHJvZ24KIAkgIDs7IEluaXRpYWxpemUgZmFjZXMgZnJvbSBmYWNlIHNw ZWMgYW5kIGN1c3RvbSB0aGVtZS4KIAkgIChmYWNlLXNwZWMtcmVjYWxjIGZhY2UgZnJhbWUpCi0J ICA7OyBBcHBseSBhdHRyaWJ1dGVzIHNwZWNpZmllZCBieSBmYWNlLW5ldy1mcmFtZS1kZWZhdWx0 cworCSAgOzsgQXBwbHkgYXR0cmlidXRlcyBzcGVjaWZpZWQgYnkgZmFjZS0tbmV3LWZyYW1lLWRl ZmF1bHRzCiAJICAoaW50ZXJuYWwtbWVyZ2UtaW4tZ2xvYmFsLWZhY2UgZmFjZSBmcmFtZSkpCiAg ICAgICA7OyBEb24ndCBsZXQgaW52YWxpZCBzcGVjcyBwcmV2ZW50IGZyYW1lIGNyZWF0aW9uLgog ICAgICAgKGVycm9yIG5pbCkpKQpkaWZmIC0tZ2l0IGEvbGlzcC9mcmFtZS5lbCBiL2xpc3AvZnJh bWUuZWwKaW5kZXggMmI2ZTRhNjBiOC4uMGQ3OGUyZmIzOSAxMDA2NDQKLS0tIGEvbGlzcC9mcmFt ZS5lbAorKysgYi9saXNwL2ZyYW1lLmVsCkBAIC0xMjQ3LDcgKzEyNDcsNyBAQCBmcmFtZS1zZXQt YmFja2dyb3VuZC1tb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgZHVyaW5nIHN0YXJ0 dXAgd2l0aCAtcnYgb24gdGhlIGNvbW1hbmQKICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBs aW5lIGZvciB0aGUgaW5pdGlhbCBmcmFtZSwgYmVjYXVzZSBmcmFtZXMKICAgICAgICAgICAgICAg ICAgICAgICAgICA7OyBhcmUgbm90IHJlY29yZGVkIGluIHRoZSBwZHVtcCBmaWxlLgotICAgICAg ICAgICAgICAgICAgICAgICAgIChhc3NxIGZhY2UgKGZyYW1lLWZhY2UtYWxpc3QgZnJhbWUpKQor ICAgICAgICAgICAgICAgICAgICAgICAgIChnZXRoYXNoIGZhY2UgKGZyYW1lLS1mYWNlLWhhc2gt dGFibGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgIChmYWNlLXNwZWMtbWF0Y2gtcCBmYWNl CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmYWNlLXVzZXIt ZGVmYXVsdC1zcGVjIGZhY2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZyYW1lKSkpCmRpZmYgLS1naXQgYS9saXNwL3Byb2dtb2Rlcy9lbGlzcC1tb2RlLmVs IGIvbGlzcC9wcm9nbW9kZXMvZWxpc3AtbW9kZS5lbAppbmRleCA4YWRlNzE4NjQwLi5hYTU4MDFh N2NhIDEwMDY0NAotLS0gYS9saXNwL3Byb2dtb2Rlcy9lbGlzcC1tb2RlLmVsCisrKyBiL2xpc3Av cHJvZ21vZGVzL2VsaXNwLW1vZGUuZWwKQEAgLTEzMDksOCArMTMwOSw3IEBAIGVsaXNwLS1ldmFs LWRlZnVuLTEKIAkoKGVxIChjYXIgZm9ybSkgJ2N1c3RvbS1kZWNsYXJlLWZhY2UpCiAJIDs7IFJl c2V0IHRoZSBmYWNlLgogCSAobGV0ICgoZmFjZS1zeW1ib2wgKGV2YWwgKG50aCAxIGZvcm0pIGxl eGljYWwtYmluZGluZykpKQotCSAgIChzZXRxIGZhY2UtbmV3LWZyYW1lLWRlZmF1bHRzCi0JCSAo YXNzcS1kZWxldGUtYWxsIGZhY2Utc3ltYm9sIGZhY2UtbmV3LWZyYW1lLWRlZmF1bHRzKSkKKwkg ICAocmVtaGFzaCBmYWNlLXN5bWJvbCBmYWNlLS1uZXctZnJhbWUtZGVmYXVsdHMpCiAJICAgKHB1 dCBmYWNlLXN5bWJvbCAnZmFjZS1kZWZmYWNlLXNwZWMgbmlsKQogCSAgIChwdXQgZmFjZS1zeW1i b2wgJ2ZhY2Utb3ZlcnJpZGUtc3BlYyBuaWwpKQogCSBmb3JtKQpkaWZmIC0tZ2l0IGEvc3JjL2Zy YW1lLmMgYi9zcmMvZnJhbWUuYwppbmRleCBiYmRjM2I1NTk5Li5jOGYzNDFiODI5IDEwMDY0NAot LS0gYS9zcmMvZnJhbWUuYworKysgYi9zcmMvZnJhbWUuYwpAQCAtOTQ2LDYgKzk0NiwxMCBAQCBt YWtlX2ZyYW1lIChib29sIG1pbmlfcCkKICAgcnctPnRvdGFsX2xpbmVzID0gRlJBTUVfTElORVMg KGYpIC0gKG1pbmlfcCA/IDEgOiAwKTsKICAgcnctPnBpeGVsX2hlaWdodCA9IHJ3LT50b3RhbF9s aW5lcyAqIEZSQU1FX0xJTkVfSEVJR0hUIChmKTsKIAorICBmc2V0X2ZhY2VfaGFzaF90YWJsZQor ICAgIChmLCBtYWtlX2hhc2hfdGFibGUgKGhhc2h0ZXN0X2VxLCBERUZBVUxUX0hBU0hfU0laRSwg REVGQVVMVF9SRUhBU0hfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX1JF SEFTSF9USFJFU0hPTEQsIFFuaWwsIGZhbHNlKSk7CisKICAgaWYgKG1pbmlfcCkKICAgICB7CiAg ICAgICBtdy0+dG9wX2xpbmUgPSBydy0+dG90YWxfbGluZXM7CkBAIC0xMjU0LDcgKzEyNTgsNyBA QCBERUZVTiAoIm1ha2UtdGVybWluYWwtZnJhbWUiLCBGbWFrZV90ZXJtaW5hbF9mcmFtZSwgU21h a2VfdGVybWluYWxfZnJhbWUsCiB7CiAgIHN0cnVjdCBmcmFtZSAqZjsKICAgc3RydWN0IHRlcm1p bmFsICp0ID0gTlVMTDsKLSAgTGlzcF9PYmplY3QgZnJhbWUsIHRlbTsKKyAgTGlzcF9PYmplY3Qg ZnJhbWU7CiAgIHN0cnVjdCBmcmFtZSAqc2YgPSBTRUxFQ1RFRF9GUkFNRSAoKTsKIAogI2lmZGVm IE1TRE9TCkBAIC0xMzM2LDE0ICsxMzQwLDE2IEBAIERFRlVOICgibWFrZS10ZXJtaW5hbC1mcmFt ZSIsIEZtYWtlX3Rlcm1pbmFsX2ZyYW1lLCBTbWFrZV90ZXJtaW5hbF9mcmFtZSwKICAgc3RvcmVf aW5fYWxpc3QgKCZwYXJtcywgUW1pbmlidWZmZXIsIFF0KTsKICAgRm1vZGlmeV9mcmFtZV9wYXJh bWV0ZXJzIChmcmFtZSwgcGFybXMpOwogCi0gIC8qIE1ha2UgdGhlIGZyYW1lIGZhY2UgYWxpc3Qg YmUgZnJhbWUtc3BlY2lmaWMsIHNvIHRoYXQgZWFjaAorICAvKiBNYWtlIHRoZSBmcmFtZSBmYWNl IGhhc2ggYmUgZnJhbWUtc3BlY2lmaWMsIHNvIHRoYXQgZWFjaAogICAgICBmcmFtZSBjb3VsZCBj aGFuZ2UgaXRzIGZhY2UgZGVmaW5pdGlvbnMgaW5kZXBlbmRlbnRseS4gICovCi0gIGZzZXRfZmFj ZV9hbGlzdCAoZiwgRmNvcHlfYWxpc3QgKHNmLT5mYWNlX2FsaXN0KSk7Ci0gIC8qIFNpbXBsZSBG Y29weV9hbGlzdCBpc24ndCBlbm91Z2gsIGJlY2F1c2Ugd2UgbmVlZCB0aGUgY29udGVudHMgb2YK LSAgICAgdGhlIHZlY3RvcnMgd2hpY2ggYXJlIHRoZSBDRFJzIG9mIGFzc29jaWF0aW9ucyBpbiBm YWNlX2FsaXN0IHRvCisgIGZzZXRfZmFjZV9oYXNoX3RhYmxlIChmLCBGY29weV9oYXNoX3RhYmxl IChzZi0+ZmFjZV9oYXNoX3RhYmxlKSk7CisgIC8qIFNpbXBsZSBjb3B5X2hhc2hfdGFibGUgaXNu J3QgZW5vdWdoLCBiZWNhdXNlIHdlIG5lZWQgdGhlIGNvbnRlbnRzIG9mCisgICAgIHRoZSB2ZWN0 b3JzIHdoaWNoIGFyZSB0aGUgdmFsdWVzIGluIGZhY2VfaGFzaF90YWJsZSB0bwogICAgICBiZSBj b3BpZWQgYXMgd2VsbC4gICovCi0gIGZvciAodGVtID0gZi0+ZmFjZV9hbGlzdDsgQ09OU1AgKHRl bSk7IHRlbSA9IFhDRFIgKHRlbSkpCi0gICAgWFNFVENEUiAoWENBUiAodGVtKSwgRmNvcHlfc2Vx dWVuY2UgKFhDRFIgKFhDQVIgKHRlbSkpKSk7CisgIHB0cmRpZmZfdCBpZHggPSAwOworICBzdHJ1 Y3QgTGlzcF9IYXNoX1RhYmxlICp0YWJsZSA9IFhIQVNIX1RBQkxFIChmLT5mYWNlX2hhc2hfdGFi bGUpOworICBmb3IgKGlkeCA9IDA7IGlkeCA8IHRhYmxlLT5jb3VudDsgKytpZHgpCisgICAgc2V0 X2hhc2hfdmFsdWVfc2xvdCAodGFibGUsIGlkeCwgRmNvcHlfc2VxdWVuY2UgKEhBU0hfVkFMVUUg KHRhYmxlLCBpZHgpKSk7CiAKICAgZi0+Y2FuX3NldF93aW5kb3dfc2l6ZSA9IHRydWU7CiAgIGYt PmFmdGVyX21ha2VfZnJhbWUgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvc3JjL2ZyYW1lLmggYi9zcmMv ZnJhbWUuaAppbmRleCAwZmQ5NWU0ZGQzLi4xYzI5NzkyMWY3IDEwMDY0NAotLS0gYS9zcmMvZnJh bWUuaAorKysgYi9zcmMvZnJhbWUuaApAQCAtMTU4LDggKzE1OCw4IEBAICNkZWZpbmUgRU1BQ1Nf RlJBTUVfSAogICAgICBUaGVyZSBhcmUgZm91ciBhZGRpdGlvbmFsIGVsZW1lbnRzIG9mIG5pbCBh dCB0aGUgZW5kLCB0byB0ZXJtaW5hdGUuICAqLwogICBMaXNwX09iamVjdCBtZW51X2Jhcl9pdGVt czsKIAotICAvKiBBbGlzdCBvZiBlbGVtZW50cyAoRkFDRS1OQU1FIC4gRkFDRS1WRUNUT1ItREFU QSkuICAqLwotICBMaXNwX09iamVjdCBmYWNlX2FsaXN0OworICAvKiBIYXNoIHRhYmxlIG9mIEZB Q0UtTkFNRSBrZXlzIGFuZCBGQUNFLVZFQ1RPUi1EQVRBIHZhbHVlcy4gICovCisgIExpc3BfT2Jq ZWN0IGZhY2VfaGFzaF90YWJsZTsKIAogICAvKiBBIHZlY3RvciB0aGF0IHJlY29yZHMgdGhlIGVu dGlyZSBzdHJ1Y3R1cmUgb2YgdGhpcyBmcmFtZSdzIG1lbnUgYmFyLgogICAgICBGb3IgdGhlIGZv cm1hdCBvZiB0aGUgZGF0YSwgc2VlIGV4dGVuc2l2ZSBjb21tZW50cyBpbiB4bWVudS5jLgpAQCAt NjY1LDkgKzY2NSw5IEBAIGZzZXRfY29uZGVtbmVkX3Njcm9sbF9iYXJzIChzdHJ1Y3QgZnJhbWUg KmYsIExpc3BfT2JqZWN0IHZhbCkKICAgZi0+Y29uZGVtbmVkX3Njcm9sbF9iYXJzID0gdmFsOwog fQogSU5MSU5FIHZvaWQKLWZzZXRfZmFjZV9hbGlzdCAoc3RydWN0IGZyYW1lICpmLCBMaXNwX09i amVjdCB2YWwpCitmc2V0X2ZhY2VfaGFzaF90YWJsZSAoc3RydWN0IGZyYW1lICpmLCBMaXNwX09i amVjdCB2YWwpCiB7Ci0gIGYtPmZhY2VfYWxpc3QgPSB2YWw7CisgIGYtPmZhY2VfaGFzaF90YWJs ZSA9IHZhbDsKIH0KICNpZiBkZWZpbmVkIChIQVZFX1dJTkRPV19TWVNURU0pCiBJTkxJTkUgdm9p ZApkaWZmIC0tZ2l0IGEvc3JjL3hmYWNlcy5jIGIvc3JjL3hmYWNlcy5jCmluZGV4IGFiNDQ0MGY0 NmEuLmQ4NmFkZWY2MmMgMTAwNjQ0Ci0tLSBhL3NyYy94ZmFjZXMuYworKysgYi9zcmMveGZhY2Vz LmMKQEAgLTk1LDkgKzk1LDEwIEBAIENvcHlyaWdodCAoQykgMTk5My0xOTk0LCAxOTk4LTIwMjEg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAgICB3aXRoIHRoZSBzeW1ib2wgYGZhY2Un IGluIHNsb3QgMCwgYW5kIGEgc2xvdCBmb3IgZWFjaCBvZiB0aGUgZmFjZQogICAgYXR0cmlidXRl cyBtZW50aW9uZWQgYWJvdmUuCiAKLSAgIFRoZXJlIGlzIGFsc28gYSBnbG9iYWwgZmFjZSBhbGlz dCBgVmZhY2VfbmV3X2ZyYW1lX2RlZmF1bHRzJy4gIEZhY2UKLSAgIGRlZmluaXRpb25zIGZyb20g dGhpcyBsaXN0IGFyZSB1c2VkIHRvIGluaXRpYWxpemUgZmFjZXMgb2YgbmV3bHkKLSAgIGNyZWF0 ZWQgZnJhbWVzLgorICAgVGhlcmUgaXMgYWxzbyBhIGdsb2JhbCBmYWNlIG1hcCBgVmZhY2VfbmV3 X2ZyYW1lX2RlZmF1bHRzJywKKyAgIGNvbnRhaW5pbmcgY29uc2VzIG9mIChGQUNFX0lEIC4gRkFD RV9ERUZJTklUSU9OKS4gIEZhY2UgZGVmaW5pdGlvbnMKKyAgIGZyb20gdGhpcyB0YWJsZSBhcmUg dXNlZCB0byBpbml0aWFsaXplIGZhY2VzIG9mIG5ld2x5IGNyZWF0ZWQKKyAgIGZyYW1lcy4KIAog ICAgQSBmYWNlIGRvZXNuJ3QgaGF2ZSB0byBzcGVjaWZ5IGFsbCBhdHRyaWJ1dGVzLiAgVGhvc2Ug bm90IHNwZWNpZmllZAogICAgaGF2ZSBhIHZhbHVlIG9mIGB1bnNwZWNpZmllZCcuICBGYWNlcyBz cGVjaWZ5aW5nIGFsbCBhdHRyaWJ1dGVzIGJ1dApAQCAtMTk2MiwxMyArMTk2MywxMSBAQCBsZmFj ZV9mcm9tX2ZhY2VfbmFtZV9ub19yZXNvbHZlIChzdHJ1Y3QgZnJhbWUgKmYsIExpc3BfT2JqZWN0 IGZhY2VfbmFtZSwKICAgTGlzcF9PYmplY3QgbGZhY2U7CiAKICAgaWYgKGYpCi0gICAgbGZhY2Ug PSBhc3NxX25vX3F1aXQgKGZhY2VfbmFtZSwgZi0+ZmFjZV9hbGlzdCk7CisgICAgbGZhY2UgPSBG Z2V0aGFzaCAoZmFjZV9uYW1lLCBmLT5mYWNlX2hhc2hfdGFibGUsIFFuaWwpOwogICBlbHNlCi0g ICAgbGZhY2UgPSBhc3NxX25vX3F1aXQgKGZhY2VfbmFtZSwgVmZhY2VfbmV3X2ZyYW1lX2RlZmF1 bHRzKTsKKyAgICBsZmFjZSA9IENEUiAoRmdldGhhc2ggKGZhY2VfbmFtZSwgVmZhY2VfbmV3X2Zy YW1lX2RlZmF1bHRzLCBRbmlsKSk7CiAKLSAgaWYgKENPTlNQIChsZmFjZSkpCi0gICAgbGZhY2Ug PSBYQ0RSIChsZmFjZSk7Ci0gIGVsc2UgaWYgKHNpZ25hbF9wKQorICBpZiAoc2lnbmFsX3AgJiYg TklMUCAobGZhY2UpKQogICAgIHNpZ25hbF9lcnJvciAoIkludmFsaWQgZmFjZSIsIGZhY2VfbmFt ZSk7CiAKICAgY2hlY2tfbGZhY2UgKGxmYWNlKTsKQEAgLTI4NjcsMTEgKzI4NjYsNiBAQCBERUZV TiAoImludGVybmFsLW1ha2UtbGlzcC1mYWNlIiwgRmludGVybmFsX21ha2VfbGlzcF9mYWNlLAog ICAvKiBBZGQgYSBnbG9iYWwgZGVmaW5pdGlvbiBpZiB0aGVyZSBpcyBub25lLiAgKi8KICAgaWYg KE5JTFAgKGdsb2JhbF9sZmFjZSkpCiAgICAgewotICAgICAgZ2xvYmFsX2xmYWNlID0gbWFrZV92 ZWN0b3IgKExGQUNFX1ZFQ1RPUl9TSVpFLCBRdW5zcGVjaWZpZWQpOwotICAgICAgQVNFVCAoZ2xv YmFsX2xmYWNlLCAwLCBRZmFjZSk7Ci0gICAgICBWZmFjZV9uZXdfZnJhbWVfZGVmYXVsdHMgPSBG Y29ucyAoRmNvbnMgKGZhY2UsIGdsb2JhbF9sZmFjZSksCi0JCQkJCVZmYWNlX25ld19mcmFtZV9k ZWZhdWx0cyk7Ci0KICAgICAgIC8qIEFzc2lnbiB0aGUgbmV3IExpc3AgZmFjZSBhIHVuaXF1ZSBJ RC4gIFRoZSBtYXBwaW5nIGZyb20gTGlzcAogCSBmYWNlIGlkIHRvIExpc3AgZmFjZSBpcyBnaXZl biBieSB0aGUgdmVjdG9yIGxmYWNlX2lkX3RvX25hbWUuCiAJIFRoZSBtYXBwaW5nIGZyb20gTGlz cCBmYWNlIHRvIExpc3AgZmFjZSBpZCBpcyBnaXZlbiBieSB0aGUKQEAgLTI4ODEsOSArMjg3NSwx NCBAQCBERUZVTiAoImludGVybmFsLW1ha2UtbGlzcC1mYWNlIiwgRmludGVybmFsX21ha2VfbGlz cF9mYWNlLAogCSAgeHBhbGxvYyAobGZhY2VfaWRfdG9fbmFtZSwgJmxmYWNlX2lkX3RvX25hbWVf c2l6ZSwgMSwgTUFYX0ZBQ0VfSUQsCiAJCSAgIHNpemVvZiAqbGZhY2VfaWRfdG9fbmFtZSk7CiAK KyAgICAgIExpc3BfT2JqZWN0IGZhY2VfaWQgPSBtYWtlX2ZpeG51bSAobmV4dF9sZmFjZV9pZCk7 CiAgICAgICBsZmFjZV9pZF90b19uYW1lW25leHRfbGZhY2VfaWRdID0gZmFjZTsKLSAgICAgIEZw dXQgKGZhY2UsIFFmYWNlLCBtYWtlX2ZpeG51bSAobmV4dF9sZmFjZV9pZCkpOworICAgICAgRnB1 dCAoZmFjZSwgUWZhY2UsIGZhY2VfaWQpOwogICAgICAgKytuZXh0X2xmYWNlX2lkOworCisgICAg ICBnbG9iYWxfbGZhY2UgPSBtYWtlX3ZlY3RvciAoTEZBQ0VfVkVDVE9SX1NJWkUsIFF1bnNwZWNp ZmllZCk7CisgICAgICBBU0VUIChnbG9iYWxfbGZhY2UsIDAsIFFmYWNlKTsKKyAgICAgIEZwdXRo YXNoIChmYWNlLCBGY29ucyAoZmFjZV9pZCwgZ2xvYmFsX2xmYWNlKSwgVmZhY2VfbmV3X2ZyYW1l X2RlZmF1bHRzKTsKICAgICB9CiAgIGVsc2UgaWYgKGYgPT0gTlVMTCkKICAgICBmb3IgKGkgPSAx OyBpIDwgTEZBQ0VfVkVDVE9SX1NJWkU7ICsraSkKQEAgLTI4OTYsNyArMjg5NSw3IEBAIERFRlVO ICgiaW50ZXJuYWwtbWFrZS1saXNwLWZhY2UiLCBGaW50ZXJuYWxfbWFrZV9saXNwX2ZhY2UsCiAJ ewogCSAgbGZhY2UgPSBtYWtlX3ZlY3RvciAoTEZBQ0VfVkVDVE9SX1NJWkUsIFF1bnNwZWNpZmll ZCk7CiAJICBBU0VUIChsZmFjZSwgMCwgUWZhY2UpOwotCSAgZnNldF9mYWNlX2FsaXN0IChmLCBG Y29ucyAoRmNvbnMgKGZhY2UsIGxmYWNlKSwgZi0+ZmFjZV9hbGlzdCkpOworICAgICAgICAgIEZw dXRoYXNoIChmYWNlLCBsZmFjZSwgZi0+ZmFjZV9oYXNoX3RhYmxlKTsKIAl9CiAgICAgICBlbHNl CiAJZm9yIChpID0gMTsgaSA8IExGQUNFX1ZFQ1RPUl9TSVpFOyArK2kpCkBAIC0zMDU3LDcgKzMw NTYsNyBAQCBERUZVTiAoImludGVybmFsLXNldC1saXNwLWZhY2UtYXR0cmlidXRlIiwgRmludGVy bmFsX3NldF9saXNwX2ZhY2VfYXR0cmlidXRlLAogICAgICAgZiA9IE5VTEw7CiAgICAgICBsZmFj ZSA9IGxmYWNlX2Zyb21fZmFjZV9uYW1lIChOVUxMLCBmYWNlLCB0cnVlKTsKIAotICAgICAgLyog V2hlbiB1cGRhdGluZyBmYWNlLW5ldy1mcmFtZS1kZWZhdWx0cywgd2UgcHV0IDppZ25vcmUtZGVm ZmFjZQorICAgICAgLyogV2hlbiB1cGRhdGluZyBmYWNlLS1uZXctZnJhbWUtZGVmYXVsdHMsIHdl IHB1dCA6aWdub3JlLWRlZmZhY2UKIAkgd2hlcmUgdGhlIGNhbGxlciB3YW50cyBgdW5zcGVjaWZp ZWQnLiAgVGhpcyBmb3JjZXMgdGhlIGZyYW1lCiAJIGRlZmF1bHRzIHRvIGlnbm9yZSB0aGUgZGVm ZmFjZSB2YWx1ZS4gIE90aGVyd2lzZSwgdGhlIGRlZmZhY2UKIAkgd2lsbCB0YWtlIGVmZmVjdCwg d2hpY2ggaXMgZ2VuZXJhbGx5IG5vdCB3aGF0IGlzIGludGVuZGVkLgpAQCAtMzY0Miw3ICszNjQx LDcgQEAgdXBkYXRlX2ZhY2VfZnJvbV9mcmFtZV9wYXJhbWV0ZXIgKHN0cnVjdCBmcmFtZSAqZiwg TGlzcF9PYmplY3QgcGFyYW0sCiAgIC8qIElmIHRoZXJlIGFyZSBubyBmYWNlcyB5ZXQsIGdpdmUg dXAuICBUaGlzIGlzIHRoZSBjYXNlIHdoZW4gY2FsbGVkCiAgICAgIGZyb20gRnhfY3JlYXRlX2Zy YW1lLCBhbmQgd2UgZG8gdGhlIG5lY2Vzc2FyeSB0aGluZ3MgbGF0ZXIgaW4KICAgICAgZmFjZS1z ZXQtYWZ0ZXItZnJhbWUtZGVmYXVsdHMuICAqLwotICBpZiAoTklMUCAoZi0+ZmFjZV9hbGlzdCkp CisgIGlmIChYRklYTkFUIChGaGFzaF90YWJsZV9jb3VudCAoZi0+ZmFjZV9oYXNoX3RhYmxlKSkg PT0gMCkKICAgICByZXR1cm47CiAKICAgaWYgKEVRIChwYXJhbSwgUWZvcmVncm91bmRfY29sb3Ip KQpAQCAtNDMwOCwxNCArNDMwNywxMyBAQCBERUZVTiAoImludGVybmFsLWxpc3AtZmFjZS1lbXB0 eS1wIiwgRmludGVybmFsX2xpc3BfZmFjZV9lbXB0eV9wLAogICByZXR1cm4gaSA9PSBMRkFDRV9W RUNUT1JfU0laRSA/IFF0IDogUW5pbDsKIH0KIAotCi1ERUZVTiAoImZyYW1lLWZhY2UtYWxpc3Qi LCBGZnJhbWVfZmFjZV9hbGlzdCwgU2ZyYW1lX2ZhY2VfYWxpc3QsCitERUZVTiAoImZyYW1lLS1m YWNlLWhhc2gtdGFibGUiLCBGZnJhbWVfZmFjZV9oYXNoX3RhYmxlLCBTZnJhbWVfZmFjZV9oYXNo X3RhYmxlLAogICAgICAgIDAsIDEsIDAsCi0gICAgICAgZG9jOiAvKiBSZXR1cm4gYW4gYWxpc3Qg b2YgZnJhbWUtbG9jYWwgZmFjZXMgZGVmaW5lZCBvbiBGUkFNRS4KKyAgICAgICBkb2M6IC8qIFJl dHVybiBhIGhhc2ggdGFibGUgb2YgZnJhbWUtbG9jYWwgZmFjZXMgZGVmaW5lZCBvbiBGUkFNRS4K IEZvciBpbnRlcm5hbCB1c2Ugb25seS4gICovKQogICAoTGlzcF9PYmplY3QgZnJhbWUpCiB7Ci0g IHJldHVybiBkZWNvZGVfbGl2ZV9mcmFtZSAoZnJhbWUpLT5mYWNlX2FsaXN0OworICByZXR1cm4g ZGVjb2RlX2xpdmVfZnJhbWUgKGZyYW1lKS0+ZmFjZV9oYXNoX3RhYmxlOwogfQogCiAKQEAgLTY4 MzIsMzAgKzY4MzAsMzIgQEAgREVGVU4gKCJzaG93LWZhY2UtcmVzb3VyY2VzIiwgRnNob3dfZmFj ZV9yZXNvdXJjZXMsIFNzaG93X2ZhY2VfcmVzb3VyY2VzLAogCiAjaWZkZWYgSEFWRV9QRFVNUEVS CiAvKiBBbGwgdGhlIGZhY2VzIGRlZmluZWQgZHVyaW5nIGxvYWR1cCBhcmUgcmVjb3JkZWQgaW4K LSAgIGZhY2UtbmV3LWZyYW1lLWRlZmF1bHRzLCB3aXRoIHRoZSBsYXN0IGZhY2UgZmlyc3QgaW4g dGhlIGxpc3QuICBXZQotICAgbmVlZCB0byBzZXQgbmV4dF9sZmFjZV9pZCB0byB0aGUgbmV4dCBm YWNlIElEIG51bWJlciwgc28gdGhhdCBhbnkKLSAgIG5ldyBmYWNlcyBkZWZpbmVkIGluIHRoaXMg c2Vzc2lvbiB3aWxsIGhhdmUgZmFjZSBJRHMgZGlmZmVyZW50IGZyb20KLSAgIHRob3NlIGRlZmlu ZWQgZHVyaW5nIGxvYWR1cC4gIFdlIGFsc28gbmVlZCB0byBzZXQgdXAgdGhlCi0gICBsZmFjZV9p ZF90b19uYW1lW10gYXJyYXkgZm9yIHRoZSBmYWNlcyB0aGF0IHdlcmUgZGVmaW5lZCBkdXJpbmcK LSAgIGxvYWR1cC4gICovCisgICBmYWNlLW5ldy1mcmFtZS1kZWZhdWx0cy4gIFdlIG5lZWQgdG8g c2V0IG5leHRfbGZhY2VfaWQgdG8gdGhlIG5leHQKKyAgIGZhY2UgSUQgbnVtYmVyLCBzbyB0aGF0 IGFueSBuZXcgZmFjZXMgZGVmaW5lZCBpbiB0aGlzIHNlc3Npb24gd2lsbAorICAgaGF2ZSBmYWNl IElEcyBkaWZmZXJlbnQgZnJvbSB0aG9zZSBkZWZpbmVkIGR1cmluZyBsb2FkdXAuICBXZSBhbHNv CisgICBuZWVkIHRvIHNldCB1cCB0aGUgbGZhY2VfaWRfdG9fbmFtZVtdIGFycmF5IGZvciB0aGUg ZmFjZXMgdGhhdCB3ZXJlCisgICBkZWZpbmVkIGR1cmluZyBsb2FkdXAuICAqLwogdm9pZAogaW5p dF94ZmFjZXMgKHZvaWQpCiB7Ci0gIGlmIChDT05TUCAoVmZhY2VfbmV3X2ZyYW1lX2RlZmF1bHRz KSkKKyAgaW50IG5mYWNlcyA9IFhGSVhOQVQgKEZoYXNoX3RhYmxlX2NvdW50IChWZmFjZV9uZXdf ZnJhbWVfZGVmYXVsdHMpKTsKKyAgaWYgKG5mYWNlcyA+IDApCiAgICAgewogICAgICAgLyogQWxs b2NhdGUgdGhlIGxmYWNlX2lkX3RvX25hbWVbXSBhcnJheS4gICovCi0gICAgICBsZmFjZV9pZF90 b19uYW1lX3NpemUgPSBuZXh0X2xmYWNlX2lkID0KLQlYRklYTkFUIChGbGVuZ3RoIChWZmFjZV9u ZXdfZnJhbWVfZGVmYXVsdHMpKTsKKyAgICAgIGxmYWNlX2lkX3RvX25hbWVfc2l6ZSA9IG5leHRf bGZhY2VfaWQgPSBuZmFjZXM7CiAgICAgICBsZmFjZV9pZF90b19uYW1lID0geG5tYWxsb2MgKG5l eHRfbGZhY2VfaWQsIHNpemVvZiAqbGZhY2VfaWRfdG9fbmFtZSk7CiAKICAgICAgIC8qIFN0b3Jl IHRoZSBmYWNlcy4gICovCi0gICAgICBMaXNwX09iamVjdCB0YWlsOwotICAgICAgaW50IGkgPSBu ZXh0X2xmYWNlX2lkIC0gMTsKLSAgICAgIGZvciAodGFpbCA9IFZmYWNlX25ld19mcmFtZV9kZWZh dWx0czsgQ09OU1AgKHRhaWwpOyB0YWlsID0gWENEUiAodGFpbCkpCisgICAgICBzdHJ1Y3QgTGlz cF9IYXNoX1RhYmxlKiB0YWJsZSA9IFhIQVNIX1RBQkxFIChWZmFjZV9uZXdfZnJhbWVfZGVmYXVs dHMpOworICAgICAgZm9yIChwdHJkaWZmX3QgaWR4ID0gMDsgaWR4IDwgbmZhY2VzOyArK2lkeCkK IAl7Ci0JICBMaXNwX09iamVjdCBsZmFjZSA9IFhDQVIgKHRhaWwpOwotCSAgZWFzc2VydCAoaSA+ PSAwKTsKLQkgIGxmYWNlX2lkX3RvX25hbWVbaS0tXSA9IFhDQVIgKGxmYWNlKTsKKwkgIExpc3Bf T2JqZWN0IGxmYWNlID0gSEFTSF9LRVkgKHRhYmxlLCBpZHgpOworCSAgTGlzcF9PYmplY3QgZmFj ZV9pZCA9IENBUiAoSEFTSF9WQUxVRSAodGFibGUsIGlkeCkpOworICAgICAgICAgIGlmIChGSVhO QVRQIChmYWNlX2lkKSkgeworICAgICAgICAgICAgICBpbnQgaWQgPSBYRklYTkFUIChmYWNlX2lk KTsKKyAgICAgICAgICAgICAgZWFzc2VydCAoaWQgPj0gMCk7CisgICAgICAgICAgICAgIGxmYWNl X2lkX3RvX25hbWVbaWRdID0gbGZhY2U7CisgICAgICAgICAgICB9CiAJfQogICAgIH0KICAgZmFj ZV9hdHRyX3N5bVswXSA9IFFmYWNlOwpAQCAtNzAxMSw3ICs3MDExLDcgQEAgc3ltc19vZl94ZmFj ZXMgKHZvaWQpCiAgIGRlZnN1YnIgKCZTaW50ZXJuYWxfY29weV9saXNwX2ZhY2UpOwogICBkZWZz dWJyICgmU2ludGVybmFsX21lcmdlX2luX2dsb2JhbF9mYWNlKTsKICAgZGVmc3ViciAoJlNmYWNl X2ZvbnQpOwotICBkZWZzdWJyICgmU2ZyYW1lX2ZhY2VfYWxpc3QpOworICBkZWZzdWJyICgmU2Zy YW1lX2ZhY2VfaGFzaF90YWJsZSk7CiAgIGRlZnN1YnIgKCZTZGlzcGxheV9zdXBwb3J0c19mYWNl X2F0dHJpYnV0ZXNfcCk7CiAgIGRlZnN1YnIgKCZTY29sb3JfZGlzdGFuY2UpOwogICBkZWZzdWJy ICgmU2ludGVybmFsX3NldF9mb250X3NlbGVjdGlvbl9vcmRlcik7CkBAIC03MDM1LDkgKzcwMzUs MTIgQEAgc3ltc19vZl94ZmFjZXMgKHZvaWQpCiB0aGUgInNwZWNpZml0eSIgb2YgYSBmYWNlIHNw ZWNpZmljYXRpb24gYW5kIHNob3VsZCBiZSBsZXQtYm91bmQKIG9ubHkgZm9yIHRoaXMgcHVycG9z ZS4gICovKTsKIAotICBERUZWQVJfTElTUCAoImZhY2UtbmV3LWZyYW1lLWRlZmF1bHRzIiwgVmZh Y2VfbmV3X2ZyYW1lX2RlZmF1bHRzLAotICAgIGRvYzogLyogTGlzdCBvZiBnbG9iYWwgZmFjZSBk ZWZpbml0aW9ucyAoZm9yIGludGVybmFsIHVzZSBvbmx5LikgICovKTsKLSAgVmZhY2VfbmV3X2Zy YW1lX2RlZmF1bHRzID0gUW5pbDsKKyAgREVGVkFSX0xJU1AgKCJmYWNlLS1uZXctZnJhbWUtZGVm YXVsdHMiLCBWZmFjZV9uZXdfZnJhbWVfZGVmYXVsdHMsCisgICAgZG9jOiAvKiBIYXNoIHRhYmxl IG9mIGdsb2JhbCBmYWNlIGRlZmluaXRpb25zIChmb3IgaW50ZXJuYWwgdXNlIG9ubHkuKSAgKi8p OworICBWZmFjZV9uZXdfZnJhbWVfZGVmYXVsdHMgPQorICAgIC8qIDMzIGVudHJpZXMgaXMgZW5v dWdoIHRvIGZpdCBhbGwgYmFzaWMgZmFjZXMgKi8KKyAgICBtYWtlX2hhc2hfdGFibGUgKGhhc2h0 ZXN0X2VxLCAzMywgREVGQVVMVF9SRUhBU0hfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgIERF RkFVTFRfUkVIQVNIX1RIUkVTSE9MRCwgUW5pbCwgZmFsc2UpOwogCiAgIERFRlZBUl9MSVNQICgi ZmFjZS1kZWZhdWx0LXN0aXBwbGUiLCBWZmFjZV9kZWZhdWx0X3N0aXBwbGUsCiAgICAgZG9jOiAv KiBEZWZhdWx0IHN0aXBwbGUgcGF0dGVybiB1c2VkIG9uIG1vbm9jaHJvbWUgZGlzcGxheXMuCi0t IAoyLjMxLjEKCg== --Multipart_Tue_Apr__6_16:35:26_2021-1-- --pgp-sign-Multipart_Tue_Apr__6_16:35:26_2021-1 Content-Type: application/pgp-signature Content-Transfer-Encoding: 7bit Content-Description: OpenPGP Digital Signature -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEMs5zGc3ddpJcaCdJrDCBpVWB0sAFAmBsAS4ACgkQrDCBpVWB 0sB8/xAAlq4w3J0SBgzf1jxynqOgxKG+SUz8hMdN+9Iqv+esnCHyGrUmzPSDf0// f8Z9yWWDd/IAejxa7mwbPwmdxKMQBmG2Wuv4AiFiuPOhUECJzzbhHW1nCZlGrcns JfK0bR/79EjqUDDbV55ug2yQWRbUog2buHssC8ntAiOu8jjMs0lb6Dzi5fs/uKS1 t8BuW8MJUC+iVpwSuOdICNWZC98vvCBY8aF7sF+ZjvxNxdRy0CeWFZ9gmK+ivl6t lUs+7ELpB0YF6fBHo86iEzBkyvOgKKKchBkaZ7bAPZUMDdK7tlfNWu5p7lM2uHjM brZQbrfR8UlkLMHQqreK9vsKzPS9QWlMP5Fk6PH1PcICws9JFFiB+7/3ItecHocl 15u82xgAmcI/VN9STt4kkHXEG2FA7j010S/W0NHK1EEOZOeFMEETVfBDEN/VhlG7 AmG18aOvsFdXSsKMWqeTxmtqXf5iZgDqh5L73YBh+xzxZ9y49esdSz+gtsqgPdMm YxkxdfhMXnJWEZDltyuU+IdKdfwwFv1MgX+o9qPXpiAC1F/b0YOWPyzMJ7o/LocN 10VGgqmskyDgkHZ2uunj4lkypUj2ddwGdz5T/cAtgx/+dHNTi8qPMwVDpdEmvN5t 2XbAL2eJJmC6sFUWrmsUX72CqtFrdwfJx7It2OTDcDc4o+x/mIY= =w8zP -----END PGP SIGNATURE----- --pgp-sign-Multipart_Tue_Apr__6_16:35:26_2021-1-- From debbugs-submit-bounces@debbugs.gnu.org Tue Apr 06 08:30:49 2021 Received: (at 41200) by debbugs.gnu.org; 6 Apr 2021 12:30:49 +0000 Received: from localhost ([127.0.0.1]:39458 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lTkr2-0003nT-NT for submit@debbugs.gnu.org; Tue, 06 Apr 2021 08:30:48 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45160) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lTkr0-0003nG-R1 for 41200@debbugs.gnu.org; Tue, 06 Apr 2021 08:30:47 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:49242) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lTkqt-0007uU-Ex; Tue, 06 Apr 2021 08:30:39 -0400 Received: from 84.94.185.95.cable.012.net.il ([84.94.185.95]:4695 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1lTkqY-0003W7-HV; Tue, 06 Apr 2021 08:30:34 -0400 Date: Tue, 06 Apr 2021 15:30:17 +0300 Message-Id: <83mtubbnom.fsf@gnu.org> From: Eli Zaretskii To: Jashank Jeremy In-Reply-To: <87tuojhqdr.wl-jashank@rulingia.com.au> (message from Jashank Jeremy on Tue, 06 Apr 2021 16:35:28 +1000) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <87tuojhqdr.wl-jashank@rulingia.com.au> MIME-version: 1.0 Content-type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 41200 Cc: 41200@debbugs.gnu.org, cpitclaudel@gmail.com X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > Date: Tue, 06 Apr 2021 16:35:28 +1000 > From: Jashank Jeremy > Cc: Clément Pit-Claudel > > I have updated this patch to make it compile and behave on Emacs master > at 1d93540371aadec8f877bd781267d38d411c40a0 (current a few hours ago). > The updated patch is attached. > > I queried Clément, who has ok'd my shepherding this patch along. > > CPU profile data I've gathered suggests this change has almost entirely > stamped out the face-related hot-spots I'd seen previously. Hooray! Yeah, it's a pity Clément dropped the ball on this one. From debbugs-submit-bounces@debbugs.gnu.org Tue Apr 06 11:07:12 2021 Received: (at 41200) by debbugs.gnu.org; 6 Apr 2021 15:07:12 +0000 Received: from localhost ([127.0.0.1]:41446 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lTnIO-0001yB-9n for submit@debbugs.gnu.org; Tue, 06 Apr 2021 11:07:12 -0400 Received: from mail-qt1-f180.google.com ([209.85.160.180]:33684) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lTnIJ-0001xu-G7 for 41200@debbugs.gnu.org; Tue, 06 Apr 2021 11:07:10 -0400 Received: by mail-qt1-f180.google.com with SMTP id 1so11429450qtb.0 for <41200@debbugs.gnu.org>; Tue, 06 Apr 2021 08:07:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=U48YNOGq/SXh9usdV4LZvDdZT4y9hIf3rPKkGvS88nQ=; b=uTuhakFFubrNtcuN6k2COpi3VDxpwu0iqHrYVEy6cURmqjV8rkVujX4BV37jjfjzUD 0cKF3VRAMQnY3/TlPqD+5GTseVFoc2XDv4UGsMnpWNm8IUDIG94f11sXoD9UnSKDWe6q zIug09hzoyUsqeEutSBH9cJK0gThojicHpmO9AssyuUbEr7nsoCgoBHIF0ezzG3ZDnhT wRum/UUMm6fjf2DwORUhoiSgP6R7+G3AW1kGcsMZKFmnYFJ6XsusPPCMOgSU9uf3JcGH X8XoV/iIOFuggQ5od/aliX3Q479TCvDSwzg9Oil7ibE0VWONflq4i4lkXgfoqS5aT+8U ZOuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=U48YNOGq/SXh9usdV4LZvDdZT4y9hIf3rPKkGvS88nQ=; b=OVG5ttyyZjVp+gcujcRYQ8yi6tdCQDuFK3WB9uzLjfZcDD4fWd/qT+xA/IUmcJesgk +7gset5Cr51jdHE8x6VCU40etVJ581JNZdUhMzLIG0IDq7UUVAWwufHyueDw0MdGZGPf Aer8mzvQ1YOnuCUFdBhV/BQKcp8z+N4UPz3kvqbgXu4yFWVVyqvuM29dqRI5AWIs0ZX2 08jqgToagaTWwqTE4R9CArN8xIzpEjCZZ9R3Eeq5zlAzyvG2EL59Oq3MsoLgCCkOTfo0 y4B7mMvq3M4sTKjxMLVRvU4l2aun3fAlecobh4QyK3lMNDsHIeyRxzdt3SbP53hD+8JE r/QQ== X-Gm-Message-State: AOAM531Ba5dULhFwLp1+uXzamOx5XbIqse5DvtMU5DtiAmeaoHopOPSY wi83qibOq7Hxrn/R4v1xo6Unl57GHM4= X-Google-Smtp-Source: ABdhPJw6ijDCCSdHndFE3VkLXjEVAD75T0F80ENd4cTZctp65dXHkxBp8iHz6cuNGl2Ak8UJ8Pz5RQ== X-Received: by 2002:a05:622a:188:: with SMTP id s8mr27479256qtw.42.1617721621766; Tue, 06 Apr 2021 08:07:01 -0700 (PDT) Received: from [192.168.1.11] (c-24-61-240-80.hsd1.ma.comcast.net. [24.61.240.80]) by smtp.googlemail.com with ESMTPSA id k4sm16238877qke.13.2021.04.06.08.07.00 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 06 Apr 2021 08:07:01 -0700 (PDT) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined To: Eli Zaretskii , Jashank Jeremy References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <87tuojhqdr.wl-jashank@rulingia.com.au> <83mtubbnom.fsf@gnu.org> From: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= Message-ID: Date: Tue, 6 Apr 2021 11:07:00 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.1 MIME-Version: 1.0 In-Reply-To: <83mtubbnom.fsf@gnu.org> Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 8bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41200 Cc: 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) On 4/6/21 8:30 AM, Eli Zaretskii wrote: >> Date: Tue, 06 Apr 2021 16:35:28 +1000 >> From: Jashank Jeremy >> Cc: Clément Pit-Claudel >> >> I have updated this patch to make it compile and behave on Emacs master >> at 1d93540371aadec8f877bd781267d38d411c40a0 (current a few hours ago). >> The updated patch is attached. >> >> I queried Clément, who has ok'd my shepherding this patch along. >> >> CPU profile data I've gathered suggests this change has almost entirely >> stamped out the face-related hot-spots I'd seen previously. Hooray! > > Yeah, it's a pity Clément dropped the ball on this one. Sorry Eli, life got in the way. I'm glad that Jashank is taking care of it :) From debbugs-submit-bounces@debbugs.gnu.org Tue Apr 06 11:50:46 2021 Received: (at 41200) by debbugs.gnu.org; 6 Apr 2021 15:50:47 +0000 Received: from localhost ([127.0.0.1]:41487 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lTnyY-00033h-LK for submit@debbugs.gnu.org; Tue, 06 Apr 2021 11:50:46 -0400 Received: from eggs.gnu.org ([209.51.188.92]:42802) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lTnyX-00033U-2Y for 41200@debbugs.gnu.org; Tue, 06 Apr 2021 11:50:45 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:52926) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lTnyP-0002m3-Uk; Tue, 06 Apr 2021 11:50:37 -0400 Received: from 84.94.185.95.cable.012.net.il ([84.94.185.95]:1080 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1lTnyP-0000aB-81; Tue, 06 Apr 2021 11:50:37 -0400 Date: Tue, 06 Apr 2021 18:50:35 +0300 Message-Id: <83czv7bees.fsf@gnu.org> From: Eli Zaretskii To: =?utf-8?Q?Cl=C3=A9ment?= Pit-Claudel In-Reply-To: (message from =?utf-8?Q?Cl=C3=A9ment?= Pit-Claudel on Tue, 6 Apr 2021 11:07:00 -0400) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <87tuojhqdr.wl-jashank@rulingia.com.au> <83mtubbnom.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 41200 Cc: jashank@rulingia.com.au, 41200@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) > Cc: 41200@debbugs.gnu.org > From: Clément Pit-Claudel > Date: Tue, 6 Apr 2021 11:07:00 -0400 > > Sorry Eli, life got in the way. I'm glad that Jashank is taking care of it :) No need to apologize, we all have that problem sometimes. From debbugs-submit-bounces@debbugs.gnu.org Thu Apr 22 23:56:37 2021 Received: (at 41200) by debbugs.gnu.org; 23 Apr 2021 03:56:37 +0000 Received: from localhost ([127.0.0.1]:35924 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lZmvl-0001FE-0V for submit@debbugs.gnu.org; Thu, 22 Apr 2021 23:56:37 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:39207) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lZmvh-0001Ez-CJ for 41200@debbugs.gnu.org; Thu, 22 Apr 2021 23:56:35 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 7B3CD80A74; Thu, 22 Apr 2021 23:56:27 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id DED6E8033D; Thu, 22 Apr 2021 23:56:21 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1619150181; bh=yJOzYHBF7c/DZ2eQexu4C1ZC5554BMzjBWjSsfL2Hdg=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=XiLBjedE9kJGSO3vvbn6ipQ8mHSIo10luYX0ji0MqbIztbiV+bpYnQpFFP7wksdNT XEzWKxgegSYwCh5W6CCBEmTl2vGCQgkOyrEuC01diyC3X2spElK9EuhgRIa1j9jgvW /KNs8d1OYX5amqxZb4InJ+DGbo0jLWG1xK0NmeCEVj3ka6d7BNGdAjyD6P+zvgbvjP e7C7gLiixc/E7Xa1p8XiMAgHiI5S/Xe/4wkNgjzYauvNpdqyizUR1SkM++DREl6v8i nJd/hYXPWWMlt9YV1SGrZv4IHbBLny+iOyHxnMXkxY2ydg4AcaRDZcjvz5iiJ2brfF IGaOlwazpYs6A== Received: from alfajor (104-222-126-84.cpe.teksavvy.com [104.222.126.84]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 909FC1201E3; Thu, 22 Apr 2021 23:56:21 -0400 (EDT) From: Stefan Monnier To: Jashank Jeremy Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined Message-ID: References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <87tuojhqdr.wl-jashank@rulingia.com.au> Date: Thu, 22 Apr 2021 23:56:20 -0400 In-Reply-To: <87tuojhqdr.wl-jashank@rulingia.com.au> (Jashank Jeremy's message of "Tue, 06 Apr 2021 16:35:28 +1000") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.061 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 41200 Cc: Emacs bug41200 <41200@debbugs.gnu.org>, =?windows-1252?Q?Cl=E9ment?= Pit-Claudel X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > I have updated this patch to make it compile and behave on Emacs master > at 1d93540371aadec8f877bd781267d38d411c40a0 (current a few hours ago). > The updated patch is attached. I just tried it on Emacs's `master` but for me it results in src/emacs -Q opening up with most faces that don't use colors: the *scratch* buffer's comments are displayed in black+bold+italic, the mode-line has a black background. A call of the form `(error "foo")` has foo display in black+italic and the `error symbol is displayed in reverse video (black background). OTOH, the `M-x` that is displayed when I hit `M-x` seems to have the usual blueish color. Stefan From debbugs-submit-bounces@debbugs.gnu.org Wed May 12 16:30:06 2021 Received: (at 41200) by debbugs.gnu.org; 12 May 2021 20:30:06 +0000 Received: from localhost ([127.0.0.1]:40694 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lgvUc-0007xh-6Z for submit@debbugs.gnu.org; Wed, 12 May 2021 16:30:06 -0400 Received: from quimby.gnus.org ([95.216.78.240]:34624) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lgvUW-0007wQ-BE for 41200@debbugs.gnu.org; Wed, 12 May 2021 16:30:03 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=tbG48YKhy6/Qfl5argFr7iHQRXwCYuHKCHy7GnqiTNg=; b=D0molYSwsWEv8el5SfmYsSAQ27 2U4gLoZYYvfrXAPFhOIwUZDoschwhIPTu4FFbf9RWfjaM/sRLw1ONwZ1sI9EuuDBJIGZ+iZrp4JBz 2l1JmqQ07rDg4lmtdOquUoWzk7ZzQSFv2PRaYZi/ajZ8a1ze0xfJHi7+12AwavIzMV6c=; Received: from cm-84.212.220.105.getinternet.no ([84.212.220.105] helo=xo) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lgvUK-0001KA-GT; Wed, 12 May 2021 22:29:50 +0200 From: Lars Ingebrigtsen To: Stefan Monnier Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <87tuojhqdr.wl-jashank@rulingia.com.au> X-Now-Playing: Lost Girls's _Menneskekollektivet_: "Love, Lovers" Date: Wed, 12 May 2021 22:29:47 +0200 In-Reply-To: (Stefan Monnier's message of "Thu, 22 Apr 2021 23:56:20 -0400") Message-ID: <878s4ju24k.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: Stefan Monnier writes: > I just tried it on Emacs's `master` but for me it results in > > src/emacs -Q > > opening up with most faces that don't use colors: the *scratch* buffer's > comments are displayed in black+bold+ital [...] Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41200 Cc: Jashank Jeremy , Emacs bug41200 <41200@debbugs.gnu.org>, =?utf-8?Q?Cl=C3=A9ment?= Pit-Claudel X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Stefan Monnier writes: > I just tried it on Emacs's `master` but for me it results in > > src/emacs -Q > > opening up with most faces that don't use colors: the *scratch* buffer's > comments are displayed in black+bold+italic, the mode-line has > a black background. A call of the form `(error "foo")` has foo display > in black+italic and the `error symbol is displayed in reverse video > (black background). I tried the patch, too, and I'm seeing the same -- most faces are different than they used to be, which is surely not what's supposed to happen. Jashank, have to continued working on this patch? -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From debbugs-submit-bounces@debbugs.gnu.org Wed May 12 16:30:04 2021 Received: (at control) by debbugs.gnu.org; 12 May 2021 20:30:04 +0000 Received: from localhost ([127.0.0.1]:40692 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lgvUZ-0007xX-Ul for submit@debbugs.gnu.org; Wed, 12 May 2021 16:30:04 -0400 Received: from quimby.gnus.org ([95.216.78.240]:34628) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lgvUW-0007wR-CT for control@debbugs.gnu.org; Wed, 12 May 2021 16:30:03 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Subject:From:To:Message-Id:Date:Sender:Reply-To:Cc: MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=dQyqeNpBSh4MUZ9M4jA9fvuTUKh5Ngqxbe0ytfx0WJk=; b=ttArQ9BbOw+aiifyLNz9H7M8+U z4IUML79sGt13/+SfXOrHLh54LjxK6F+xcBYU6Tfx0Fxc5Ct7oZ4N1YENPjm+Zz26VOGs4nwRshwh OVaAOPx2i6mQ+yafd445iGDsg5CtLZEwJaLwU8nAYhCwm3d/Zj23i1DTa0E7VoxsFgqQ=; Received: from cm-84.212.220.105.getinternet.no ([84.212.220.105] helo=xo) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lgvUO-0001KG-KR for control@debbugs.gnu.org; Wed, 12 May 2021 22:29:54 +0200 Date: Wed, 12 May 2021 22:29:52 +0200 Message-Id: <877dk3u24f.fsf@gnus.org> To: control@debbugs.gnu.org From: Lars Ingebrigtsen Subject: control message for bug #41200 X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: tags 41200 + moreinfo quit Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: control X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) tags 41200 + moreinfo quit From debbugs-submit-bounces@debbugs.gnu.org Thu May 13 02:52:25 2021 Received: (at 41200) by debbugs.gnu.org; 13 May 2021 06:52:25 +0000 Received: from localhost ([127.0.0.1]:41208 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lh5Cp-0002jO-4P for submit@debbugs.gnu.org; Thu, 13 May 2021 02:52:25 -0400 Received: from emeralfel.rulingia.com.au ([52.64.96.81]:42791 helo=fort.rulingia.com.au) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lh2Sg-0006jR-8o for 41200@debbugs.gnu.org; Wed, 12 May 2021 23:56:38 -0400 Received: from alyzon.rulingia.com.au (ppp59-167-172-93.static.internode.on.net [59.167.172.93]) by fort.rulingia.com.au (Postfix) with ESMTPSA id 612502110C3; Thu, 13 May 2021 13:56:31 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rulingia.com.au; s=mail; t=1620878191; bh=lktLTPPmSCobV88jRUlJVRHCRTAX8ilZI+8doBUVZ04=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=fY3wR9irsF3t3SJhaCgLdadozi2+ddRzWJqBzS83wP36dzlUctZTvMYpa3xQAmMHI frQAEFzVPYSBspP3aSY3dEJaKdAWgs5bdTgkKtH2ImlVoDryLUE+VItdoaxXuzGqFL jGamtudKJ9/Ef5zzrrjU59YRl1fP1/srLpZEeCHk= Received: from lisbon.rulingia.com.au. (unknown [192.168.234.6]) by alyzon.rulingia.com.au (Postfix) with ESMTPA id D52AF185684; Thu, 13 May 2021 13:56:30 +1000 (AEST) Date: Thu, 13 May 2021 15:56:25 +1200 Message-ID: <871rab8exi.wl-jashank@rulingia.com.au> From: Jashank Jeremy To: Lars Ingebrigtsen , Stefan Monnier Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined In-Reply-To: <878s4ju24k.fsf@gnus.org> References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <87tuojhqdr.wl-jashank@rulingia.com.au> <878s4ju24k.fsf@gnus.org> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM-LB/1.14.9 (=?ISO-8859-4?Q?Goj=F2?=) APEL-LB/10.8 EasyPG/1.0.0 Emacs/28.0.50 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: multipart/signed; boundary="pgp-sign-Multipart_Thu_May_13_15:56:24_2021-1"; micalg=pgp-sha256; protocol="application/pgp-signature" Content-Transfer-Encoding: 7bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41200 X-Mailman-Approved-At: Thu, 13 May 2021 02:52:22 -0400 Cc: Emacs bug41200 <41200@debbugs.gnu.org>, =?ISO-8859-1?Q?Cl=E9ment?= Pit-Claudel X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --pgp-sign-Multipart_Thu_May_13_15:56:24_2021-1 Content-Type: multipart/mixed; boundary="Multipart_Thu_May_13_15:56:24_2021-1" --Multipart_Thu_May_13_15:56:24_2021-1 Content-Type: text/plain; charset=US-ASCII At 2021-04-22 23:56:20 -0400, Stefan Monnier wrote: > [...] most faces that don't use colors: the *scratch* buffer's > comments are displayed in black+bold+italic, the mode-line has a black > background. A call of the form `(error "foo")` has foo display in > black+italic and the `error symbol is displayed in reverse video > (black background). At 2021-05-12 22:29:47 +0200, Lars Ingebrigtsen wrote: > I tried the patch, too, and I'm seeing the same -- most faces are > different than they used to be, which is surely not what's supposed to > happen. But another experiment you could try: create a new frame. And another. OK, I'll spoil the surprise --- this misbehaviour occurs *only* on the initial frame. I don't precisely know _why_ that happens, but I do know how it broke: I tried (and thought I had succeeded) fixing a bug that occurred only when reverse video was enabled, which would stop creation of new frames entirely. > Jashank, have to continued working on this patch? Yes --- I have a patched patch which fixes that behaviour. The 10th revision of that patch is attached: I have been running it for a few weeks atop 7c901d90e620b4d3651b86c13faf1e81eeb3db10 (master at the time), so I can tell you it also works with native-compile. I have rebased onto ec574a72f7198d9793b466f33382fff397ac4ce1 (master as of now) and will test that. Cheers, ~jashank --Multipart_Thu_May_13_15:56:24_2021-1 Content-Type: text/x-patch; type=patch; name="0001-Store-frame-faces-in-hash-tables-instead-of-alists-V10.patch"; charset=UTF-8 Content-Disposition: attachment; filename="0001-Store-frame-faces-in-hash-tables-instead-of-alists-V10.patch" Content-Transfer-Encoding: base64 RnJvbSAwNGI4ZjJkMTMxODI0ZmE5ZGMyYmVjZTE5ZjRhNzE5Zjk3N2U0ZjRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/Q2w9QzM9QTltZW50PTIwUGl0LUNsYXVkZWw/ PSA8Y2xlbWVudC5waXRjbGF1ZGVsQGxpdmUuY29tPgpEYXRlOiBUdWUsIDEyIE1heSAyMDIwIDIx OjQ4OjMyIC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gU3RvcmUgZnJhbWUgZmFjZXMgaW4gaGFzaCB0 YWJsZXMgaW5zdGVhZCBvZiBhbGlzdHMKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0 ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQK Ciogc3JjL2ZyYW1lLmggKHN0cnVjdCBmcmFtZSk6IEFkZCBmYWNlX2hhc2hfdGFibGUsIHJlbW92 ZSBmYWNlX2FsaXN0LgooZnNldF9mYWNlX2hhc2hfdGFibGUpOiBOZXcgZnVuY3Rpb24uCihmc2V0 X2ZhY2VfYWxpc3QpOiBSZW1vdmUuCiogc3JjL2ZyYW1lLmMgKG1ha2VfZnJhbWUpOiBJbml0aWFs aXplIGYtPmZhY2VfaGFzaF90YWJsZS4KKEZtYWtlX3Rlcm1pbmFsX2ZyYW1lKTogVXBkYXRlIHRv IHdvcmsgd2l0aCBoYXNoIHRhYmxlcyBpbnN0ZWFkIG9mCmFsaXN0cy4KKiBzcmMveGZhY2VzLmMg KGxmYWNlX2Zyb21fZmFjZV9uYW1lX25vX3Jlc29sdmUpOgooRmludGVybmFsX21ha2VfbGlzcF9m YWNlKToKKHVwZGF0ZV9mYWNlX2Zyb21fZnJhbWVfcGFyYW1ldGVyKTogVXBkYXRlIHRvIHdvcmsg d2l0aCBoYXNoIHRhYmxlcwppbnN0ZWFkIG9mIGFsaXN0cy4KKEZmcmFtZV9mYWNlX2hhc2hfdGFi bGUpOiBOZXcgZnVuY3Rpb24uCihGZnJhbWVfZmFjZV9hbGlzdCk6IE1vdmUgdG8gZmFjZXMuZWwg YXMgZnJhbWUtZmFjZS1hbGlzdC4KKHN5bXNfb2ZfeGZhY2VzKTogQWRkIGZyYW1lX2ZhY2VfaGFz aF90YWJsZS4KCiogbGlzcC9wcm9nbW9kZXMvZWxpc3AtbW9kZS5lbCAoZWxpc3AtLWV2YWwtZGVm dW4tMSk6CiogbGlzcC9mcmFtZS5lbCAoZnJhbWUtc2V0LWJhY2tncm91bmQtbW9kZSk6IFVwZGF0 ZSB0byB3b3JrIHdpdGggaGFzaAp0YWJsZXMgaW5zdGVhZCBvZiBhbGlzdHMuCiogbGlzcC9mYWNl cy5lbCAoZmFjZS1uZXctZnJhbWUtZGVmYXVsdHMpOiBNYXJrIG9ic29sZXRlLgooZmFjZS1saXN0 KTogVXBkYXRlIHRvIHVzZSBmYWNlLS1uZXctZnJhbWUtZGVmYXVsdHMuCihmcmFtZS1mYWNlLWFs aXN0KTogTW92ZWQgaGVyZSBmcm9tIHNyYy94ZmFjZXMuYy4KKHgtY3JlYXRlLWZyYW1lLXdpdGgt ZmFjZXMpOiBVcGRhdGUgdG8gaGFuZGxlIHN1YnRsZSBzZW1hbnRpYyBjaGFuZ2UKdG8gaG93IGZy YW1lIGZhY2VzIHByb3BhZ2F0ZSwgd2hpY2ggb3RoZXJ3aXNlIGJyZWFrcyBmcmFtZSBjcmVhdGlv bgp3aXRoIHJldmVyc2UgdmlkZW8gZW5hYmxlZC4KCjs7IFBhdGNoIGhpc3Rvcnk6Cjs7Cjs7IFYx ICgyMDIwLTA1LTEyIDIyOjQxOjI0IC0wNDAwKSwgKEJ1ZyM0MTIwMCkgbWVzc2FnZSAyOS4KOzsg ICBBdXRob3JlZC1ieTogQ2zDqW1lbnQgUGl0LUNsYXVkZWwgPGNsZW1lbnQucGl0Y2xhdWRlbCA8 YXQ+IGxpdmUuY29tPgo7Owo7OyBWMiAoMjAyMC0wNS0xMyAxMToxMzoyNyAtMDQwMCksIChCdWcj NDEyMDApIG1lc3NhZ2UgMzguCjs7ICAgRml4ZXMgY29tcGlsYXRpb24gZXJyb3IuCjs7ICAgUmVw b3J0ZWQtYnk6IG1hcnRpbiBydWRhbGljcyA8cnVkYWxpY3MgPGF0PiBnbXguYXQ+Cjs7ICAgQXV0 aG9yZWQtYnk6IENsw6ltZW50IFBpdC1DbGF1ZGVsIDxjbGVtZW50LnBpdGNsYXVkZWwgPGF0PiBs aXZlLmNvbT4KOzsKOzsgVjMgKDIwMjAtMDUtMTUgMTA6NTk6MzYgLTA0MDApLCAoQnVnIzQxMjAw KSBtZXNzYWdlIDU1Lgo7OyAgIEFtZW5kbWVudHMgdG8gcmVzb2x2ZSBpc3N1ZXMgcmFpc2VkIG9y IHJlc29sdmVkIGJ5IEVsaVouCjs7ICAgKiBDb2RlLXN0eWxlIGNsZWFudXAuCjs7ICAgKiBSZW5h bWUgYGZhY2VfaGFzaCcgdG8gYGZhY2VfbWFwJy4KOzsgICBTdWdnZXN0ZWQtYnk6IEVsaSBaYXJl dHNraWkgPGVsaXogPGF0PiBnbnUub3JnPgo7OyAgIEF1dGhvcmVkLWJ5OiBDbMOpbWVudCBQaXQt Q2xhdWRlbCA8Y2xlbWVudC5waXRjbGF1ZGVsIDxhdD4gbGl2ZS5jb20+Cjs7Cjs7IFY0ICgyMDIw LTA1LTE1IDE0OjUwOjE3IC0wNDAwKSwgKEJ1ZyM0MTIwMCkgbWVzc2FnZSA3MC4KOzsgICAqIFNl dHRsZSBvbiBuYW1lIGBmYWNlX2hhc2hfdGFibGUnLgo7OyAgICogUmVuYW1lIGBmYWNlLW5ldy1m cmFtZS1kZWZhdWx0cycgdG8gYGZhY2UtLW5ldy1mcmFtZS1kZWZhdWx0cycuCjs7ICAgKiBBbGxv dyBtdWx0aXBsZSB2YXJpYW50cyBvZiBhIGZhY2UgdG8gZXhpc3QuCjs7ICAgU3VnZ2VzdGVkLWJ5 OiBFbGkgWmFyZXRza2lpIDxlbGl6IDxhdD4gZ251Lm9yZz4KOzsgICBBdXRob3JlZC1ieTogQ2zD qW1lbnQgUGl0LUNsYXVkZWwgPGNsZW1lbnQucGl0Y2xhdWRlbCA8YXQ+IGxpdmUuY29tPgo7Owo7 OyBWNSAoMjAyMC0wNS0xNSAxNDo1MDoxNyAtMDQwMCksIChCdWcjNDEyMDApIG1lc3NhZ2UgODUu Cjs7ICAgTG93ZXIgdGhlIHNpemUgb2YgYGZhY2UtLW5ldy1mcmFtZS1kZWZhdWx0cycuCjs7ICAg U3VnZ2VzdGVkLWJ5OiBFbGkgWmFyZXRza2lpIDxlbGl6IDxhdD4gZ251Lm9yZz4KOzsgICBBdXRo b3JlZC1ieTogQ2zDqW1lbnQgUGl0LUNsYXVkZWwgPGNsZW1lbnQucGl0Y2xhdWRlbCA8YXQ+IGxp dmUuY29tPgo7Owo7OyBWNiAoMjAyMS0wNC0wNSAxNzoxMDo1NSArMTAwMCkuCjs7ICAgUmViYXNl IG9udG8gbWFzdGVyOyBtb3ZlIGh1bmtzIGFyb3VuZC4KOzsgICAqIENoYW5nZXMgdG8gYGVkZWJ1 Zy5lbCcgZHJvcHBlZC4KOzsgICBBdXRob3JlZC1ieTogSmFzaGFuayBKZXJlbXkgPGphc2hhbmsg PGF0PiBydWxpbmdpYS5jb20uYXU+Cjs7Cjs7IFY3ICgyMDIxLTA0LTA2IDEyOjMxOjU1ICsxMDAw KS4KOzsgICBGaXggYGZyYW1lLWZhY2UtYWxpc3QnIHRvIGNvcGUgd2l0aCBjaGFuZ2VzIGZyb20g VjQuCjs7ICAgQXV0aG9yZWQtYnk6IEphc2hhbmsgSmVyZW15IDxqYXNoYW5rIDxhdD4gcnVsaW5n aWEuY29tLmF1Pgo7Owo7OyBWOCAoMjAyMS0wNC0wNiAxMzoxMzozMyArMTAwMCkuCjs7ICAgVGhl cmUgaXMgYSBzdWJ0bGUgY2hhbmdlIHRvIGZhY2UgcHJvcGFnYXRpb24gc2VtYW50aWNzIGF0IGZh Y2UKOzsgICBjcmVhdGlvbiB0aW1lLCB3aGljaCBzdG9wcyBmYWNlIGZyYW1lIGNyZWF0aW9uIHdv cmtpbmcgYXQgYWxsCjs7ICAgb25seSBpZiByZXZlcnNlIHZpZGVvIGlzIGVuYWJsZWQuCjs7ICAg QXV0aG9yZWQtYnk6IEphc2hhbmsgSmVyZW15IDxqYXNoYW5rIDxhdD4gcnVsaW5naWEuY29tLmF1 Pgo7Owo7OyBWOSAoMjAyMS0wNC0wNiAxNjoxNzo1MyArMTAwMCkuCjs7ICAgQ29ycmVjdCBhcmd1 bWVudCBvcmRlciBvZiBgcmVtaGFzaCcgaW4gYGVsaXNwLW1vZGUuZWwnLgo7OyAgIFJlcG9ydGVk LWJ5OiBCZW5zb24gQ2h1IDxiZW5zb25jaHU0NTcgPGF0PiBnbWFpbC5jb20+Cjs7ICAgQXV0aG9y ZWQtYnk6IEphc2hhbmsgSmVyZW15IDxqYXNoYW5rIDxhdD4gcnVsaW5naWEuY29tLmF1Pgo7Owo7 OyBWMTAgKDIwMjEtMDQtMzAgMTI6MTE6MTkgKzEyMDApLgo7OyAgIEZpeCBicm9rZW4gZmFjZXMg b24gaW5pdGlhbCBmcmFtZSAoZnJvbSBwcmlvciByZXZlcnNlIHZpZGVvIGZpeCkuCjs7ICAgUmVw b3J0ZWQtYnk6IFN0ZWZhbiBNb25uaWVyIDxtb25uaWVyIDxhdD4gaXJvLnVtb250cmVhbC5jYT4K OzsgICBBdXRob3JlZC1ieTogSmFzaGFuayBKZXJlbXkgPGphc2hhbmsgPGF0PiBydWxpbmdpYS5j b20uYXU+Ci0tLQogbGlzcC9jdXN0b20uZWwgICAgICAgICAgICAgICB8ICAyICstCiBsaXNwL2Zh Y2VzLmVsICAgICAgICAgICAgICAgIHwgMjcgKysrKysrKysrKy0tCiBsaXNwL2ZyYW1lLmVsICAg ICAgICAgICAgICAgIHwgIDIgKy0KIGxpc3AvcHJvZ21vZGVzL2VsaXNwLW1vZGUuZWwgfCAgMyAr LQogc3JjL2ZyYW1lLmMgICAgICAgICAgICAgICAgICB8IDIwICsrKysrKy0tLQogc3JjL2ZyYW1l LmggICAgICAgICAgICAgICAgICB8ICA4ICsrLS0KIHNyYy94ZmFjZXMuYyAgICAgICAgICAgICAg ICAgfCA4MyArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0KIDcgZmlsZXMgY2hh bmdlZCwgODcgaW5zZXJ0aW9ucygrKSwgNTggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGlz cC9jdXN0b20uZWwgYi9saXNwL2N1c3RvbS5lbAppbmRleCAwNzhlM2E4Y2Y4Li5mZWFjOTlkMTFi IDEwMDY0NAotLS0gYS9saXNwL2N1c3RvbS5lbAorKysgYi9saXNwL2N1c3RvbS5lbApAQCAtOTI2 LDcgKzkyNiw3IEBAIGN1c3RvbS1wdXNoLXRoZW1lCiAJICA7OyB0aGUgdmFsdWUgdG8gYSBmYWtl IHRoZW1lLCBgY2hhbmdlZCcuICBJZiB0aGUgdGhlbWUgaXMKIAkgIDs7IGxhdGVyIGRpc2FibGVk LCB3ZSB1c2UgdGhpcyB0byBicmluZyBiYWNrIHRoZSBvbGQgdmFsdWUuCiAJICA7OwotCSAgOzsg Rm9yIGZhY2VzLCB3ZSBqdXN0IHVzZSBgZmFjZS1uZXctZnJhbWUtZGVmYXVsdHMnIHRvCisJICA7 OyBGb3IgZmFjZXMsIHdlIGp1c3QgdXNlIGBmYWNlLS1uZXctZnJhbWUtZGVmYXVsdHMnIHRvCiAJ ICA7OyByZWNvbXB1dGUgd2hlbiB0aGUgdGhlbWUgaXMgZGlzYWJsZWQuCiAJICAod2hlbiAoYW5k IChlcSBwcm9wICd0aGVtZS12YWx1ZSkKIAkJICAgICAoYm91bmRwIHN5bWJvbCkpCmRpZmYgLS1n aXQgYS9saXNwL2ZhY2VzLmVsIGIvbGlzcC9mYWNlcy5lbAppbmRleCA5OTY5MTQwZjBjLi5iZjI0 YTFkN2RhIDEwMDY0NAotLS0gYS9saXNwL2ZhY2VzLmVsCisrKyBiL2xpc3AvZmFjZXMuZWwKQEAg LTE3NiwxMCArMTc2LDI5IEBAIGZhY2UtZm9udC1yZWdpc3RyeS1hbHRlcm5hdGl2ZXMKIDs7OyBD cmVhdGlvbiwgY29weWluZy4KIDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OwogCisobWFrZS1vYnNvbGV0ZS12YXJp YWJsZQorICdmYWNlLW5ldy1mcmFtZS1kZWZhdWx0cworICJ1c2UgYGZhY2UtLW5ldy1mcmFtZS1k ZWZhdWx0cycgb3IgYGZhY2UtYWxpc3QnIGluc3RlYWQuIgorICIyOC4xIikKKworKGRlZnVuIGZy YW1lLWZhY2UtYWxpc3QgKCZvcHRpb25hbCBmcmFtZSkKKyAgIlJldHVybiBhbiBhbGlzdCBvZiBm cmFtZS1sb2NhbCBmYWNlcyBkZWZpbmVkIG9uIEZSQU1FLgorVGhpcyBhbGlzdCBpcyBhIGNvcHkg b2YgdGhlIGNvbnRlbnRzIG9mIGBmcmFtZS0tZmFjZS1oYXNoLXRhYmxlJy4KK0ZvciBpbnRlcm5h bCB1c2Ugb25seS4iCisgIChkZWNsYXJlIChvYnNvbGV0ZSBmcmFtZS0tZmFjZS1oYXNoLXRhYmxl ICIyOC4xIikpCisgIChsZXQgKChmYWNlcykpCisgICAgKG1hcGhhc2ggKGxhbWJkYSAoZmFjZSBz cGVjKQorICAgICAgICAgICAgICAgKGxldCAoKGZhY2UtaWQgIChjYXIgKGdldGhhc2ggZmFjZSBm YWNlLS1uZXctZnJhbWUtZGVmYXVsdHMpKSkpCisgICAgICAgICAgICAgICAgIChwdXNoIGAoLGZh Y2UtaWQgLGZhY2UgLiAsc3BlYykgZmFjZXMpKSkKKyAgICAgICAgICAgICAoZnJhbWUtLWZhY2Ut aGFzaC10YWJsZSBmcmFtZSkpCisgICAgKG1hcGNhciAjJ2NkciAoc29ydCBmYWNlcyAobGFtYmRh IChmMSBmMikgKDwgKGNhciBmMSkgKGNhciBmMikpKSkpKSkKIAogKGRlZnVuIGZhY2UtbGlzdCAo KQogICAiUmV0dXJuIGEgbGlzdCBvZiBhbGwgZGVmaW5lZCBmYWNlcy4iCi0gIChtYXBjYXIgIydj YXIgZmFjZS1uZXctZnJhbWUtZGVmYXVsdHMpKQorICAobGV0ICgoZmFjZXMpKQorICAgIChtYXBo YXNoIChsYW1iZGEgKGZhY2Ugc3BlYykgKHB1c2ggYCgsKGNhciBzcGVjKSAuICxmYWNlKSBmYWNl cykpCisgICAgICAgICAgICAgZmFjZS0tbmV3LWZyYW1lLWRlZmF1bHRzKQorICAgIChtYXBjYXIg IydjZHIgKHNvcnQgZmFjZXMgKGxhbWJkYSAoZjEgZjIpICg8IChjYXIgZjEpIChjYXIgZjIpKSkp KSkpCiAKIChkZWZ1biBtYWtlLWZhY2UgKGZhY2UpCiAgICJEZWZpbmUgYSBuZXcgZmFjZSB3aXRo IG5hbWUgRkFDRSwgYSBzeW1ib2wuCkBAIC0yMTE1LDYgKzIxMzQsOCBAQCB4LWNyZWF0ZS1mcmFt ZS13aXRoLWZhY2VzCiAgICAgKHVud2luZC1wcm90ZWN0CiAJKHByb2duCiAJICAoeC1zZXR1cC1m dW5jdGlvbi1rZXlzIGZyYW1lKQorCSAgKGRvbGlzdCAoZmFjZSAobnJldmVyc2UgKGZhY2UtbGlz dCkpKQorCSAgICAoZmFjZS1zcGVjLXJlY2FsYyBmYWNlIGZyYW1lKSkKIAkgICh4LWhhbmRsZS1y ZXZlcnNlLXZpZGVvIGZyYW1lIHBhcmFtZXRlcnMpCiAJICAoZnJhbWUtc2V0LWJhY2tncm91bmQt bW9kZSBmcmFtZSB0KQogCSAgKGZhY2Utc2V0LWFmdGVyLWZyYW1lLWRlZmF1bHQgZnJhbWUgcGFy YW1ldGVycykKQEAgLTIxNDUsNyArMjE2Niw3IEBAIHgtY3JlYXRlLWZyYW1lLXdpdGgtZmFjZXMK IChkZWZ1biBmYWNlLXNldC1hZnRlci1mcmFtZS1kZWZhdWx0IChmcmFtZSAmb3B0aW9uYWwgcGFy YW1ldGVycykKICAgIkluaXRpYWxpemUgdGhlIGZyYW1lLWxvY2FsIGZhY2VzIG9mIEZSQU1FLgog Q2FsY3VsYXRlIHRoZSBmYWNlIGRlZmluaXRpb25zIHVzaW5nIHRoZSBmYWNlIHNwZWNzLCBjdXN0 b20gdGhlbWUKLXNldHRpbmdzLCBYIHJlc291cmNlcywgYW5kIGBmYWNlLW5ldy1mcmFtZS1kZWZh dWx0cycuCitzZXR0aW5ncywgWCByZXNvdXJjZXMsIGFuZCBgZmFjZS0tbmV3LWZyYW1lLWRlZmF1 bHRzJy4KIEZpbmFsbHksIGFwcGx5IGFueSByZWxldmFudCBmYWNlIGF0dHJpYnV0ZXMgZm91bmQg YW1vbmdzdCB0aGUKIGZyYW1lIHBhcmFtZXRlcnMgaW4gUEFSQU1FVEVSUy4iCiAgIDs7IFRoZSBg cmV2ZXJzZScgaXMgc28gdGhhdCBgZGVmYXVsdCcgZ29lcyBmaXJzdC4KQEAgLTIxNTQsNyArMjE3 NSw3IEBAIGZhY2Utc2V0LWFmdGVyLWZyYW1lLWRlZmF1bHQKIAkocHJvZ24KIAkgIDs7IEluaXRp YWxpemUgZmFjZXMgZnJvbSBmYWNlIHNwZWMgYW5kIGN1c3RvbSB0aGVtZS4KIAkgIChmYWNlLXNw ZWMtcmVjYWxjIGZhY2UgZnJhbWUpCi0JICA7OyBBcHBseSBhdHRyaWJ1dGVzIHNwZWNpZmllZCBi eSBmYWNlLW5ldy1mcmFtZS1kZWZhdWx0cworCSAgOzsgQXBwbHkgYXR0cmlidXRlcyBzcGVjaWZp ZWQgYnkgZmFjZS0tbmV3LWZyYW1lLWRlZmF1bHRzCiAJICAoaW50ZXJuYWwtbWVyZ2UtaW4tZ2xv YmFsLWZhY2UgZmFjZSBmcmFtZSkpCiAgICAgICA7OyBEb24ndCBsZXQgaW52YWxpZCBzcGVjcyBw cmV2ZW50IGZyYW1lIGNyZWF0aW9uLgogICAgICAgKGVycm9yIG5pbCkpKQpkaWZmIC0tZ2l0IGEv bGlzcC9mcmFtZS5lbCBiL2xpc3AvZnJhbWUuZWwKaW5kZXggYWZmMWQ0NzllYy4uOTRlMGNmM2M2 YSAxMDA2NDQKLS0tIGEvbGlzcC9mcmFtZS5lbAorKysgYi9saXNwL2ZyYW1lLmVsCkBAIC0xMjMx LDcgKzEyMzEsNyBAQCBmcmFtZS1zZXQtYmFja2dyb3VuZC1tb2RlCiAgICAgICAgICAgICAgICAg ICAgICAgICAgOzsgZHVyaW5nIHN0YXJ0dXAgd2l0aCAtcnYgb24gdGhlIGNvbW1hbmQKICAgICAg ICAgICAgICAgICAgICAgICAgICA7OyBsaW5lIGZvciB0aGUgaW5pdGlhbCBmcmFtZSwgYmVjYXVz ZSBmcmFtZXMKICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBhcmUgbm90IHJlY29yZGVkIGlu IHRoZSBwZHVtcCBmaWxlLgotICAgICAgICAgICAgICAgICAgICAgICAgIChhc3NxIGZhY2UgKGZy YW1lLWZhY2UtYWxpc3QgZnJhbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgIChnZXRoYXNo IGZhY2UgKGZyYW1lLS1mYWNlLWhhc2gtdGFibGUpKQogICAgICAgICAgICAgICAgICAgICAgICAg IChmYWNlLXNwZWMtbWF0Y2gtcCBmYWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChmYWNlLXVzZXItZGVmYXVsdC1zcGVjIGZhY2UpCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lKSkpCmRpZmYgLS1naXQgYS9saXNw L3Byb2dtb2Rlcy9lbGlzcC1tb2RlLmVsIGIvbGlzcC9wcm9nbW9kZXMvZWxpc3AtbW9kZS5lbApp bmRleCBhNTZjNzA5M2U3Li43ZWQyZDNkMDhjIDEwMDY0NAotLS0gYS9saXNwL3Byb2dtb2Rlcy9l bGlzcC1tb2RlLmVsCisrKyBiL2xpc3AvcHJvZ21vZGVzL2VsaXNwLW1vZGUuZWwKQEAgLTEzMjUs OCArMTMyNSw3IEBAIGVsaXNwLS1ldmFsLWRlZnVuLTEKIAkoKGVxIChjYXIgZm9ybSkgJ2N1c3Rv bS1kZWNsYXJlLWZhY2UpCiAJIDs7IFJlc2V0IHRoZSBmYWNlLgogCSAobGV0ICgoZmFjZS1zeW1i b2wgKGV2YWwgKG50aCAxIGZvcm0pIGxleGljYWwtYmluZGluZykpKQotCSAgIChzZXRxIGZhY2Ut bmV3LWZyYW1lLWRlZmF1bHRzCi0JCSAoYXNzcS1kZWxldGUtYWxsIGZhY2Utc3ltYm9sIGZhY2Ut bmV3LWZyYW1lLWRlZmF1bHRzKSkKKwkgICAocmVtaGFzaCBmYWNlLXN5bWJvbCBmYWNlLS1uZXct ZnJhbWUtZGVmYXVsdHMpCiAJICAgKHB1dCBmYWNlLXN5bWJvbCAnZmFjZS1kZWZmYWNlLXNwZWMg bmlsKQogCSAgIChwdXQgZmFjZS1zeW1ib2wgJ2ZhY2Utb3ZlcnJpZGUtc3BlYyBuaWwpKQogCSBm b3JtKQpkaWZmIC0tZ2l0IGEvc3JjL2ZyYW1lLmMgYi9zcmMvZnJhbWUuYwppbmRleCBlM2Q2NWRk MjhmLi4xYjdhNzEyNTE4IDEwMDY0NAotLS0gYS9zcmMvZnJhbWUuYworKysgYi9zcmMvZnJhbWUu YwpAQCAtMTAxNyw2ICsxMDE3LDEwIEBAIG1ha2VfZnJhbWUgKGJvb2wgbWluaV9wKQogICBydy0+ dG90YWxfbGluZXMgPSBGUkFNRV9MSU5FUyAoZikgLSAobWluaV9wID8gMSA6IDApOwogICBydy0+ cGl4ZWxfaGVpZ2h0ID0gcnctPnRvdGFsX2xpbmVzICogRlJBTUVfTElORV9IRUlHSFQgKGYpOwog CisgIGZzZXRfZmFjZV9oYXNoX3RhYmxlCisgICAgKGYsIG1ha2VfaGFzaF90YWJsZSAoaGFzaHRl c3RfZXEsIERFRkFVTFRfSEFTSF9TSVpFLCBERUZBVUxUX1JFSEFTSF9TSVpFLAorICAgICAgICAg ICAgICAgICAgICAgICAgIERFRkFVTFRfUkVIQVNIX1RIUkVTSE9MRCwgUW5pbCwgZmFsc2UpKTsK KwogICBpZiAobWluaV9wKQogICAgIHsKICAgICAgIG13LT50b3BfbGluZSA9IHJ3LT50b3RhbF9s aW5lczsKQEAgLTEzMjUsNyArMTMyOSw3IEBAIERFRlVOICgibWFrZS10ZXJtaW5hbC1mcmFtZSIs IEZtYWtlX3Rlcm1pbmFsX2ZyYW1lLCBTbWFrZV90ZXJtaW5hbF9mcmFtZSwKIHsKICAgc3RydWN0 IGZyYW1lICpmOwogICBzdHJ1Y3QgdGVybWluYWwgKnQgPSBOVUxMOwotICBMaXNwX09iamVjdCBm cmFtZSwgdGVtOworICBMaXNwX09iamVjdCBmcmFtZTsKICAgc3RydWN0IGZyYW1lICpzZiA9IFNF TEVDVEVEX0ZSQU1FICgpOwogCiAjaWZkZWYgTVNET1MKQEAgLTE0MDcsMTQgKzE0MTEsMTYgQEAg REVGVU4gKCJtYWtlLXRlcm1pbmFsLWZyYW1lIiwgRm1ha2VfdGVybWluYWxfZnJhbWUsIFNtYWtl X3Rlcm1pbmFsX2ZyYW1lLAogICBzdG9yZV9pbl9hbGlzdCAoJnBhcm1zLCBRbWluaWJ1ZmZlciwg UXQpOwogICBGbW9kaWZ5X2ZyYW1lX3BhcmFtZXRlcnMgKGZyYW1lLCBwYXJtcyk7CiAKLSAgLyog TWFrZSB0aGUgZnJhbWUgZmFjZSBhbGlzdCBiZSBmcmFtZS1zcGVjaWZpYywgc28gdGhhdCBlYWNo CisgIC8qIE1ha2UgdGhlIGZyYW1lIGZhY2UgaGFzaCBiZSBmcmFtZS1zcGVjaWZpYywgc28gdGhh dCBlYWNoCiAgICAgIGZyYW1lIGNvdWxkIGNoYW5nZSBpdHMgZmFjZSBkZWZpbml0aW9ucyBpbmRl cGVuZGVudGx5LiAgKi8KLSAgZnNldF9mYWNlX2FsaXN0IChmLCBGY29weV9hbGlzdCAoc2YtPmZh Y2VfYWxpc3QpKTsKLSAgLyogU2ltcGxlIEZjb3B5X2FsaXN0IGlzbid0IGVub3VnaCwgYmVjYXVz ZSB3ZSBuZWVkIHRoZSBjb250ZW50cyBvZgotICAgICB0aGUgdmVjdG9ycyB3aGljaCBhcmUgdGhl IENEUnMgb2YgYXNzb2NpYXRpb25zIGluIGZhY2VfYWxpc3QgdG8KKyAgZnNldF9mYWNlX2hhc2hf dGFibGUgKGYsIEZjb3B5X2hhc2hfdGFibGUgKHNmLT5mYWNlX2hhc2hfdGFibGUpKTsKKyAgLyog U2ltcGxlIGNvcHlfaGFzaF90YWJsZSBpc24ndCBlbm91Z2gsIGJlY2F1c2Ugd2UgbmVlZCB0aGUg Y29udGVudHMgb2YKKyAgICAgdGhlIHZlY3RvcnMgd2hpY2ggYXJlIHRoZSB2YWx1ZXMgaW4gZmFj ZV9oYXNoX3RhYmxlIHRvCiAgICAgIGJlIGNvcGllZCBhcyB3ZWxsLiAgKi8KLSAgZm9yICh0ZW0g PSBmLT5mYWNlX2FsaXN0OyBDT05TUCAodGVtKTsgdGVtID0gWENEUiAodGVtKSkKLSAgICBYU0VU Q0RSIChYQ0FSICh0ZW0pLCBGY29weV9zZXF1ZW5jZSAoWENEUiAoWENBUiAodGVtKSkpKTsKKyAg cHRyZGlmZl90IGlkeCA9IDA7CisgIHN0cnVjdCBMaXNwX0hhc2hfVGFibGUgKnRhYmxlID0gWEhB U0hfVEFCTEUgKGYtPmZhY2VfaGFzaF90YWJsZSk7CisgIGZvciAoaWR4ID0gMDsgaWR4IDwgdGFi bGUtPmNvdW50OyArK2lkeCkKKyAgICBzZXRfaGFzaF92YWx1ZV9zbG90ICh0YWJsZSwgaWR4LCBG Y29weV9zZXF1ZW5jZSAoSEFTSF9WQUxVRSAodGFibGUsIGlkeCkpKTsKIAogICBmLT5jYW5fc2V0 X3dpbmRvd19zaXplID0gdHJ1ZTsKICAgZi0+YWZ0ZXJfbWFrZV9mcmFtZSA9IHRydWU7CmRpZmYg LS1naXQgYS9zcmMvZnJhbWUuaCBiL3NyYy9mcmFtZS5oCmluZGV4IDc1YTBiMTg0YzEuLmU3MGY0 MThkYzkgMTAwNjQ0Ci0tLSBhL3NyYy9mcmFtZS5oCisrKyBiL3NyYy9mcmFtZS5oCkBAIC0xNTgs OCArMTU4LDggQEAgI2RlZmluZSBFTUFDU19GUkFNRV9ICiAgICAgIFRoZXJlIGFyZSBmb3VyIGFk ZGl0aW9uYWwgZWxlbWVudHMgb2YgbmlsIGF0IHRoZSBlbmQsIHRvIHRlcm1pbmF0ZS4gICovCiAg IExpc3BfT2JqZWN0IG1lbnVfYmFyX2l0ZW1zOwogCi0gIC8qIEFsaXN0IG9mIGVsZW1lbnRzIChG QUNFLU5BTUUgLiBGQUNFLVZFQ1RPUi1EQVRBKS4gICovCi0gIExpc3BfT2JqZWN0IGZhY2VfYWxp c3Q7CisgIC8qIEhhc2ggdGFibGUgb2YgRkFDRS1OQU1FIGtleXMgYW5kIEZBQ0UtVkVDVE9SLURB VEEgdmFsdWVzLiAgKi8KKyAgTGlzcF9PYmplY3QgZmFjZV9oYXNoX3RhYmxlOwogCiAgIC8qIEEg dmVjdG9yIHRoYXQgcmVjb3JkcyB0aGUgZW50aXJlIHN0cnVjdHVyZSBvZiB0aGlzIGZyYW1lJ3Mg bWVudSBiYXIuCiAgICAgIEZvciB0aGUgZm9ybWF0IG9mIHRoZSBkYXRhLCBzZWUgZXh0ZW5zaXZl IGNvbW1lbnRzIGluIHhtZW51LmMuCkBAIC02NjcsOSArNjY3LDkgQEAgZnNldF9jb25kZW1uZWRf c2Nyb2xsX2JhcnMgKHN0cnVjdCBmcmFtZSAqZiwgTGlzcF9PYmplY3QgdmFsKQogICBmLT5jb25k ZW1uZWRfc2Nyb2xsX2JhcnMgPSB2YWw7CiB9CiBJTkxJTkUgdm9pZAotZnNldF9mYWNlX2FsaXN0 IChzdHJ1Y3QgZnJhbWUgKmYsIExpc3BfT2JqZWN0IHZhbCkKK2ZzZXRfZmFjZV9oYXNoX3RhYmxl IChzdHJ1Y3QgZnJhbWUgKmYsIExpc3BfT2JqZWN0IHZhbCkKIHsKLSAgZi0+ZmFjZV9hbGlzdCA9 IHZhbDsKKyAgZi0+ZmFjZV9oYXNoX3RhYmxlID0gdmFsOwogfQogI2lmIGRlZmluZWQgKEhBVkVf V0lORE9XX1NZU1RFTSkKIElOTElORSB2b2lkCmRpZmYgLS1naXQgYS9zcmMveGZhY2VzLmMgYi9z cmMveGZhY2VzLmMKaW5kZXggYWI0NDQwZjQ2YS4uZDg2YWRlZjYyYyAxMDA2NDQKLS0tIGEvc3Jj L3hmYWNlcy5jCisrKyBiL3NyYy94ZmFjZXMuYwpAQCAtOTUsOSArOTUsMTAgQEAgQ29weXJpZ2h0 IChDKSAxOTkzLTE5OTQsIDE5OTgtMjAyMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K ICAgIHdpdGggdGhlIHN5bWJvbCBgZmFjZScgaW4gc2xvdCAwLCBhbmQgYSBzbG90IGZvciBlYWNo IG9mIHRoZSBmYWNlCiAgICBhdHRyaWJ1dGVzIG1lbnRpb25lZCBhYm92ZS4KIAotICAgVGhlcmUg aXMgYWxzbyBhIGdsb2JhbCBmYWNlIGFsaXN0IGBWZmFjZV9uZXdfZnJhbWVfZGVmYXVsdHMnLiAg RmFjZQotICAgZGVmaW5pdGlvbnMgZnJvbSB0aGlzIGxpc3QgYXJlIHVzZWQgdG8gaW5pdGlhbGl6 ZSBmYWNlcyBvZiBuZXdseQotICAgY3JlYXRlZCBmcmFtZXMuCisgICBUaGVyZSBpcyBhbHNvIGEg Z2xvYmFsIGZhY2UgbWFwIGBWZmFjZV9uZXdfZnJhbWVfZGVmYXVsdHMnLAorICAgY29udGFpbmlu ZyBjb25zZXMgb2YgKEZBQ0VfSUQgLiBGQUNFX0RFRklOSVRJT04pLiAgRmFjZSBkZWZpbml0aW9u cworICAgZnJvbSB0aGlzIHRhYmxlIGFyZSB1c2VkIHRvIGluaXRpYWxpemUgZmFjZXMgb2YgbmV3 bHkgY3JlYXRlZAorICAgZnJhbWVzLgogCiAgICBBIGZhY2UgZG9lc24ndCBoYXZlIHRvIHNwZWNp ZnkgYWxsIGF0dHJpYnV0ZXMuICBUaG9zZSBub3Qgc3BlY2lmaWVkCiAgICBoYXZlIGEgdmFsdWUg b2YgYHVuc3BlY2lmaWVkJy4gIEZhY2VzIHNwZWNpZnlpbmcgYWxsIGF0dHJpYnV0ZXMgYnV0CkBA IC0xOTYyLDEzICsxOTYzLDExIEBAIGxmYWNlX2Zyb21fZmFjZV9uYW1lX25vX3Jlc29sdmUgKHN0 cnVjdCBmcmFtZSAqZiwgTGlzcF9PYmplY3QgZmFjZV9uYW1lLAogICBMaXNwX09iamVjdCBsZmFj ZTsKIAogICBpZiAoZikKLSAgICBsZmFjZSA9IGFzc3Ffbm9fcXVpdCAoZmFjZV9uYW1lLCBmLT5m YWNlX2FsaXN0KTsKKyAgICBsZmFjZSA9IEZnZXRoYXNoIChmYWNlX25hbWUsIGYtPmZhY2VfaGFz aF90YWJsZSwgUW5pbCk7CiAgIGVsc2UKLSAgICBsZmFjZSA9IGFzc3Ffbm9fcXVpdCAoZmFjZV9u YW1lLCBWZmFjZV9uZXdfZnJhbWVfZGVmYXVsdHMpOworICAgIGxmYWNlID0gQ0RSIChGZ2V0aGFz aCAoZmFjZV9uYW1lLCBWZmFjZV9uZXdfZnJhbWVfZGVmYXVsdHMsIFFuaWwpKTsKIAotICBpZiAo Q09OU1AgKGxmYWNlKSkKLSAgICBsZmFjZSA9IFhDRFIgKGxmYWNlKTsKLSAgZWxzZSBpZiAoc2ln bmFsX3ApCisgIGlmIChzaWduYWxfcCAmJiBOSUxQIChsZmFjZSkpCiAgICAgc2lnbmFsX2Vycm9y ICgiSW52YWxpZCBmYWNlIiwgZmFjZV9uYW1lKTsKIAogICBjaGVja19sZmFjZSAobGZhY2UpOwpA QCAtMjg2NywxMSArMjg2Niw2IEBAIERFRlVOICgiaW50ZXJuYWwtbWFrZS1saXNwLWZhY2UiLCBG aW50ZXJuYWxfbWFrZV9saXNwX2ZhY2UsCiAgIC8qIEFkZCBhIGdsb2JhbCBkZWZpbml0aW9uIGlm IHRoZXJlIGlzIG5vbmUuICAqLwogICBpZiAoTklMUCAoZ2xvYmFsX2xmYWNlKSkKICAgICB7Ci0g ICAgICBnbG9iYWxfbGZhY2UgPSBtYWtlX3ZlY3RvciAoTEZBQ0VfVkVDVE9SX1NJWkUsIFF1bnNw ZWNpZmllZCk7Ci0gICAgICBBU0VUIChnbG9iYWxfbGZhY2UsIDAsIFFmYWNlKTsKLSAgICAgIFZm YWNlX25ld19mcmFtZV9kZWZhdWx0cyA9IEZjb25zIChGY29ucyAoZmFjZSwgZ2xvYmFsX2xmYWNl KSwKLQkJCQkJVmZhY2VfbmV3X2ZyYW1lX2RlZmF1bHRzKTsKLQogICAgICAgLyogQXNzaWduIHRo ZSBuZXcgTGlzcCBmYWNlIGEgdW5pcXVlIElELiAgVGhlIG1hcHBpbmcgZnJvbSBMaXNwCiAJIGZh Y2UgaWQgdG8gTGlzcCBmYWNlIGlzIGdpdmVuIGJ5IHRoZSB2ZWN0b3IgbGZhY2VfaWRfdG9fbmFt ZS4KIAkgVGhlIG1hcHBpbmcgZnJvbSBMaXNwIGZhY2UgdG8gTGlzcCBmYWNlIGlkIGlzIGdpdmVu IGJ5IHRoZQpAQCAtMjg4MSw5ICsyODc1LDE0IEBAIERFRlVOICgiaW50ZXJuYWwtbWFrZS1saXNw LWZhY2UiLCBGaW50ZXJuYWxfbWFrZV9saXNwX2ZhY2UsCiAJICB4cGFsbG9jIChsZmFjZV9pZF90 b19uYW1lLCAmbGZhY2VfaWRfdG9fbmFtZV9zaXplLCAxLCBNQVhfRkFDRV9JRCwKIAkJICAgc2l6 ZW9mICpsZmFjZV9pZF90b19uYW1lKTsKIAorICAgICAgTGlzcF9PYmplY3QgZmFjZV9pZCA9IG1h a2VfZml4bnVtIChuZXh0X2xmYWNlX2lkKTsKICAgICAgIGxmYWNlX2lkX3RvX25hbWVbbmV4dF9s ZmFjZV9pZF0gPSBmYWNlOwotICAgICAgRnB1dCAoZmFjZSwgUWZhY2UsIG1ha2VfZml4bnVtIChu ZXh0X2xmYWNlX2lkKSk7CisgICAgICBGcHV0IChmYWNlLCBRZmFjZSwgZmFjZV9pZCk7CiAgICAg ICArK25leHRfbGZhY2VfaWQ7CisKKyAgICAgIGdsb2JhbF9sZmFjZSA9IG1ha2VfdmVjdG9yIChM RkFDRV9WRUNUT1JfU0laRSwgUXVuc3BlY2lmaWVkKTsKKyAgICAgIEFTRVQgKGdsb2JhbF9sZmFj ZSwgMCwgUWZhY2UpOworICAgICAgRnB1dGhhc2ggKGZhY2UsIEZjb25zIChmYWNlX2lkLCBnbG9i YWxfbGZhY2UpLCBWZmFjZV9uZXdfZnJhbWVfZGVmYXVsdHMpOwogICAgIH0KICAgZWxzZSBpZiAo ZiA9PSBOVUxMKQogICAgIGZvciAoaSA9IDE7IGkgPCBMRkFDRV9WRUNUT1JfU0laRTsgKytpKQpA QCAtMjg5Niw3ICsyODk1LDcgQEAgREVGVU4gKCJpbnRlcm5hbC1tYWtlLWxpc3AtZmFjZSIsIEZp bnRlcm5hbF9tYWtlX2xpc3BfZmFjZSwKIAl7CiAJICBsZmFjZSA9IG1ha2VfdmVjdG9yIChMRkFD RV9WRUNUT1JfU0laRSwgUXVuc3BlY2lmaWVkKTsKIAkgIEFTRVQgKGxmYWNlLCAwLCBRZmFjZSk7 Ci0JICBmc2V0X2ZhY2VfYWxpc3QgKGYsIEZjb25zIChGY29ucyAoZmFjZSwgbGZhY2UpLCBmLT5m YWNlX2FsaXN0KSk7CisgICAgICAgICAgRnB1dGhhc2ggKGZhY2UsIGxmYWNlLCBmLT5mYWNlX2hh c2hfdGFibGUpOwogCX0KICAgICAgIGVsc2UKIAlmb3IgKGkgPSAxOyBpIDwgTEZBQ0VfVkVDVE9S X1NJWkU7ICsraSkKQEAgLTMwNTcsNyArMzA1Niw3IEBAIERFRlVOICgiaW50ZXJuYWwtc2V0LWxp c3AtZmFjZS1hdHRyaWJ1dGUiLCBGaW50ZXJuYWxfc2V0X2xpc3BfZmFjZV9hdHRyaWJ1dGUsCiAg ICAgICBmID0gTlVMTDsKICAgICAgIGxmYWNlID0gbGZhY2VfZnJvbV9mYWNlX25hbWUgKE5VTEws IGZhY2UsIHRydWUpOwogCi0gICAgICAvKiBXaGVuIHVwZGF0aW5nIGZhY2UtbmV3LWZyYW1lLWRl ZmF1bHRzLCB3ZSBwdXQgOmlnbm9yZS1kZWZmYWNlCisgICAgICAvKiBXaGVuIHVwZGF0aW5nIGZh Y2UtLW5ldy1mcmFtZS1kZWZhdWx0cywgd2UgcHV0IDppZ25vcmUtZGVmZmFjZQogCSB3aGVyZSB0 aGUgY2FsbGVyIHdhbnRzIGB1bnNwZWNpZmllZCcuICBUaGlzIGZvcmNlcyB0aGUgZnJhbWUKIAkg ZGVmYXVsdHMgdG8gaWdub3JlIHRoZSBkZWZmYWNlIHZhbHVlLiAgT3RoZXJ3aXNlLCB0aGUgZGVm ZmFjZQogCSB3aWxsIHRha2UgZWZmZWN0LCB3aGljaCBpcyBnZW5lcmFsbHkgbm90IHdoYXQgaXMg aW50ZW5kZWQuCkBAIC0zNjQyLDcgKzM2NDEsNyBAQCB1cGRhdGVfZmFjZV9mcm9tX2ZyYW1lX3Bh cmFtZXRlciAoc3RydWN0IGZyYW1lICpmLCBMaXNwX09iamVjdCBwYXJhbSwKICAgLyogSWYgdGhl cmUgYXJlIG5vIGZhY2VzIHlldCwgZ2l2ZSB1cC4gIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiBjYWxs ZWQKICAgICAgZnJvbSBGeF9jcmVhdGVfZnJhbWUsIGFuZCB3ZSBkbyB0aGUgbmVjZXNzYXJ5IHRo aW5ncyBsYXRlciBpbgogICAgICBmYWNlLXNldC1hZnRlci1mcmFtZS1kZWZhdWx0cy4gICovCi0g IGlmIChOSUxQIChmLT5mYWNlX2FsaXN0KSkKKyAgaWYgKFhGSVhOQVQgKEZoYXNoX3RhYmxlX2Nv dW50IChmLT5mYWNlX2hhc2hfdGFibGUpKSA9PSAwKQogICAgIHJldHVybjsKIAogICBpZiAoRVEg KHBhcmFtLCBRZm9yZWdyb3VuZF9jb2xvcikpCkBAIC00MzA4LDE0ICs0MzA3LDEzIEBAIERFRlVO ICgiaW50ZXJuYWwtbGlzcC1mYWNlLWVtcHR5LXAiLCBGaW50ZXJuYWxfbGlzcF9mYWNlX2VtcHR5 X3AsCiAgIHJldHVybiBpID09IExGQUNFX1ZFQ1RPUl9TSVpFID8gUXQgOiBRbmlsOwogfQogCi0K LURFRlVOICgiZnJhbWUtZmFjZS1hbGlzdCIsIEZmcmFtZV9mYWNlX2FsaXN0LCBTZnJhbWVfZmFj ZV9hbGlzdCwKK0RFRlVOICgiZnJhbWUtLWZhY2UtaGFzaC10YWJsZSIsIEZmcmFtZV9mYWNlX2hh c2hfdGFibGUsIFNmcmFtZV9mYWNlX2hhc2hfdGFibGUsCiAgICAgICAgMCwgMSwgMCwKLSAgICAg ICBkb2M6IC8qIFJldHVybiBhbiBhbGlzdCBvZiBmcmFtZS1sb2NhbCBmYWNlcyBkZWZpbmVkIG9u IEZSQU1FLgorICAgICAgIGRvYzogLyogUmV0dXJuIGEgaGFzaCB0YWJsZSBvZiBmcmFtZS1sb2Nh bCBmYWNlcyBkZWZpbmVkIG9uIEZSQU1FLgogRm9yIGludGVybmFsIHVzZSBvbmx5LiAgKi8pCiAg IChMaXNwX09iamVjdCBmcmFtZSkKIHsKLSAgcmV0dXJuIGRlY29kZV9saXZlX2ZyYW1lIChmcmFt ZSktPmZhY2VfYWxpc3Q7CisgIHJldHVybiBkZWNvZGVfbGl2ZV9mcmFtZSAoZnJhbWUpLT5mYWNl X2hhc2hfdGFibGU7CiB9CiAKIApAQCAtNjgzMiwzMCArNjgzMCwzMiBAQCBERUZVTiAoInNob3ct ZmFjZS1yZXNvdXJjZXMiLCBGc2hvd19mYWNlX3Jlc291cmNlcywgU3Nob3dfZmFjZV9yZXNvdXJj ZXMsCiAKICNpZmRlZiBIQVZFX1BEVU1QRVIKIC8qIEFsbCB0aGUgZmFjZXMgZGVmaW5lZCBkdXJp bmcgbG9hZHVwIGFyZSByZWNvcmRlZCBpbgotICAgZmFjZS1uZXctZnJhbWUtZGVmYXVsdHMsIHdp dGggdGhlIGxhc3QgZmFjZSBmaXJzdCBpbiB0aGUgbGlzdC4gIFdlCi0gICBuZWVkIHRvIHNldCBu ZXh0X2xmYWNlX2lkIHRvIHRoZSBuZXh0IGZhY2UgSUQgbnVtYmVyLCBzbyB0aGF0IGFueQotICAg bmV3IGZhY2VzIGRlZmluZWQgaW4gdGhpcyBzZXNzaW9uIHdpbGwgaGF2ZSBmYWNlIElEcyBkaWZm ZXJlbnQgZnJvbQotICAgdGhvc2UgZGVmaW5lZCBkdXJpbmcgbG9hZHVwLiAgV2UgYWxzbyBuZWVk IHRvIHNldCB1cCB0aGUKLSAgIGxmYWNlX2lkX3RvX25hbWVbXSBhcnJheSBmb3IgdGhlIGZhY2Vz IHRoYXQgd2VyZSBkZWZpbmVkIGR1cmluZwotICAgbG9hZHVwLiAgKi8KKyAgIGZhY2UtbmV3LWZy YW1lLWRlZmF1bHRzLiAgV2UgbmVlZCB0byBzZXQgbmV4dF9sZmFjZV9pZCB0byB0aGUgbmV4dAor ICAgZmFjZSBJRCBudW1iZXIsIHNvIHRoYXQgYW55IG5ldyBmYWNlcyBkZWZpbmVkIGluIHRoaXMg c2Vzc2lvbiB3aWxsCisgICBoYXZlIGZhY2UgSURzIGRpZmZlcmVudCBmcm9tIHRob3NlIGRlZmlu ZWQgZHVyaW5nIGxvYWR1cC4gIFdlIGFsc28KKyAgIG5lZWQgdG8gc2V0IHVwIHRoZSBsZmFjZV9p ZF90b19uYW1lW10gYXJyYXkgZm9yIHRoZSBmYWNlcyB0aGF0IHdlcmUKKyAgIGRlZmluZWQgZHVy aW5nIGxvYWR1cC4gICovCiB2b2lkCiBpbml0X3hmYWNlcyAodm9pZCkKIHsKLSAgaWYgKENPTlNQ IChWZmFjZV9uZXdfZnJhbWVfZGVmYXVsdHMpKQorICBpbnQgbmZhY2VzID0gWEZJWE5BVCAoRmhh c2hfdGFibGVfY291bnQgKFZmYWNlX25ld19mcmFtZV9kZWZhdWx0cykpOworICBpZiAobmZhY2Vz ID4gMCkKICAgICB7CiAgICAgICAvKiBBbGxvY2F0ZSB0aGUgbGZhY2VfaWRfdG9fbmFtZVtdIGFy cmF5LiAgKi8KLSAgICAgIGxmYWNlX2lkX3RvX25hbWVfc2l6ZSA9IG5leHRfbGZhY2VfaWQgPQot CVhGSVhOQVQgKEZsZW5ndGggKFZmYWNlX25ld19mcmFtZV9kZWZhdWx0cykpOworICAgICAgbGZh Y2VfaWRfdG9fbmFtZV9zaXplID0gbmV4dF9sZmFjZV9pZCA9IG5mYWNlczsKICAgICAgIGxmYWNl X2lkX3RvX25hbWUgPSB4bm1hbGxvYyAobmV4dF9sZmFjZV9pZCwgc2l6ZW9mICpsZmFjZV9pZF90 b19uYW1lKTsKIAogICAgICAgLyogU3RvcmUgdGhlIGZhY2VzLiAgKi8KLSAgICAgIExpc3BfT2Jq ZWN0IHRhaWw7Ci0gICAgICBpbnQgaSA9IG5leHRfbGZhY2VfaWQgLSAxOwotICAgICAgZm9yICh0 YWlsID0gVmZhY2VfbmV3X2ZyYW1lX2RlZmF1bHRzOyBDT05TUCAodGFpbCk7IHRhaWwgPSBYQ0RS ICh0YWlsKSkKKyAgICAgIHN0cnVjdCBMaXNwX0hhc2hfVGFibGUqIHRhYmxlID0gWEhBU0hfVEFC TEUgKFZmYWNlX25ld19mcmFtZV9kZWZhdWx0cyk7CisgICAgICBmb3IgKHB0cmRpZmZfdCBpZHgg PSAwOyBpZHggPCBuZmFjZXM7ICsraWR4KQogCXsKLQkgIExpc3BfT2JqZWN0IGxmYWNlID0gWENB UiAodGFpbCk7Ci0JICBlYXNzZXJ0IChpID49IDApOwotCSAgbGZhY2VfaWRfdG9fbmFtZVtpLS1d ID0gWENBUiAobGZhY2UpOworCSAgTGlzcF9PYmplY3QgbGZhY2UgPSBIQVNIX0tFWSAodGFibGUs IGlkeCk7CisJICBMaXNwX09iamVjdCBmYWNlX2lkID0gQ0FSIChIQVNIX1ZBTFVFICh0YWJsZSwg aWR4KSk7CisgICAgICAgICAgaWYgKEZJWE5BVFAgKGZhY2VfaWQpKSB7CisgICAgICAgICAgICAg IGludCBpZCA9IFhGSVhOQVQgKGZhY2VfaWQpOworICAgICAgICAgICAgICBlYXNzZXJ0IChpZCA+ PSAwKTsKKyAgICAgICAgICAgICAgbGZhY2VfaWRfdG9fbmFtZVtpZF0gPSBsZmFjZTsKKyAgICAg ICAgICAgIH0KIAl9CiAgICAgfQogICBmYWNlX2F0dHJfc3ltWzBdID0gUWZhY2U7CkBAIC03MDEx LDcgKzcwMTEsNyBAQCBzeW1zX29mX3hmYWNlcyAodm9pZCkKICAgZGVmc3ViciAoJlNpbnRlcm5h bF9jb3B5X2xpc3BfZmFjZSk7CiAgIGRlZnN1YnIgKCZTaW50ZXJuYWxfbWVyZ2VfaW5fZ2xvYmFs X2ZhY2UpOwogICBkZWZzdWJyICgmU2ZhY2VfZm9udCk7Ci0gIGRlZnN1YnIgKCZTZnJhbWVfZmFj ZV9hbGlzdCk7CisgIGRlZnN1YnIgKCZTZnJhbWVfZmFjZV9oYXNoX3RhYmxlKTsKICAgZGVmc3Vi ciAoJlNkaXNwbGF5X3N1cHBvcnRzX2ZhY2VfYXR0cmlidXRlc19wKTsKICAgZGVmc3ViciAoJlNj b2xvcl9kaXN0YW5jZSk7CiAgIGRlZnN1YnIgKCZTaW50ZXJuYWxfc2V0X2ZvbnRfc2VsZWN0aW9u X29yZGVyKTsKQEAgLTcwMzUsOSArNzAzNSwxMiBAQCBzeW1zX29mX3hmYWNlcyAodm9pZCkKIHRo ZSAic3BlY2lmaXR5IiBvZiBhIGZhY2Ugc3BlY2lmaWNhdGlvbiBhbmQgc2hvdWxkIGJlIGxldC1i b3VuZAogb25seSBmb3IgdGhpcyBwdXJwb3NlLiAgKi8pOwogCi0gIERFRlZBUl9MSVNQICgiZmFj ZS1uZXctZnJhbWUtZGVmYXVsdHMiLCBWZmFjZV9uZXdfZnJhbWVfZGVmYXVsdHMsCi0gICAgZG9j OiAvKiBMaXN0IG9mIGdsb2JhbCBmYWNlIGRlZmluaXRpb25zIChmb3IgaW50ZXJuYWwgdXNlIG9u bHkuKSAgKi8pOwotICBWZmFjZV9uZXdfZnJhbWVfZGVmYXVsdHMgPSBRbmlsOworICBERUZWQVJf TElTUCAoImZhY2UtLW5ldy1mcmFtZS1kZWZhdWx0cyIsIFZmYWNlX25ld19mcmFtZV9kZWZhdWx0 cywKKyAgICBkb2M6IC8qIEhhc2ggdGFibGUgb2YgZ2xvYmFsIGZhY2UgZGVmaW5pdGlvbnMgKGZv ciBpbnRlcm5hbCB1c2Ugb25seS4pICAqLyk7CisgIFZmYWNlX25ld19mcmFtZV9kZWZhdWx0cyA9 CisgICAgLyogMzMgZW50cmllcyBpcyBlbm91Z2ggdG8gZml0IGFsbCBiYXNpYyBmYWNlcyAqLwor ICAgIG1ha2VfaGFzaF90YWJsZSAoaGFzaHRlc3RfZXEsIDMzLCBERUZBVUxUX1JFSEFTSF9TSVpF LAorICAgICAgICAgICAgICAgICAgICAgREVGQVVMVF9SRUhBU0hfVEhSRVNIT0xELCBRbmlsLCBm YWxzZSk7CiAKICAgREVGVkFSX0xJU1AgKCJmYWNlLWRlZmF1bHQtc3RpcHBsZSIsIFZmYWNlX2Rl ZmF1bHRfc3RpcHBsZSwKICAgICBkb2M6IC8qIERlZmF1bHQgc3RpcHBsZSBwYXR0ZXJuIHVzZWQg b24gbW9ub2Nocm9tZSBkaXNwbGF5cy4KLS0gCjIuMzEuMQoK --Multipart_Thu_May_13_15:56:24_2021-1-- --pgp-sign-Multipart_Thu_May_13_15:56:24_2021-1 Content-Type: application/pgp-signature Content-Transfer-Encoding: 7bit Content-Description: OpenPGP Digital Signature -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEMs5zGc3ddpJcaCdJrDCBpVWB0sAFAmCco2gACgkQrDCBpVWB 0sCm1w/7BeGUOYMjEzApl/2PmfqiIQrT2F1ul2cMMXku/ffMBjP85Vk39nEmyOnN BNBtkjEC+Qcv94oRebpPM1KzNIiIkHTNL+ifLXcKM7q6HtyauWZolDz8PK97tfgJ UZ1XmjyXps6E4X4dl5oco0UEIJ/Vh2teNO4tuPiDmFs/OsNcmGYrA6d6MEZNmP24 McPxPHjeEV5jsjC635EGCixviLNiBGw4ufdyyv7Y5a4fL3YA+2BGSFWJgkNO/voM f+EE9yRMxgmTKROJJTHMh803CtS9oOHajqkgFpvcjFuwNe9BQ0kmdj19zCRkdI9d fr1NG63JOVx+e0ASd1BjZIuP1nxzrcfQeCBAGNr0iccpdAXtbelOtP6Y62uqtVuT EUB6tOaeiKnewL+jvhtwWJe4J+dqCSA0Zxah6UV1rrabmTvxqoO3gy5sC+LHoDj9 NbceQ+cCa9IMWbdJDmDPML/+vRwlQ4bxO/19uJlMJqWhyoxmuEYtye+zb6K43CBG yWwo0GP71wqUU/780e4E4Kdr20vCKcCpyg8nIqzmWASHpA4j5pExbueIGG7POJp5 +ianvrqHXny0E4Ahng1h2fQvpZkp+mgZewewxpiIhncDZeqnQL9FZS8jhLW/wVo4 +6uRF2/Iw7F2nYZz3Y1e06xey9XsnH7/bzs9BBpXd1cK8z1AlKQ= =Gnn8 -----END PGP SIGNATURE----- --pgp-sign-Multipart_Thu_May_13_15:56:24_2021-1-- From debbugs-submit-bounces@debbugs.gnu.org Thu May 13 05:15:43 2021 Received: (at 41200) by debbugs.gnu.org; 13 May 2021 09:15:43 +0000 Received: from localhost ([127.0.0.1]:41319 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lh7RX-0006HZ-An for submit@debbugs.gnu.org; Thu, 13 May 2021 05:15:43 -0400 Received: from quimby.gnus.org ([95.216.78.240]:39976) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lh7RV-0006HN-LC for 41200@debbugs.gnu.org; Thu, 13 May 2021 05:15:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=xMI5eGcH0m41hR7lyoIWdYKdONMfFPeM0USdf257JSY=; b=ttYMOQSt3H1fBlsNooAhInLeLn OEpTyG0gtg2kIz6IGREwQFHBlxkHFjgrXs5MwoL/qa5dUr+WeL3Y6HE8vWH8UWiPETGmkNIefNMS7 /WEQRNHI834vy6g4Hrsr0jxN49wOD+Q1iuZO9byLaeDR2xRRtGdK30vlP6Dr2t3KGSuQ=; Received: from cm-84.212.220.105.getinternet.no ([84.212.220.105] helo=xo) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lh7RJ-00026y-Nx; Thu, 13 May 2021 11:15:32 +0200 From: Lars Ingebrigtsen To: Jashank Jeremy Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <87tuojhqdr.wl-jashank@rulingia.com.au> <878s4ju24k.fsf@gnus.org> <871rab8exi.wl-jashank@rulingia.com.au> X-Now-Playing: Chrome Hoof's _Pre-Emptive False Rapture_: "Pronoid" Date: Thu, 13 May 2021 11:15:29 +0200 In-Reply-To: <871rab8exi.wl-jashank@rulingia.com.au> (Jashank Jeremy's message of "Thu, 13 May 2021 15:56:25 +1200") Message-ID: <87fsyrro3y.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: Jashank Jeremy writes: > The 10th revision of that patch is attached: I have been running it for > a few weeks atop 7c901d90e620b4d3651b86c13faf1e81eeb3db10 (master at the > time), so I can tell you it also works with nativ [...] Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41200 Cc: Emacs bug41200 <41200@debbugs.gnu.org>, =?utf-8?Q?Cl=C3=A9ment?= Pit-Claudel , Stefan Monnier X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Jashank Jeremy writes: > The 10th revision of that patch is attached: I have been running it for > a few weeks atop 7c901d90e620b4d3651b86c13faf1e81eeb3db10 (master at the > time), so I can tell you it also works with native-compile. I can confirm that this version fixes the face problems observed with the previous version. I don't see your copyright assignment papers on file -- is that in the pipeline, or have you yet to start the assignment process? -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From debbugs-submit-bounces@debbugs.gnu.org Thu May 13 19:27:07 2021 Received: (at 41200) by debbugs.gnu.org; 13 May 2021 23:27:07 +0000 Received: from localhost ([127.0.0.1]:44551 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lhKjT-0003nv-Lz for submit@debbugs.gnu.org; Thu, 13 May 2021 19:27:07 -0400 Received: from emeralfel.rulingia.com.au ([52.64.96.81]:23077 helo=fort.rulingia.com.au) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lhKjQ-0003nk-V0 for 41200@debbugs.gnu.org; Thu, 13 May 2021 19:27:06 -0400 Received: from alyzon.rulingia.com.au (ppp59-167-172-93.static.internode.on.net [59.167.172.93]) by fort.rulingia.com.au (Postfix) with ESMTPSA id AC0062110C2; Fri, 14 May 2021 09:27:01 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rulingia.com.au; s=mail; t=1620948421; bh=6bVRGB3e3v+guQo1v1G3EjG57Tq6TRXoNgQANyxveZc=; h=Date:From:To:Cc:Subject:In-Reply-To:References; b=n7eX2tBQUwZskEaLLyHMFJyGFMTsdPsG3kcVTyFABVQjkrWHI35eyboAevUVQe/Rl QPVgeMfKndmNKvEL2vEWUkH92BYX+IFMtyWNXty8I7592VZ1agWYIxU2G22YPOM+wS yebisKm0LQ0woYyHI2+BMbqPAMhSx9HFWojTErLM= Received: from lisbon.rulingia.com.au. (unknown [192.168.234.6]) by alyzon.rulingia.com.au (Postfix) with ESMTPA id D8EC86C1A8; Fri, 14 May 2021 09:27:00 +1000 (AEST) Date: Fri, 14 May 2021 11:26:55 +1200 Message-ID: <87y2ci6wqo.wl-jashank@rulingia.com.au> From: Jashank Jeremy To: Lars Ingebrigtsen Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined In-Reply-To: <87fsyrro3y.fsf@gnus.org> References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <87tuojhqdr.wl-jashank@rulingia.com.au> <878s4ju24k.fsf@gnus.org> <871rab8exi.wl-jashank@rulingia.com.au> <87fsyrro3y.fsf@gnus.org> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM-LB/1.14.9 (=?ISO-8859-4?Q?Goj=F2?=) APEL-LB/10.8 EasyPG/1.0.0 Emacs/28.0.50 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: multipart/signed; boundary="pgp-sign-Multipart_Fri_May_14_11:26:51_2021-1"; micalg=pgp-sha256; protocol="application/pgp-signature" Content-Transfer-Encoding: 7bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41200 Cc: Emacs bug41200 <41200@debbugs.gnu.org>, =?ISO-8859-1?Q?Cl=E9ment?= Pit-Claudel , Stefan Monnier X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --pgp-sign-Multipart_Fri_May_14_11:26:51_2021-1 Content-Type: text/plain; charset=US-ASCII At 2021-05-13 11:15:29 +0200, Lars Ingebrigtsen wrote: > Jashank Jeremy writes: >> The 10th revision of that patch is attached: I have been running it for >> a few weeks atop 7c901d90e620b4d3651b86c13faf1e81eeb3db10 (master at the >> time), so I can tell you it also works with native-compile. > > I can confirm that this version fixes the face problems observed with > the previous version. Excellent, thanks. > I don't see your copyright assignment papers on file -- is that in the > pipeline, or have you yet to start the assignment process? Started ... but presently stalled due to the employer pipeline hazard. ~jashank --pgp-sign-Multipart_Fri_May_14_11:26:51_2021-1 Content-Type: application/pgp-signature Content-Transfer-Encoding: 7bit Content-Description: OpenPGP Digital Signature -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEMs5zGc3ddpJcaCdJrDCBpVWB0sAFAmCdtbsACgkQrDCBpVWB 0sC1wg//e5pWfyv8mJZrofwT/XSIZSZjm2KON0Bg4CEaBCmDHYd0Y9Ywb7tuhoHA vpjSrlvIH8oL3u5XDoW/Gkvvo5n/0VZm/f6w3zVpMcFVJNVr1GxmeG5d4EWS6Q4X EHrCCpy6XIaCnpYgQNwD2wU1ibVUQj08TwldZDomdRPV5J+f6Gd++57rL095rvjs aCRqC4UxAIg5cDGyWGBlbHGRWogbODVpyIIUQWCgD2Cz9PmUw+6ZtF9tkjBc4cyp icBUhVC4pspOuDRhuifbdWz/YpWMq+mqqACsx1Hvf5Vm8TOArX7GWVCuTk5vzChy XJxARu+vu5bC+VLexwKQ1jeAZyRuwKkdUHjRIhTyOiJlgR3L19KqkA0QrVrvQgSQ 756cbBlMrl/86fRlVs2kIUj0tSnkaW60Zb1z1y4lPYxOLbcwRukTLlhRcHzqG41m bspCoMTJQhLMC6PpwEi59IwxGd86AvR2zTNc86RnULnO3g+OQEC+7ON0NWv2XL49 GkGVKWIvKrwkPYDlHIGLvU5QQ8KQjDGMYnjNFrloHpeP/Aa99YWVBLDL2mbNrR2J 113h0s4XVbqT+U3Qp5HQ7uYnoNie8K11r0UITr+cjfOLiyaGjjbot+yki6FZTa45 NNNbvsq+XBsum31UWq7+JXeohCflpCvlvm65X9y9sGYmIvtj5aM= =52h3 -----END PGP SIGNATURE----- --pgp-sign-Multipart_Fri_May_14_11:26:51_2021-1-- From debbugs-submit-bounces@debbugs.gnu.org Sat Jun 12 08:16:00 2021 Received: (at 41200) by debbugs.gnu.org; 12 Jun 2021 12:16:00 +0000 Received: from localhost ([127.0.0.1]:40481 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ls2YS-0005OH-4f for submit@debbugs.gnu.org; Sat, 12 Jun 2021 08:16:00 -0400 Received: from quimby.gnus.org ([95.216.78.240]:41684) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ls2YQ-0005Hz-Lp for 41200@debbugs.gnu.org; Sat, 12 Jun 2021 08:15:59 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=EMV4FMz/ODmcIqf+mKC2JzhVGSw5WIUGgXvMMwqbjRc=; b=u3T/LyAY6eSYwYOaTjxA9K1ZBE MJNF7cGphtgY1nuY74502IDhXAlaQVTodDYLDG5XO+sTt8c7FGTmeXzQRaCKKuUMLJ6ohtB3so24A Pwm4yEblZMHFCsVbGiZj/6HpUWcxLqBSrhU7OM8CBm20cmb8998nYlbNAggwxL/F9DHA=; Received: from cm-84.212.220.105.getinternet.no ([84.212.220.105] helo=xo) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ls2YD-0005Ur-Ov; Sat, 12 Jun 2021 14:15:48 +0200 From: Lars Ingebrigtsen To: Jashank Jeremy Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <87tuojhqdr.wl-jashank@rulingia.com.au> <878s4ju24k.fsf@gnus.org> <871rab8exi.wl-jashank@rulingia.com.au> <87fsyrro3y.fsf@gnus.org> <87y2ci6wqo.wl-jashank@rulingia.com.au> X-Now-Playing: Colored Music's _Individual Beauty_: "Tamare Kurawanka (Previously Unreleased Version)" Date: Sat, 12 Jun 2021 14:15:45 +0200 In-Reply-To: <87y2ci6wqo.wl-jashank@rulingia.com.au> (Jashank Jeremy's message of "Fri, 14 May 2021 11:26:55 +1200") Message-ID: <87fsxn8ej2.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: Jashank Jeremy writes: >> I don't see your copyright assignment papers on file -- is that in the >> pipeline, or have you yet to start the assignment process? > > Started ... but presently stalled due to the employer pipeli [...] Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 41200 Cc: Emacs bug41200 <41200@debbugs.gnu.org>, =?utf-8?Q?Cl=C3=A9ment?= Pit-Claudel , Stefan Monnier X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) Jashank Jeremy writes: >> I don't see your copyright assignment papers on file -- is that in the >> pipeline, or have you yet to start the assignment process? > > Started ... but presently stalled due to the employer pipeline hazard. This was a month ago -- has there been any further progress here? -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From debbugs-submit-bounces@debbugs.gnu.org Sat Jun 12 23:19:38 2021 Received: (at 41200) by debbugs.gnu.org; 13 Jun 2021 03:19:38 +0000 Received: from localhost ([127.0.0.1]:42425 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lsGew-0008Rv-77 for submit@debbugs.gnu.org; Sat, 12 Jun 2021 23:19:38 -0400 Received: from eggs.gnu.org ([209.51.188.92]:35456) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lsGev-0008Ra-98 for 41200@debbugs.gnu.org; Sat, 12 Jun 2021 23:19:37 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:60438) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lsGen-00057j-1R; Sat, 12 Jun 2021 23:19:29 -0400 Received: from rms by fencepost.gnu.org with local (Exim 4.90_1) (envelope-from ) id 1lsGek-0004qQ-7r; Sat, 12 Jun 2021 23:19:28 -0400 Content-Type: text/plain; charset=Utf-8 From: Richard Stallman To: Lars Ingebrigtsen In-Reply-To: <87fsxn8ej2.fsf@gnus.org> (message from Lars Ingebrigtsen on Sat, 12 Jun 2021 14:15:45 +0200) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <87tuojhqdr.wl-jashank@rulingia.com.au> <878s4ju24k.fsf@gnus.org> <871rab8exi.wl-jashank@rulingia.com.au> <87fsyrro3y.fsf@gnus.org> <87y2ci6wqo.wl-jashank@rulingia.com.au> <87fsxn8ej2.fsf@gnus.org> Message-Id: Date: Sat, 12 Jun 2021 23:19:26 -0400 X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 41200 Cc: jashank@rulingia.com.au, 41200@debbugs.gnu.org, cpitclaudel@gmail.com, monnier@iro.umontreal.ca X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: rms@gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > >> I don't see your copyright assignment papers on file -- is that in the > >> pipeline, or have you yet to start the assignment process? > > > > Started ... but presently stalled due to the employer pipeline hazard. > This was a month ago -- has there been any further progress here? Talking with people at the employer, and with the FSF staff, and encouraging them to talk with each other, could enable them to unblock it. Some companies' lawyers look at the issue in a very narrow way, and the FSF staff could help them see a solution. -- Dr Richard Stallman (https://stallman.org) Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) From debbugs-submit-bounces@debbugs.gnu.org Tue Jul 06 08:42:10 2021 Received: (at 41200) by debbugs.gnu.org; 6 Jul 2021 12:42:10 +0000 Received: from localhost ([127.0.0.1]:47630 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m0kOw-0000pX-3l for submit@debbugs.gnu.org; Tue, 06 Jul 2021 08:42:10 -0400 Received: from mail-pg1-f174.google.com ([209.85.215.174]:40804) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m0kOu-0000pI-Tv for 41200@debbugs.gnu.org; Tue, 06 Jul 2021 08:42:09 -0400 Received: by mail-pg1-f174.google.com with SMTP id g22so21261004pgl.7 for <41200@debbugs.gnu.org>; Tue, 06 Jul 2021 05:42:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:in-reply-to:date:message-id:mime-version :content-transfer-encoding; bh=83iDZ52/XSb2mSvBC1qJ1A6MVRMGw559Spxv8qsDc5U=; b=kzF7FdG3s5+kjwljODufnteW/qYDDzSB+S/U78YurMRpvyCjVppbLRuaXQ4x145vFn wDBSwqynbXijJ9uJHycLYYPSIp8hn0puTFVFn/9+1Jqv50v/MMSkNGVgBEHG5NjEqpUu 1laO/+Ky3/3dvT19U0K846ttopRPd++CpSEC6DR9qk+6Nb5+KA7YAuxqsH+YqUc/1t+g g0/kgzeL/ZuZxTaKCbpCF3za2wvLHUZVAEG77sD1XoLB6w3TkSkJUcfOSVHnoYFaNTAq duKEcyelOnrPUjKVD3wihSMj2K4puAPg3TVOYF8niepv13dhlKalACDRRcYVns7LCV+H 8X+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:in-reply-to:date:message-id :mime-version:content-transfer-encoding; bh=83iDZ52/XSb2mSvBC1qJ1A6MVRMGw559Spxv8qsDc5U=; b=QOLn3aM7GoKPaQWmzPAfBSL4v9Hx6VbN59ouVJhuZLHS/d4ZmYObECPWqtid/9VqY/ 18KzSUYXVNRdrwl9Ay5T0xelt6WE+hBMRNb+i048R1Tda05I1nscSLFZR4JOQGFjdXq+ svmpR8XEtK9WSFTceEtlkSPqh6mDS3YDQEKewxIrWTtlE18LX2Xa9xQLHyjv8yIlYcXy 0fJfj3SJhiuTileLXKPfp3Z0TOHAMWOJuZtydxi57fTiSOSubZUl5n+ENg8OEFT8/sZC AwpyZWydfQUn9ZWTBq9cib6KQ0M3e0/g5M7sIJBxVAUkjEtUO0trg3OdiaSFh+1SHJFY AWuw== X-Gm-Message-State: AOAM532yzYjY1YiObDIv7/xVFF+17R9n/8Iwe/fxKYhDEn1obfgbbiQU ea3C6UhCZyWTnpiJSNEESI0= X-Google-Smtp-Source: ABdhPJyiJKr3fm8/Ik9dA6u+F3cQmx5EoQ6Szc19C4RRqvPLFoEwuxpsZyKDOAWvf+0AvhMFsu4FQg== X-Received: by 2002:a62:b414:0:b029:317:52d:7fd5 with SMTP id h20-20020a62b4140000b0290317052d7fd5mr20416435pfn.30.1625575322779; Tue, 06 Jul 2021 05:42:02 -0700 (PDT) Received: from aaron-sub.local (c-73-53-7-76.hsd1.wa.comcast.net. [73.53.7.76]) by smtp.gmail.com with ESMTPSA id x30sm4579640pfh.66.2021.07.06.05.42.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 06 Jul 2021 05:42:02 -0700 (PDT) From: Aaron Jensen To: Lars Ingebrigtsen Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined In-Reply-To: <87fsxn8ej2.fsf@gnus.org> (message from Lars Ingebrigtsen on Sat, 12 Jun 2021 14:15:45 +0200) Date: Tue, 06 Jul 2021 05:41:56 -0700 Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 41200 Cc: jashank@rulingia.com.au, 41200@debbugs.gnu.org, cpitclaudel@gmail.com, monnier@iro.umontreal.ca X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Lars Ingebrigtsen writes: > Jashank Jeremy writes: > >>> I don't see your copyright assignment papers on file -- is that in the >>> pipeline, or have you yet to start the assignment process? >> >> Started ... but presently stalled due to the employer pipeline hazard. > >This was a month ago -- has there been any further progress here? Is there any chance that Cl=C3=A9ment could pick this up from his original patch and avoid waiting for copyright assignment of the corrected/up-to-date patch? I'd do it mysel if I were more familiar with the code, but I'm not. Aaron From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 21 10:02:28 2021 Received: (at 41200) by debbugs.gnu.org; 21 Jul 2021 14:02:28 +0000 Received: from localhost ([127.0.0.1]:38137 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m6Cnr-0001pm-Oo for submit@debbugs.gnu.org; Wed, 21 Jul 2021 10:02:28 -0400 Received: from quimby.gnus.org ([95.216.78.240]:43066) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m6Cnp-0001pT-DU for 41200@debbugs.gnu.org; Wed, 21 Jul 2021 10:02:26 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=yxo1Ki/C3pInElo3/NHjn8E7lxHzw/BQzUuvcYN5EMk=; b=VFI+YFkdqmY8b/NglNE+Ximkfu aoSFf0t+BafpSdOFdPsZV1k1siCSi8faXWUZ2SwbYS0ROM/QhFOiy9PSXxSK52aEBxzBff0oQkSqr sR+hM5j6awfGS37aYh584azdqlBMDC/bGICitZ8ACkdk0spO8MYcOYNBUEHB1woBKx7o=; Received: from cm-84.212.220.105.getinternet.no ([84.212.220.105] helo=elva) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1m6Cnc-0007Cv-GF; Wed, 21 Jul 2021 16:02:15 +0200 From: Lars Ingebrigtsen To: Jashank Jeremy Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <87tuojhqdr.wl-jashank@rulingia.com.au> <878s4ju24k.fsf@gnus.org> <871rab8exi.wl-jashank@rulingia.com.au> X-Now-Playing: Special Request's _#savefabric (8)_: "Requiem" Date: Wed, 21 Jul 2021 16:02:12 +0200 In-Reply-To: <871rab8exi.wl-jashank@rulingia.com.au> (Jashank Jeremy's message of "Thu, 13 May 2021 15:56:25 +1200") Message-ID: <877dhjix3v.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: Jashank Jeremy writes: > Yes --- I have a patched patch which fixes that behaviour. > > The 10th revision of that patch is attached: I have been running it for > a few weeks atop 7c901d90e620b4d3651b86c13faf1e81eeb3db10 (ma [...] Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 41200 Cc: Emacs bug41200 <41200@debbugs.gnu.org>, =?utf-8?Q?Cl=C3=A9ment?= Pit-Claudel , Stefan Monnier X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Jashank Jeremy writes: > Yes --- I have a patched patch which fixes that behaviour. > > The 10th revision of that patch is attached: I have been running it for > a few weeks atop 7c901d90e620b4d3651b86c13faf1e81eeb3db10 (master at the > time), so I can tell you it also works with native-compile. > > I have rebased onto ec574a72f7198d9793b466f33382fff397ac4ce1 (master as > of now) and will test that. I see that the copyright assignment paperwork was finished a couple of weeks ago, so I've now re-tested your patch, and I can't see any glitches, so I've pushed it to Emacs 28. Thanks! -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 21 10:02:28 2021 Received: (at control) by debbugs.gnu.org; 21 Jul 2021 14:02:28 +0000 Received: from localhost ([127.0.0.1]:38139 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m6Cns-0001po-30 for submit@debbugs.gnu.org; Wed, 21 Jul 2021 10:02:28 -0400 Received: from quimby.gnus.org ([95.216.78.240]:43074) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m6Cnq-0001pV-Cv for control@debbugs.gnu.org; Wed, 21 Jul 2021 10:02:26 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Subject:From:To:Message-Id:Date:Sender:Reply-To:Cc: MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=wlzCTNzRorZsrbWVdTZYhOVYKPVagSEv9ibELc91xzo=; b=aK2sTl9IWPgeqbvlsR6zAteBM3 QMSv/Uokg+9KA9rMqnLvCdA+jMpu57ElnJT3mWAklUByzPkzJTnU60vXS5ODI+MXhRFEizOO5b51w qHj4GhPZ5XNx2NVly1XpACkpF5gDmQhvG4swf0UHV5VbTUb00iIpZzir26XFvuxg4aOM=; Received: from cm-84.212.220.105.getinternet.no ([84.212.220.105] helo=elva) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1m6Cni-0007D0-Ql for control@debbugs.gnu.org; Wed, 21 Jul 2021 16:02:20 +0200 Date: Wed, 21 Jul 2021 16:02:18 +0200 Message-Id: <875yx3ix3p.fsf@gnus.org> To: control@debbugs.gnu.org From: Lars Ingebrigtsen Subject: control message for bug #41200 X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: close 41200 28.1 quit Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: control X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) close 41200 28.1 quit From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 21 10:28:58 2021 Received: (at 41200) by debbugs.gnu.org; 21 Jul 2021 14:28:58 +0000 Received: from localhost ([127.0.0.1]:38191 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m6DDV-0004jX-Po for submit@debbugs.gnu.org; Wed, 21 Jul 2021 10:28:57 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:23899) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m6DDS-0004jE-Bp for 41200@debbugs.gnu.org; Wed, 21 Jul 2021 10:28:56 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id F3C69100221; Wed, 21 Jul 2021 10:28:47 -0400 (EDT) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id D4CAE1000F8; Wed, 21 Jul 2021 10:28:46 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1626877726; bh=u5LAkJmVCcBzwMvsiVYwYv85sRTOpspLVpafk7VqGzQ=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=koitv1HGrb7EzepUf5HIoMuJ078I5+NdlDJ94VbkxYQidGVzwqZSB5LRfqJlxLxON raHNjc+xG/6DaAMxhXe9h05a18qTykqRODK8St6vomZ7zx9yXZqQSCN5qefkBZ8Gax 6ZzzITpTRh71YOskrVausLdcR3O1HMkj82grY5fSwpdHHQe32GhyoJg+yMmTEdTcD7 J7nF5o5Rn6a62IfkAZt1kF7IGdm8ibhxazP7jaoU8LZCPHniwUIuJGXAS0vheEvR8B 3WcgVO9kSitxNkAFaNEApz58bTEPMRJitevNr7iOmN0NZ+3BJs3/ytMPzd4DIA5HOo Ly29T2iR0QCJg== Received: from alfajor (unknown [216.154.29.138]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 96FA81200E2; Wed, 21 Jul 2021 10:28:46 -0400 (EDT) From: Stefan Monnier To: Lars Ingebrigtsen Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined Message-ID: References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <87tuojhqdr.wl-jashank@rulingia.com.au> <878s4ju24k.fsf@gnus.org> <871rab8exi.wl-jashank@rulingia.com.au> <877dhjix3v.fsf@gnus.org> Date: Wed, 21 Jul 2021 10:28:45 -0400 In-Reply-To: <877dhjix3v.fsf@gnus.org> (Lars Ingebrigtsen's message of "Wed, 21 Jul 2021 16:02:12 +0200") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.095 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 41200 Cc: Jashank Jeremy , Emacs bug41200 <41200@debbugs.gnu.org>, =?windows-1252?Q?Cl=E9ment?= Pit-Claudel X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Lars Ingebrigtsen [2021-07-21 16:02:12] wrote: > I see that the copyright assignment paperwork was finished a couple of > weeks ago, so I've now re-tested your patch, and I can't see any > glitches, so I've pushed it to Emacs 28. Yay! Stefan From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 21 10:33:02 2021 Received: (at 41200) by debbugs.gnu.org; 21 Jul 2021 14:33:02 +0000 Received: from localhost ([127.0.0.1]:38218 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m6DHS-0004so-32 for submit@debbugs.gnu.org; Wed, 21 Jul 2021 10:33:02 -0400 Received: from mail-qv1-f52.google.com ([209.85.219.52]:46819) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m6DHP-0004sU-LN for 41200@debbugs.gnu.org; Wed, 21 Jul 2021 10:32:59 -0400 Received: by mail-qv1-f52.google.com with SMTP id w2so996631qvh.13 for <41200@debbugs.gnu.org>; Wed, 21 Jul 2021 07:32:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=s4qBOSzqY7qptFgb+4via9cflblQukHZQ5rD1rqDdI0=; b=cSmmQBXGeYsSSy7f+Vmj9vfTXCyJGbVpkfLO30XbHovwQcW8FqhEVbVXw0j49UMaIf Cuuyhd73t5zu6D7RjvLA0C+SiAzkBmerXhpbM1SeXV4lozhsxlWUgAQKBjz0B/94p0JI M7HRFPTV5LulARxzCSt8d9JjUKa2U97SJrOJKrYwnDT8b36YCWiF7NcLzdyy/D61pOd9 8CgJDipoHzl2GgQ1+1gn0Z3+5X6B0pLdHzMeRAAq+fYIyumXaE9+nRxECTOSyGjoXlOc O2/XYo3SVkJyN4V3l1NyW6sP2Zvx2alC8/J+ClS6R7j/Z5JaExYMXr57J3djmzEdoB2J +4AQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=s4qBOSzqY7qptFgb+4via9cflblQukHZQ5rD1rqDdI0=; b=AZzttwIuajHgcCgPd4ZcLeKlavpWZTfvVsTG08fOLHA+O8prYRjj5fVnU+WmQITSLs mbrYiQ6c6QpX+ykqV+6tCd4S3PyfnrlVs+8hD1isg/ocC/A1/jTifKowYcsGKeI4Qmqn UXrjd04x6kNq3VYCk55/lZrVikUZ1iIS+pK3EZRM1GYPhSvwYEdfduTw1FkRL7pRUsZ+ 9C58SfoLL80d+3uUVAVL1Wu77bHG7ERWX5ziBjWLZUAY50xnr3Qv99qbLTbkrhHx857Z 0pacqUOgYOGX2WqY1kNlZBKemlgPRB/mp2iMx+FLwF4WHYzu6jS9bkbQdh+FYOvzJTG0 3Trw== X-Gm-Message-State: AOAM531m+HgLNZXjJp8AIsfFHsY56DTuvOYVfZTSTdkNd2UKp0pNc5AR IAW7uNVnhuZNktx4hbDTQxOeaxkY92g= X-Google-Smtp-Source: ABdhPJyNXVbninaM9Vo0kV9fKVr/TFySnTTYjDeSvgHs+TPAOGcipVzTEUtz4g2pL5yexACIUVxRbw== X-Received: by 2002:a0c:e7c7:: with SMTP id c7mr36208789qvo.56.1626877973778; Wed, 21 Jul 2021 07:32:53 -0700 (PDT) Received: from [192.168.1.11] (c-24-61-240-80.hsd1.ma.comcast.net. [24.61.240.80]) by smtp.googlemail.com with ESMTPSA id 7sm8999781qtx.33.2021.07.21.07.32.52 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 21 Jul 2021 07:32:53 -0700 (PDT) Subject: Re: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined To: Stefan Monnier , Lars Ingebrigtsen References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <87tuojhqdr.wl-jashank@rulingia.com.au> <878s4ju24k.fsf@gnus.org> <871rab8exi.wl-jashank@rulingia.com.au> <877dhjix3v.fsf@gnus.org> From: =?UTF-8?Q?Cl=c3=a9ment_Pit-Claudel?= Message-ID: <89172a22-e836-09d9-e044-77b1aaa8e443@gmail.com> Date: Wed, 21 Jul 2021 10:32:52 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit X-Spam-Score: -0.1 (/) X-Debbugs-Envelope-To: 41200 Cc: Jashank Jeremy , Emacs bug41200 <41200@debbugs.gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.1 (-) On 7/21/21 10:28 AM, Stefan Monnier wrote: > Lars Ingebrigtsen [2021-07-21 16:02:12] wrote: >> I see that the copyright assignment paperwork was finished a couple of >> weeks ago, so I've now re-tested your patch, and I can't see any >> glitches, so I've pushed it to Emacs 28. Thanks everyone! Now to figure why tooltips are blinking so much lately ^^ (it's from before this patch) From unknown Wed Jun 18 23:14:39 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Thu, 19 Aug 2021 11:24:04 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator