Received: (at 80026) by debbugs.gnu.org; 19 Dec 2025 13:19:17 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Dec 19 08:19:17 2025
Received: from localhost ([127.0.0.1]:38233 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1vWaO0-0003kR-C1
for submit <at> debbugs.gnu.org; Fri, 19 Dec 2025 08:19:17 -0500
Received: from mail-pl1-x642.google.com ([2607:f8b0:4864:20::642]:53286)
by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
(Exim 4.84_2) (envelope-from <visuweshm@HIDDEN>)
id 1vWaNx-0003jz-2H
for 80026 <at> debbugs.gnu.org; Fri, 19 Dec 2025 08:19:10 -0500
Received: by mail-pl1-x642.google.com with SMTP id
d9443c01a7336-2a0d67f1877so21294745ad.2
for <80026 <at> debbugs.gnu.org>; Fri, 19 Dec 2025 05:19:09 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1766150343; x=1766755143; darn=debbugs.gnu.org;
h=mime-version:user-agent:references:message-id:date:in-reply-to
:subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to;
bh=Fg37f1BAMsdNRiObKcGs4jkcpZjQgtnurZfIFCfLBR0=;
b=fiENtoFqGDvl+F77FzcOgXXeOX2K+6w4p7PIrK24WeH6LdjOjFzVOS+aWZudsOo7HY
009poTN+SjeTFRRtNoZK38o19iW4pmg62q0nBE1oTGBe+pZDAx8opAuZoHCGX+GxtoGU
KOy3ggLz8YSYpwsixD2rR35pVcIv+wZ6PfFu/+fEjJ6mjxf2FxyFGmIPeEiCZ2sLY/SD
JyiuxU5qpmKoipcwtweuu2hcvUjWfblrOnnK13cyL6iu5HJzyyPzaNrtCTNPnWJ5IMz6
sSJk2dzxMskyygtnbFO3C5+aJE0SM4C9jrgebvIpLpBcLznRv9wl0H38bgDUqZw8+j3x
Rblw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1766150343; x=1766755143;
h=mime-version:user-agent:references:message-id:date:in-reply-to
:subject:cc:to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject
:date:message-id:reply-to;
bh=Fg37f1BAMsdNRiObKcGs4jkcpZjQgtnurZfIFCfLBR0=;
b=IPOfhliqMKRKOITw3hasM97KmVwf0OVrOhOk7AedtYqIaj5KFMCw/EQYUxBTKDiAlH
Pf2kU/+drCtqEDtYfgkmF667GPmZHRNMx5y5yka8yxolaIRK0SenZ6dAfoyXv/x15uK/
29HXpzAup9f9b1KlP850hcpsr3Kr8qH2vmLYpcjYEwnpMx9YMble+/uqPXQCvuNLhFlV
/K6eLvkUVIG65WUY/CXbG6HehY1yg+kbo9d7KAWhTN/I6j40XJj3oAkDqGCNfCLEOLD+
UuJSyG9fhT4c0npW3YiSj5w1UR/4WWZdiUJR7HL8mGkh8mfMswlcXS69qeL1iu579he3
eLpw==
X-Forwarded-Encrypted: i=1;
AJvYcCUqNTCqjnerdtrvABjCF1IwHa5mQPuB3F8kURwjaGEyESx9IdaI9ZXhAISZ+pOQKvxWXOTDHw==@debbugs.gnu.org
X-Gm-Message-State: AOJu0Yya8Th2nf3ERbAxXA5QXuJRs95aoZ6zgfeLQZ23jbFw3piRganK
WeBelMoMxWcRdbRALunIkJMpMr0fJ3OChZxB10ktx0cQiCLLbb7OaN8Z
X-Gm-Gg: AY/fxX4imZ1lEtEV6Om77uAEDBi0PAHbboHPhApa+Na8x+MsDB9pICcodlKTMCctU4Z
ON5I5uZcD1U/tEvQ3Bw12uYHvfAQ0zr2ZGwQuxkemhAyNii2BV+//cRVQBZ0LzfhtwawrCFfwRj
6or+2LMB5U2QKBRXlMtJniBq4HiOH+aE3DTqTdsMYXG+sOrryz9i6lo5ZAa54pbkCeleSFyTJ7k
c9kM0R7iqLLWYnorg6JltdGmiT7RHcO3tSUc51/3ge+HAr8ZmwBHD3lls024BqvLXM30QUQ2dEk
ZahAz1OW7cSX7rOUdnSk8GrZTgja+a75198XPoMGG9i9AO2syLO47++PCLJVklqq5XCofT6QaPv
jD8nffItJI4c+eG0JGWFEQ2nB9iLGWplBA/tMsqNrC6K1S9NSJ5sC7+MgJDbZN/xLbpTtyNyKbh
t811XD0xw=
X-Google-Smtp-Source: AGHT+IGSe5HpB6E6aSK1Waf73MPsyCLxK2tskE6ovxoYzf0pBiit8d8XddBIjtIlYDGczfb7w8hIrA==
X-Received: by 2002:a17:902:cf0d:b0:29f:b3e5:5186 with SMTP id
d9443c01a7336-2a2f293d13bmr29901655ad.56.1766150342842;
Fri, 19 Dec 2025 05:19:02 -0800 (PST)
Received: from localhost ([158.144.40.156])
by smtp.gmail.com with UTF8SMTPSA id
d9443c01a7336-2a2f3d4d869sm23335155ad.53.2025.12.19.05.19.01
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Fri, 19 Dec 2025 05:19:02 -0800 (PST)
From: Visuwesh <visuweshm@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Subject: Re: bug#80026: [PATCH] Improve vtable--limit-string performance
In-Reply-To: <86o6nu28t6.fsf@HIDDEN>
Date: Fri, 19 Dec 2025 18:48:51 +0530
Message-ID: <874ipm624k.fsf@HIDDEN>
References: <CAN+1HbqKXXc+20yaSkkQuGCn-H0zGenZZFdTH3Ts=LT+QyTMGQ@HIDDEN>
<87ike35c45.fsf@HIDDEN> <86o6nu28t6.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 80026
Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, joostkremers@HIDDEN,
ijqq@HIDDEN, 80026 <at> debbugs.gnu.org, shipmints@HIDDEN,
adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)
--=-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
[=E0=AE=B5=E0=AF=86=E0=AE=B3=E0=AF=8D=E0=AE=B3=E0=AE=BF =E0=AE=9F=E0=AE=BF=
=E0=AE=9A=E0=AE=AE=E0=AF=8D=E0=AE=AA=E0=AE=B0=E0=AF=8D 19, 2025] Eli Zarets=
kii wrote:
>> Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, joostkremers@fastmai=
l.fm,
>> 80026 <at> debbugs.gnu.org, adam@HIDDEN, larsi@HIDDEN, arstoffel@gm=
ail.com,
>> ijqq@HIDDEN
>> From: Visuwesh <visuweshm@HIDDEN>
>> Date: Fri, 19 Dec 2025 09:58:26 +0530
>
> I cannot read this:
Sorry about that: I didn't have the sendmail symlink when I initially
sent the mail, so had to resend it after installing the relevant distro
package for it. I checked the message in yhetil.org, and it showed up
fine so I assumed all was well. In any case, I reproduce the message
below:
St=C3=A9phane Marks wrote:
Hi,
> This implements a simple heuristic to limit the number of times
> `string-pixel-width` gets called by estimating the string's truncation
> position in advance. This is overridable column-by-column should some
> strings in the vtable be composed of widely varying font widths that
> necessitates minor adjustments to the heuristic. This approach performs
> well in testing (and I tested several approaches) and has been tested by
> more than one vtable user.
A na=C3=AFve question: have you tested this with columns that contain image
s? I wanted to test this scenario out but the patch doesn't apply for
me: vtable--limit-string does not take a BUFFER argument, and I'm on
master 26dcbd06eda.
If it would be more convenient to have code that would produce such a
table, then PFA. The entry point is the vz/bookwrym-list-shelves
command.
--=-=-=
Content-Type: text/x-emacs-lisp
Content-Disposition: attachment
Content-Description: vtable code that produces a column with image
(defun vz/bookwrym--shelves (user instance)
"Return the list of shelf URLs for bookwrym USER in INSTANCE."
(with-current-buffer
(url-retrieve-synchronously
(concat instance "/user/" user "/books"))
(goto-char (point-min))
(search-forward "\n\n")
(let ((dom (libxml-parse-html-region (point) (point-max)))
ret)
(dolist (a (dom-by-tag (dom-by-id dom "tour-user-shelves") 'a))
;; /books doesn't have a JSON endpoint.
(unless (string-suffix-p "/books" (dom-attr a 'href))
(push (concat instance (dom-attr a 'href) ".json")
ret)))
ret)))
(defun vz/bookwrym--json ()
(goto-char (point-min))
(search-forward "\n\n")
(json-parse-buffer :object-type 'alist
:array-type 'list
:null-object nil))
(defun vz/bookwrym--shelf (url)
"Return books in shelf of user in instance given by URL."
(with-current-buffer (url-retrieve-synchronously url)
(goto-char (point-min))
(search-forward "\n\n")
(let ((json (json-parse-buffer :object-type 'alist
:array-type 'list
:null-object nil)))
(let-alist json
(unless (= .totalItems 0)
(let* ((pre (concat (string-remove-suffix ".json" url)
"?page="))
(start (string-remove-prefix pre .first)))
(nreverse
(vz/bookwrym--books
(with-current-buffer
(url-retrieve-synchronously (concat url "?page=" start))
(vz/bookwrym--json))
.name))))))))
(defvar vz/bookwrym--author-cache (make-hash-table :test #'equal)
"A hashtable of author URL and their actual name.")
(defun vz/bookwrym--author (url)
"Return the name of the author in URL."
(with-memoization (gethash url vz/bookwrym--author-cache)
(with-current-buffer (url-retrieve-synchronously (concat url ".json"))
(or (cdr (assq 'name (vz/bookwrym--json)))
"Unknown"))))
(defun vz/bookwrym--books (json shelf &optional ret)
(dolist (book (cdr (assq 'orderedItems json)))
(let-alist book
(let ((authors (mapcar #'vz/bookwrym--author .authors))
ret*)
(push (cons 'shelf shelf) ret*)
(when .cover.url
(push (cons 'cover .cover.url) ret*))
(push (cons 'url .id) ret*)
(push (cons 'title .title) ret*)
(push (cons 'authors authors) ret*)
(push (cons 'published
(cond
((not (string-empty-p .publishedDate))
.publishedDate)
((not (string-empty-p .firstPublishedDate))
.firstPublishedDate)
(t nil)))
ret*)
(push ret* ret))))
(if (cdr (assq 'next json))
(vz/bookwrym--books
(with-current-buffer
(url-retrieve-synchronously
(concat (string-trim-right
(cdr (assq 'id json))
"\\?page=[0-9]+")
".json?page="
(string-trim-left
(cdr (assq 'next json))
"[^0-9]+")))
(vz/bookwrym--json))
shelf
ret)
ret))
(defvar vz/bookwrym-instance "https://bookrastinating.com"
"Instance of bookwrym to use by default.")
(defvar vz/bookwrym-user "brontea"
"Bookwrym user to view by default.")
(defvar vz/bookwrym--cover-width 10)
(defun vz/bookwrym--cover ()
(goto-char (point-min))
(search-forward "\n\n")
(delete-region (point-min) (point))
(propertize "*" 'display (create-image (buffer-string) nil t
:max-width (cons vz/bookwrym--cover-width 'cw))))
(defun vz/bookwrym-list-shelves (&optional user instance)
"List shelves of USER in bookwrym instance INSTANCE.
Interactively, query for the user and instance with the prefix argument."
(interactive
(if current-prefix-arg
(string-split (read-string "What user to view (@USER@INSTANCE)? ") "@" t)
(list vz/bookwrym-user vz/bookwrym-instance)))
(let* ((shelves (vz/bookwrym--shelves user instance))
(books (mapcan #'vz/bookwrym--shelf shelves)))
(require 'vtable)
(with-current-buffer (get-buffer-create "*Bookwrym*")
(let ((inhibit-read-only t))
(erase-buffer)
(face-remap-set-base 'header-line
:background (face-attribute 'header-line :background))
(make-vtable
;; :use-header-line nil
:columns `((:name "Cover" :width ,vz/bookwrym--cover-width
:formatter (lambda (x) (or x ""))
:getter ,(lambda (object _) (cdr (assq 'cover-img object))))
"Shelf" "Title"
(:name "Authors"
:getter
,(lambda (object _) (string-join (cdr (assq 'authors object)) ", ")))
"Published")
:column-colors '("#ffffff" "#e5e5eb" "#f2f2f4")
:row-colors '("#f2f2f4" "#e5e5eb" "#ffffff")
:getter (lambda (object column vtable)
(or (cdr (assq (intern (downcase (vtable-column vtable column)))
object))
""))
:objects-function (lambda () books))
(read-only-mode 1)
(pop-to-buffer (current-buffer))
(save-excursion
(goto-char (point-min))
(let ((i 0))
(while (not (eobp))
(let ((object (vtable-current-object)))
(when (assq 'cover object)
(url-retrieve (cdr (assq 'cover object))
(lambda (status buffer object n)
(unless (eq (car status) :error)
(let ((cover (vz/bookwrym--cover)))
(with-current-buffer buffer
(save-excursion
(goto-char (point-min))
(vtable-update-object (vtable-current-table)
(cons (cons 'cover-img cover)
object)
object)))
(setf (alist-get 'cover-img (nth n books)) cover))))
(list (current-buffer) object i)))
(when object (setq i (1+ i))))
(forward-line 1))))))))
--=-=-=--
bug-gnu-emacs@HIDDEN:bug#80026; Package emacs.
Full text available.Received: (at 80026) by debbugs.gnu.org; 19 Dec 2025 08:08:28 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Dec 19 03:08:28 2025 Received: from localhost ([127.0.0.1]:34769 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vWVXH-0000aK-4U for submit <at> debbugs.gnu.org; Fri, 19 Dec 2025 03:08:27 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:60336) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vWVXE-0000Zx-2e for 80026 <at> debbugs.gnu.org; Fri, 19 Dec 2025 03:08:25 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <eliz@HIDDEN>) id 1vWVX7-0003xX-Cw; Fri, 19 Dec 2025 03:08:17 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=JyDVzDO1NmyDDZzZdBgJxw4K+JJj9lGeaN7bfp7BcF8=; b=i+VmHnIsWB4G BG72AJzJVvaiA0h+CGmfzRkd33sRZ3TS+u5sCAWPL7gyZwPnZVBMPHdzSf9kNYdcTDncatUNeN7cx 4LX9DPxVIv3Id2RzgZL1zjQwZt2fbTcXjeip1c0comrYVqAe3Jxwj/cipEjV1PFNXIQs+Sog9cFnA YtJqJGUJvHV36uXTWLRvII7Y4WHj9nLQzqeC+n8w/rX/aYWTKHr3FvJoUMtY8hjFbmqispNyL906q ALWaoDR5ppByJR7NpLxV3mK6Ice6OCiI4BWuwmthttUxXBYl7hb0JqVFBZHq0bsJw98ZixSGw62lD XySV/zrjO474NOUwVeZw/w==; Date: Fri, 19 Dec 2025 10:08:05 +0200 Message-Id: <86o6nu28t6.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: Visuwesh <visuweshm@HIDDEN> In-Reply-To: <87ike35c45.fsf@HIDDEN> (message from Visuwesh on Fri, 19 Dec 2025 09:58:26 +0530) Subject: Re: bug#80026: [PATCH] Improve vtable--limit-string performance References: <CAN+1HbqKXXc+20yaSkkQuGCn-H0zGenZZFdTH3Ts=LT+QyTMGQ@HIDDEN> <87ike35c45.fsf@HIDDEN> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 80026 Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, joostkremers@HIDDEN, ijqq@HIDDEN, 80026 <at> debbugs.gnu.org, shipmints@HIDDEN, adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -3.3 (---) > Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, joostkremers@HIDDEN, > 80026 <at> debbugs.gnu.org, adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN, > ijqq@HIDDEN > From: Visuwesh <visuweshm@HIDDEN> > Date: Fri, 19 Dec 2025 09:58:26 +0530 I cannot read this: > LS09LT0tPQpDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgKQ29udGVudC1U > cmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQoKWz1FMD1BRT1BQT1FMD1BRj04MT1F > MD1BRT1BND1FMD1BRT1BOT1FMD1BRj04RCA9RTA9QUU9OUY9RTA9QUU9QkY9RTA9QUU9OUE9Cj1F > MD1BRT1BRT1FMD1BRj04RD1FMD1BRT1BQT1FMD1BRT1CMD1FMD1BRj04RCAxNywgMjAyNV0gU3Q9 > QzM9QTlwaGFuZSBNYXJrcz0KIHdyb3RlOgoKSGksCgo+IFRoaXMgaW1wbGVtZW50cyBhIHNpbXBs > ZSBoZXVyaXN0aWMgdG8gbGltaXQgdGhlIG51bWJlciBvZiB0aW1lcwo+IGBzdHJpbmctcGl4ZWwt > d2lkdGhgIGdldHMgY2FsbGVkIGJ5IGVzdGltYXRpbmcgdGhlIHN0cmluZydzIHRydW5jYXRpb24K > PiBwb3NpdGlvbiBpbiBhZHZhbmNlLiAgVGhpcyBpcyBvdmVycmlkYWJsZSBjb2x1bW4tYnktY29s > dW1uIHNob3VsZCBzb21lCj4gc3RyaW5ncyBpbiB0aGUgdnRhYmxlIGJlIGNvbXBvc2VkIG9mIHdp > ZGVseSB2YXJ5aW5nIGZvbnQgd2lkdGhzIHRoYXQKPiBuZWNlc3NpdGF0ZXMgbWlub3IgYWRqdXN0 > bWVudHMgdG8gdGhlIGhldXJpc3RpYy4gIFRoaXMgYXBwcm9hY2ggcGVyZm9ybXMKPiB3ZWxsIGlu > IHRlc3RpbmcgKGFuZCBJIHRlc3RlZCBzZXZlcmFsIGFwcHJvYWNoZXMpIGFuZCBoYXMgYmVlbiB0 > ZXN0ZWQgYnkKPiBtb3JlIHRoYW4gb25lIHZ0YWJsZSB1c2VyLgoKQSBuYT1DMz1BRnZlIHF1ZXN0 > aW9uOiBoYXZlIHlvdSB0ZXN0ZWQgdGhpcyB3aXRoIGNvbHVtbnMgdGhhdCBjb250YWluIGltYWdl > PQpzPwpJIHdhbnRlZCB0byB0ZXN0IHRoaXMgc2NlbmFyaW8gb3V0IGJ1dCB0aGUgcGF0Y2ggZG9l > c24ndCBhcHBseSBmb3IgbWU6CnZ0YWJsZS0tbGltaXQtc3RyaW5nIGRvZXMgbm90IHRha2UgYSBC > VUZGRVIgYXJndW1lbnQsIGFuZCBJJ20gb24gbWFzdGVyCjI2ZGNiZDA2ZWRhLgoKSWYgaXQgd291 > bGQgYmUgbW9yZSBjb252ZW5pZW50IHRvIGhhdmUgY29kZSB0aGF0IHdvdWxkIHByb2R1Y2Ugc3Vj > aCBhCnRhYmxlLCB0aGVuIFBGQS4gIFRoZSBlbnRyeSBwb2ludCBpcyB0aGUgdnovYm9va3dyeW0t > bGlzdC1zaGVsdmVzCmNvbW1hbmQuCgoKLS09LT0tPQpDb250ZW50LVR5cGU6IHRleHQveC1lbWFj > cy1saXNwCkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQKQ29udGVudC1EZXNjcmlwdGlv > bjogdnRhYmxlIHdpdGggaW1hZ2UgY29sdW1uCgooZGVmdW4gdnovYm9va3dyeW0tLXNoZWx2ZXMg > KHVzZXIgaW5zdGFuY2UpCiAgIlJldHVybiB0aGUgbGlzdCBvZiBzaGVsZiBVUkxzIGZvciBib29r > d3J5bSBVU0VSIGluIElOU1RBTkNFLiIKICAod2l0aC1jdXJyZW50LWJ1ZmZlcgogICAgICAodXJs > LXJldHJpZXZlLXN5bmNocm9ub3VzbHkKICAgICAgIChjb25jYXQgaW5zdGFuY2UgIi91c2VyLyIg > dXNlciAiL2Jvb2tzIikpCiAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQogICAgKHNlYXJjaC1m > b3J3YXJkICJcblxuIikKICAgIChsZXQgKChkb20gKGxpYnhtbC1wYXJzZS1odG1sLXJlZ2lvbiAo > cG9pbnQpIChwb2ludC1tYXgpKSkKICAgICAgICAgIHJldCkKICAgICAgKGRvbGlzdCAoYSAoZG9t > LWJ5LXRhZyAoZG9tLWJ5LWlkIGRvbSAidG91ci11c2VyLXNoZWx2ZXMiKSAnYSkpCiAgICAgICAg > OzsgL2Jvb2tzIGRvZXNuJ3QgaGF2ZSBhIEpTT04gZW5kcG9pbnQuCiAgICAgICAgKHVubGVzcyAo > c3RyaW5nLXN1ZmZpeC1wICIvYm9va3MiIChkb20tYXR0ciBhICdocmVmKSkKICAgICAgICAgIChw > dXNoIChjb25jYXQgaW5zdGFuY2UgKGRvbS1hdHRyIGEgJ2hyZWYpICIuanNvbiIpCiAgICAgICAg > ICAgICAgICByZXQpKSkKICAgICAgcmV0KSkpCgooZGVmdW4gdnovYm9va3dyeW0tLWpzb24gKCkK > ICAoZ290by1jaGFyIChwb2ludC1taW4pKQogIChzZWFyY2gtZm9yd2FyZCAiXG5cbiIpCiAgKGpz > b24tcGFyc2UtYnVmZmVyIDpvYmplY3QtdHlwZSAnYWxpc3QKICAgICAgICAgICAgICAgICAgICAg > OmFycmF5LXR5cGUgJ2xpc3QKICAgICAgICAgICAgICAgICAgICAgOm51bGwtb2JqZWN0IG5pbCkp > CgooZGVmdW4gdnovYm9va3dyeW0tLXNoZWxmICh1cmwpCiAgIlJldHVybiBib29rcyBpbiBzaGVs > ZiBvZiB1c2VyIGluIGluc3RhbmNlIGdpdmVuIGJ5IFVSTC4iCiAgKHdpdGgtY3VycmVudC1idWZm > ZXIgKHVybC1yZXRyaWV2ZS1zeW5jaHJvbm91c2x5IHVybCkKICAgIChnb3RvLWNoYXIgKHBvaW50 > LW1pbikpCiAgICAoc2VhcmNoLWZvcndhcmQgIlxuXG4iKQogICAgKGxldCAoKGpzb24gKGpzb24t > cGFyc2UtYnVmZmVyIDpvYmplY3QtdHlwZSAnYWxpc3QKICAgICAgICAgICAgICAgICAgICAgICAg > ICAgICAgICAgICA6YXJyYXktdHlwZSAnbGlzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAg > ICAgICAgIDpudWxsLW9iamVjdCBuaWwpKSkKICAgICAgKGxldC1hbGlzdCBqc29uCiAgICAgICAg > KHVubGVzcyAoPSAudG90YWxJdGVtcyAwKQogICAgICAgICAgKGxldCogKChwcmUgKGNvbmNhdCAo > c3RyaW5nLXJlbW92ZS1zdWZmaXggIi5qc29uIiB1cmwpCiAgICAgICAgICAgICAgICAgICAgICAg > ICAgICAgICI/cGFnZT0iKSkKICAgICAgICAgICAgICAgICAoc3RhcnQgKHN0cmluZy1yZW1vdmUt > cHJlZml4IHByZSAuZmlyc3QpKSkKICAgICAgICAgICAgKG5yZXZlcnNlCiAgICAgICAgICAgICAo > dnovYm9va3dyeW0tLWJvb2tzCiAgICAgICAgICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIKICAg > ICAgICAgICAgICAgICAgKHVybC1yZXRyaWV2ZS1zeW5jaHJvbm91c2x5IChjb25jYXQgdXJsICI/ > cGFnZT0iIHN0YXJ0KSkKICAgICAgICAgICAgICAgICh2ei9ib29rd3J5bS0tanNvbikpCiAgICAg > ICAgICAgICAgLm5hbWUpKSkpKSkpKQoKKGRlZnZhciB2ei9ib29rd3J5bS0tYXV0aG9yLWNhY2hl > IChtYWtlLWhhc2gtdGFibGUgOnRlc3QgIydlcXVhbCkKICAiQSBoYXNodGFibGUgb2YgYXV0aG9y > IFVSTCBhbmQgdGhlaXIgYWN0dWFsIG5hbWUuIikKCihkZWZ1biB2ei9ib29rd3J5bS0tYXV0aG9y > ICh1cmwpCiAgIlJldHVybiB0aGUgbmFtZSBvZiB0aGUgYXV0aG9yIGluIFVSTC4iCiAgKHdpdGgt > bWVtb2l6YXRpb24gKGdldGhhc2ggdXJsIHZ6L2Jvb2t3cnltLS1hdXRob3ItY2FjaGUpCiAgICAo > d2l0aC1jdXJyZW50LWJ1ZmZlciAodXJsLXJldHJpZXZlLXN5bmNocm9ub3VzbHkgKGNvbmNhdCB1 > cmwgIi5qc29uIikpCiAgICAgIChvciAoY2RyIChhc3NxICduYW1lICh2ei9ib29rd3J5bS0tanNv > bikpKQogICAgICAgICAgIlVua25vd24iKSkpKQoKKGRlZnVuIHZ6L2Jvb2t3cnltLS1ib29rcyAo > anNvbiBzaGVsZiAmb3B0aW9uYWwgcmV0KQogIChkb2xpc3QgKGJvb2sgKGNkciAoYXNzcSAnb3Jk > ZXJlZEl0ZW1zIGpzb24pKSkKICAgIChsZXQtYWxpc3QgYm9vawogICAgICAobGV0ICgoYXV0aG9y > cyAobWFwY2FyICMndnovYm9va3dyeW0tLWF1dGhvciAuYXV0aG9ycykpCiAgICAgICAgICAgIHJl > dCopCiAgICAgICAgKHB1c2ggKGNvbnMgJ3NoZWxmIHNoZWxmKSByZXQqKQogICAgICAgICh3aGVu > IC5jb3Zlci51cmwKICAgICAgICAgIChwdXNoIChjb25zICdjb3ZlciAuY292ZXIudXJsKSByZXQq > KSkKICAgICAgICAocHVzaCAoY29ucyAndXJsIC5pZCkgcmV0KikKICAgICAgICAocHVzaCAoY29u > cyAndGl0bGUgLnRpdGxlKSByZXQqKQogICAgICAgIChwdXNoIChjb25zICdhdXRob3JzIGF1dGhv > cnMpIHJldCopCiAgICAgICAgKHB1c2ggKGNvbnMgJ3B1Ymxpc2hlZAogICAgICAgICAgICAgICAg > ICAgIChjb25kCiAgICAgICAgICAgICAgICAgICAgICgobm90IChzdHJpbmctZW1wdHktcCAucHVi > bGlzaGVkRGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgICAucHVibGlzaGVkRGF0ZSkKICAgICAg > ICAgICAgICAgICAgICAgKChub3QgKHN0cmluZy1lbXB0eS1wIC5maXJzdFB1Ymxpc2hlZERhdGUp > KQogICAgICAgICAgICAgICAgICAgICAgLmZpcnN0UHVibGlzaGVkRGF0ZSkKICAgICAgICAgICAg > ICAgICAgICAgKHQgbmlsKSkpCiAgICAgICAgICAgICAgcmV0KikKICAgICAgICAocHVzaCByZXQq > IHJldCkpKSkKICAoaWYgKGNkciAoYXNzcSAnbmV4dCBqc29uKSkKICAgICAgKHZ6L2Jvb2t3cnlt > LS1ib29rcwogICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIKICAgICAgICAgICAodXJsLXJldHJp > ZXZlLXN5bmNocm9ub3VzbHkKICAgICAgICAgICAgKGNvbmNhdCAoc3RyaW5nLXRyaW0tcmlnaHQK > ICAgICAgICAgICAgICAgICAgICAgKGNkciAoYXNzcSAnaWQganNvbikpCiAgICAgICAgICAgICAg > ICAgICAgICJcXD9wYWdlPVswLTldKyIpCiAgICAgICAgICAgICAgICAgICAgIi5qc29uP3BhZ2U9 > IgogICAgICAgICAgICAgICAgICAgIChzdHJpbmctdHJpbS1sZWZ0CiAgICAgICAgICAgICAgICAg > ICAgIChjZHIgKGFzc3EgJ25leHQganNvbikpCiAgICAgICAgICAgICAgICAgICAgICJbXjAtOV0r > IikpKQogICAgICAgICAodnovYm9va3dyeW0tLWpzb24pKQogICAgICAgc2hlbGYKICAgICAgIHJl > dCkKICAgIHJldCkpCgooZGVmdmFyIHZ6L2Jvb2t3cnltLWluc3RhbmNlICJodHRwczovL2Jvb2ty > YXN0aW5hdGluZy5jb20iCiAgIkluc3RhbmNlIG9mIGJvb2t3cnltIHRvIHVzZSBieSBkZWZhdWx0 > LiIpCgooZGVmdmFyIHZ6L2Jvb2t3cnltLXVzZXIgImJyb250ZWEiCiAgIkJvb2t3cnltIHVzZXIg > dG8gdmlldyBieSBkZWZhdWx0LiIpCgooZGVmdmFyIHZ6L2Jvb2t3cnltLS1jb3Zlci13aWR0aCAx > MCkKCihkZWZ1biB2ei9ib29rd3J5bS0tY292ZXIgKCkKICAoZ290by1jaGFyIChwb2ludC1taW4p > KQogIChzZWFyY2gtZm9yd2FyZCAiXG5cbiIpCiAgKGRlbGV0ZS1yZWdpb24gKHBvaW50LW1pbikg > KHBvaW50KSkKICAocHJvcGVydGl6ZSAiKiIgJ2Rpc3BsYXkgKGNyZWF0ZS1pbWFnZSAoYnVmZmVy > LXN0cmluZykgbmlsIHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 > bWF4LXdpZHRoIChjb25zIHZ6L2Jvb2t3cnltLS1jb3Zlci13aWR0aCAnY3cpKSkpCgooZGVmdW4g > dnovYm9va3dyeW0tbGlzdC1zaGVsdmVzICgmb3B0aW9uYWwgdXNlciBpbnN0YW5jZSkKICAiTGlz > dCBzaGVsdmVzIG9mIFVTRVIgaW4gYm9va3dyeW0gaW5zdGFuY2UgSU5TVEFOQ0UuCkludGVyYWN0 > aXZlbHksIHF1ZXJ5IGZvciB0aGUgdXNlciBhbmQgaW5zdGFuY2Ugd2l0aCB0aGUgcHJlZml4IGFy > Z3VtZW50LiIKICAoaW50ZXJhY3RpdmUKICAgKGlmIGN1cnJlbnQtcHJlZml4LWFyZwogICAgICAg > KHN0cmluZy1zcGxpdCAocmVhZC1zdHJpbmcgIldoYXQgdXNlciB0byB2aWV3IChAVVNFUkBJTlNU > QU5DRSk/ICIpICJAIiB0KQogICAgIChsaXN0IHZ6L2Jvb2t3cnltLXVzZXIgdnovYm9va3dyeW0t > aW5zdGFuY2UpKSkKICAobGV0KiAoKHNoZWx2ZXMgKHZ6L2Jvb2t3cnltLS1zaGVsdmVzIHVzZXIg > aW5zdGFuY2UpKQogICAgICAgICAoYm9va3MgKG1hcGNhbiAjJ3Z6L2Jvb2t3cnltLS1zaGVsZiBz > aGVsdmVzKSkpCiAgICAocmVxdWlyZSAndnRhYmxlKQogICAgKHdpdGgtY3VycmVudC1idWZmZXIg > KGdldC1idWZmZXItY3JlYXRlICIqQm9va3dyeW0qIikKICAgICAgKGxldCAoKGluaGliaXQtcmVh > ZC1vbmx5IHQpKQogICAgICAgIChlcmFzZS1idWZmZXIpCiAgICAgICAgKGZhY2UtcmVtYXAtc2V0 > LWJhc2UgJ2hlYWRlci1saW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmJhY2tncm91 > bmQgKGZhY2UtYXR0cmlidXRlICdoZWFkZXItbGluZSA6YmFja2dyb3VuZCkpCiAgICAgICAgKG1h > a2UtdnRhYmxlCiAgICAgICAgIDs7IDp1c2UtaGVhZGVyLWxpbmUgbmlsCiAgICAgICAgIDpjb2x1 > bW5zIGAoKDpuYW1lICJDb3ZlciIgOndpZHRoICx2ei9ib29rd3J5bS0tY292ZXItd2lkdGgKICAg > ICAgICAgICAgICAgICAgICAgICAgICAgOmZvcm1hdHRlciAobGFtYmRhICh4KSAob3IgeCAiIikp > CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDpnZXR0ZXIgLChsYW1iZGEgKG9iamVjdCBfKSAo > Y2RyIChhc3NxICdjb3Zlci1pbWcgb2JqZWN0KSkpKQogICAgICAgICAgICAgICAgICAgICJTaGVs > ZiIgIlRpdGxlIgogICAgICAgICAgICAgICAgICAgICg6bmFtZSAiQXV0aG9ycyIKICAgICAgICAg > ICAgICAgICAgICAgICAgICAgOmdldHRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAsKGxh > bWJkYSAob2JqZWN0IF8pIChzdHJpbmctam9pbiAoY2RyIChhc3NxICdhdXRob3JzIG9iamVjdCkp > ICIsICIpKSkKICAgICAgICAgICAgICAgICAgICAiUHVibGlzaGVkIikKICAgICAgICAgOmNvbHVt > bi1jb2xvcnMgJygiI2ZmZmZmZiIgIiNlNWU1ZWIiICIjZjJmMmY0IikKICAgICAgICAgOnJvdy1j > b2xvcnMgJygiI2YyZjJmNCIgIiNlNWU1ZWIiICIjZmZmZmZmIikKICAgICAgICAgOmdldHRlciAo > bGFtYmRhIChvYmplY3QgY29sdW1uIHZ0YWJsZSkKICAgICAgICAgICAgICAgICAgIChvciAoY2Ry > IChhc3NxIChpbnRlcm4gKGRvd25jYXNlICh2dGFibGUtY29sdW1uIHZ0YWJsZSBjb2x1bW4pKSkK > ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCkpCiAgICAgICAgICAgICAg > ICAgICAgICAgIiIpKQogICAgICAgICA6b2JqZWN0cy1mdW5jdGlvbiAobGFtYmRhICgpIGJvb2tz > KSkKICAgICAgICAocmVhZC1vbmx5LW1vZGUgMSkKICAgICAgICAocG9wLXRvLWJ1ZmZlciAoY3Vy > cmVudC1idWZmZXIpKQogICAgICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgICAgKGdvdG8tY2hh > ciAocG9pbnQtbWluKSkKICAgICAgICAgIChsZXQgKChpIDApKQogICAgICAgICAgICAod2hpbGUg > KG5vdCAoZW9icCkpCiAgICAgICAgICAgICAgKGxldCAoKG9iamVjdCAodnRhYmxlLWN1cnJlbnQt > b2JqZWN0KSkpCiAgICAgICAgICAgICAgICAod2hlbiAoYXNzcSAnY292ZXIgb2JqZWN0KQogICAg > ICAgICAgICAgICAgICAodXJsLXJldHJpZXZlIChjZHIgKGFzc3EgJ2NvdmVyIG9iamVjdCkpCiAg > ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoc3RhdHVzIGJ1ZmZlciBvYmpl > Y3QgbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bmxlc3MgKGVxIChjYXIg > c3RhdHVzKSA6ZXJyb3IpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsZXQg > KChjb3ZlciAodnovYm9va3dyeW0tLWNvdmVyKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg > ICAgICAgICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmZmVyCiAgICAgICAgICAgICAgICAg > ICAgICAgICAgICAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgICAgICAgICAgICAg > ICAgICAgICAgICAgICAgICAgICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKICAgICAgICAg > ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS11cGRhdGUtb2JqZWN0ICh2 > dGFibGUtY3VycmVudC10YWJsZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg > ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zIChjb25zICdjb3Zlci1pbWcgY292ZXIp > CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg > ICAgICAgICAgICAgICBvYmplY3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg > ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QpKSkKICAgICAgICAgICAgICAgICAg > ICAgICAgICAgICAgICAgICAgICAoc2V0ZiAoYWxpc3QtZ2V0ICdjb3Zlci1pbWcgKG50aCBuIGJv > b2tzKSkgY292ZXIpKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgKGN1 > cnJlbnQtYnVmZmVyKSBvYmplY3QgaSkpKQogICAgICAgICAgICAgICAgKHdoZW4gb2JqZWN0IChz > ZXRxIGkgKDErIGkpKSkpCiAgICAgICAgICAgICAgKGZvcndhcmQtbGluZSAxKSkpKSkpKSkKLS09 > LT0tPS0tCg==
bug-gnu-emacs@HIDDEN:bug#80026; Package emacs.
Full text available.Received: (at 80026) by debbugs.gnu.org; 19 Dec 2025 07:19:29 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Dec 19 02:19:29 2025 Received: from localhost ([127.0.0.1]:34374 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vWUls-0005Nt-Qf for submit <at> debbugs.gnu.org; Fri, 19 Dec 2025 02:19:29 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:48496) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vWUlo-0005NZ-Aw for 80026 <at> debbugs.gnu.org; Fri, 19 Dec 2025 02:19:26 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <eliz@HIDDEN>) id 1vWUlh-0007T8-IQ; Fri, 19 Dec 2025 02:19:17 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=h9P8O9JUa+RQ4OvPZISQJ7k9AxhYM4SLe3cEWIGfU1Q=; b=iKIm1TnrhW/gM/BEtHX+ BR/5Cd9kYfaSi7uMUU5qLzSvyqzScIBWXdrR3RFP/zR0o+hWg66k5o5PGH/b/HoUGGxwVud/s+s7m morgHJ2r/txaVoMHQpQ7eM/NfWLXS4gAqThR/WzM5YVTARaJeDgI+iBLdobywpTnmTGXk8Baqggs9 Q/Khu5QmbaS2xLI3V6shkdUZfxCUBBov1SBP5iOMZ/v1ELR2m8HmnweHMKjFsxE+E1qpA4cII9AGN Ek8ODnqGXday3pEXuVIgtmG9YIk8XY19cMkHQUGdaHdGQzQhnN0fgDAUS26tTrb3Nj+WveNjjRb6l txcnYP/+X6eBkw==; Date: Fri, 19 Dec 2025 09:18:48 +0200 Message-Id: <86sed70wiv.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: =?utf-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN> In-Reply-To: <CAN+1HbpBhNaZudz2CR2ZW36dbLcQ5cmxzdhLHnJGY-m_2ycbsQ@HIDDEN> (message from =?utf-8?Q?St=C3=A9phane?= Marks on Thu, 18 Dec 2025 15:06:30 -0500) Subject: Re: bug#80026: [PATCH] Improve vtable--limit-string performance References: <CAN+1HbqKXXc+20yaSkkQuGCn-H0zGenZZFdTH3Ts=LT+QyTMGQ@HIDDEN> <86zf7g2v9t.fsf@HIDDEN> <CAN+1HbqaOS-Dhf=FayFLcux5RAqd+YTO8sjLm0dgwqfiNN-qow@HIDDEN> <CAN+1HbpXAa=MK7VbaUvuQnVC1Mb4EqZqj9C-TYNgMxPR2Wb8Aw@HIDDEN> <CAN+1HbqV3QVKGD61c5fBNagEVc+DT0A7UrfRh5+SDCu=tPb6Dw@HIDDEN> <861pkr3cei.fsf@HIDDEN> <CAN+1Hbqn_Ojes=iinTJAaMvp+D1Y+R5cRX8dKjO41LRrfqbvfA@HIDDEN> <86zf7f1ugq.fsf@HIDDEN> <CAN+1Hbr80y5GaGkMB3zE=hfG5kc_+jq5CgYbdMWpQ5895O0Ljw@HIDDEN> <CAN+1HbpBhNaZudz2CR2ZW36dbLcQ5cmxzdhLHnJGY-m_2ycbsQ@HIDDEN> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 80026 Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, joostkremers@HIDDEN, ijqq@HIDDEN, 80026 <at> debbugs.gnu.org, visuweshm@HIDDEN, adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -3.3 (---) > From: Stéphane Marks <shipmints@HIDDEN> > Date: Thu, 18 Dec 2025 15:06:30 -0500 > Cc: 80026 <at> debbugs.gnu.org, sbaugh@HIDDEN, krisbalintona@HIDDEN, > joostkremers@HIDDEN, ijqq@HIDDEN, visuweshm@HIDDEN, > adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN > > Okay here's what I think you meant, though it uses and reuses the work buffer vs. the vtable buffer itself (I'm > not even sure where to insert the string, save excursion and go to the end and insert there and then delete > it?). Perhaps the function is screwy in some way. Heuristic still beats it. This is not what I meant. > ;; Setup current buffer to correctly compute pixel width. > (when buffer > (dolist (v '(face-remapping-alist > char-property-alias-alist > default-text-properties)) > (if (local-variable-p v buffer) > (set (make-local-variable v) > (buffer-local-value v buffer))))) > ;; Avoid deactivating the region as side effect. > (let (deactivate-mark) > (insert string)) > ;; If `display-line-numbers' is enabled in internal > ;; buffers (e.g. globally), it breaks width calculation > ;; (bug#59311). Disable `line-prefix' and `wrap-prefix', > ;; for the same reason. > (add-text-properties > (point-min) (point-max) > '(display-line-numbers-disable t line-prefix "" wrap-prefix "")) This part should be done just once, the first time the buffer is created and the full string is inserted into it. > (let ((string-pixels (car (buffer-text-pixel-size nil nil t)))) > (while (and (> (buffer-size) 0) > (if string-pixels (prog1 > (> string-pixels pixels) > (setq string-pixels nil)) > (> (car (buffer-text-pixel-size nil nil t)) pixels))) > (delete-char -1)) > (substring string 0 (buffer-size)))))) Instead of calling buffer-text-pixel-size, which requires you to delete characters, call window-text-pixel-size and iterate on its TO argument. This will allow you to insert string only once, and avoid modifying the buffer.
bug-gnu-emacs@HIDDEN:bug#80026; Package emacs.
Full text available.Received: (at submit) by debbugs.gnu.org; 19 Dec 2025 04:32:50 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Dec 18 23:32:50 2025 Received: from localhost ([127.0.0.1]:33112 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vWSAb-00033z-Ko for submit <at> debbugs.gnu.org; Thu, 18 Dec 2025 23:32:50 -0500 Received: from lists.gnu.org ([2001:470:142::17]:42194) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <visuweshm@HIDDEN>) id 1vWSAY-00033k-LC for submit <at> debbugs.gnu.org; Thu, 18 Dec 2025 23:32:47 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <visuweshm@HIDDEN>) id 1vWSAS-0003MM-AG for bug-gnu-emacs@HIDDEN; Thu, 18 Dec 2025 23:32:40 -0500 Received: from mail-pl1-x642.google.com ([2607:f8b0:4864:20::642]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <visuweshm@HIDDEN>) id 1vWSAQ-000866-DM for bug-gnu-emacs@HIDDEN; Thu, 18 Dec 2025 23:32:40 -0500 Received: by mail-pl1-x642.google.com with SMTP id d9443c01a7336-2a07f8dd9cdso15219915ad.1 for <bug-gnu-emacs@HIDDEN>; Thu, 18 Dec 2025 20:32:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766118756; x=1766723556; darn=gnu.org; h=content-transfer-encoding:mime-version:user-agent:references :message-id:date:in-reply-to:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=RMOTmwEfc2s9lbivdX6aTDcQ6JCd/ZY/+GXLaR77vQk=; b=B4yRAVDosNIVpt9F7r2PT8IhuSgEhazzNPxShD6eN6c+dQNyJnpurFALg6QSPa/Tfg 7bJS7NbKSrdAM5ux9ParowX5n8OE0Yc8kdW/I9PI+77OeVw1sbl0LsJB0OYRW2gfHYHr 0Lha69XQjMZFH2+4Yq+UtzM/ww6LzIy7//YbRP9HaGiPQX/uHTJkDw+7MrnwJzlK8RU0 jgXuWFvDDT2r5KYtMauwByN+69C/jY7WnhthcovsI4tEM3VWH+T8rtNTSjuT8d/KT5kH 6ygpfESEfJ5HijnJ/b/A6VQJ0l+DVLLC9IttWrHtdIUUkewlVGAb5fmfjXDpOSBBYY43 jlvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766118756; x=1766723556; h=content-transfer-encoding:mime-version:user-agent:references :message-id:date:in-reply-to:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=RMOTmwEfc2s9lbivdX6aTDcQ6JCd/ZY/+GXLaR77vQk=; b=nRvBGcxiRollKOWeHm5q7S8RIK+7kxEc0teVs7Gpgo/jYHSe1lDHBtUXLEU634r91g VU+TFkl9ZFyZpOt/Rtg3wHYZSYLFoEAaVs5YdwsWPn4F/qjhuGl3y2fdN0eWXYdV+QRf quP1djua0P6WCsefBz9r74klyomL9lDLPafY12gIEzmslw/s30aBlpAs0QXF6U98NlCF Lo/4C+3cNn6jqJc/obta2pdj+wdrPY3QvSKBCo1srHKxKHAhT/CEq4xo7Zc5xsbo6G48 c8hZaX3gD8AeXww3WhJlRv7BKoqXbNJNjL3HAr/GSWEYLvUJ97Prsdxm77R3+Tx8hDPF xBsg== X-Gm-Message-State: AOJu0YxApZk5rZ8wiDJiMosWqARvgbskCsBzGHEVUEdnNSAhvf4MN3i6 SCANC/JuUU4Xvfg24V4ivcq+vxr/A9PBxSvBvLiaWm1GSnqdOdfIwa5x X-Gm-Gg: AY/fxX4BRL8henH41dipxi0AunnPkYUTz0ktqGXX1iPV9IFXLvJdK0B4kbmSHkCJxV2 Q+uElAKIEJvx7ra1JuAOK14UfnD1Edt1GJbbvWGAfu46IGQMDq6gnDuk5xghB+eCV8sdTm52MrV KrgKzyrH2j9K+ANJhtwY9OBbnEqoGZXSlW87lGGDJ30vyERmM3GpHhcOfLLUZRRJVsjO8G8LOUM ZViePv8HU7sS+RJVU85puuQ6ch6NeHgCRqDQwN1YqfmY3+/M9XIsV0XhqUj0mt85y49xWmohZGS rWCtIf9T2KmzEYX8qa/m/tiejvM0okM5PKQBQOPiJ8PrzQ3r9A/ruhsXnJ4VsSI64wsZD8z2QIW fWJcpWxb33vwZMiWqEHbHlY34RENVh6bcsf272MlbCWccUf3/QveVnVSOSqNmx7O7AgGUqRh6BP ZhR7sl3K0= X-Google-Smtp-Source: AGHT+IHJrUxo2A94GhTwO4R6RAcGTDZn6wRwM7+JholpPiReYh2MuOgmMVzBCvczKnC7QnzK9wxBoQ== X-Received: by 2002:a17:903:1a08:b0:297:c048:fb60 with SMTP id d9443c01a7336-2a2f2427399mr16643895ad.25.1766118756308; Thu, 18 Dec 2025 20:32:36 -0800 (PST) Received: from localhost ([158.144.40.156]) by smtp.gmail.com with UTF8SMTPSA id d9443c01a7336-2a2f3d76ce3sm8159385ad.90.2025.12.18.20.32.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Dec 2025 20:32:36 -0800 (PST) From: Visuwesh <visuweshm@HIDDEN> To: =?us-ascii?Q?=3D=3Futf-8=3FQ=3FSt=3DC3=3DA9phane=3F=3D?= Marks <shipmints@HIDDEN> Subject: Re: [PATCH] Improve vtable--limit-string performance In-Reply-To: <CAN+1HbqKXXc+20yaSkkQuGCn-H0zGenZZFdTH3Ts=LT+QyTMGQ@HIDDEN> Date: Fri, 19 Dec 2025 09:58:26 +0530 Message-ID: <87ike35c45.fsf@HIDDEN> References: <CAN+1HbqKXXc+20yaSkkQuGCn-H0zGenZZFdTH3Ts=LT+QyTMGQ@HIDDEN> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Content-Transfer-Encoding: base64 Received-SPF: pass client-ip=2607:f8b0:4864:20::642; envelope-from=visuweshm@HIDDEN; helo=mail-pl1-x642.google.com X-Spam_score_int: -6 X-Spam_score: -0.7 X-Spam_bar: / X-Spam_report: (-0.7 / 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, PYZOR_CHECK=1.392, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, TVD_SPACE_RATIO=0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: submit Cc: Spencer Baugh <sbaugh@HIDDEN>, Kristoffer Balintona <krisbalintona@HIDDEN>, Joost Kremers <joostkremers@HIDDEN>, bug-gnu-emacs@HIDDEN, Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN>, ijqq@HIDDEN X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -0.0 (/) LS09LT0tPQpDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgKQ29udGVudC1U cmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQoKWz1FMD1BRT1BQT1FMD1BRj04MT1F MD1BRT1BND1FMD1BRT1BOT1FMD1BRj04RCA9RTA9QUU9OUY9RTA9QUU9QkY9RTA9QUU9OUE9Cj1F MD1BRT1BRT1FMD1BRj04RD1FMD1BRT1BQT1FMD1BRT1CMD1FMD1BRj04RCAxNywgMjAyNV0gU3Q9 QzM9QTlwaGFuZSBNYXJrcz0KIHdyb3RlOgoKSGksCgo+IFRoaXMgaW1wbGVtZW50cyBhIHNpbXBs ZSBoZXVyaXN0aWMgdG8gbGltaXQgdGhlIG51bWJlciBvZiB0aW1lcwo+IGBzdHJpbmctcGl4ZWwt d2lkdGhgIGdldHMgY2FsbGVkIGJ5IGVzdGltYXRpbmcgdGhlIHN0cmluZydzIHRydW5jYXRpb24K PiBwb3NpdGlvbiBpbiBhZHZhbmNlLiAgVGhpcyBpcyBvdmVycmlkYWJsZSBjb2x1bW4tYnktY29s dW1uIHNob3VsZCBzb21lCj4gc3RyaW5ncyBpbiB0aGUgdnRhYmxlIGJlIGNvbXBvc2VkIG9mIHdp ZGVseSB2YXJ5aW5nIGZvbnQgd2lkdGhzIHRoYXQKPiBuZWNlc3NpdGF0ZXMgbWlub3IgYWRqdXN0 bWVudHMgdG8gdGhlIGhldXJpc3RpYy4gIFRoaXMgYXBwcm9hY2ggcGVyZm9ybXMKPiB3ZWxsIGlu IHRlc3RpbmcgKGFuZCBJIHRlc3RlZCBzZXZlcmFsIGFwcHJvYWNoZXMpIGFuZCBoYXMgYmVlbiB0 ZXN0ZWQgYnkKPiBtb3JlIHRoYW4gb25lIHZ0YWJsZSB1c2VyLgoKQSBuYT1DMz1BRnZlIHF1ZXN0 aW9uOiBoYXZlIHlvdSB0ZXN0ZWQgdGhpcyB3aXRoIGNvbHVtbnMgdGhhdCBjb250YWluIGltYWdl PQpzPwpJIHdhbnRlZCB0byB0ZXN0IHRoaXMgc2NlbmFyaW8gb3V0IGJ1dCB0aGUgcGF0Y2ggZG9l c24ndCBhcHBseSBmb3IgbWU6CnZ0YWJsZS0tbGltaXQtc3RyaW5nIGRvZXMgbm90IHRha2UgYSBC VUZGRVIgYXJndW1lbnQsIGFuZCBJJ20gb24gbWFzdGVyCjI2ZGNiZDA2ZWRhLgoKSWYgaXQgd291 bGQgYmUgbW9yZSBjb252ZW5pZW50IHRvIGhhdmUgY29kZSB0aGF0IHdvdWxkIHByb2R1Y2Ugc3Vj aCBhCnRhYmxlLCB0aGVuIFBGQS4gIFRoZSBlbnRyeSBwb2ludCBpcyB0aGUgdnovYm9va3dyeW0t bGlzdC1zaGVsdmVzCmNvbW1hbmQuCgoKLS09LT0tPQpDb250ZW50LVR5cGU6IHRleHQveC1lbWFj cy1saXNwCkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQKQ29udGVudC1EZXNjcmlwdGlv bjogdnRhYmxlIHdpdGggaW1hZ2UgY29sdW1uCgooZGVmdW4gdnovYm9va3dyeW0tLXNoZWx2ZXMg KHVzZXIgaW5zdGFuY2UpCiAgIlJldHVybiB0aGUgbGlzdCBvZiBzaGVsZiBVUkxzIGZvciBib29r d3J5bSBVU0VSIGluIElOU1RBTkNFLiIKICAod2l0aC1jdXJyZW50LWJ1ZmZlcgogICAgICAodXJs LXJldHJpZXZlLXN5bmNocm9ub3VzbHkKICAgICAgIChjb25jYXQgaW5zdGFuY2UgIi91c2VyLyIg dXNlciAiL2Jvb2tzIikpCiAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQogICAgKHNlYXJjaC1m b3J3YXJkICJcblxuIikKICAgIChsZXQgKChkb20gKGxpYnhtbC1wYXJzZS1odG1sLXJlZ2lvbiAo cG9pbnQpIChwb2ludC1tYXgpKSkKICAgICAgICAgIHJldCkKICAgICAgKGRvbGlzdCAoYSAoZG9t LWJ5LXRhZyAoZG9tLWJ5LWlkIGRvbSAidG91ci11c2VyLXNoZWx2ZXMiKSAnYSkpCiAgICAgICAg OzsgL2Jvb2tzIGRvZXNuJ3QgaGF2ZSBhIEpTT04gZW5kcG9pbnQuCiAgICAgICAgKHVubGVzcyAo c3RyaW5nLXN1ZmZpeC1wICIvYm9va3MiIChkb20tYXR0ciBhICdocmVmKSkKICAgICAgICAgIChw dXNoIChjb25jYXQgaW5zdGFuY2UgKGRvbS1hdHRyIGEgJ2hyZWYpICIuanNvbiIpCiAgICAgICAg ICAgICAgICByZXQpKSkKICAgICAgcmV0KSkpCgooZGVmdW4gdnovYm9va3dyeW0tLWpzb24gKCkK ICAoZ290by1jaGFyIChwb2ludC1taW4pKQogIChzZWFyY2gtZm9yd2FyZCAiXG5cbiIpCiAgKGpz b24tcGFyc2UtYnVmZmVyIDpvYmplY3QtdHlwZSAnYWxpc3QKICAgICAgICAgICAgICAgICAgICAg OmFycmF5LXR5cGUgJ2xpc3QKICAgICAgICAgICAgICAgICAgICAgOm51bGwtb2JqZWN0IG5pbCkp CgooZGVmdW4gdnovYm9va3dyeW0tLXNoZWxmICh1cmwpCiAgIlJldHVybiBib29rcyBpbiBzaGVs ZiBvZiB1c2VyIGluIGluc3RhbmNlIGdpdmVuIGJ5IFVSTC4iCiAgKHdpdGgtY3VycmVudC1idWZm ZXIgKHVybC1yZXRyaWV2ZS1zeW5jaHJvbm91c2x5IHVybCkKICAgIChnb3RvLWNoYXIgKHBvaW50 LW1pbikpCiAgICAoc2VhcmNoLWZvcndhcmQgIlxuXG4iKQogICAgKGxldCAoKGpzb24gKGpzb24t cGFyc2UtYnVmZmVyIDpvYmplY3QtdHlwZSAnYWxpc3QKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA6YXJyYXktdHlwZSAnbGlzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDpudWxsLW9iamVjdCBuaWwpKSkKICAgICAgKGxldC1hbGlzdCBqc29uCiAgICAgICAg KHVubGVzcyAoPSAudG90YWxJdGVtcyAwKQogICAgICAgICAgKGxldCogKChwcmUgKGNvbmNhdCAo c3RyaW5nLXJlbW92ZS1zdWZmaXggIi5qc29uIiB1cmwpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICI/cGFnZT0iKSkKICAgICAgICAgICAgICAgICAoc3RhcnQgKHN0cmluZy1yZW1vdmUt cHJlZml4IHByZSAuZmlyc3QpKSkKICAgICAgICAgICAgKG5yZXZlcnNlCiAgICAgICAgICAgICAo dnovYm9va3dyeW0tLWJvb2tzCiAgICAgICAgICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIKICAg ICAgICAgICAgICAgICAgKHVybC1yZXRyaWV2ZS1zeW5jaHJvbm91c2x5IChjb25jYXQgdXJsICI/ cGFnZT0iIHN0YXJ0KSkKICAgICAgICAgICAgICAgICh2ei9ib29rd3J5bS0tanNvbikpCiAgICAg ICAgICAgICAgLm5hbWUpKSkpKSkpKQoKKGRlZnZhciB2ei9ib29rd3J5bS0tYXV0aG9yLWNhY2hl IChtYWtlLWhhc2gtdGFibGUgOnRlc3QgIydlcXVhbCkKICAiQSBoYXNodGFibGUgb2YgYXV0aG9y IFVSTCBhbmQgdGhlaXIgYWN0dWFsIG5hbWUuIikKCihkZWZ1biB2ei9ib29rd3J5bS0tYXV0aG9y ICh1cmwpCiAgIlJldHVybiB0aGUgbmFtZSBvZiB0aGUgYXV0aG9yIGluIFVSTC4iCiAgKHdpdGgt bWVtb2l6YXRpb24gKGdldGhhc2ggdXJsIHZ6L2Jvb2t3cnltLS1hdXRob3ItY2FjaGUpCiAgICAo d2l0aC1jdXJyZW50LWJ1ZmZlciAodXJsLXJldHJpZXZlLXN5bmNocm9ub3VzbHkgKGNvbmNhdCB1 cmwgIi5qc29uIikpCiAgICAgIChvciAoY2RyIChhc3NxICduYW1lICh2ei9ib29rd3J5bS0tanNv bikpKQogICAgICAgICAgIlVua25vd24iKSkpKQoKKGRlZnVuIHZ6L2Jvb2t3cnltLS1ib29rcyAo anNvbiBzaGVsZiAmb3B0aW9uYWwgcmV0KQogIChkb2xpc3QgKGJvb2sgKGNkciAoYXNzcSAnb3Jk ZXJlZEl0ZW1zIGpzb24pKSkKICAgIChsZXQtYWxpc3QgYm9vawogICAgICAobGV0ICgoYXV0aG9y cyAobWFwY2FyICMndnovYm9va3dyeW0tLWF1dGhvciAuYXV0aG9ycykpCiAgICAgICAgICAgIHJl dCopCiAgICAgICAgKHB1c2ggKGNvbnMgJ3NoZWxmIHNoZWxmKSByZXQqKQogICAgICAgICh3aGVu IC5jb3Zlci51cmwKICAgICAgICAgIChwdXNoIChjb25zICdjb3ZlciAuY292ZXIudXJsKSByZXQq KSkKICAgICAgICAocHVzaCAoY29ucyAndXJsIC5pZCkgcmV0KikKICAgICAgICAocHVzaCAoY29u cyAndGl0bGUgLnRpdGxlKSByZXQqKQogICAgICAgIChwdXNoIChjb25zICdhdXRob3JzIGF1dGhv cnMpIHJldCopCiAgICAgICAgKHB1c2ggKGNvbnMgJ3B1Ymxpc2hlZAogICAgICAgICAgICAgICAg ICAgIChjb25kCiAgICAgICAgICAgICAgICAgICAgICgobm90IChzdHJpbmctZW1wdHktcCAucHVi bGlzaGVkRGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgICAucHVibGlzaGVkRGF0ZSkKICAgICAg ICAgICAgICAgICAgICAgKChub3QgKHN0cmluZy1lbXB0eS1wIC5maXJzdFB1Ymxpc2hlZERhdGUp KQogICAgICAgICAgICAgICAgICAgICAgLmZpcnN0UHVibGlzaGVkRGF0ZSkKICAgICAgICAgICAg ICAgICAgICAgKHQgbmlsKSkpCiAgICAgICAgICAgICAgcmV0KikKICAgICAgICAocHVzaCByZXQq IHJldCkpKSkKICAoaWYgKGNkciAoYXNzcSAnbmV4dCBqc29uKSkKICAgICAgKHZ6L2Jvb2t3cnlt LS1ib29rcwogICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIKICAgICAgICAgICAodXJsLXJldHJp ZXZlLXN5bmNocm9ub3VzbHkKICAgICAgICAgICAgKGNvbmNhdCAoc3RyaW5nLXRyaW0tcmlnaHQK ICAgICAgICAgICAgICAgICAgICAgKGNkciAoYXNzcSAnaWQganNvbikpCiAgICAgICAgICAgICAg ICAgICAgICJcXD9wYWdlPVswLTldKyIpCiAgICAgICAgICAgICAgICAgICAgIi5qc29uP3BhZ2U9 IgogICAgICAgICAgICAgICAgICAgIChzdHJpbmctdHJpbS1sZWZ0CiAgICAgICAgICAgICAgICAg ICAgIChjZHIgKGFzc3EgJ25leHQganNvbikpCiAgICAgICAgICAgICAgICAgICAgICJbXjAtOV0r IikpKQogICAgICAgICAodnovYm9va3dyeW0tLWpzb24pKQogICAgICAgc2hlbGYKICAgICAgIHJl dCkKICAgIHJldCkpCgooZGVmdmFyIHZ6L2Jvb2t3cnltLWluc3RhbmNlICJodHRwczovL2Jvb2ty YXN0aW5hdGluZy5jb20iCiAgIkluc3RhbmNlIG9mIGJvb2t3cnltIHRvIHVzZSBieSBkZWZhdWx0 LiIpCgooZGVmdmFyIHZ6L2Jvb2t3cnltLXVzZXIgImJyb250ZWEiCiAgIkJvb2t3cnltIHVzZXIg dG8gdmlldyBieSBkZWZhdWx0LiIpCgooZGVmdmFyIHZ6L2Jvb2t3cnltLS1jb3Zlci13aWR0aCAx MCkKCihkZWZ1biB2ei9ib29rd3J5bS0tY292ZXIgKCkKICAoZ290by1jaGFyIChwb2ludC1taW4p KQogIChzZWFyY2gtZm9yd2FyZCAiXG5cbiIpCiAgKGRlbGV0ZS1yZWdpb24gKHBvaW50LW1pbikg KHBvaW50KSkKICAocHJvcGVydGl6ZSAiKiIgJ2Rpc3BsYXkgKGNyZWF0ZS1pbWFnZSAoYnVmZmVy LXN0cmluZykgbmlsIHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 bWF4LXdpZHRoIChjb25zIHZ6L2Jvb2t3cnltLS1jb3Zlci13aWR0aCAnY3cpKSkpCgooZGVmdW4g dnovYm9va3dyeW0tbGlzdC1zaGVsdmVzICgmb3B0aW9uYWwgdXNlciBpbnN0YW5jZSkKICAiTGlz dCBzaGVsdmVzIG9mIFVTRVIgaW4gYm9va3dyeW0gaW5zdGFuY2UgSU5TVEFOQ0UuCkludGVyYWN0 aXZlbHksIHF1ZXJ5IGZvciB0aGUgdXNlciBhbmQgaW5zdGFuY2Ugd2l0aCB0aGUgcHJlZml4IGFy Z3VtZW50LiIKICAoaW50ZXJhY3RpdmUKICAgKGlmIGN1cnJlbnQtcHJlZml4LWFyZwogICAgICAg KHN0cmluZy1zcGxpdCAocmVhZC1zdHJpbmcgIldoYXQgdXNlciB0byB2aWV3IChAVVNFUkBJTlNU QU5DRSk/ICIpICJAIiB0KQogICAgIChsaXN0IHZ6L2Jvb2t3cnltLXVzZXIgdnovYm9va3dyeW0t aW5zdGFuY2UpKSkKICAobGV0KiAoKHNoZWx2ZXMgKHZ6L2Jvb2t3cnltLS1zaGVsdmVzIHVzZXIg aW5zdGFuY2UpKQogICAgICAgICAoYm9va3MgKG1hcGNhbiAjJ3Z6L2Jvb2t3cnltLS1zaGVsZiBz aGVsdmVzKSkpCiAgICAocmVxdWlyZSAndnRhYmxlKQogICAgKHdpdGgtY3VycmVudC1idWZmZXIg KGdldC1idWZmZXItY3JlYXRlICIqQm9va3dyeW0qIikKICAgICAgKGxldCAoKGluaGliaXQtcmVh ZC1vbmx5IHQpKQogICAgICAgIChlcmFzZS1idWZmZXIpCiAgICAgICAgKGZhY2UtcmVtYXAtc2V0 LWJhc2UgJ2hlYWRlci1saW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmJhY2tncm91 bmQgKGZhY2UtYXR0cmlidXRlICdoZWFkZXItbGluZSA6YmFja2dyb3VuZCkpCiAgICAgICAgKG1h a2UtdnRhYmxlCiAgICAgICAgIDs7IDp1c2UtaGVhZGVyLWxpbmUgbmlsCiAgICAgICAgIDpjb2x1 bW5zIGAoKDpuYW1lICJDb3ZlciIgOndpZHRoICx2ei9ib29rd3J5bS0tY292ZXItd2lkdGgKICAg ICAgICAgICAgICAgICAgICAgICAgICAgOmZvcm1hdHRlciAobGFtYmRhICh4KSAob3IgeCAiIikp CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDpnZXR0ZXIgLChsYW1iZGEgKG9iamVjdCBfKSAo Y2RyIChhc3NxICdjb3Zlci1pbWcgb2JqZWN0KSkpKQogICAgICAgICAgICAgICAgICAgICJTaGVs ZiIgIlRpdGxlIgogICAgICAgICAgICAgICAgICAgICg6bmFtZSAiQXV0aG9ycyIKICAgICAgICAg ICAgICAgICAgICAgICAgICAgOmdldHRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAsKGxh bWJkYSAob2JqZWN0IF8pIChzdHJpbmctam9pbiAoY2RyIChhc3NxICdhdXRob3JzIG9iamVjdCkp ICIsICIpKSkKICAgICAgICAgICAgICAgICAgICAiUHVibGlzaGVkIikKICAgICAgICAgOmNvbHVt bi1jb2xvcnMgJygiI2ZmZmZmZiIgIiNlNWU1ZWIiICIjZjJmMmY0IikKICAgICAgICAgOnJvdy1j b2xvcnMgJygiI2YyZjJmNCIgIiNlNWU1ZWIiICIjZmZmZmZmIikKICAgICAgICAgOmdldHRlciAo bGFtYmRhIChvYmplY3QgY29sdW1uIHZ0YWJsZSkKICAgICAgICAgICAgICAgICAgIChvciAoY2Ry IChhc3NxIChpbnRlcm4gKGRvd25jYXNlICh2dGFibGUtY29sdW1uIHZ0YWJsZSBjb2x1bW4pKSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCkpCiAgICAgICAgICAgICAg ICAgICAgICAgIiIpKQogICAgICAgICA6b2JqZWN0cy1mdW5jdGlvbiAobGFtYmRhICgpIGJvb2tz KSkKICAgICAgICAocmVhZC1vbmx5LW1vZGUgMSkKICAgICAgICAocG9wLXRvLWJ1ZmZlciAoY3Vy cmVudC1idWZmZXIpKQogICAgICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgICAgKGdvdG8tY2hh ciAocG9pbnQtbWluKSkKICAgICAgICAgIChsZXQgKChpIDApKQogICAgICAgICAgICAod2hpbGUg KG5vdCAoZW9icCkpCiAgICAgICAgICAgICAgKGxldCAoKG9iamVjdCAodnRhYmxlLWN1cnJlbnQt b2JqZWN0KSkpCiAgICAgICAgICAgICAgICAod2hlbiAoYXNzcSAnY292ZXIgb2JqZWN0KQogICAg ICAgICAgICAgICAgICAodXJsLXJldHJpZXZlIChjZHIgKGFzc3EgJ2NvdmVyIG9iamVjdCkpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoc3RhdHVzIGJ1ZmZlciBvYmpl Y3QgbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bmxlc3MgKGVxIChjYXIg c3RhdHVzKSA6ZXJyb3IpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsZXQg KChjb3ZlciAodnovYm9va3dyeW0tLWNvdmVyKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmZmVyCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS11cGRhdGUtb2JqZWN0ICh2 dGFibGUtY3VycmVudC10YWJsZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zIChjb25zICdjb3Zlci1pbWcgY292ZXIp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBvYmplY3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QpKSkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoc2V0ZiAoYWxpc3QtZ2V0ICdjb3Zlci1pbWcgKG50aCBuIGJv b2tzKSkgY292ZXIpKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgKGN1 cnJlbnQtYnVmZmVyKSBvYmplY3QgaSkpKQogICAgICAgICAgICAgICAgKHdoZW4gb2JqZWN0IChz ZXRxIGkgKDErIGkpKSkpCiAgICAgICAgICAgICAgKGZvcndhcmQtbGluZSAxKSkpKSkpKSkKLS09 LT0tPS0tCg==
bug-gnu-emacs@HIDDEN:bug#80026; Package emacs.
Full text available.
Received: (at 80026) by debbugs.gnu.org; 18 Dec 2025 20:06:54 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Dec 18 15:06:54 2025
Received: from localhost ([127.0.0.1]:57342 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1vWKGw-0005wd-8g
for submit <at> debbugs.gnu.org; Thu, 18 Dec 2025 15:06:53 -0500
Received: from mail-vs1-xe2b.google.com ([2607:f8b0:4864:20::e2b]:46202)
by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
(Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
id 1vWKGt-0005wJ-3b
for 80026 <at> debbugs.gnu.org; Thu, 18 Dec 2025 15:06:48 -0500
Received: by mail-vs1-xe2b.google.com with SMTP id
ada2fe7eead31-5e55bd6f5bbso662796137.0
for <80026 <at> debbugs.gnu.org>; Thu, 18 Dec 2025 12:06:47 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1766088401; x=1766693201; darn=debbugs.gnu.org;
h=cc:to:subject:message-id:date:from:in-reply-to:references
:mime-version:from:to:cc:subject:date:message-id:reply-to;
bh=QBdp28P1jDIR8ybTK+l8CLPlYX1F2uPUMVICuMX4Ux0=;
b=XBIQk7nS3ZWdbBD22Vc0z86c8i6Jh5kUMnzVaN/cF8ConPG5oShi6pzlWD1V/EGqvE
1BGILJfP6+gUOYbjgy8Bk58QMM0n7bTJ4YazcvLC8Zj/puIDXkFeXRLccbffLTtsyylG
JpEDGPbg6JOeWYlXW3UH114sSf3MAPdXT7ipFvTUNg1NH3zpew4oPwcr48uie9XfQ9Zt
G71uZyDm8C0sxxTLBSTpXV3P+WSSHfFrv10xUbUu61WPckvWyXO29Y6muINwTb47/AdE
9YbAp/Eq7vwwhQF8Or+v3UhNxmD12+js0CO+Ahef9g/KVjOFJMI9Y/fJJ8uW795PlHPE
JDxQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1766088401; x=1766693201;
h=cc:to:subject:message-id:date:from:in-reply-to:references
:mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date
:message-id:reply-to;
bh=QBdp28P1jDIR8ybTK+l8CLPlYX1F2uPUMVICuMX4Ux0=;
b=i0X8sX8qBw5mCe604Yy7g55rqghfs8nyt5ILLLmg3wnT02JNy9bOwUaysiFkR6QeYG
FFiijPqySkFHdaQJaOYN0HXyVNRLQ59yc5uJtZPwuYQYQW2fRcf/d5fyFpSgk+kg+9kN
gIfcHhDw1wNsVqF3oqS0AODTnjM51szjXMnXXcsJ1jRc1cnlI8+Ewpayo8l8CMw+ad2c
cHJtSEB5zVfbHe2oiNWspJGR7cK0whnh6GLoC/3eSdVeS3U/5h8ygHg+WWCyaxd5mXtL
n+wMUF7RHW4RRFllvOvVBCKmML/PcSsDkSP9NXe1zwhChyT2fvJcXN2KLNY+SDjiOBZH
/1zA==
X-Gm-Message-State: AOJu0YzuwrwDw18M7F1/XB+Z6jMfRAht78Yyz10pFdWWVCl2XSFgg+wT
tRY27+cirBRoLYCEamLA8qpSw+sE5BcM3SZj8tZq3TbiadOxy5kb2XiTgxfEx4LAKDmebwtO8H3
mlZFSs0b/Ota1Hh9A2SxtD1HiMfNDkAU=
X-Gm-Gg: AY/fxX6lmH+uFLjH/QM9pVvhpWNWZosytc5c73nhj5DWRpftRqtzb8g3kTdaBjvyRgf
v2SN/HhDataaktdCLaV1eERptProhKnxq3Fs8QJQ3VrzSz0NlZ/kdGLWtWjj7ejLWZeiVKXiopL
CWuJHo7af6AgoB9PtLPVqnNHXYnJUo2x6w1F45CRcHEuDmGWMzX3ihNux7pDM/f9TMRLCdpXEbD
CSYH3jggqJ9OUUzQTR/tJPPn2lqZqCPRpiewxOYlNlVVB/3gYCHrFNn+QjjHhphFBhfMpI=
X-Google-Smtp-Source: AGHT+IEb57kiPAR37eJV5iRtZRFDf+RR0kzyxqwSznAJBxOHsTiVVxBupwXmOAFPhxcwhN1JjpOT4RX/2mqe83836EA=
X-Received: by 2002:a05:6102:5687:b0:5db:1fbc:4462 with SMTP id
ada2fe7eead31-5eb1a8155d8mr190612137.31.1766088401281; Thu, 18 Dec 2025
12:06:41 -0800 (PST)
MIME-Version: 1.0
References: <CAN+1HbqKXXc+20yaSkkQuGCn-H0zGenZZFdTH3Ts=LT+QyTMGQ@HIDDEN>
<86zf7g2v9t.fsf@HIDDEN>
<CAN+1HbqaOS-Dhf=FayFLcux5RAqd+YTO8sjLm0dgwqfiNN-qow@HIDDEN>
<CAN+1HbpXAa=MK7VbaUvuQnVC1Mb4EqZqj9C-TYNgMxPR2Wb8Aw@HIDDEN>
<CAN+1HbqV3QVKGD61c5fBNagEVc+DT0A7UrfRh5+SDCu=tPb6Dw@HIDDEN>
<861pkr3cei.fsf@HIDDEN>
<CAN+1Hbqn_Ojes=iinTJAaMvp+D1Y+R5cRX8dKjO41LRrfqbvfA@HIDDEN>
<86zf7f1ugq.fsf@HIDDEN>
<CAN+1Hbr80y5GaGkMB3zE=hfG5kc_+jq5CgYbdMWpQ5895O0Ljw@HIDDEN>
In-Reply-To: <CAN+1Hbr80y5GaGkMB3zE=hfG5kc_+jq5CgYbdMWpQ5895O0Ljw@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN>
Date: Thu, 18 Dec 2025 15:06:30 -0500
X-Gm-Features: AQt7F2pwTVDREg186Sn4UISSnbb5sLre6J3DN5MDqLEgQzkP3DoMSGwIDGh57BE
Message-ID: <CAN+1HbpBhNaZudz2CR2ZW36dbLcQ5cmxzdhLHnJGY-m_2ycbsQ@HIDDEN>
Subject: Re: bug#80026: [PATCH] Improve vtable--limit-string performance
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: multipart/alternative; boundary="000000000000cce69706463f7f83"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 80026
Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, joostkremers@HIDDEN,
ijqq@HIDDEN, 80026 <at> debbugs.gnu.org, visuweshm@HIDDEN,
adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)
--000000000000cce69706463f7f83
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
On Thu, Dec 18, 2025 at 2:34=E2=80=AFPM St=C3=A9phane Marks <shipmints@gmai=
l.com> wrote:
> On Thu, Dec 18, 2025 at 2:05=E2=80=AFPM Eli Zaretskii <eliz@HIDDEN> wrot=
e:
>
>> > From: St=C3=A9phane Marks <shipmints@HIDDEN>
>> > Date: Thu, 18 Dec 2025 12:55:33 -0500
>> > Cc: 80026 <at> debbugs.gnu.org, sbaugh@HIDDEN,
>> krisbalintona@HIDDEN,
>> > joostkremers@HIDDEN, ijqq@HIDDEN,
>> visuweshm@HIDDEN,
>> > adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN
>> >
>> > > Benchmark results show that the heuristic outperforms the naive for
>> every string length and even
>> > where the
>> > > heuristic guess adjustment adds 2 characters. You can see that lon=
g
>> strings suffer dramatically. I
>> > also used
>> > > several long strings provided by Kristoffer from his real-world use
>> cases. I don't yet have his
>> > permission to
>> > > add them formally to the test but can trivially concoct similar
>> strings.
>> > >
>> > > The test tries to fit strings into 100, 500, and 1000 pixel columns=
,
>> typical column width for strings,
>> > 1000
>> > > iterations each.
>> >
>> > Thanks. But what is 'len' in this output?
>> >
>> > It's the length of the input strings to truncate to the max pixels.
>> Varying the input length demonstrates both
>> > on-par (a tiny bit better) performance for short strings and much
>> better performance for longer input strings.
>>
>> Then the benchmark seems to tell that the performance of
>> vtable--limit-string is non-linear in the length of the string:
>>
>> pixels=3D100 len=3D011 func=3Dnaive (0.031156 0 0.0)
>> pixels=3D100 len=3D023 func=3Dnaive (0.112267 0 0.0)
>> pixels=3D100 len=3D047 func=3Dnaive (0.30842200000000003 0 0.0)
>> pixels=3D100 len=3D095 func=3Dnaive (0.837941 0 0.0)
>>
>> And this is probably because each time vtable--limit-string calls
>> string-pixel-width, the latter inserts the string into a buffer and
>> then works on the buffer. So I think one thing to try is to insert
>> the string only once, and then call window-text-pixel-size, with the
>> portion of the string to be measured controlled by the FROM and TO
>> arguments of window-text-pixel-size. This should significantly reduce
>> the overhead of calling string-pixel-width for each substring of the
>> string.
>>
>
> Maybe but I'd think the heuristic will beat it every time given that the
> truncation estimate shows itself to be accurate.
>
> I can implement a truncate-string-to-pixel-width function that does what
> string-pixel-width does that could replace the vtable function if it prov=
es
> to be sufficiently fast. Maybe today maybe tomorrow.
>
Okay here's what I think you meant, though it uses and reuses the work
buffer vs. the vtable buffer itself (I'm not even sure where to insert the
string, save excursion and go to the end and insert there and then delete
it?). Perhaps the function is screwy in some way. Heuristic still beats
it.
(defun truncate-string-to-pixel-width (string pixels &optional buffer)
"Return STRING truncated to fit within in PIXELS.
If BUFFER is non-nil, use the face remappings, alternative and default
properties from that buffer when determining the width.
If you call this function to measure pixel width of a string
with embedded newlines, it returns the width of the widest
substring that does not include newlines."
(declare (important-return-value t))
(if (zerop (length string))
0
;; Keeping a work buffer around is more efficient than creating a
;; new temporary buffer.
(with-work-buffer
;; Setup current buffer to correctly compute pixel width.
(when buffer
(dolist (v '(face-remapping-alist
char-property-alias-alist
default-text-properties))
(if (local-variable-p v buffer)
(set (make-local-variable v)
(buffer-local-value v buffer)))))
;; Avoid deactivating the region as side effect.
(let (deactivate-mark)
(insert string))
;; If `display-line-numbers' is enabled in internal
;; buffers (e.g. globally), it breaks width calculation
;; (bug#59311). Disable `line-prefix' and `wrap-prefix',
;; for the same reason.
(add-text-properties
(point-min) (point-max)
'(display-line-numbers-disable t line-prefix "" wrap-prefix ""))
(let ((string-pixels (car (buffer-text-pixel-size nil nil t))))
(while (and (> (buffer-size) 0)
(if string-pixels (prog1
(> string-pixels pixels)
(setq string-pixels nil))
(> (car (buffer-text-pixel-size nil nil t)) pixels)))
(delete-char -1))
(substring string 0 (buffer-size))))))
pixels=3D100 len=3D003 func=3Dnaive (0.0063950000000000005 0 0.0)
pixels=3D100 len=3D003 func=3Dt-s-t-p-w (0.007994 0 0.0)
pixels=3D100 len=3D003 func=3Dheuristic+0 (0.006236 0 0.0)
pixels=3D100 len=3D003 func=3Dheuristic+2 (0.006215 0 0.0)
---
pixels=3D100 len=3D011 func=3Dnaive (0.031788 0 0.0)
pixels=3D100 len=3D011 func=3Dt-s-t-p-w (0.026893 0 0.0)
pixels=3D100 len=3D011 func=3Dheuristic+0 (0.018702 0 0.0)
pixels=3D100 len=3D011 func=3Dheuristic+2 (0.024654000000000002 0 0.0)
---
pixels=3D100 len=3D023 func=3Dnaive (0.114598 0 0.0)
pixels=3D100 len=3D023 func=3Dt-s-t-p-w (0.088504 0 0.0)
pixels=3D100 len=3D023 func=3Dheuristic+0 (0.014005 0 0.0)
pixels=3D100 len=3D023 func=3Dheuristic+2 (0.025701 0 0.0)
---
pixels=3D100 len=3D047 func=3Dnaive (0.315523 0 0.0)
pixels=3D100 len=3D047 func=3Dt-s-t-p-w (0.245707 0 0.0)
pixels=3D100 len=3D047 func=3Dheuristic+0 (0.015999000000000003 0 0.0)
pixels=3D100 len=3D047 func=3Dheuristic+2 (0.027639 0 0.0)
---
pixels=3D100 len=3D095 func=3Dnaive (0.869488 0 0.0)
pixels=3D100 len=3D095 func=3Dt-s-t-p-w (0.683964 0 0.0)
pixels=3D100 len=3D095 func=3Dheuristic+0 (0.020001 0 0.0)
pixels=3D100 len=3D095 func=3Dheuristic+2 (0.035457999999999996 0 0.0)
---
pixels=3D100 len=3D241 func=3Dnaive (3.753899 1 0.09117999999999427)
pixels=3D100 len=3D241 func=3Dt-s-t-p-w (3.215154 0 0.0)
pixels=3D100 len=3D241 func=3Dheuristic+0 (0.031103000000000002 0 0.0)
pixels=3D100 len=3D241 func=3Dheuristic+2 (0.043434 0 0.0)
---
pixels=3D100 len=3D482 func=3Dnaive (11.685177999999999 2
0.16571500000000583)
pixels=3D100 len=3D482 func=3Dt-s-t-p-w (10.667202 0 0.0)
pixels=3D100 len=3D482 func=3Dheuristic+0 (0.049013999999999995 0 0.0)
pixels=3D100 len=3D482 func=3Dheuristic+2 (0.061099 0 0.0)
---
pixels=3D500 len=3D003 func=3Dnaive (0.006419 0 0.0)
pixels=3D500 len=3D003 func=3Dt-s-t-p-w (0.007862 0 0.0)
pixels=3D500 len=3D003 func=3Dheuristic+0 (0.006312000000000001 0 0.0)
pixels=3D500 len=3D003 func=3Dheuristic+2 (0.0061530000000000005 0 0.0)
---
pixels=3D500 len=3D011 func=3Dnaive (0.007126 0 0.0)
pixels=3D500 len=3D011 func=3Dt-s-t-p-w (0.009124 0 0.0)
pixels=3D500 len=3D011 func=3Dheuristic+0 (0.006971000000000001 0 0.0)
pixels=3D500 len=3D011 func=3Dheuristic+2 (0.006932000000000001 0 0.0)
---
pixels=3D500 len=3D023 func=3Dnaive (0.008341 0 0.0)
pixels=3D500 len=3D023 func=3Dt-s-t-p-w (0.009788999999999999 0 0.0)
pixels=3D500 len=3D023 func=3Dheuristic+0 (0.007909 0 0.0)
pixels=3D500 len=3D023 func=3Dheuristic+2 (0.007738 0 0.0)
---
pixels=3D500 len=3D047 func=3Dnaive (0.09095700000000001 0 0.0)
pixels=3D500 len=3D047 func=3Dt-s-t-p-w (0.07583300000000001 0 0.0)
pixels=3D500 len=3D047 func=3Dheuristic+0 (0.018677000000000003 0 0.0)
pixels=3D500 len=3D047 func=3Dheuristic+2 (0.035324 0 0.0)
---
pixels=3D500 len=3D095 func=3Dnaive (0.630095 0 0.0)
pixels=3D500 len=3D095 func=3Dt-s-t-p-w (0.524951 0 0.0)
pixels=3D500 len=3D095 func=3Dheuristic+0 (0.022356 0 0.0)
pixels=3D500 len=3D095 func=3Dheuristic+2 (0.039214 0 0.0)
---
pixels=3D500 len=3D241 func=3Dnaive (3.452412 1 0.09696800000000394)
pixels=3D500 len=3D241 func=3Dt-s-t-p-w (2.968355 0 0.0)
pixels=3D500 len=3D241 func=3Dheuristic+0 (0.032931999999999996 0 0.0)
pixels=3D500 len=3D241 func=3Dheuristic+2 (0.049274 0 0.0)
---
pixels=3D500 len=3D482 func=3Dnaive (11.199719 2 0.1634030000000024)
pixels=3D500 len=3D482 func=3Dt-s-t-p-w (10.212119000000001 0 0.0)
pixels=3D500 len=3D482 func=3Dheuristic+0 (0.050258 0 0.0)
pixels=3D500 len=3D482 func=3Dheuristic+2 (0.067481 0 0.0)
---
pixels=3D1000 len=3D003 func=3Dnaive (0.006269 0 0.0)
pixels=3D1000 len=3D003 func=3Dt-s-t-p-w (0.007803 0 0.0)
pixels=3D1000 len=3D003 func=3Dheuristic+0 (0.005975 0 0.0)
pixels=3D1000 len=3D003 func=3Dheuristic+2 (0.005836 0 0.0)
---
pixels=3D1000 len=3D011 func=3Dnaive (0.006713 0 0.0)
pixels=3D1000 len=3D011 func=3Dt-s-t-p-w (0.008369 0 0.0)
pixels=3D1000 len=3D011 func=3Dheuristic+0 (0.006582 0 0.0)
pixels=3D1000 len=3D011 func=3Dheuristic+2 (0.006825 0 0.0)
---
pixels=3D1000 len=3D023 func=3Dnaive (0.007742000000000001 0 0.0)
pixels=3D1000 len=3D023 func=3Dt-s-t-p-w (0.009468 0 0.0)
pixels=3D1000 len=3D023 func=3Dheuristic+0 (0.007546000000000001 0 0.0)
pixels=3D1000 len=3D023 func=3Dheuristic+2 (0.0076100000000000004 0 0.0)
---
pixels=3D1000 len=3D047 func=3Dnaive (0.009765 0 0.0)
pixels=3D1000 len=3D047 func=3Dt-s-t-p-w (0.011391 0 0.0)
pixels=3D1000 len=3D047 func=3Dheuristic+0 (0.009403 0 0.0)
pixels=3D1000 len=3D047 func=3Dheuristic+2 (0.009529 0 0.0)
---
pixels=3D1000 len=3D095 func=3Dnaive (0.240419 0 0.0)
pixels=3D1000 len=3D095 func=3Dt-s-t-p-w (0.20951 0 0.0)
pixels=3D1000 len=3D095 func=3Dheuristic+0 (0.02418 0 0.0)
pixels=3D1000 len=3D095 func=3Dheuristic+2 (0.047563999999999995 0 0.0)
---
pixels=3D1000 len=3D241 func=3Dnaive (2.898081 0 0.0)
pixels=3D1000 len=3D241 func=3Dt-s-t-p-w (2.582903 0 0.0)
pixels=3D1000 len=3D241 func=3Dheuristic+0 (0.035483999999999995 0 0.0)
pixels=3D1000 len=3D241 func=3Dheuristic+2 (0.058371 0 0.0)
---
pixels=3D1000 len=3D482 func=3Dnaive (10.858842 2 0.1688879999999955)
pixels=3D1000 len=3D482 func=3Dt-s-t-p-w (9.853366 0 0.0)
pixels=3D1000 len=3D482 func=3Dheuristic+0 (0.053123 0 0.0)
pixels=3D1000 len=3D482 func=3Dheuristic+2 (0.075433 0 0.0)
--000000000000cce69706463f7f83
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Thu, Dec 18, 2025 at 2:34=E2=80=AFPM St=C3=A9phane Marks <<a href=3D"=
mailto:shipmints@HIDDEN">shipmints@HIDDEN</a>> wrote:</span></div>=
</div><div class=3D"gmail_quote gmail_quote_container"><blockquote class=3D=
"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(2=
04,204,204);padding-left:1ex"><div dir=3D"ltr"><div dir=3D"ltr"><div style=
=3D"font-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-=
serif">On Thu, Dec 18, 2025 at 2:05=E2=80=AFPM Eli Zaretskii <<a href=3D=
"mailto:eliz@HIDDEN" target=3D"_blank">eliz@HIDDEN</a>> wrote:</span><=
/div></div><div class=3D"gmail_quote"><blockquote class=3D"gmail_quote" sty=
le=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);paddi=
ng-left:1ex">> From: St=C3=A9phane Marks <<a href=3D"mailto:shipmints=
@gmail.com" target=3D"_blank">shipmints@HIDDEN</a>><br>
> Date: Thu, 18 Dec 2025 12:55:33 -0500<br>
> Cc: <a href=3D"mailto:80026 <at> debbugs.gnu.org" target=3D"_blank">80026@d=
ebbugs.gnu.org</a>, <a href=3D"mailto:sbaugh@HIDDEN" target=3D"_bla=
nk">sbaugh@HIDDEN</a>, <a href=3D"mailto:krisbalintona@HIDDEN" t=
arget=3D"_blank">krisbalintona@HIDDEN</a>, <br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0<a href=3D"mailto:joostkremers@HIDDEN" =
target=3D"_blank">joostkremers@HIDDEN</a>, <a href=3D"mailto:ijqq@prot=
onmail.com" target=3D"_blank">ijqq@HIDDEN</a>, <a href=3D"mailto:vi=
suweshm@HIDDEN" target=3D"_blank">visuweshm@HIDDEN</a>, <br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0<a href=3D"mailto:adam@HIDDEN" target=
=3D"_blank">adam@HIDDEN</a>, <a href=3D"mailto:larsi@HIDDEN" targe=
t=3D"_blank">larsi@HIDDEN</a>, <a href=3D"mailto:arstoffel@HIDDEN" tar=
get=3D"_blank">arstoffel@HIDDEN</a><br>
> <br>
>=C2=A0 > Benchmark results show that the heuristic outperforms the n=
aive for every string length and even<br>
>=C2=A0 where the<br>
>=C2=A0 > heuristic guess adjustment adds 2 characters.=C2=A0 You can=
see that long strings suffer dramatically.=C2=A0 I<br>
>=C2=A0 also used<br>
>=C2=A0 > several long strings provided by Kristoffer from his real-w=
orld use cases.=C2=A0 I don't yet have his<br>
>=C2=A0 permission to<br>
>=C2=A0 > add them formally to the test but can trivially concoct sim=
ilar strings.<br>
>=C2=A0 > <br>
>=C2=A0 > The test tries to fit strings into 100, 500, and 1000 pixel=
columns, typical column width for strings,<br>
>=C2=A0 1000<br>
>=C2=A0 > iterations each.<br>
> <br>
>=C2=A0 Thanks.=C2=A0 But what is 'len' in this output?<br>
> <br>
> It's the length of the input strings to truncate to the max pixels=
.=C2=A0 Varying the input length demonstrates both<br>
> on-par (a tiny bit better) performance for short strings and much bett=
er performance for longer input strings.<br>
<br>
Then the benchmark seems to tell that the performance of<br>
vtable--limit-string is non-linear in the length of the string:<br>
<br>
=C2=A0 pixels=3D100 len=3D011 func=3Dnaive=C2=A0 =C2=A0 =C2=A0 =C2=A0(0.031=
156 0 0.0)<br>
=C2=A0 pixels=3D100 len=3D023 func=3Dnaive=C2=A0 =C2=A0 =C2=A0 =C2=A0(0.112=
267 0 0.0)<br>
=C2=A0 pixels=3D100 len=3D047 func=3Dnaive=C2=A0 =C2=A0 =C2=A0 =C2=A0(0.308=
42200000000003 0 0.0)<br>
=C2=A0 pixels=3D100 len=3D095 func=3Dnaive=C2=A0 =C2=A0 =C2=A0 =C2=A0(0.837=
941 0 0.0)<br>
<br>
And this is probably because each time vtable--limit-string calls<br>
string-pixel-width, the latter inserts the string into a buffer and<br>
then works on the buffer.=C2=A0 So I think one thing to try is to insert<br=
>
the string only once, and then call window-text-pixel-size, with the<br>
portion of the string to be measured controlled by the FROM and TO<br>
arguments of window-text-pixel-size.=C2=A0 This should significantly reduce=
<br>
the overhead of calling string-pixel-width for each substring of the<br>
string.<br></blockquote><div><br></div><div style=3D"font-family:monospace"=
>Maybe but I'd think the heuristic will beat it every time given that t=
he truncation estimate shows itself to be accurate.</div><div style=3D"font=
-family:monospace"><br></div><div style=3D"font-family:monospace">I can imp=
lement a truncate-string-to-pixel-width function that does what string-pixe=
l-width does that could replace the vtable function if it proves to be suff=
iciently fast.=C2=A0 Maybe today maybe tomorrow.</div></div></div></blockqu=
ote><div><br></div><div class=3D"gmail_default" style=3D"font-family:monosp=
ace">Okay here's what I think you meant, though it uses and reuses the =
work buffer vs. the vtable buffer itself (I'm not even sure where to in=
sert the string, save excursion and go to the end and insert there and then=
delete it?).=C2=A0 Perhaps the function is screwy in some way.=C2=A0 Heuri=
stic still beats it.</div><div class=3D"gmail_default" style=3D"font-family=
:monospace"><br></div><div class=3D"gmail_default" style=3D"font-family:mon=
ospace">(defun truncate-string-to-pixel-width (string pixels &optional =
buffer)<br>=C2=A0 "Return STRING truncated to fit within in PIXELS.<br=
>If BUFFER is non-nil, use the face remappings, alternative and default<br>=
properties from that buffer when determining the width.<br>If you call this=
function to measure pixel width of a string<br>with embedded newlines, it =
returns the width of the widest<br>substring that does not include newlines=
."<br>=C2=A0 (declare (important-return-value t))<br>=C2=A0 (if (zerop=
(length string))<br>=C2=A0 =C2=A0 =C2=A0 0<br>=C2=A0 =C2=A0 ;; Keeping a w=
ork buffer around is more efficient than creating a<br>=C2=A0 =C2=A0 ;; new=
temporary buffer.<br>=C2=A0 =C2=A0 (with-work-buffer<br>=C2=A0 =C2=A0 =C2=
=A0 ;; Setup current buffer to correctly compute pixel width.<br>=C2=A0 =C2=
=A0 =C2=A0 (when buffer<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 (dolist (v '(fac=
e-remapping-alist<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0char-property-alias-alist<br>=C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0default-text-propert=
ies))<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (if (local-variable-p v buffer)=
<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (set (make-local-varia=
ble v)<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0(buffer-local-value v buffer)))))<br>=C2=A0 =C2=A0 =C2=A0 ;; Avoid de=
activating the region as side effect.<br>=C2=A0 =C2=A0 =C2=A0 (let (deactiv=
ate-mark)<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 (insert string))<br>=C2=A0 =C2=A0 =
=C2=A0 ;; If `display-line-numbers' is enabled in internal<br>=C2=A0 =
=C2=A0 =C2=A0 ;; buffers (e.g. globally), it breaks width calculation<br>=
=C2=A0 =C2=A0 =C2=A0 ;; (bug#59311).=C2=A0 Disable `line-prefix' and `w=
rap-prefix',<br>=C2=A0 =C2=A0 =C2=A0 ;; for the same reason.<br>=C2=A0 =
=C2=A0 =C2=A0 (add-text-properties<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0(point-min=
) (point-max)<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0'(display-line-numbers-disa=
ble t line-prefix "" wrap-prefix ""))<br>=C2=A0 =C2=A0 =
=C2=A0 (let ((string-pixels (car (buffer-text-pixel-size nil nil t))))<br>=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 (while (and (> (buffer-size) 0)<br>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (if string-p=
ixels (prog1<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 (> string-pixels pixels)<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setq string-pixels nil))<br>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (>=
(car (buffer-text-pixel-size nil nil t)) pixels)))<br>=C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 (delete-char -1))<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 (substring =
string 0 (buffer-size))))))<br></div><div class=3D"gmail_default" style=3D"=
font-family:monospace"><br></div><div class=3D"gmail_default" style=3D"font=
-family:monospace">pixels=3D100 len=3D003 func=3Dnaive =C2=A0 =C2=A0 =C2=A0=
(0.0063950000000000005 0 0.0)<br>pixels=3D100 len=3D003 func=3Dt-s-t-p-w =
=C2=A0 (0.007994 0 0.0)<br>pixels=3D100 len=3D003 func=3Dheuristic+0 (0.006=
236 0 0.0)<br>pixels=3D100 len=3D003 func=3Dheuristic+2 (0.006215 0 0.0)<br=
>---<br>pixels=3D100 len=3D011 func=3Dnaive =C2=A0 =C2=A0 =C2=A0 (0.031788 =
0 0.0)<br>pixels=3D100 len=3D011 func=3Dt-s-t-p-w =C2=A0 (0.026893 0 0.0)<b=
r>pixels=3D100 len=3D011 func=3Dheuristic+0 (0.018702 0 0.0)<br>pixels=3D10=
0 len=3D011 func=3Dheuristic+2 (0.024654000000000002 0 0.0)<br>---<br>pixel=
s=3D100 len=3D023 func=3Dnaive =C2=A0 =C2=A0 =C2=A0 (0.114598 0 0.0)<br>pix=
els=3D100 len=3D023 func=3Dt-s-t-p-w =C2=A0 (0.088504 0 0.0)<br>pixels=3D10=
0 len=3D023 func=3Dheuristic+0 (0.014005 0 0.0)<br>pixels=3D100 len=3D023 f=
unc=3Dheuristic+2 (0.025701 0 0.0)<br>---<br>pixels=3D100 len=3D047 func=3D=
naive =C2=A0 =C2=A0 =C2=A0 (0.315523 0 0.0)<br>pixels=3D100 len=3D047 func=
=3Dt-s-t-p-w =C2=A0 (0.245707 0 0.0)<br>pixels=3D100 len=3D047 func=3Dheuri=
stic+0 (0.015999000000000003 0 0.0)<br>pixels=3D100 len=3D047 func=3Dheuris=
tic+2 (0.027639 0 0.0)<br>---<br>pixels=3D100 len=3D095 func=3Dnaive =C2=A0=
=C2=A0 =C2=A0 (0.869488 0 0.0)<br>pixels=3D100 len=3D095 func=3Dt-s-t-p-w =
=C2=A0 (0.683964 0 0.0)<br>pixels=3D100 len=3D095 func=3Dheuristic+0 (0.020=
001 0 0.0)<br>pixels=3D100 len=3D095 func=3Dheuristic+2 (0.0354579999999999=
96 0 0.0)<br>---<br>pixels=3D100 len=3D241 func=3Dnaive =C2=A0 =C2=A0 =C2=
=A0 (3.753899 1 0.09117999999999427)<br>pixels=3D100 len=3D241 func=3Dt-s-t=
-p-w =C2=A0 (3.215154 0 0.0)<br>pixels=3D100 len=3D241 func=3Dheuristic+0 (=
0.031103000000000002 0 0.0)<br>pixels=3D100 len=3D241 func=3Dheuristic+2 (0=
.043434 0 0.0)<br>---<br>pixels=3D100 len=3D482 func=3Dnaive =C2=A0 =C2=A0 =
=C2=A0 (11.685177999999999 2 0.16571500000000583)<br>pixels=3D100 len=3D482=
func=3Dt-s-t-p-w =C2=A0 (10.667202 0 0.0)<br>pixels=3D100 len=3D482 func=
=3Dheuristic+0 (0.049013999999999995 0 0.0)<br>pixels=3D100 len=3D482 func=
=3Dheuristic+2 (0.061099 0 0.0)<br>---<br>pixels=3D500 len=3D003 func=3Dnai=
ve =C2=A0 =C2=A0 =C2=A0 (0.006419 0 0.0)<br>pixels=3D500 len=3D003 func=3Dt=
-s-t-p-w =C2=A0 (0.007862 0 0.0)<br>pixels=3D500 len=3D003 func=3Dheuristic=
+0 (0.006312000000000001 0 0.0)<br>pixels=3D500 len=3D003 func=3Dheuristic+=
2 (0.0061530000000000005 0 0.0)<br>---<br>pixels=3D500 len=3D011 func=3Dnai=
ve =C2=A0 =C2=A0 =C2=A0 (0.007126 0 0.0)<br>pixels=3D500 len=3D011 func=3Dt=
-s-t-p-w =C2=A0 (0.009124 0 0.0)<br>pixels=3D500 len=3D011 func=3Dheuristic=
+0 (0.006971000000000001 0 0.0)<br>pixels=3D500 len=3D011 func=3Dheuristic+=
2 (0.006932000000000001 0 0.0)<br>---<br>pixels=3D500 len=3D023 func=3Dnaiv=
e =C2=A0 =C2=A0 =C2=A0 (0.008341 0 0.0)<br>pixels=3D500 len=3D023 func=3Dt-=
s-t-p-w =C2=A0 (0.009788999999999999 0 0.0)<br>pixels=3D500 len=3D023 func=
=3Dheuristic+0 (0.007909 0 0.0)<br>pixels=3D500 len=3D023 func=3Dheuristic+=
2 (0.007738 0 0.0)<br>---<br>pixels=3D500 len=3D047 func=3Dnaive =C2=A0 =C2=
=A0 =C2=A0 (0.09095700000000001 0 0.0)<br>pixels=3D500 len=3D047 func=3Dt-s=
-t-p-w =C2=A0 (0.07583300000000001 0 0.0)<br>pixels=3D500 len=3D047 func=3D=
heuristic+0 (0.018677000000000003 0 0.0)<br>pixels=3D500 len=3D047 func=3Dh=
euristic+2 (0.035324 0 0.0)<br>---<br>pixels=3D500 len=3D095 func=3Dnaive =
=C2=A0 =C2=A0 =C2=A0 (0.630095 0 0.0)<br>pixels=3D500 len=3D095 func=3Dt-s-=
t-p-w =C2=A0 (0.524951 0 0.0)<br>pixels=3D500 len=3D095 func=3Dheuristic+0 =
(0.022356 0 0.0)<br>pixels=3D500 len=3D095 func=3Dheuristic+2 (0.039214 0 0=
.0)<br>---<br>pixels=3D500 len=3D241 func=3Dnaive =C2=A0 =C2=A0 =C2=A0 (3.4=
52412 1 0.09696800000000394)<br>pixels=3D500 len=3D241 func=3Dt-s-t-p-w =C2=
=A0 (2.968355 0 0.0)<br>pixels=3D500 len=3D241 func=3Dheuristic+0 (0.032931=
999999999996 0 0.0)<br>pixels=3D500 len=3D241 func=3Dheuristic+2 (0.049274 =
0 0.0)<br>---<br>pixels=3D500 len=3D482 func=3Dnaive =C2=A0 =C2=A0 =C2=A0 (=
11.199719 2 0.1634030000000024)<br>pixels=3D500 len=3D482 func=3Dt-s-t-p-w =
=C2=A0 (10.212119000000001 0 0.0)<br>pixels=3D500 len=3D482 func=3Dheuristi=
c+0 (0.050258 0 0.0)<br>pixels=3D500 len=3D482 func=3Dheuristic+2 (0.067481=
0 0.0)<br>---<br>pixels=3D1000 len=3D003 func=3Dnaive =C2=A0 =C2=A0 =C2=A0=
(0.006269 0 0.0)<br>pixels=3D1000 len=3D003 func=3Dt-s-t-p-w =C2=A0 (0.007=
803 0 0.0)<br>pixels=3D1000 len=3D003 func=3Dheuristic+0 (0.005975 0 0.0)<b=
r>pixels=3D1000 len=3D003 func=3Dheuristic+2 (0.005836 0 0.0)<br>---<br>pix=
els=3D1000 len=3D011 func=3Dnaive =C2=A0 =C2=A0 =C2=A0 (0.006713 0 0.0)<br>=
pixels=3D1000 len=3D011 func=3Dt-s-t-p-w =C2=A0 (0.008369 0 0.0)<br>pixels=
=3D1000 len=3D011 func=3Dheuristic+0 (0.006582 0 0.0)<br>pixels=3D1000 len=
=3D011 func=3Dheuristic+2 (0.006825 0 0.0)<br>---<br>pixels=3D1000 len=3D02=
3 func=3Dnaive =C2=A0 =C2=A0 =C2=A0 (0.007742000000000001 0 0.0)<br>pixels=
=3D1000 len=3D023 func=3Dt-s-t-p-w =C2=A0 (0.009468 0 0.0)<br>pixels=3D1000=
len=3D023 func=3Dheuristic+0 (0.007546000000000001 0 0.0)<br>pixels=3D1000=
len=3D023 func=3Dheuristic+2 (0.0076100000000000004 0 0.0)<br>---<br>pixel=
s=3D1000 len=3D047 func=3Dnaive =C2=A0 =C2=A0 =C2=A0 (0.009765 0 0.0)<br>pi=
xels=3D1000 len=3D047 func=3Dt-s-t-p-w =C2=A0 (0.011391 0 0.0)<br>pixels=3D=
1000 len=3D047 func=3Dheuristic+0 (0.009403 0 0.0)<br>pixels=3D1000 len=3D0=
47 func=3Dheuristic+2 (0.009529 0 0.0)<br>---<br>pixels=3D1000 len=3D095 fu=
nc=3Dnaive =C2=A0 =C2=A0 =C2=A0 (0.240419 0 0.0)<br>pixels=3D1000 len=3D095=
func=3Dt-s-t-p-w =C2=A0 (0.20951 0 0.0)<br>pixels=3D1000 len=3D095 func=3D=
heuristic+0 (0.02418 0 0.0)<br>pixels=3D1000 len=3D095 func=3Dheuristic+2 (=
0.047563999999999995 0 0.0)<br>---<br>pixels=3D1000 len=3D241 func=3Dnaive =
=C2=A0 =C2=A0 =C2=A0 (2.898081 0 0.0)<br>pixels=3D1000 len=3D241 func=3Dt-s=
-t-p-w =C2=A0 (2.582903 0 0.0)<br>pixels=3D1000 len=3D241 func=3Dheuristic+=
0 (0.035483999999999995 0 0.0)<br>pixels=3D1000 len=3D241 func=3Dheuristic+=
2 (0.058371 0 0.0)<br>---<br>pixels=3D1000 len=3D482 func=3Dnaive =C2=A0 =
=C2=A0 =C2=A0 (10.858842 2 0.1688879999999955)<br>pixels=3D1000 len=3D482 f=
unc=3Dt-s-t-p-w =C2=A0 (9.853366 0 0.0)<br>pixels=3D1000 len=3D482 func=3Dh=
euristic+0 (0.053123 0 0.0)<br>pixels=3D1000 len=3D482 func=3Dheuristic+2 (=
0.075433 0 0.0)<br></div><div class=3D"gmail_default" style=3D"font-family:=
monospace"><br></div><div class=3D"gmail_default" style=3D"font-family:mono=
space"><br></div></div></div>
--000000000000cce69706463f7f83--
bug-gnu-emacs@HIDDEN:bug#80026; Package emacs.
Full text available.Received: (at 80026) by debbugs.gnu.org; 18 Dec 2025 19:34:39 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Dec 18 14:34:39 2025 Received: from localhost ([127.0.0.1]:57107 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vWJln-000458-2S for submit <at> debbugs.gnu.org; Thu, 18 Dec 2025 14:34:39 -0500 Received: from mail-vs1-xe34.google.com ([2607:f8b0:4864:20::e34]:44379) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1vWJlk-00044r-Fa for 80026 <at> debbugs.gnu.org; Thu, 18 Dec 2025 14:34:37 -0500 Received: by mail-vs1-xe34.google.com with SMTP id ada2fe7eead31-5dfd2148bf3so308794137.1 for <80026 <at> debbugs.gnu.org>; Thu, 18 Dec 2025 11:34:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766086471; x=1766691271; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=1dRF070P90ZbimwL4lQ0hdABt8PplmWc48WlsuvwQwg=; b=XrtmB2E6ibbahE3YG1FIw6QZtrANWOeYOthvb/R8Hcw6enBCZwhHLLm7nZVH2uyXY+ ogmqfmMoHv4tqc5k1d3E5tghq9RGiKgOHECPV18Rm6Ak7CPsWecaGBgdp+Odcvr7ymsO /6KE6aNz8JznyQcGJmdvL4s/s9E+jVkaY9gBK8SUQjcd3M+3qe26xnh47+Lut3ifSR0c jQUmuoUpXXF5y7nU52tzdE8pJt41Jhpnk2DGN1+CKpDEz8+hCPuUIS8d/nguWsuQF6q8 ciY4nJM2OnxDbkMdkNM3Hu2NBKyhj6441hZmR6QBKWhCStZGJb920hcephyd+f9HJFep HH+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766086471; x=1766691271; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=1dRF070P90ZbimwL4lQ0hdABt8PplmWc48WlsuvwQwg=; b=sl27Bvz/dLJZyUd9tfxciJI7dXvpsG/Jk5nVjVa+OGrmHiks0QqDxoXOSwoPugvXKi 9uXwQESkVuIc5d6PVwF7weK4JLhKQVKeO7keCRx8GqrYCPhvmOlksRhVsh84laNQfySz JdKJACkujdQWcraB1GPc3vBg6UH3Wv/kFXJlSuKQPJn1EP9OgT7ous3dqQzroIfRryZB vZlxMOsPq1ylPuAOlMxtWGekTaGPlmSO/Rlfv7ZQfQBf2R5/b5XkaGYrF14MrVMsPUag qT6CW1tu9yC6kfnigr0osKg0a0OhyoQY7HVzCGXJIYzY+UH0wHRsHhpiiOwzxOLRUfT+ MHTQ== X-Gm-Message-State: AOJu0Yz8RZlSjN17FgBdxoYJKILJ+B4tufFJvgmoUo+wcl6cJIKK+FZA TQ4RXHWqzkmKLj93rMJC4iG/6VthToIKxmGnzA469a4ZJFgp7nT3Rr2O1mf21wA+p8RcXSJ+9as sk3As3/RyYQUWp1jHljTOUrAcPzICKmA= X-Gm-Gg: AY/fxX6bbreZlbaKVhcss7512P7d/Ejy1yTNWp4BuQaBdhqyEMDkdOtUP+Wxts7F/A5 YgHidf81el1IOWDjPK+U/iBXt/SER7hvR5xhIrZSlfEyXl1vI+p1yEDySpJ5wdl2IPPnNh+Uwje TAMnmdan3lIxk/ULQk4CZKsf4Ta+FsDlb5+6KExTzzpl2tLRt8BEBNf8IMJBs9ELK7nlHrHGskq LLrgRgbkUYR8jIiIrxOLEDTMs0bsvAw9Cs+9OE4B820Wy7P6AX5GBVpzKNUSJVdUYvYFSM= X-Google-Smtp-Source: AGHT+IECscXF6GqkI3cFwoeFLxq1bPuDyHWSrz/4clxfurepBBGKRoFEKmzWlsipsH8r5fiUodBBZqnsMz7ugC2aLGI= X-Received: by 2002:a05:6102:2c88:b0:5db:cc25:dd7e with SMTP id ada2fe7eead31-5eb1a8122e7mr161713137.34.1766086470769; Thu, 18 Dec 2025 11:34:30 -0800 (PST) MIME-Version: 1.0 References: <CAN+1HbqKXXc+20yaSkkQuGCn-H0zGenZZFdTH3Ts=LT+QyTMGQ@HIDDEN> <86zf7g2v9t.fsf@HIDDEN> <CAN+1HbqaOS-Dhf=FayFLcux5RAqd+YTO8sjLm0dgwqfiNN-qow@HIDDEN> <CAN+1HbpXAa=MK7VbaUvuQnVC1Mb4EqZqj9C-TYNgMxPR2Wb8Aw@HIDDEN> <CAN+1HbqV3QVKGD61c5fBNagEVc+DT0A7UrfRh5+SDCu=tPb6Dw@HIDDEN> <861pkr3cei.fsf@HIDDEN> <CAN+1Hbqn_Ojes=iinTJAaMvp+D1Y+R5cRX8dKjO41LRrfqbvfA@HIDDEN> <86zf7f1ugq.fsf@HIDDEN> In-Reply-To: <86zf7f1ugq.fsf@HIDDEN> From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN> Date: Thu, 18 Dec 2025 14:34:19 -0500 X-Gm-Features: AQt7F2reYhskFXPNjsD_tDjKBEm-9mK-ACoB9NucHEI6O_RfYLTYcjhNIuZHIGU Message-ID: <CAN+1Hbr80y5GaGkMB3zE=hfG5kc_+jq5CgYbdMWpQ5895O0Ljw@HIDDEN> Subject: Re: bug#80026: [PATCH] Improve vtable--limit-string performance To: Eli Zaretskii <eliz@HIDDEN> Content-Type: multipart/alternative; boundary="000000000000bb9e6606463f0ce0" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 80026 Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, joostkremers@HIDDEN, ijqq@HIDDEN, 80026 <at> debbugs.gnu.org, visuweshm@HIDDEN, adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --000000000000bb9e6606463f0ce0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Dec 18, 2025 at 2:05=E2=80=AFPM Eli Zaretskii <eliz@HIDDEN> wrote: > > From: St=C3=A9phane Marks <shipmints@HIDDEN> > > Date: Thu, 18 Dec 2025 12:55:33 -0500 > > Cc: 80026 <at> debbugs.gnu.org, sbaugh@HIDDEN, > krisbalintona@HIDDEN, > > joostkremers@HIDDEN, ijqq@HIDDEN, visuweshm@HIDDEN= m, > > > adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN > > > > > Benchmark results show that the heuristic outperforms the naive for > every string length and even > > where the > > > heuristic guess adjustment adds 2 characters. You can see that long > strings suffer dramatically. I > > also used > > > several long strings provided by Kristoffer from his real-world use > cases. I don't yet have his > > permission to > > > add them formally to the test but can trivially concoct similar > strings. > > > > > > The test tries to fit strings into 100, 500, and 1000 pixel columns, > typical column width for strings, > > 1000 > > > iterations each. > > > > Thanks. But what is 'len' in this output? > > > > It's the length of the input strings to truncate to the max pixels. > Varying the input length demonstrates both > > on-par (a tiny bit better) performance for short strings and much bette= r > performance for longer input strings. > > Then the benchmark seems to tell that the performance of > vtable--limit-string is non-linear in the length of the string: > > pixels=3D100 len=3D011 func=3Dnaive (0.031156 0 0.0) > pixels=3D100 len=3D023 func=3Dnaive (0.112267 0 0.0) > pixels=3D100 len=3D047 func=3Dnaive (0.30842200000000003 0 0.0) > pixels=3D100 len=3D095 func=3Dnaive (0.837941 0 0.0) > > And this is probably because each time vtable--limit-string calls > string-pixel-width, the latter inserts the string into a buffer and > then works on the buffer. So I think one thing to try is to insert > the string only once, and then call window-text-pixel-size, with the > portion of the string to be measured controlled by the FROM and TO > arguments of window-text-pixel-size. This should significantly reduce > the overhead of calling string-pixel-width for each substring of the > string. > Maybe but I'd think the heuristic will beat it every time given that the truncation estimate shows itself to be accurate. I can implement a truncate-string-to-pixel-width function that does what string-pixel-width does that could replace the vtable function if it proves to be sufficiently fast. Maybe today maybe tomorrow. --000000000000bb9e6606463f0ce0 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon= t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">= On Thu, Dec 18, 2025 at 2:05=E2=80=AFPM Eli Zaretskii <<a href=3D"mailto= :eliz@HIDDEN">eliz@HIDDEN</a>> wrote:</span></div></div><div class=3D"= gmail_quote gmail_quote_container"><blockquote class=3D"gmail_quote" style= =3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding= -left:1ex">> From: St=C3=A9phane Marks <<a href=3D"mailto:shipmints@g= mail.com" target=3D"_blank">shipmints@HIDDEN</a>><br> > Date: Thu, 18 Dec 2025 12:55:33 -0500<br> > Cc: <a href=3D"mailto:80026 <at> debbugs.gnu.org" target=3D"_blank">80026@d= ebbugs.gnu.org</a>, <a href=3D"mailto:sbaugh@HIDDEN" target=3D"_bla= nk">sbaugh@HIDDEN</a>, <a href=3D"mailto:krisbalintona@HIDDEN" t= arget=3D"_blank">krisbalintona@HIDDEN</a>, <br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0<a href=3D"mailto:joostkremers@HIDDEN" = target=3D"_blank">joostkremers@HIDDEN</a>, <a href=3D"mailto:ijqq@prot= onmail.com" target=3D"_blank">ijqq@HIDDEN</a>, <a href=3D"mailto:vi= suweshm@HIDDEN" target=3D"_blank">visuweshm@HIDDEN</a>, <br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0<a href=3D"mailto:adam@HIDDEN" target= =3D"_blank">adam@HIDDEN</a>, <a href=3D"mailto:larsi@HIDDEN" targe= t=3D"_blank">larsi@HIDDEN</a>, <a href=3D"mailto:arstoffel@HIDDEN" tar= get=3D"_blank">arstoffel@HIDDEN</a><br> > <br> >=C2=A0 > Benchmark results show that the heuristic outperforms the n= aive for every string length and even<br> >=C2=A0 where the<br> >=C2=A0 > heuristic guess adjustment adds 2 characters.=C2=A0 You can= see that long strings suffer dramatically.=C2=A0 I<br> >=C2=A0 also used<br> >=C2=A0 > several long strings provided by Kristoffer from his real-w= orld use cases.=C2=A0 I don't yet have his<br> >=C2=A0 permission to<br> >=C2=A0 > add them formally to the test but can trivially concoct sim= ilar strings.<br> >=C2=A0 > <br> >=C2=A0 > The test tries to fit strings into 100, 500, and 1000 pixel= columns, typical column width for strings,<br> >=C2=A0 1000<br> >=C2=A0 > iterations each.<br> > <br> >=C2=A0 Thanks.=C2=A0 But what is 'len' in this output?<br> > <br> > It's the length of the input strings to truncate to the max pixels= .=C2=A0 Varying the input length demonstrates both<br> > on-par (a tiny bit better) performance for short strings and much bett= er performance for longer input strings.<br> <br> Then the benchmark seems to tell that the performance of<br> vtable--limit-string is non-linear in the length of the string:<br> <br> =C2=A0 pixels=3D100 len=3D011 func=3Dnaive=C2=A0 =C2=A0 =C2=A0 =C2=A0(0.031= 156 0 0.0)<br> =C2=A0 pixels=3D100 len=3D023 func=3Dnaive=C2=A0 =C2=A0 =C2=A0 =C2=A0(0.112= 267 0 0.0)<br> =C2=A0 pixels=3D100 len=3D047 func=3Dnaive=C2=A0 =C2=A0 =C2=A0 =C2=A0(0.308= 42200000000003 0 0.0)<br> =C2=A0 pixels=3D100 len=3D095 func=3Dnaive=C2=A0 =C2=A0 =C2=A0 =C2=A0(0.837= 941 0 0.0)<br> <br> And this is probably because each time vtable--limit-string calls<br> string-pixel-width, the latter inserts the string into a buffer and<br> then works on the buffer.=C2=A0 So I think one thing to try is to insert<br= > the string only once, and then call window-text-pixel-size, with the<br> portion of the string to be measured controlled by the FROM and TO<br> arguments of window-text-pixel-size.=C2=A0 This should significantly reduce= <br> the overhead of calling string-pixel-width for each substring of the<br> string.<br></blockquote><div><br></div><div class=3D"gmail_default" style= =3D"font-family:monospace">Maybe but I'd think the heuristic will beat = it every time given that the truncation estimate shows itself to be accurat= e.</div><div class=3D"gmail_default" style=3D"font-family:monospace"><br></= div><div class=3D"gmail_default" style=3D"font-family:monospace">I can impl= ement a truncate-string-to-pixel-width function that does what string-pixel= -width does that could replace the vtable function if it proves to be suffi= ciently fast.=C2=A0 Maybe today maybe tomorrow.</div></div></div> --000000000000bb9e6606463f0ce0--
bug-gnu-emacs@HIDDEN:bug#80026; Package emacs.
Full text available.Received: (at 80026) by debbugs.gnu.org; 18 Dec 2025 19:06:03 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Dec 18 14:06:03 2025 Received: from localhost ([127.0.0.1]:56853 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vWJK3-0002T1-12 for submit <at> debbugs.gnu.org; Thu, 18 Dec 2025 14:06:02 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:54094) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vWJJz-0002Sm-ID for 80026 <at> debbugs.gnu.org; Thu, 18 Dec 2025 14:05:57 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <eliz@HIDDEN>) id 1vWJJr-0003Gi-Pn; Thu, 18 Dec 2025 14:05:47 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=YNJsMy2b4nk0XSoGUqCq9opNpy8Z79ZhV/HRjl6jE38=; b=Wj5A/2N6A3rtsznvWw3W 3S6hK+SiUoPDlWTrjcV9+/Uxsb56+Hs/9ChvwJTJmFPuphi/mSPScUXHD5l3RFLuDrBuRdMTCoqpx 2dRZJXkkxokfSuY/SRqm/+UbM5HEkKBdoymW+0MBoYpkkEgvc4NtZVQzqM13wV8RJH6DZeTmFMYmn 1ApysYM8W2HPwPB2nicGVxCzU/fLgqTu5Q1xu39sHr2wIIPXsolfh/xkVRz0eWbEAe6t292AtixF8 Inw16yhZmrmNYQlm55ZF3KuSVLkVuuUgAWQn3Na1/GENKD0qVnffPzbrlue/G6XeeEk10Enfpu/W5 TE0CvnBNwhf6bA==; Date: Thu, 18 Dec 2025 21:05:41 +0200 Message-Id: <86zf7f1ugq.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: =?utf-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN> In-Reply-To: <CAN+1Hbqn_Ojes=iinTJAaMvp+D1Y+R5cRX8dKjO41LRrfqbvfA@HIDDEN> (message from =?utf-8?Q?St=C3=A9phane?= Marks on Thu, 18 Dec 2025 12:55:33 -0500) Subject: Re: bug#80026: [PATCH] Improve vtable--limit-string performance References: <CAN+1HbqKXXc+20yaSkkQuGCn-H0zGenZZFdTH3Ts=LT+QyTMGQ@HIDDEN> <86zf7g2v9t.fsf@HIDDEN> <CAN+1HbqaOS-Dhf=FayFLcux5RAqd+YTO8sjLm0dgwqfiNN-qow@HIDDEN> <CAN+1HbpXAa=MK7VbaUvuQnVC1Mb4EqZqj9C-TYNgMxPR2Wb8Aw@HIDDEN> <CAN+1HbqV3QVKGD61c5fBNagEVc+DT0A7UrfRh5+SDCu=tPb6Dw@HIDDEN> <861pkr3cei.fsf@HIDDEN> <CAN+1Hbqn_Ojes=iinTJAaMvp+D1Y+R5cRX8dKjO41LRrfqbvfA@HIDDEN> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 80026 Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, joostkremers@HIDDEN, ijqq@HIDDEN, 80026 <at> debbugs.gnu.org, visuweshm@HIDDEN, adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) > From: Stéphane Marks <shipmints@HIDDEN> > Date: Thu, 18 Dec 2025 12:55:33 -0500 > Cc: 80026 <at> debbugs.gnu.org, sbaugh@HIDDEN, krisbalintona@HIDDEN, > joostkremers@HIDDEN, ijqq@HIDDEN, visuweshm@HIDDEN, > adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN > > > Benchmark results show that the heuristic outperforms the naive for every string length and even > where the > > heuristic guess adjustment adds 2 characters. You can see that long strings suffer dramatically. I > also used > > several long strings provided by Kristoffer from his real-world use cases. I don't yet have his > permission to > > add them formally to the test but can trivially concoct similar strings. > > > > The test tries to fit strings into 100, 500, and 1000 pixel columns, typical column width for strings, > 1000 > > iterations each. > > Thanks. But what is 'len' in this output? > > It's the length of the input strings to truncate to the max pixels. Varying the input length demonstrates both > on-par (a tiny bit better) performance for short strings and much better performance for longer input strings. Then the benchmark seems to tell that the performance of vtable--limit-string is non-linear in the length of the string: pixels=100 len=011 func=naive (0.031156 0 0.0) pixels=100 len=023 func=naive (0.112267 0 0.0) pixels=100 len=047 func=naive (0.30842200000000003 0 0.0) pixels=100 len=095 func=naive (0.837941 0 0.0) And this is probably because each time vtable--limit-string calls string-pixel-width, the latter inserts the string into a buffer and then works on the buffer. So I think one thing to try is to insert the string only once, and then call window-text-pixel-size, with the portion of the string to be measured controlled by the FROM and TO arguments of window-text-pixel-size. This should significantly reduce the overhead of calling string-pixel-width for each substring of the string.
bug-gnu-emacs@HIDDEN:bug#80026; Package emacs.
Full text available.Received: (at 80026) by debbugs.gnu.org; 18 Dec 2025 17:55:57 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Dec 18 12:55:57 2025 Received: from localhost ([127.0.0.1]:56201 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vWIED-0006LE-Sv for submit <at> debbugs.gnu.org; Thu, 18 Dec 2025 12:55:57 -0500 Received: from mail-vs1-xe2b.google.com ([2607:f8b0:4864:20::e2b]:50325) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1vWIEA-0006L0-HW for 80026 <at> debbugs.gnu.org; Thu, 18 Dec 2025 12:55:51 -0500 Received: by mail-vs1-xe2b.google.com with SMTP id ada2fe7eead31-5e9d2ce037aso700834137.0 for <80026 <at> debbugs.gnu.org>; Thu, 18 Dec 2025 09:55:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766080544; x=1766685344; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=OxKHEWfB9sEd7hfKWM3UFf7HA73mP4B5qc+RMzJnBq0=; b=hXqSWblRbowe/a/iBDjdcvjOqOIxIkbsoPjYBSPjz3M0qhY0fKgqQOd5mxiBtYO2Ka rXroaSU8zwG/rcLffN99IqwI9Tk5SXpQbof+yPwdDt2JfWPU6s3tF+MHctbVLU7FU0qY bptTKOO4qofPXB9GgEEr6yq/Ux2Oj5sFHzFqJ0k2yo3mSp3CgrGidlGcXvnL90fX7MEH f1MKo0hAuL2EYqyOd4XPrj5r4K6Grru+yWAuuImz7kDmVor2GR+YH+yJm51GmUi59Yhx n69JMR7Z5a7zVH15/NtKTlmKFyy8kY9nsLYhhpG5M0gAPT2k7phqsdnSLmahC8OnV4dN l0Mg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766080544; x=1766685344; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=OxKHEWfB9sEd7hfKWM3UFf7HA73mP4B5qc+RMzJnBq0=; b=rPj8w55F3tUWfYH8S4Wim9z1ogRNjdQJ0jHwn7eBe0gLk9SgWzNkwi+EAhCJSFIh7f TWb9zfQ6sDbyUrCpegAms9xXGxJocFDvtnDiCUO8ph0vfV6qldTjSrAFzokNns2VdsJq /GhaR7FkBzVO/BiSW+EN40TpT8pkzl1K6+hEf7NoFZDqtvLNI33uPEwnfAuQiazAQMnv rV4HXUrJHwZYnHc26+aIabPl61Pwm5iqD3BrVqg7wR4FK6c4WehY4zUVxarZibVmjoMA L1ZZTcPrR/RQwRYOAeQmUnOUZmbaMn4xQwpXfFOhiHobvqCzttOWbj0G4G+pCLjQ7BPd ByMQ== X-Gm-Message-State: AOJu0Yy8HIoSd0GINc+aUGQdLrcCLP/U+QrRpeNCzv4jg1sfZop15Uw3 ttdMLCeJrWWiSyjwMiSz9BGUmthrvJnfq4f1RA2GbjQOf8edZaZqF8/66XlIcXr20L2irT07neo XHja9obtDb1HH4a68ji94n/HrU3oaGSI= X-Gm-Gg: AY/fxX6B7MOQGJvNCk6qpwK5jnMOsXzyic3dGw4cR8uzKRLullJRPKWdyqGP+m9ENxZ HWjS+/yAOyW5DC+BzMXc0uBY7lreJoo2qy6h+Jydy4GuqY2InOxEg6M4vHLfvpEETBd4odHzCx/ HIEt4An3uLw2hZK2amxAjf7oeujqb98Qq63uqElplf5uChaV0YvOcK77CEEQWOMoL5MrU5YMMDc mDMgjfXRzVLk+QWWiNzcKmYmCvb8sgIVZejK3Khq04tXhpJQMxhNGTV0jdZHrt1qIPLMvdsXsjR MOAidQ== X-Google-Smtp-Source: AGHT+IH+wZee4jFL53YCkQkVDtpAmx7M5C6/emp519aMkX5lYpSHOlFDJe4XnfWbrzzU79K5YxDHga3qtL5vWmMtgUQ= X-Received: by 2002:a05:6102:6a93:b0:5db:1e80:7813 with SMTP id ada2fe7eead31-5eb1a867550mr8531137.43.1766080544623; Thu, 18 Dec 2025 09:55:44 -0800 (PST) MIME-Version: 1.0 References: <CAN+1HbqKXXc+20yaSkkQuGCn-H0zGenZZFdTH3Ts=LT+QyTMGQ@HIDDEN> <86zf7g2v9t.fsf@HIDDEN> <CAN+1HbqaOS-Dhf=FayFLcux5RAqd+YTO8sjLm0dgwqfiNN-qow@HIDDEN> <CAN+1HbpXAa=MK7VbaUvuQnVC1Mb4EqZqj9C-TYNgMxPR2Wb8Aw@HIDDEN> <CAN+1HbqV3QVKGD61c5fBNagEVc+DT0A7UrfRh5+SDCu=tPb6Dw@HIDDEN> <861pkr3cei.fsf@HIDDEN> In-Reply-To: <861pkr3cei.fsf@HIDDEN> From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN> Date: Thu, 18 Dec 2025 12:55:33 -0500 X-Gm-Features: AQt7F2q2js7YJyRpqYxaVdbvfejP0NBU6OuQsR1QgvN8LVI2EtjQpx1qg8TrQ5Y Message-ID: <CAN+1Hbqn_Ojes=iinTJAaMvp+D1Y+R5cRX8dKjO41LRrfqbvfA@HIDDEN> Subject: Re: bug#80026: [PATCH] Improve vtable--limit-string performance To: Eli Zaretskii <eliz@HIDDEN> Content-Type: multipart/alternative; boundary="00000000000081d16b06463dabbd" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 80026 Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, joostkremers@HIDDEN, ijqq@HIDDEN, 80026 <at> debbugs.gnu.org, visuweshm@HIDDEN, adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --00000000000081d16b06463dabbd Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Dec 18, 2025 at 12:53=E2=80=AFPM Eli Zaretskii <eliz@HIDDEN> wrote= : > > From: St=C3=A9phane Marks <shipmints@HIDDEN> > > Date: Thu, 18 Dec 2025 11:40:52 -0500 > > Cc: 80026 <at> debbugs.gnu.org, sbaugh@HIDDEN, > krisbalintona@HIDDEN, > > joostkremers@HIDDEN, ijqq@HIDDEN, visuweshm@HIDDEN= m, > > > adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN > > > > Benchmark results show that the heuristic outperforms the naive for > every string length and even where the > > heuristic guess adjustment adds 2 characters. You can see that long > strings suffer dramatically. I also used > > several long strings provided by Kristoffer from his real-world use > cases. I don't yet have his permission to > > add them formally to the test but can trivially concoct similar strings= . > > > > The test tries to fit strings into 100, 500, and 1000 pixel columns, > typical column width for strings, 1000 > > iterations each. > > Thanks. But what is 'len' in this output? > It's the length of the input strings to truncate to the max pixels. Varying the input length demonstrates both on-par (a tiny bit better) performance for short strings and much better performance for longer input strings. --00000000000081d16b06463dabbd Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon= t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">= On Thu, Dec 18, 2025 at 12:53=E2=80=AFPM Eli Zaretskii <<a href=3D"mailt= o:eliz@HIDDEN">eliz@HIDDEN</a>> wrote:</span></div></div><div class=3D= "gmail_quote gmail_quote_container"><blockquote class=3D"gmail_quote" style= =3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding= -left:1ex">> From: St=C3=A9phane Marks <<a href=3D"mailto:shipmints@g= mail.com" target=3D"_blank">shipmints@HIDDEN</a>><br> > Date: Thu, 18 Dec 2025 11:40:52 -0500<br> > Cc: <a href=3D"mailto:80026 <at> debbugs.gnu.org" target=3D"_blank">80026@d= ebbugs.gnu.org</a>, <a href=3D"mailto:sbaugh@HIDDEN" target=3D"_bla= nk">sbaugh@HIDDEN</a>, <a href=3D"mailto:krisbalintona@HIDDEN" t= arget=3D"_blank">krisbalintona@HIDDEN</a>, <br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0<a href=3D"mailto:joostkremers@HIDDEN" = target=3D"_blank">joostkremers@HIDDEN</a>, <a href=3D"mailto:ijqq@prot= onmail.com" target=3D"_blank">ijqq@HIDDEN</a>, <a href=3D"mailto:vi= suweshm@HIDDEN" target=3D"_blank">visuweshm@HIDDEN</a>, <br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0<a href=3D"mailto:adam@HIDDEN" target= =3D"_blank">adam@HIDDEN</a>, <a href=3D"mailto:larsi@HIDDEN" targe= t=3D"_blank">larsi@HIDDEN</a>, <a href=3D"mailto:arstoffel@HIDDEN" tar= get=3D"_blank">arstoffel@HIDDEN</a><br> > <br> > Benchmark results show that the heuristic outperforms the naive for ev= ery string length and even where the<br> > heuristic guess adjustment adds 2 characters.=C2=A0 You can see that l= ong strings suffer dramatically.=C2=A0 I also used<br> > several long strings provided by Kristoffer from his real-world use ca= ses.=C2=A0 I don't yet have his permission to<br> > add them formally to the test but can trivially concoct similar string= s.<br> > <br> > The test tries to fit strings into 100, 500, and 1000 pixel columns, t= ypical column width for strings, 1000<br> > iterations each.<br> <br> Thanks.=C2=A0 But what is 'len' in this output?<br></blockquote><di= v><br></div><div class=3D"gmail_default" style=3D"font-family:monospace">It= 's the length of the input strings to truncate to the max pixels.=C2=A0= Varying the input length demonstrates both on-par (a tiny bit better) perf= ormance for short strings and much better performance for longer input stri= ngs.</div></div></div> --00000000000081d16b06463dabbd--
bug-gnu-emacs@HIDDEN:bug#80026; Package emacs.
Full text available.Received: (at 80026) by debbugs.gnu.org; 18 Dec 2025 17:53:08 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Dec 18 12:53:08 2025 Received: from localhost ([127.0.0.1]:56156 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vWIBX-00067Z-W0 for submit <at> debbugs.gnu.org; Thu, 18 Dec 2025 12:53:08 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:34762) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vWIBU-000674-Up for 80026 <at> debbugs.gnu.org; Thu, 18 Dec 2025 12:53:06 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <eliz@HIDDEN>) id 1vWIBO-0007pO-GM; Thu, 18 Dec 2025 12:52:58 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=OHSiL+9/R68dpcDb8KsWVpyjRg8mYiGqdq2X3tTZOpk=; b=rwCeEZoRycxsLyl5fspZ SSHH1lzLx0Lq0LbtUhSffYDbPlEGte8gSrENMgTQR+AZZKgfHg6UblYcuADKd1EP6iH8ttgzgWj3V LfGuFoMfcs0vY5GioF3QxZAZm13FFlPYdQTqzE6+OKAQh2xJNLvFiGHjnbwMDn+dPmcpzNDU19Vdx 1yy07jAzICCS5lnt/ZsFNyXxgeaZNbcofIFEl4qhcRyOLH9Mgjg2AZ3KyZdJvwSnfz4xfQ6EOa0hY i+ASpaXelEBVCX5/yWvTAcbpbADs/OzfxVS4hUyd5Eh943kDJNSyFBLW7isdVpXj71UiKVLLcacyP hJaLZRkVPipvtw==; Date: Thu, 18 Dec 2025 19:52:53 +0200 Message-Id: <861pkr3cei.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: =?utf-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN> In-Reply-To: <CAN+1HbqV3QVKGD61c5fBNagEVc+DT0A7UrfRh5+SDCu=tPb6Dw@HIDDEN> (message from =?utf-8?Q?St=C3=A9phane?= Marks on Thu, 18 Dec 2025 11:40:52 -0500) Subject: Re: bug#80026: [PATCH] Improve vtable--limit-string performance References: <CAN+1HbqKXXc+20yaSkkQuGCn-H0zGenZZFdTH3Ts=LT+QyTMGQ@HIDDEN> <86zf7g2v9t.fsf@HIDDEN> <CAN+1HbqaOS-Dhf=FayFLcux5RAqd+YTO8sjLm0dgwqfiNN-qow@HIDDEN> <CAN+1HbpXAa=MK7VbaUvuQnVC1Mb4EqZqj9C-TYNgMxPR2Wb8Aw@HIDDEN> <CAN+1HbqV3QVKGD61c5fBNagEVc+DT0A7UrfRh5+SDCu=tPb6Dw@HIDDEN> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 80026 Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, joostkremers@HIDDEN, ijqq@HIDDEN, 80026 <at> debbugs.gnu.org, visuweshm@HIDDEN, adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -3.3 (---) > From: Stéphane Marks <shipmints@HIDDEN> > Date: Thu, 18 Dec 2025 11:40:52 -0500 > Cc: 80026 <at> debbugs.gnu.org, sbaugh@HIDDEN, krisbalintona@HIDDEN, > joostkremers@HIDDEN, ijqq@HIDDEN, visuweshm@HIDDEN, > adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN > > Benchmark results show that the heuristic outperforms the naive for every string length and even where the > heuristic guess adjustment adds 2 characters. You can see that long strings suffer dramatically. I also used > several long strings provided by Kristoffer from his real-world use cases. I don't yet have his permission to > add them formally to the test but can trivially concoct similar strings. > > The test tries to fit strings into 100, 500, and 1000 pixel columns, typical column width for strings, 1000 > iterations each. Thanks. But what is 'len' in this output?
bug-gnu-emacs@HIDDEN:bug#80026; Package emacs.
Full text available.
Received: (at 80026) by debbugs.gnu.org; 18 Dec 2025 16:41:14 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Dec 18 11:41:14 2025
Received: from localhost ([127.0.0.1]:55461 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1vWH3x-0001qb-7K
for submit <at> debbugs.gnu.org; Thu, 18 Dec 2025 11:41:14 -0500
Received: from mail-vs1-xe31.google.com ([2607:f8b0:4864:20::e31]:53417)
by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
(Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
id 1vWH3t-0001qK-SS
for 80026 <at> debbugs.gnu.org; Thu, 18 Dec 2025 11:41:11 -0500
Received: by mail-vs1-xe31.google.com with SMTP id
ada2fe7eead31-5eae7bb8018so315708137.2
for <80026 <at> debbugs.gnu.org>; Thu, 18 Dec 2025 08:41:09 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1766076064; x=1766680864; darn=debbugs.gnu.org;
h=cc:to:subject:message-id:date:from:in-reply-to:references
:mime-version:from:to:cc:subject:date:message-id:reply-to;
bh=ryUGretbqs0APOawWvX/EjQ5P0eNINSTK/sTqEgCbT8=;
b=jhlVr6RgJCNopyaxmdn4ojw3E2yu5cOMWL7XBMsL9ezjmKhkktFIgjPCapyCfF8b4z
9kMfS+s2OQx839Z6uNxZ/5V+NCoOq9nCTmSpv2P9kWnR07lJ36I0XXwBDRlsdNx2kTQp
t7esJ38HsrSleS+Y+0KcZpt9rYKy7GfB3bt9EnyU0YH4d+oGhowCGnakxKP53VmLHdlC
6n0mLC0pZZe1l/ggiAdMjzvejJRWxLXFFFLtD+y7t3TBmVMahqJs5i/CFYnaVL15ZRAy
zUKCHKSICjBbO/P4s2z+5FIIxlGEtBpfDL0fCAWXdpyuRF5gt3cXp0DeDNQpDL8trHDJ
WUFw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1766076064; x=1766680864;
h=cc:to:subject:message-id:date:from:in-reply-to:references
:mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date
:message-id:reply-to;
bh=ryUGretbqs0APOawWvX/EjQ5P0eNINSTK/sTqEgCbT8=;
b=r5YEFwwxqoE26bVNR5GjWVZiy5hkG+TPoDCySI9+I/cLyFSa85Oy3bsWqxR+zmLxfd
ebSFVKsRwZQ+qkbXACbDjJO7Y3VBfjoJEmBkPtqMffxViTlpbVYZ6vLds3RRbwAqnfN5
LoT+u60LQ6/iTaYVt1lO3pi+EDlMG5Kkhhha6W216o/gefg0W+1sp9wgc7ehWOF3UGu6
+gW641QrF3KfDqVeQF1LeqptX1QoUormhBCKBCagV8FJFnVaCRGPiYUlE/GJ/oZuvKKw
mN8aQgsbax8mJ/MVR5s3Cyt/h4pqLW8yUEYj/1Rcq0jr0Hp3addKhl/IX13a0Bd/UNXf
Ml7Q==
X-Gm-Message-State: AOJu0YwfFcORoG3hVJeZy3O9cg37VYWeKabV69MY+oQyeYNVGRhOFSqO
MPYxBP5C7d+P+X/tEvPhJxIhipasBO7qBIINs60zXKxyZHiyuG/agT5uOlF1vV3j3W4NP8L5/tI
bYzjc/u4cBciZEv+rI1gOSJq9/VMobjU=
X-Gm-Gg: AY/fxX7CAzQTdkQt27M/AIxLT0HrUCkDbTNvsXm8vE9SffCW4xgji4Lz+sDZ8QR0Q5p
1Q2H/kthS5/BSFx64dcbnuZTF3OHgXE3BFLwnNS32nKrOqk01p0fzURUJmJkR+902OVduq5wecb
y3s4iQSCnRyNSLGE1tgn7exqGeydUqZZ6SeDteZN/QyCGXaqfq5CnpE9e8hRwEgWPKI9PCkOXH4
1yp3H/8sqOE8YKPWnHJBOWwVttwBFEMdXz/4tQEOTqfftBUjErHC/I6robxANeQZNbr3R8=
X-Google-Smtp-Source: AGHT+IH1OmBeGH1Co2W6horjBwL7SmubbmvLEe+X151TcO1ffS5FGYjRJ8+/Me9fS24wUX5Wj7G2xHKwV1UrzAbQzeI=
X-Received: by 2002:a05:6102:4429:b0:5df:bb10:631e with SMTP id
ada2fe7eead31-5e827836533mr7446958137.41.1766076064057; Thu, 18 Dec 2025
08:41:04 -0800 (PST)
MIME-Version: 1.0
References: <CAN+1HbqKXXc+20yaSkkQuGCn-H0zGenZZFdTH3Ts=LT+QyTMGQ@HIDDEN>
<86zf7g2v9t.fsf@HIDDEN>
<CAN+1HbqaOS-Dhf=FayFLcux5RAqd+YTO8sjLm0dgwqfiNN-qow@HIDDEN>
<CAN+1HbpXAa=MK7VbaUvuQnVC1Mb4EqZqj9C-TYNgMxPR2Wb8Aw@HIDDEN>
In-Reply-To: <CAN+1HbpXAa=MK7VbaUvuQnVC1Mb4EqZqj9C-TYNgMxPR2Wb8Aw@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN>
Date: Thu, 18 Dec 2025 11:40:52 -0500
X-Gm-Features: AQt7F2rNsfGF4xhGUdd0eiPb5eqyL_HHxZv_R-E0vQs6fIu6Wr9e-nIDyMhbhgk
Message-ID: <CAN+1HbqV3QVKGD61c5fBNagEVc+DT0A7UrfRh5+SDCu=tPb6Dw@HIDDEN>
Subject: Re: bug#80026: [PATCH] Improve vtable--limit-string performance
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: multipart/alternative; boundary="00000000000071ceb906463ca0b9"
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: 80026
Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, joostkremers@HIDDEN,
ijqq@HIDDEN, 80026 <at> debbugs.gnu.org, visuweshm@HIDDEN,
adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)
--00000000000071ceb906463ca0b9
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
On Thu, Dec 18, 2025 at 11:28=E2=80=AFAM St=C3=A9phane Marks <shipmints@gma=
il.com> wrote:
> On Thu, Dec 18, 2025 at 9:48=E2=80=AFAM St=C3=A9phane Marks <shipmints@gm=
ail.com>
> wrote:
>
>> On Thu, Dec 18, 2025 at 12:50=E2=80=AFAM Eli Zaretskii <eliz@HIDDEN> wr=
ote:
>>
>>> > Cc: Spencer Baugh <sbaugh@HIDDEN>,
>>> > Kristoffer Balintona <krisbalintona@HIDDEN>,
>>> > Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN,
>>> > Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>,
>>> > Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <
>>> arstoffel@HIDDEN>
>>> > From: St=C3=A9phane Marks <shipmints@HIDDEN>
>>> > Date: Wed, 17 Dec 2025 13:57:20 -0500
>>> >
>>> > This implements a simple heuristic to limit the number of times
>>> `string-pixel-width` gets called by estimating
>>> > the string's truncation position in advance. This is overridable
>>> column-by-column should some strings in the
>>> > vtable be composed of widely varying font widths that necessitates
>>> minor adjustments to the heuristic. This
>>> > approach performs well in testing (and I tested several approaches)
>>> and has been tested by more than one
>>> > vtable user.
>>>
>>> Thanks, but are you sure this is not a case of premature optimization?
>>> How important is it to speed up vtable--limit-string? Can you show
>>> some benchmarks which will point to this function as a hotspot?
>>>
>>> Also, changing the algorithm from an exact one to one using heuristic
>>> requires significant testing with various problematic cases: text
>>> using variable fonts and characters of different glyph-width,
>>> character-composition sequences (e.g., emoji), etc. Could you please
>>> add such tests to the suite, so we could be sure this change doesn't
>>> introduce regressions?
>>>
>>
>> FWIW, this is not a premature optimization, it is key for vtable
>> performance with columns of, say 500 pixels, on strings that would occup=
y
>> beyond that pixel limit. If vtable could render only the visible portio=
n
>> of the buffer, it might be less of an issue; however, vtable renders the
>> entire table every time on bulk refreshes and the existing looping metho=
d
>> is slow. Single object changes render single lines so that's less of an
>> issue since their line location in the buffer is computed.
>>
>> As far as any negative impact is concerned, without adjustment, the wors=
t
>> case is pretty much just a missing displayed character that had been
>> displayed before.
>>
>> In any case, one can disable the heuristic for complete backward
>> compatibility by setting a column's limit-adjustment property to nil for
>> any problematic strings. I have not yet found one of those in my use bu=
t I
>> don't use other languages like Chinese or whatever that might demonstrat=
e
>> more of an issue.
>>
>> I will adapt my benchmark code, and add some tests for edge cases such a=
s
>> those you mentioned. If there are already a string corpus to test with =
in
>> the code base, let me know or I'll take a look for one.
>>
>
> I stole some text from the erc tests and added a bunch more including
> multi-character emojis and concocted this test which compares the naive
> string limit code to the heuristic code looking for mismatches with zero
> adjustment. Let me know if there are other cases you think need attentio=
n.
>
> (ert-deftest test-vtable--limit-string-stress ()
> (let ((max-pixels 500)
> (strings (list
> "foo bar baz foo bar baz foo bar baz foo bar baz foo ba=
r
> baz foo bar baz"
> (concat "=E8=A9=B1=E8=AA=AA=E5=A4=A9=E4=B8=8B=E5=A4=A7=
=E5=8B=A2=EF=BC=8C=E5=88=86=E4=B9=85=E5=BF=85=E5=90=88=EF=BC=8C=E5=90=88=E4=
=B9=85=E5=BF=85=E5=88=86=EF=BC=9A=E5=91=A8=E6=9C=AB=E4=B8=83=E5=9C=8B=E5=88=
=86=E7=88=AD=EF=BC=8C=E5=B9=B6=E5=85=A5=E6=96=BC=E7=A7=A6=E3=80=82"
> "=E5=8F=8A=E7=A7=A6=E6=BB=85=E4=B9=8B=E5=BE=8C=
=EF=BC=8C=E6=A5=9A=E3=80=81=E6=BC=A2=E5=88=86=E7=88=AD=EF=BC=8C=E5=8F=88=E5=
=B9=B6=E5=85=A5=E6=96=BC=E6=BC=A2=E3=80=82=E6=BC=A2=E6=9C=9D=E8=87=AA=E9=AB=
=98=E7=A5=96=E6=96=AC=E7=99=BD=E8=9B=87=E8=80=8C=E8=B5=B7=E7=BE=A9=EF=BC=8C=
"
> "=E4=B8=80=E7=B5=B1=E5=A4=A9=E4=B8=8B=E3=80=82=
=E5=BE=8C=E4=BE=86=E5=85=89=E6=AD=A6=E4=B8=AD=E8=88=88=EF=BC=8C=E5=82=B3=E8=
=87=B3=E7=8D=BB=E5=B8=9D=EF=BC=8C=E9=81=82=E5=88=86=E7=82=BA=E4=B8=89=E5=9C=
=8B=E3=80=82=E6=8E=A8=E5=85=B6=E8=87=B4=E4=BA=82=E4=B9=8B=E7=94=B1=EF=BC=8C=
"
> "=E6=AE=86=E5=A7=8B=E6=96=BC=E6=A1=93=E3=80=81=
=E9=9D=88=E4=BA=8C=E5=B8=9D=E3=80=82=E6=A1=93=E5=B8=9D=E7=A6=81=E9=8C=AE=E5=
=96=84=E9=A1=9E=EF=BC=8C=E5=B4=87=E4=BF=A1=E5=AE=A6=E5=AE=98=E3=80=82=E5=8F=
=8A=E6=A1=93=E5=B8=9D=E5=B4=A9=EF=BC=8C=E9=9D=88=E5=B8=9D=E5=8D=B3=E4=BD=8D=
=EF=BC=8C"
> "=E5=A4=A7=E5=B0=87=E8=BB=8D=E7=AB=87=E6=AD=A6=
=E3=80=81=E5=A4=AA=E5=82=85=E9=99=B3=E8=95=83=EF=BC=8C=E5=85=B1=E7=9B=B8=E8=
=BC=94=E4=BD=90=E3=80=82=E6=99=82=E6=9C=89=E5=AE=A6=E5=AE=98=E6=9B=B9=E7=AF=
=80=E7=AD=89=E5=BC=84=E6=AC=8A=EF=BC=8C=E7=AB=87=E6=AD=A6=E3=80=81=E9=99=B3=
=E8=95=83=E8=AC=80=E8=AA=85=E4=B9=8B=EF=BC=8C"
> "=E4=BD=9C=E4=BA=8B=E4=B8=8D=E5=AF=86=EF=BC=8C=
=E5=8F=8D=E7=82=BA=E6=89=80=E5=AE=B3=E3=80=82=E4=B8=AD=E6=B6=93=E8=87=AA=E6=
=AD=A4=E6=84=88=E6=A9=AB")
> (concat "=D0=BA=D0=BE=D1=80=D0=BE=D1=87=D0=B5 =D1=82=D0=
=B5=D0=BF=D0=B5=D1=80=D1=8C =D0=B5=D1=81=D0=BB=D0=B8 =D0=BF=D0=BE =D1=80=D1=
=83=D1=81=D1=81=D0=BA=D0=B8 =D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D1=82=D1=
=8C =D0=B2=D1=81=D0=B5 =D1=87=D0=B5=D1=82=D0=BA=D0=BE
> =D0=B8=D0=BB=D0=B8 =D0=B2=D1=81=D0=B5 =D1=80=D0=B0=D0=B2=D0=BD=D0=BE"
> " =D0=BA=D0=BE=D1=80=D0=BE=D1=87=D0=B5 =D1=82=
=D0=B5=D0=BF=D0=B5=D1=80=D1=8C =D0=B5=D1=81=D0=BB=D0=B8 =D0=BF=D0=BE =D1=80=
=D1=83=D1=81=D1=81=D0=BA=D0=B8 =D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D1=82=
=D1=8C =D0=B2=D1=81=D0=B5
> =D1=87=D0=B5=D1=82=D0=BA=D0=BE =D0=B8=D0=BB=D0=B8 =D0=B2=D1=81=D0=B5 =D1=
=80=D0=B0=D0=B2=D0=BD=D0=BE"
> " =D0=BA=D0=BE=D1=80=D0=BE=D1=87=D0=B5 =D1=82=
=D0=B5=D0=BF=D0=B5=D1=80=D1=8C =D0=B5=D1=81=D0=BB=D0=B8 =D0=BF=D0=BE =D1=80=
=D1=83=D1=81=D1=81=D0=BA=D0=B8 =D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D1=82=
=D1=8C =D0=B2=D1=81=D0=B5
> =D1=87=D0=B5=D1=82=D0=BA=D0=BE =D0=B8=D0=BB=D0=B8 =D0=B2=D1=81=D0=B5 =D1=
=80=D0=B0=D0=B2=D0=BD=D0=BE"
> " =D0=BA=D0=BE=D1=80=D0=BE=D1=87=D0=B5 =D1=82=
=D0=B5=D0=BF=D0=B5=D1=80=D1=8C =D0=B5=D1=81=D0=BB=D0=B8 =D0=BF=D0=BE =D1=80=
=D1=83=D1=81=D1=81=D0=BA=D0=B8 =D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D1=82=
=D1=8C =D0=B2=D1=81=D0=B5
> =D1=87=D0=B5=D1=82=D0=BA=D0=BE =D0=B8=D0=BB=D0=B8 =D0=B2=D1=81=D0=B5 =D1=
=80=D0=B0=D0=B2=D0=BD=D0=BE")
> "=D0=B1=D1=83=D0=B4=D0=B5=D1=82 =D1=80=D0=B0=D0=B7=D1=
=80=D1=8B=D0=B2 =D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B8 =D0=BD=D0=B5=D0=BF=D0=
=BE=D0=BD=D1=8F=D1=82=D0=BD=D0=BE =D0=B3=D0=B4=D0=B5=F0=9F=8F=81=F0=9F=9A=
=A9=F0=9F=8E=8C=F0=9F=8F=B4=F0=9F=8F=B3=EF=B8=8F =F0=9F=8F=B3=EF=B8=8F
> <200d>=F0=9F=8C=88=F0=9F=8F=B3=EF=B8=8F <200d>=E2=9A=A7=EF=B8=8F=F0=9F=8F=
=B4<200d>=E2=98=A0=EF=B8=8F"
> (apply #'concat (make-list 200 "\u0065\u0301 ")) ;
> composed e=CC=81 \u00E9
> (let ((woman-loves-man ; =F0=9F=91=A9=E2=80=8D=E2=9D=A4=
=EF=B8=8F=E2=80=8D=F0=9F=91=A8
> (concat "\N{WOMAN}"
> "\N{ZERO WIDTH JOINER}"
> "\N{HEAVY BLACK HEART}"
> "\N{VARIATION SELECTOR-16}"
> "\N{ZERO WIDTH JOINER}"
> "\N{MAN}"
> " ")))
> (apply #'concat (make-list 200 woman-loves-man)))
> (propertize (let ((varying-height-string
> (mapconcat
> #'identity
> (list "AWi!"
> (propertize "foo" 'face
> '(:height 2.5))
> (propertize "bar" 'face
> '(:height 0.5))
> (propertize "baz" 'face
> '(:height 1.0)))
> " ")))
> (apply #'concat (make-list 100
> varying-height-string)))
> 'face 'variable-pitch))))
> (dolist (height '(1.0 0.5 1.5))
> (with-temp-buffer
> (face-remap-add-relative 'default :height height)
> (dolist (string strings)
> (should (eq (length (test-vtable-vtable--limit-string-naive
> string max-pixels (current-buffer)))
> (length (vtable--limit-string string max-pixels
> (current-buffer) 0)))))))))
>
> I wrote a benchmark ert test but not precisely sure how that works in the
> context of the overall ert suite and how benchmark results are intended t=
o
> be processed. Perhaps it should be run by hand and not made an ert test =
at
> all but live in the same test file for manual execution. I didn't see er=
t
> examples of package benchmark code that may check for performance drift o=
r
> whatever. Perhaps those live somewhere else.
>
Benchmark results show that the heuristic outperforms the naive for every
string length and even where the heuristic guess adjustment adds 2
characters. You can see that long strings suffer dramatically. I also
used several long strings provided by Kristoffer from his real-world use
cases. I don't yet have his permission to add them formally to the test
but can trivially concoct similar strings.
The test tries to fit strings into 100, 500, and 1000 pixel columns,
typical column width for strings, 1000 iterations each.
Considering that I haven't (yet) been able to break the heuristic, it seems
worthy to upgrade vtable--limit-string. I'm guessing Eli has some crazy
string combo that will break it and force the need for an adjustment
character or two.
Below, naive is the existing vtable--limit-string implementation and the
heuristic one is my replacement. +0 means no adjustment, +2 means add two
characters to test to see if it's slower than the naive version even when
pushed.
pixels=3D100 len=3D003 func=3Dnaive (0.006355 0 0.0)
pixels=3D100 len=3D003 func=3Dheuristic+0 (0.006028 0 0.0)
pixels=3D100 len=3D003 func=3Dheuristic+2 (0.005978000000000001 0 0.0)
---
pixels=3D100 len=3D011 func=3Dnaive (0.031156 0 0.0)
pixels=3D100 len=3D011 func=3Dheuristic+0 (0.012612 0 0.0)
pixels=3D100 len=3D011 func=3Dheuristic+2 (0.024152 0 0.0)
---
pixels=3D100 len=3D023 func=3Dnaive (0.112267 0 0.0)
pixels=3D100 len=3D023 func=3Dheuristic+0 (0.013013 0 0.0)
pixels=3D100 len=3D023 func=3Dheuristic+2 (0.024733 0 0.0)
---
pixels=3D100 len=3D047 func=3Dnaive (0.30842200000000003 0 0.0)
pixels=3D100 len=3D047 func=3Dheuristic+0 (0.015078000000000001 0 0.0)
pixels=3D100 len=3D047 func=3Dheuristic+2 (0.026317999999999998 0 0.0)
---
pixels=3D100 len=3D095 func=3Dnaive (0.837941 0 0.0)
pixels=3D100 len=3D095 func=3Dheuristic+0 (0.018804 0 0.0)
pixels=3D100 len=3D095 func=3Dheuristic+2 (0.029800999999999998 0 0.0)
---
pixels=3D100 len=3D241 func=3Dnaive (3.611275 1 0.08267299999999977)
pixels=3D100 len=3D241 func=3Dheuristic+0 (0.030516 0 0.0)
pixels=3D100 len=3D241 func=3Dheuristic+2 (0.041586 0 0.0)
---
pixels=3D100 len=3D482 func=3Dnaive (11.761954 3 0.2521639999999934)
pixels=3D100 len=3D482 func=3Dheuristic+0 (0.047342 0 0.0)
pixels=3D100 len=3D482 func=3Dheuristic+2 (0.058127 0 0.0)
---
pixels=3D500 len=3D003 func=3Dnaive (0.0059770000000000005 0 0.0)
pixels=3D500 len=3D003 func=3Dheuristic+0 (0.005854 0 0.0)
pixels=3D500 len=3D003 func=3Dheuristic+2 (0.005863 0 0.0)
---
pixels=3D500 len=3D011 func=3Dnaive (0.006519 0 0.0)
pixels=3D500 len=3D011 func=3Dheuristic+0 (0.006482000000000001 0 0.0)
pixels=3D500 len=3D011 func=3Dheuristic+2 (0.006458 0 0.0)
---
pixels=3D500 len=3D023 func=3Dnaive (0.007701 0 0.0)
pixels=3D500 len=3D023 func=3Dheuristic+0 (0.007569 0 0.0)
pixels=3D500 len=3D023 func=3Dheuristic+2 (0.007457 0 0.0)
---
pixels=3D500 len=3D047 func=3Dnaive (0.08771100000000001 0 0.0)
pixels=3D500 len=3D047 func=3Dheuristic+0 (0.017457 0 0.0)
pixels=3D500 len=3D047 func=3Dheuristic+2 (0.035449999999999995 0 0.0)
---
pixels=3D500 len=3D095 func=3Dnaive (0.617932 0 0.0)
pixels=3D500 len=3D095 func=3Dheuristic+0 (0.021932 0 0.0)
pixels=3D500 len=3D095 func=3Dheuristic+2 (0.038285 0 0.0)
---
pixels=3D500 len=3D241 func=3Dnaive (3.369256 1 0.08657999999999788)
pixels=3D500 len=3D241 func=3Dheuristic+0 (0.032149 0 0.0)
pixels=3D500 len=3D241 func=3Dheuristic+2 (0.049546 0 0.0)
---
pixels=3D500 len=3D482 func=3Dnaive (11.297365 2 0.1588390000000004)
pixels=3D500 len=3D482 func=3Dheuristic+0 (0.052947999999999995 0 0.0)
pixels=3D500 len=3D482 func=3Dheuristic+2 (0.067152 0 0.0)
---
pixels=3D1000 len=3D003 func=3Dnaive (0.006092 0 0.0)
pixels=3D1000 len=3D003 func=3Dheuristic+0 (0.006195 0 0.0)
pixels=3D1000 len=3D003 func=3Dheuristic+2 (0.006086 0 0.0)
---
pixels=3D1000 len=3D011 func=3Dnaive (0.00685 0 0.0)
pixels=3D1000 len=3D011 func=3Dheuristic+0 (0.006679 0 0.0)
pixels=3D1000 len=3D011 func=3Dheuristic+2 (0.006541000000000001 0 0.0)
---
pixels=3D1000 len=3D023 func=3Dnaive (0.007906 0 0.0)
pixels=3D1000 len=3D023 func=3Dheuristic+0 (0.007488000000000001 0 0.0)
pixels=3D1000 len=3D023 func=3Dheuristic+2 (0.00746 0 0.0)
---
pixels=3D1000 len=3D047 func=3Dnaive (0.009493 0 0.0)
pixels=3D1000 len=3D047 func=3Dheuristic+0 (0.009209 0 0.0)
pixels=3D1000 len=3D047 func=3Dheuristic+2 (0.009455 0 0.0)
---
pixels=3D1000 len=3D095 func=3Dnaive (0.243324 0 0.0)
pixels=3D1000 len=3D095 func=3Dheuristic+0 (0.024391000000000003 0 0.0)
pixels=3D1000 len=3D095 func=3Dheuristic+2 (0.046619999999999995 0 0.0)
---
pixels=3D1000 len=3D241 func=3Dnaive (2.908423 0 0.0)
pixels=3D1000 len=3D241 func=3Dheuristic+0 (0.035608 0 0.0)
pixels=3D1000 len=3D241 func=3Dheuristic+2 (0.057997 0 0.0)
---
pixels=3D1000 len=3D482 func=3Dnaive (10.948164 2 0.15671299999999633=
)
pixels=3D1000 len=3D482 func=3Dheuristic+0 (0.053785 0 0.0)
pixels=3D1000 len=3D482 func=3Dheuristic+2 (0.07630200000000001 0 0.0)
-St=C3=A9phane
--00000000000071ceb906463ca0b9
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Thu, Dec 18, 2025 at 11:28=E2=80=AFAM St=C3=A9phane Marks <<a href=3D=
"mailto:shipmints@HIDDEN">shipmints@HIDDEN</a>> wrote:</span></div=
></div><div class=3D"gmail_quote gmail_quote_container"><blockquote class=
=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rg=
b(204,204,204);padding-left:1ex"><div dir=3D"ltr"><div dir=3D"ltr"><div sty=
le=3D"font-family:monospace"><span style=3D"font-family:Arial,Helvetica,san=
s-serif">On Thu, Dec 18, 2025 at 9:48=E2=80=AFAM St=C3=A9phane Marks <<a=
href=3D"mailto:shipmints@HIDDEN" target=3D"_blank">shipmints@HIDDEN<=
/a>> wrote:</span></div></div><div class=3D"gmail_quote"><blockquote cla=
ss=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid =
rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr"><div dir=3D"ltr"><div s=
tyle=3D"font-family:monospace"><span style=3D"font-family:Arial,Helvetica,s=
ans-serif">On Thu, Dec 18, 2025 at 12:50=E2=80=AFAM Eli Zaretskii <<a hr=
ef=3D"mailto:eliz@HIDDEN" target=3D"_blank">eliz@HIDDEN</a>> wrote:</s=
pan></div></div><div class=3D"gmail_quote"><blockquote class=3D"gmail_quote=
" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);=
padding-left:1ex">> Cc: Spencer Baugh <<a href=3D"mailto:sbaugh@janes=
treet.com" target=3D"_blank">sbaugh@HIDDEN</a>>,<br>
>=C2=A0 Kristoffer Balintona <<a href=3D"mailto:krisbalintona@HIDDEN=
om" target=3D"_blank">krisbalintona@HIDDEN</a>>,<br>
>=C2=A0 Joost Kremers <<a href=3D"mailto:joostkremers@HIDDEN" ta=
rget=3D"_blank">joostkremers@HIDDEN</a>>, <a href=3D"mailto:ijqq@pr=
otonmail.com" target=3D"_blank">ijqq@HIDDEN</a>,<br>
>=C2=A0 Visuwesh <<a href=3D"mailto:visuweshm@HIDDEN" target=3D"_b=
lank">visuweshm@HIDDEN</a>>, Adam Porter <<a href=3D"mailto:adam@a=
lphapapa.net" target=3D"_blank">adam@HIDDEN</a>>,<br>
>=C2=A0 Lars Ingebrigtsen <<a href=3D"mailto:larsi@HIDDEN" target=
=3D"_blank">larsi@HIDDEN</a>>, Augusto Stoffel <<a href=3D"mailto:a=
rstoffel@HIDDEN" target=3D"_blank">arstoffel@HIDDEN</a>><br>
> From: St=C3=A9phane Marks <<a href=3D"mailto:shipmints@HIDDEN" t=
arget=3D"_blank">shipmints@HIDDEN</a>><br>
> Date: Wed, 17 Dec 2025 13:57:20 -0500<br>
> <br>
> This implements a simple heuristic to limit the number of times `strin=
g-pixel-width` gets called by estimating<br>
> the string's truncation position in advance.=C2=A0 This is overrid=
able column-by-column should some strings in the<br>
> vtable be composed of widely varying font widths that necessitates min=
or adjustments to the heuristic.=C2=A0 This<br>
> approach performs well in testing (and I tested several approaches) an=
d has been tested by more than one<br>
> vtable user.<br>
<br>
Thanks, but are you sure this is not a case of premature optimization?<br>
How important is it to speed up vtable--limit-string?=C2=A0 Can you show<br=
>
some benchmarks which will point to this function as a hotspot?<br>
<br>
Also, changing the algorithm from an exact one to one using heuristic<br>
requires significant testing with various problematic cases: text<br>
using variable fonts and characters of different glyph-width,<br>
character-composition sequences (e.g., emoji), etc.=C2=A0 Could you please<=
br>
add such tests to the suite, so we could be sure this change doesn't<br=
>
introduce regressions?<br></blockquote><div><br></div><div style=3D"font-fa=
mily:monospace">FWIW, this is not a premature optimization, it is key for v=
table performance with columns of, say 500 pixels, on strings that would oc=
cupy beyond that pixel limit.=C2=A0 If vtable could render only the visible=
portion of the buffer, it might be less of an issue; however, vtable rende=
rs the entire table every time on bulk refreshes and the existing looping m=
ethod is slow.=C2=A0 Single object changes render single lines so that'=
s less of an issue since their line location in the buffer is computed.</di=
v><div style=3D"font-family:monospace"><br></div><div style=3D"font-family:=
monospace">As far as any negative impact is concerned, without adjustment, =
the worst case is pretty much just a missing displayed character that had b=
een displayed before.</div><div style=3D"font-family:monospace"><br></div><=
div style=3D"font-family:monospace">In any case, one can disable the heuris=
tic for complete backward compatibility by setting a column's limit-adj=
ustment property to nil for any problematic strings.=C2=A0 I have not yet f=
ound one of those in my use but I don't use=C2=A0other=C2=A0languages l=
ike Chinese or whatever that=C2=A0might=C2=A0demonstrate more of an issue.<=
/div><div style=3D"font-family:monospace"><br></div><div style=3D"font-fami=
ly:monospace"><div>I will adapt my benchmark code, and add some tests for e=
dge cases such as those you=C2=A0mentioned.=C2=A0 If there are already a st=
ring corpus to test with in the code base, let me know or I'll take a l=
ook for one.</div></div></div></div></blockquote><div><br></div><div style=
=3D"font-family:monospace">I stole some text from the erc tests and added a=
bunch more including multi-character emojis and concocted this test which =
compares the naive string limit code to the heuristic code looking for mism=
atches with zero adjustment.=C2=A0 Let me know if there are other cases you=
think need attention.</div><div style=3D"font-family:monospace"><br></div>=
<div style=3D"font-family:monospace">(ert-deftest test-vtable--limit-string=
-stress ()<br>=C2=A0 (let ((max-pixels 500)<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =
(strings (list<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 "foo bar baz foo bar baz foo bar baz foo bar baz foo bar baz fo=
o bar baz"<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 (concat "=E8=A9=B1=E8=AA=AA=E5=A4=A9=E4=B8=8B=E5=A4=A7=E5=8B=A2=
=EF=BC=8C=E5=88=86=E4=B9=85=E5=BF=85=E5=90=88=EF=BC=8C=E5=90=88=E4=B9=85=E5=
=BF=85=E5=88=86=EF=BC=9A=E5=91=A8=E6=9C=AB=E4=B8=83=E5=9C=8B=E5=88=86=E7=88=
=AD=EF=BC=8C=E5=B9=B6=E5=85=A5=E6=96=BC=E7=A7=A6=E3=80=82"<br>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 "=E5=8F=8A=E7=A7=A6=E6=BB=85=E4=B9=8B=E5=BE=8C=EF=BC=8C=E6=
=A5=9A=E3=80=81=E6=BC=A2=E5=88=86=E7=88=AD=EF=BC=8C=E5=8F=88=E5=B9=B6=E5=85=
=A5=E6=96=BC=E6=BC=A2=E3=80=82=E6=BC=A2=E6=9C=9D=E8=87=AA=E9=AB=98=E7=A5=96=
=E6=96=AC=E7=99=BD=E8=9B=87=E8=80=8C=E8=B5=B7=E7=BE=A9=EF=BC=8C"<br>=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 "=E4=B8=80=E7=B5=B1=E5=A4=A9=E4=B8=8B=E3=80=82=E5=BE=
=8C=E4=BE=86=E5=85=89=E6=AD=A6=E4=B8=AD=E8=88=88=EF=BC=8C=E5=82=B3=E8=87=B3=
=E7=8D=BB=E5=B8=9D=EF=BC=8C=E9=81=82=E5=88=86=E7=82=BA=E4=B8=89=E5=9C=8B=E3=
=80=82=E6=8E=A8=E5=85=B6=E8=87=B4=E4=BA=82=E4=B9=8B=E7=94=B1=EF=BC=8C"=
<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 "=E6=AE=86=E5=A7=8B=E6=96=BC=E6=A1=93=E3=80=81=E9=
=9D=88=E4=BA=8C=E5=B8=9D=E3=80=82=E6=A1=93=E5=B8=9D=E7=A6=81=E9=8C=AE=E5=96=
=84=E9=A1=9E=EF=BC=8C=E5=B4=87=E4=BF=A1=E5=AE=A6=E5=AE=98=E3=80=82=E5=8F=8A=
=E6=A1=93=E5=B8=9D=E5=B4=A9=EF=BC=8C=E9=9D=88=E5=B8=9D=E5=8D=B3=E4=BD=8D=EF=
=BC=8C"<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "=E5=A4=A7=E5=B0=87=E8=BB=8D=E7=AB=87=
=E6=AD=A6=E3=80=81=E5=A4=AA=E5=82=85=E9=99=B3=E8=95=83=EF=BC=8C=E5=85=B1=E7=
=9B=B8=E8=BC=94=E4=BD=90=E3=80=82=E6=99=82=E6=9C=89=E5=AE=A6=E5=AE=98=E6=9B=
=B9=E7=AF=80=E7=AD=89=E5=BC=84=E6=AC=8A=EF=BC=8C=E7=AB=87=E6=AD=A6=E3=80=81=
=E9=99=B3=E8=95=83=E8=AC=80=E8=AA=85=E4=B9=8B=EF=BC=8C"<br>=C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 "=E4=BD=9C=E4=BA=8B=E4=B8=8D=E5=AF=86=EF=BC=8C=E5=8F=8D=E7=82=
=BA=E6=89=80=E5=AE=B3=E3=80=82=E4=B8=AD=E6=B6=93=E8=87=AA=E6=AD=A4=E6=84=88=
=E6=A9=AB")<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 (concat "=D0=BA=D0=BE=D1=80=D0=BE=D1=87=D0=B5 =D1=82=D0=B5=D0=
=BF=D0=B5=D1=80=D1=8C =D0=B5=D1=81=D0=BB=D0=B8 =D0=BF=D0=BE =D1=80=D1=83=D1=
=81=D1=81=D0=BA=D0=B8 =D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D1=82=D1=8C =D0=
=B2=D1=81=D0=B5 =D1=87=D0=B5=D1=82=D0=BA=D0=BE =D0=B8=D0=BB=D0=B8 =D0=B2=D1=
=81=D0=B5 =D1=80=D0=B0=D0=B2=D0=BD=D0=BE"<br>=C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 " =
=D0=BA=D0=BE=D1=80=D0=BE=D1=87=D0=B5 =D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C =
=D0=B5=D1=81=D0=BB=D0=B8 =D0=BF=D0=BE =D1=80=D1=83=D1=81=D1=81=D0=BA=D0=B8 =
=D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D1=82=D1=8C =D0=B2=D1=81=D0=B5 =D1=87=
=D0=B5=D1=82=D0=BA=D0=BE =D0=B8=D0=BB=D0=B8 =D0=B2=D1=81=D0=B5 =D1=80=D0=B0=
=D0=B2=D0=BD=D0=BE"<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 " =D0=BA=D0=BE=D1=80=D0=
=BE=D1=87=D0=B5 =D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C =D0=B5=D1=81=D0=BB=D0=
=B8 =D0=BF=D0=BE =D1=80=D1=83=D1=81=D1=81=D0=BA=D0=B8 =D0=BD=D0=B0=D0=BF=D0=
=B8=D1=81=D0=B0=D1=82=D1=8C =D0=B2=D1=81=D0=B5 =D1=87=D0=B5=D1=82=D0=BA=D0=
=BE =D0=B8=D0=BB=D0=B8 =D0=B2=D1=81=D0=B5 =D1=80=D0=B0=D0=B2=D0=BD=D0=BE&qu=
ot;<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 " =D0=BA=D0=BE=D1=80=D0=BE=D1=87=D0=B5 =D1=82=
=D0=B5=D0=BF=D0=B5=D1=80=D1=8C =D0=B5=D1=81=D0=BB=D0=B8 =D0=BF=D0=BE =D1=80=
=D1=83=D1=81=D1=81=D0=BA=D0=B8 =D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D1=82=
=D1=8C =D0=B2=D1=81=D0=B5 =D1=87=D0=B5=D1=82=D0=BA=D0=BE =D0=B8=D0=BB=D0=B8=
=D0=B2=D1=81=D0=B5 =D1=80=D0=B0=D0=B2=D0=BD=D0=BE")<br>=C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "=D0=B1=D1=83=D0=B4=
=D0=B5=D1=82=C2=A0=D1=80=D0=B0=D0=B7=D1=80=D1=8B=D0=B2=C2=A0=D1=81=D1=82=D1=
=80=D0=BE=D0=BA=D0=B8=C2=A0=D0=BD=D0=B5=D0=BF=D0=BE=D0=BD=D1=8F=D1=82=D0=BD=
=D0=BE=C2=A0=D0=B3=D0=B4=D0=B5=F0=9F=8F=81=F0=9F=9A=A9=F0=9F=8E=8C=F0=9F=8F=
=B4=F0=9F=8F=B3=EF=B8=8F =F0=9F=8F=B3=EF=B8=8F <200d>=F0=9F=8C=88=F0=
=9F=8F=B3=EF=B8=8F <200d>=E2=9A=A7=EF=B8=8F=F0=9F=8F=B4<200d>=
=E2=98=A0=EF=B8=8F"<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 (apply #'concat (make-list 200 "\u0065\u0301 &qu=
ot;)) ; composed e=CC=81 \u00E9<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 (let ((woman-loves-man ; =F0=9F=91=A9=E2=80=8D=E2=
=9D=A4=EF=B8=8F=E2=80=8D=F0=9F=91=A8<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(concat "\N{WOM=
AN}"<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"\N{ZERO WIDTH=
JOINER}"<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"\N{HEAV=
Y BLACK HEART}"<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"=
\N{VARIATION SELECTOR-16}"<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0"\N{ZERO WIDTH JOINER}"<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0"\N{MAN}"<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0" ")))<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 (apply #'concat (make-list 200 woman-loves-man)))<=
br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (properti=
ze (let ((varying-height-string<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0(mapconcat<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 #'identity<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 (list "AWi!"<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (propertize "foo&=
quot; 'face '(:height 2.5))<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (propertize "bar" &=
#39;face '(:height 0.5))<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (propertize "baz" 'fac=
e '(:height 1.0)))<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 " ")))<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (appl=
y #'concat (make-list 100 varying-height-string)))<br>=C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 'face 'variable-pitch))))<br>=C2=A0 =C2=A0 (dolist (h=
eight '(1.0 0.5 1.5))<br>=C2=A0 =C2=A0 =C2=A0 (with-temp-buffer<br>=C2=
=A0 =C2=A0 =C2=A0 =C2=A0 (face-remap-add-relative 'default :height heig=
ht)<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 (dolist (string strings)<br>=C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 (should (eq (length (test-vtable-vtable--limit-str=
ing-naive string max-pixels (current-buffer)))<br>=C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (length (vtable--limit=
-string string max-pixels (current-buffer) 0)))))))))<br></div><div style=
=3D"font-family:monospace"><br></div><div style=3D"font-family:monospace">I=
wrote a benchmark ert test but not precisely sure how that works in the co=
ntext of the overall ert suite and how benchmark results are intended to be=
processed.=C2=A0 Perhaps it should be run by hand and not made an ert test=
at all but live in the same test file for manual execution.=C2=A0 I didn&#=
39;t see ert examples of package benchmark code that may check for performa=
nce drift or whatever.=C2=A0 Perhaps those live somewhere else.<br></div></=
div></div></blockquote><div><br></div><div class=3D"gmail_default" style=3D=
"font-family:monospace">Benchmark results show that the heuristic outperfor=
ms the naive for every string length and even where the heuristic guess adj=
ustment adds 2 characters.=C2=A0 You can see that long strings suffer drama=
tically.=C2=A0 I also used several long strings provided by Kristoffer from=
his real-world use cases.=C2=A0 I don't yet have his permission to add=
them formally to the test but can trivially concoct similar strings.</div>=
<div class=3D"gmail_default" style=3D"font-family:monospace"><br></div><div=
class=3D"gmail_default" style=3D"font-family:monospace">The test tries to =
fit strings into 100, 500, and 1000 pixel=C2=A0columns, typical column widt=
h for strings,=C2=A01000 iterations each.</div><div class=3D"gmail_default"=
style=3D"font-family:monospace"><br></div><div class=3D"gmail_default" sty=
le=3D"font-family:monospace">Considering that I haven't (yet) been able=
to break the heuristic, it seems worthy to upgrade vtable--limit-string.=
=C2=A0 I'm guessing Eli has some crazy string combo that will break it =
and force the need for an adjustment character or two.</div><div class=3D"g=
mail_default" style=3D"font-family:monospace"><br></div><div class=3D"gmail=
_default" style=3D"font-family:monospace">Below, naive is the existing vtab=
le--limit-string implementation and the heuristic one is my replacement.=C2=
=A0+0 means no adjustment,=C2=A0+2 means add two characters to test to see =
if it's slower than the naive version even when pushed.</div><div class=
=3D"gmail_default" style=3D"font-family:monospace"><br></div><div class=3D"=
gmail_default" style=3D"font-family:monospace">pixels=3D100 len=3D003 func=
=3Dnaive =C2=A0 =C2=A0 =C2=A0 (0.006355 0 0.0)<br>pixels=3D100 len=3D003 fu=
nc=3Dheuristic+0 (0.006028 0 0.0)<br>pixels=3D100 len=3D003 func=3Dheuristi=
c+2 (0.005978000000000001 0 0.0)<br>---<br>pixels=3D100 len=3D011 func=3Dna=
ive =C2=A0 =C2=A0 =C2=A0 (0.031156 0 0.0)<br>pixels=3D100 len=3D011 func=3D=
heuristic+0 (0.012612 0 0.0)<br>pixels=3D100 len=3D011 func=3Dheuristic+2 (=
0.024152 0 0.0)<br>---<br>pixels=3D100 len=3D023 func=3Dnaive =C2=A0 =C2=A0=
=C2=A0 (0.112267 0 0.0)<br>pixels=3D100 len=3D023 func=3Dheuristic+0 (0.01=
3013 0 0.0)<br>pixels=3D100 len=3D023 func=3Dheuristic+2 (0.024733 0 0.0)<b=
r>---<br>pixels=3D100 len=3D047 func=3Dnaive =C2=A0 =C2=A0 =C2=A0 (0.308422=
00000000003 0 0.0)<br>pixels=3D100 len=3D047 func=3Dheuristic+0 (0.01507800=
0000000001 0 0.0)<br>pixels=3D100 len=3D047 func=3Dheuristic+2 (0.026317999=
999999998 0 0.0)<br>---<br>pixels=3D100 len=3D095 func=3Dnaive =C2=A0 =C2=
=A0 =C2=A0 (0.837941 0 0.0)<br>pixels=3D100 len=3D095 func=3Dheuristic+0 (0=
.018804 0 0.0)<br>pixels=3D100 len=3D095 func=3Dheuristic+2 (0.029800999999=
999998 0 0.0)<br>---<br>pixels=3D100 len=3D241 func=3Dnaive =C2=A0 =C2=A0 =
=C2=A0 (3.611275 1 0.08267299999999977)<br>pixels=3D100 len=3D241 func=3Dhe=
uristic+0 (0.030516 0 0.0)<br>pixels=3D100 len=3D241 func=3Dheuristic+2 (0.=
041586 0 0.0)<br>---<br>pixels=3D100 len=3D482 func=3Dnaive =C2=A0 =C2=A0 =
=C2=A0 (11.761954 3 0.2521639999999934)<br>pixels=3D100 len=3D482 func=3Dhe=
uristic+0 (0.047342 0 0.0)<br>pixels=3D100 len=3D482 func=3Dheuristic+2 (0.=
058127 0 0.0)<br>---<br>pixels=3D500 len=3D003 func=3Dnaive =C2=A0 =C2=A0 =
=C2=A0 (0.0059770000000000005 0 0.0)<br>pixels=3D500 len=3D003 func=3Dheuri=
stic+0 (0.005854 0 0.0)<br>pixels=3D500 len=3D003 func=3Dheuristic+2 (0.005=
863 0 0.0)<br>---<br>pixels=3D500 len=3D011 func=3Dnaive =C2=A0 =C2=A0 =C2=
=A0 (0.006519 0 0.0)<br>pixels=3D500 len=3D011 func=3Dheuristic+0 (0.006482=
000000000001 0 0.0)<br>pixels=3D500 len=3D011 func=3Dheuristic+2 (0.006458 =
0 0.0)<br>---<br>pixels=3D500 len=3D023 func=3Dnaive =C2=A0 =C2=A0 =C2=A0 (=
0.007701 0 0.0)<br>pixels=3D500 len=3D023 func=3Dheuristic+0 (0.007569 0 0.=
0)<br>pixels=3D500 len=3D023 func=3Dheuristic+2 (0.007457 0 0.0)<br>---<br>=
pixels=3D500 len=3D047 func=3Dnaive =C2=A0 =C2=A0 =C2=A0 (0.087711000000000=
01 0 0.0)<br>pixels=3D500 len=3D047 func=3Dheuristic+0 (0.017457 0 0.0)<br>=
pixels=3D500 len=3D047 func=3Dheuristic+2 (0.035449999999999995 0 0.0)<br>-=
--<br>pixels=3D500 len=3D095 func=3Dnaive =C2=A0 =C2=A0 =C2=A0 (0.617932 0 =
0.0)<br>pixels=3D500 len=3D095 func=3Dheuristic+0 (0.021932 0 0.0)<br>pixel=
s=3D500 len=3D095 func=3Dheuristic+2 (0.038285 0 0.0)<br>---<br>pixels=3D50=
0 len=3D241 func=3Dnaive =C2=A0 =C2=A0 =C2=A0 (3.369256 1 0.086579999999997=
88)<br>pixels=3D500 len=3D241 func=3Dheuristic+0 (0.032149 0 0.0)<br>pixels=
=3D500 len=3D241 func=3Dheuristic+2 (0.049546 0 0.0)<br>---<br>pixels=3D500=
len=3D482 func=3Dnaive =C2=A0 =C2=A0 =C2=A0 (11.297365 2 0.158839000000000=
4)<br>pixels=3D500 len=3D482 func=3Dheuristic+0 (0.052947999999999995 0 0.0=
)<br>pixels=3D500 len=3D482 func=3Dheuristic+2 (0.067152 0 0.0)<br>---<br>p=
ixels=3D1000 len=3D003 func=3Dnaive =C2=A0 =C2=A0 =C2=A0 (0.006092 0 0.0)<b=
r>pixels=3D1000 len=3D003 func=3Dheuristic+0 (0.006195 0 0.0)<br>pixels=3D1=
000 len=3D003 func=3Dheuristic+2 (0.006086 0 0.0)<br>---<br>pixels=3D1000 l=
en=3D011 func=3Dnaive =C2=A0 =C2=A0 =C2=A0 (0.00685 0 0.0)<br>pixels=3D1000=
len=3D011 func=3Dheuristic+0 (0.006679 0 0.0)<br>pixels=3D1000 len=3D011 f=
unc=3Dheuristic+2 (0.006541000000000001 0 0.0)<br>---<br>pixels=3D1000 len=
=3D023 func=3Dnaive =C2=A0 =C2=A0 =C2=A0 (0.007906 0 0.0)<br>pixels=3D1000 =
len=3D023 func=3Dheuristic+0 (0.007488000000000001 0 0.0)<br>pixels=3D1000 =
len=3D023 func=3Dheuristic+2 (0.00746 0 0.0)<br>---<br>pixels=3D1000 len=3D=
047 func=3Dnaive =C2=A0 =C2=A0 =C2=A0 (0.009493 0 0.0)<br>pixels=3D1000 len=
=3D047 func=3Dheuristic+0 (0.009209 0 0.0)<br>pixels=3D1000 len=3D047 func=
=3Dheuristic+2 (0.009455 0 0.0)<br>---<br>pixels=3D1000 len=3D095 func=3Dna=
ive =C2=A0 =C2=A0 =C2=A0 (0.243324 0 0.0)<br>pixels=3D1000 len=3D095 func=
=3Dheuristic+0 (0.024391000000000003 0 0.0)<br>pixels=3D1000 len=3D095 func=
=3Dheuristic+2 (0.046619999999999995 0 0.0)<br>---<br>pixels=3D1000 len=3D2=
41 func=3Dnaive =C2=A0 =C2=A0 =C2=A0 (2.908423 0 0.0)<br>pixels=3D1000 len=
=3D241 func=3Dheuristic+0 (0.035608 0 0.0)<br>pixels=3D1000 len=3D241 func=
=3Dheuristic+2 (0.057997 0 0.0)<br>---<br>pixels=3D1000 len=3D482 func=3Dna=
ive =C2=A0 =C2=A0 =C2=A0 (10.948164 2 0.15671299999999633)<br>pixels=3D1000=
len=3D482 func=3Dheuristic+0 (0.053785 0 0.0)<br>pixels=3D1000 len=3D482 f=
unc=3Dheuristic+2 (0.07630200000000001 0 0.0)<br></div><div class=3D"gmail_=
default" style=3D"font-family:monospace"><br></div><div class=3D"gmail_defa=
ult" style=3D"font-family:monospace">-St=C3=A9phane=C2=A0</div></div></div>
--00000000000071ceb906463ca0b9--
bug-gnu-emacs@HIDDEN:bug#80026; Package emacs.
Full text available.
Received: (at 80026) by debbugs.gnu.org; 18 Dec 2025 16:29:16 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Dec 18 11:29:16 2025
Received: from localhost ([127.0.0.1]:55299 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1vWGsK-0000yB-Ve
for submit <at> debbugs.gnu.org; Thu, 18 Dec 2025 11:29:16 -0500
Received: from mail-ua1-x934.google.com ([2607:f8b0:4864:20::934]:61458)
by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
(Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
id 1vWGsH-0000xu-O9
for 80026 <at> debbugs.gnu.org; Thu, 18 Dec 2025 11:29:11 -0500
Received: by mail-ua1-x934.google.com with SMTP id
a1e0cc1a2514c-9412f43cb9eso537245241.2
for <80026 <at> debbugs.gnu.org>; Thu, 18 Dec 2025 08:29:09 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1766075344; x=1766680144; darn=debbugs.gnu.org;
h=cc:to:subject:message-id:date:from:in-reply-to:references
:mime-version:from:to:cc:subject:date:message-id:reply-to;
bh=XBY4NLQrXq4kJHnQAIK0W0w5uQM4AQAAado1V30D50g=;
b=jrHSOQOLfizDbuvfYY5W0zn+dl1upQt0txzeWeVhOiRCPJ4Pge4D5Nve439aeyLfZ/
1dS4EVhhLASokvbVJBWAtxGxiGyUGay9/ow0eOK6n0YjoPP0mdWMaPKXYBW8Vw/BXnU3
cDU8ERbCHg1QhkAkE+6dLGoJ3B4EaNsxOahm2uO4w2gSIuyjcCExAch+xlm9risCD8pL
8iwQ7KEHH2BO3ABncNNKmzBZtbHH/gU1EPIRAeZugXve/3OLhdBYe2VT2GdBlCLbwYUc
RjQiydR8WTIhVttmNAJM/KG9Saeqkr7h47FX7zc5Rva1f51cIctAyC0CFcJmX2Jr8Nuq
2GGw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1766075344; x=1766680144;
h=cc:to:subject:message-id:date:from:in-reply-to:references
:mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date
:message-id:reply-to;
bh=XBY4NLQrXq4kJHnQAIK0W0w5uQM4AQAAado1V30D50g=;
b=B0hOtZdiSrdFaDdR54cVb7a2VFM9tEvJQCYo/Y180FSyVfyB4SXKrXRby14PFfUuIO
zqLQ0ovXKNb8ueluIKK/YJ4ApbGnG2+G/rfyMxt2Ur3uhSrYmMyOW54KP/Ev9ThIitsV
bfZbQmaONYXi9Q2LLh/U2vuq7GHkqCMZwFBn8DODvuleXgENwm5GW8DFKPCOzkdTrUS4
aTUzKo2EtMtFNlomd0JcVMcC6wTrEkeNLRV4a7r6ag7nFaT319rD3ByxxYYNBQkla4FO
lrigvcqyqaoggxMbHYgo161x/rcUablZ10PmmS9bZM/bCgSG/Vv7gI5oHvnxZVDsTtDd
l+tQ==
X-Gm-Message-State: AOJu0Yyub3vTXq03pt1Hvr+GTLhLpeTx2W4BlAUHDrJ/Du3M5dBb5gEz
d62lzGqz50DmF7SMnQ7inYIhym3/XLJVFL1S5+XLyoTpZ+uDZgmMbB13Y7oJsJDg249tgowdIMw
UFbarMwtGuQ7YHScmrMbkolkgY3O136A=
X-Gm-Gg: AY/fxX77UWoPPBFP9GwbbHvsvhJzzefH4sxoMMNDlfy7dnLTg9eh1Wnx6ShpYf30SF1
0bnlTBGv8ATrXUxwekawpuXr2ZbcKB/GASM4bLHV63j+QJGh8wYCPrENr1n/zGd8SkJrY70XLFp
EiA9mbowOHnxoRMwAlTMHqo3+pqmslYPTLVFzVilM7cenkZzX7eUzR6Vp8Biis/CVeovln2HztW
ryJrmuWl2IdpiLeibRZDMNHoa+fsdN+ine38V5Fbr1DPcdCsM16b2ik8yxCUD76yvCkD2I=
X-Google-Smtp-Source: AGHT+IHboANbATGG38ZRMRpzrYU/o3L4DYdQ3zBsAI7+ELQ6rtNvEk0V9/0Xv7ummVYoLvjr3nyU72zJ4r+tBBC+TfM=
X-Received: by 2002:a05:6102:4a8c:b0:5db:ca9e:b57c with SMTP id
ada2fe7eead31-5e8277b340emr8032147137.27.1766075343849; Thu, 18 Dec 2025
08:29:03 -0800 (PST)
MIME-Version: 1.0
References: <CAN+1HbqKXXc+20yaSkkQuGCn-H0zGenZZFdTH3Ts=LT+QyTMGQ@HIDDEN>
<86zf7g2v9t.fsf@HIDDEN>
<CAN+1HbqaOS-Dhf=FayFLcux5RAqd+YTO8sjLm0dgwqfiNN-qow@HIDDEN>
In-Reply-To: <CAN+1HbqaOS-Dhf=FayFLcux5RAqd+YTO8sjLm0dgwqfiNN-qow@HIDDEN>
From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN>
Date: Thu, 18 Dec 2025 11:28:52 -0500
X-Gm-Features: AQt7F2o1IBesGhXzmj2VvOk3_sQjVePqEzGwLGuuhWnqO0JpYwYo4tQ9XIrwhOo
Message-ID: <CAN+1HbpXAa=MK7VbaUvuQnVC1Mb4EqZqj9C-TYNgMxPR2Wb8Aw@HIDDEN>
Subject: Re: bug#80026: [PATCH] Improve vtable--limit-string performance
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: multipart/alternative; boundary="000000000000845a1606463c75c7"
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: 80026
Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, joostkremers@HIDDEN,
ijqq@HIDDEN, 80026 <at> debbugs.gnu.org, visuweshm@HIDDEN,
adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)
--000000000000845a1606463c75c7
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
On Thu, Dec 18, 2025 at 9:48=E2=80=AFAM St=C3=A9phane Marks <shipmints@gmai=
l.com> wrote:
> On Thu, Dec 18, 2025 at 12:50=E2=80=AFAM Eli Zaretskii <eliz@HIDDEN> wro=
te:
>
>> > Cc: Spencer Baugh <sbaugh@HIDDEN>,
>> > Kristoffer Balintona <krisbalintona@HIDDEN>,
>> > Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN,
>> > Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>,
>> > Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <
>> arstoffel@HIDDEN>
>> > From: St=C3=A9phane Marks <shipmints@HIDDEN>
>> > Date: Wed, 17 Dec 2025 13:57:20 -0500
>> >
>> > This implements a simple heuristic to limit the number of times
>> `string-pixel-width` gets called by estimating
>> > the string's truncation position in advance. This is overridable
>> column-by-column should some strings in the
>> > vtable be composed of widely varying font widths that necessitates
>> minor adjustments to the heuristic. This
>> > approach performs well in testing (and I tested several approaches) an=
d
>> has been tested by more than one
>> > vtable user.
>>
>> Thanks, but are you sure this is not a case of premature optimization?
>> How important is it to speed up vtable--limit-string? Can you show
>> some benchmarks which will point to this function as a hotspot?
>>
>> Also, changing the algorithm from an exact one to one using heuristic
>> requires significant testing with various problematic cases: text
>> using variable fonts and characters of different glyph-width,
>> character-composition sequences (e.g., emoji), etc. Could you please
>> add such tests to the suite, so we could be sure this change doesn't
>> introduce regressions?
>>
>
> FWIW, this is not a premature optimization, it is key for vtable
> performance with columns of, say 500 pixels, on strings that would occupy
> beyond that pixel limit. If vtable could render only the visible portion
> of the buffer, it might be less of an issue; however, vtable renders the
> entire table every time on bulk refreshes and the existing looping method
> is slow. Single object changes render single lines so that's less of an
> issue since their line location in the buffer is computed.
>
> As far as any negative impact is concerned, without adjustment, the worst
> case is pretty much just a missing displayed character that had been
> displayed before.
>
> In any case, one can disable the heuristic for complete backward
> compatibility by setting a column's limit-adjustment property to nil for
> any problematic strings. I have not yet found one of those in my use but=
I
> don't use other languages like Chinese or whatever that might demonstrate
> more of an issue.
>
> I will adapt my benchmark code, and add some tests for edge cases such as
> those you mentioned. If there are already a string corpus to test with i=
n
> the code base, let me know or I'll take a look for one.
>
I stole some text from the erc tests and added a bunch more including
multi-character emojis and concocted this test which compares the naive
string limit code to the heuristic code looking for mismatches with zero
adjustment. Let me know if there are other cases you think need attention.
(ert-deftest test-vtable--limit-string-stress ()
(let ((max-pixels 500)
(strings (list
"foo bar baz foo bar baz foo bar baz foo bar baz foo bar
baz foo bar baz"
(concat "=E8=A9=B1=E8=AA=AA=E5=A4=A9=E4=B8=8B=E5=A4=A7=E5=
=8B=A2=EF=BC=8C=E5=88=86=E4=B9=85=E5=BF=85=E5=90=88=EF=BC=8C=E5=90=88=E4=B9=
=85=E5=BF=85=E5=88=86=EF=BC=9A=E5=91=A8=E6=9C=AB=E4=B8=83=E5=9C=8B=E5=88=86=
=E7=88=AD=EF=BC=8C=E5=B9=B6=E5=85=A5=E6=96=BC=E7=A7=A6=E3=80=82"
"=E5=8F=8A=E7=A7=A6=E6=BB=85=E4=B9=8B=E5=BE=8C=EF=
=BC=8C=E6=A5=9A=E3=80=81=E6=BC=A2=E5=88=86=E7=88=AD=EF=BC=8C=E5=8F=88=E5=B9=
=B6=E5=85=A5=E6=96=BC=E6=BC=A2=E3=80=82=E6=BC=A2=E6=9C=9D=E8=87=AA=E9=AB=98=
=E7=A5=96=E6=96=AC=E7=99=BD=E8=9B=87=E8=80=8C=E8=B5=B7=E7=BE=A9=EF=BC=8C"
"=E4=B8=80=E7=B5=B1=E5=A4=A9=E4=B8=8B=E3=80=82=E5=
=BE=8C=E4=BE=86=E5=85=89=E6=AD=A6=E4=B8=AD=E8=88=88=EF=BC=8C=E5=82=B3=E8=87=
=B3=E7=8D=BB=E5=B8=9D=EF=BC=8C=E9=81=82=E5=88=86=E7=82=BA=E4=B8=89=E5=9C=8B=
=E3=80=82=E6=8E=A8=E5=85=B6=E8=87=B4=E4=BA=82=E4=B9=8B=E7=94=B1=EF=BC=8C"
"=E6=AE=86=E5=A7=8B=E6=96=BC=E6=A1=93=E3=80=81=E9=
=9D=88=E4=BA=8C=E5=B8=9D=E3=80=82=E6=A1=93=E5=B8=9D=E7=A6=81=E9=8C=AE=E5=96=
=84=E9=A1=9E=EF=BC=8C=E5=B4=87=E4=BF=A1=E5=AE=A6=E5=AE=98=E3=80=82=E5=8F=8A=
=E6=A1=93=E5=B8=9D=E5=B4=A9=EF=BC=8C=E9=9D=88=E5=B8=9D=E5=8D=B3=E4=BD=8D=EF=
=BC=8C"
"=E5=A4=A7=E5=B0=87=E8=BB=8D=E7=AB=87=E6=AD=A6=E3=
=80=81=E5=A4=AA=E5=82=85=E9=99=B3=E8=95=83=EF=BC=8C=E5=85=B1=E7=9B=B8=E8=BC=
=94=E4=BD=90=E3=80=82=E6=99=82=E6=9C=89=E5=AE=A6=E5=AE=98=E6=9B=B9=E7=AF=80=
=E7=AD=89=E5=BC=84=E6=AC=8A=EF=BC=8C=E7=AB=87=E6=AD=A6=E3=80=81=E9=99=B3=E8=
=95=83=E8=AC=80=E8=AA=85=E4=B9=8B=EF=BC=8C"
"=E4=BD=9C=E4=BA=8B=E4=B8=8D=E5=AF=86=EF=BC=8C=E5=
=8F=8D=E7=82=BA=E6=89=80=E5=AE=B3=E3=80=82=E4=B8=AD=E6=B6=93=E8=87=AA=E6=AD=
=A4=E6=84=88=E6=A9=AB")
(concat "=D0=BA=D0=BE=D1=80=D0=BE=D1=87=D0=B5 =D1=82=D0=
=B5=D0=BF=D0=B5=D1=80=D1=8C =D0=B5=D1=81=D0=BB=D0=B8 =D0=BF=D0=BE =D1=80=D1=
=83=D1=81=D1=81=D0=BA=D0=B8 =D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D1=82=D1=
=8C =D0=B2=D1=81=D0=B5 =D1=87=D0=B5=D1=82=D0=BA=D0=BE
=D0=B8=D0=BB=D0=B8 =D0=B2=D1=81=D0=B5 =D1=80=D0=B0=D0=B2=D0=BD=D0=BE"
" =D0=BA=D0=BE=D1=80=D0=BE=D1=87=D0=B5 =D1=82=D0=
=B5=D0=BF=D0=B5=D1=80=D1=8C =D0=B5=D1=81=D0=BB=D0=B8 =D0=BF=D0=BE =D1=80=D1=
=83=D1=81=D1=81=D0=BA=D0=B8 =D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D1=82=D1=
=8C =D0=B2=D1=81=D0=B5 =D1=87=D0=B5=D1=82=D0=BA=D0=BE
=D0=B8=D0=BB=D0=B8 =D0=B2=D1=81=D0=B5 =D1=80=D0=B0=D0=B2=D0=BD=D0=BE"
" =D0=BA=D0=BE=D1=80=D0=BE=D1=87=D0=B5 =D1=82=D0=
=B5=D0=BF=D0=B5=D1=80=D1=8C =D0=B5=D1=81=D0=BB=D0=B8 =D0=BF=D0=BE =D1=80=D1=
=83=D1=81=D1=81=D0=BA=D0=B8 =D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D1=82=D1=
=8C =D0=B2=D1=81=D0=B5 =D1=87=D0=B5=D1=82=D0=BA=D0=BE
=D0=B8=D0=BB=D0=B8 =D0=B2=D1=81=D0=B5 =D1=80=D0=B0=D0=B2=D0=BD=D0=BE"
" =D0=BA=D0=BE=D1=80=D0=BE=D1=87=D0=B5 =D1=82=D0=
=B5=D0=BF=D0=B5=D1=80=D1=8C =D0=B5=D1=81=D0=BB=D0=B8 =D0=BF=D0=BE =D1=80=D1=
=83=D1=81=D1=81=D0=BA=D0=B8 =D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D1=82=D1=
=8C =D0=B2=D1=81=D0=B5 =D1=87=D0=B5=D1=82=D0=BA=D0=BE
=D0=B8=D0=BB=D0=B8 =D0=B2=D1=81=D0=B5 =D1=80=D0=B0=D0=B2=D0=BD=D0=BE")
"=D0=B1=D1=83=D0=B4=D0=B5=D1=82 =D1=80=D0=B0=D0=B7=D1=80=
=D1=8B=D0=B2 =D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B8 =D0=BD=D0=B5=D0=BF=D0=BE=
=D0=BD=D1=8F=D1=82=D0=BD=D0=BE =D0=B3=D0=B4=D0=B5=F0=9F=8F=81=F0=9F=9A=A9=
=F0=9F=8E=8C=F0=9F=8F=B4=F0=9F=8F=B3=EF=B8=8F =F0=9F=8F=B3=EF=B8=8F
<200d>=F0=9F=8C=88=F0=9F=8F=B3=EF=B8=8F <200d>=E2=9A=A7=EF=B8=8F=F0=9F=8F=
=B4<200d>=E2=98=A0=EF=B8=8F"
(apply #'concat (make-list 200 "\u0065\u0301 ")) ;
composed e=CC=81 \u00E9
(let ((woman-loves-man ; =F0=9F=91=A9=E2=80=8D=E2=9D=A4=
=EF=B8=8F=E2=80=8D=F0=9F=91=A8
(concat "\N{WOMAN}"
"\N{ZERO WIDTH JOINER}"
"\N{HEAVY BLACK HEART}"
"\N{VARIATION SELECTOR-16}"
"\N{ZERO WIDTH JOINER}"
"\N{MAN}"
" ")))
(apply #'concat (make-list 200 woman-loves-man)))
(propertize (let ((varying-height-string
(mapconcat
#'identity
(list "AWi!"
(propertize "foo" 'face
'(:height 2.5))
(propertize "bar" 'face
'(:height 0.5))
(propertize "baz" 'face
'(:height 1.0)))
" ")))
(apply #'concat (make-list 100
varying-height-string)))
'face 'variable-pitch))))
(dolist (height '(1.0 0.5 1.5))
(with-temp-buffer
(face-remap-add-relative 'default :height height)
(dolist (string strings)
(should (eq (length (test-vtable-vtable--limit-string-naive
string max-pixels (current-buffer)))
(length (vtable--limit-string string max-pixels
(current-buffer) 0)))))))))
I wrote a benchmark ert test but not precisely sure how that works in the
context of the overall ert suite and how benchmark results are intended to
be processed. Perhaps it should be run by hand and not made an ert test at
all but live in the same test file for manual execution. I didn't see ert
examples of package benchmark code that may check for performance drift or
whatever. Perhaps those live somewhere else.
-St=C3=A9phane
--000000000000845a1606463c75c7
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: base64
PGRpdiBkaXI9Imx0ciI+PGRpdiBkaXI9Imx0ciI+PGRpdiBjbGFzcz0iZ21haWxfZGVmYXVsdCIg
c3R5bGU9ImZvbnQtZmFtaWx5Om1vbm9zcGFjZSI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OkFy
aWFsLEhlbHZldGljYSxzYW5zLXNlcmlmIj5PbiBUaHUsIERlYyAxOCwgMjAyNSBhdCA5OjQ44oCv
QU0gU3TDqXBoYW5lIE1hcmtzICZsdDs8YSBocmVmPSJtYWlsdG86c2hpcG1pbnRzQGdtYWlsLmNv
bSI+c2hpcG1pbnRzQGdtYWlsLmNvbTwvYT4mZ3Q7IHdyb3RlOjwvc3Bhbj48L2Rpdj48L2Rpdj48
ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSBnbWFpbF9xdW90ZV9jb250YWluZXIiPjxibG9ja3F1b3Rl
IGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowcHggMHB4IDBweCAwLjhleDtib3Jk
ZXItbGVmdDoxcHggc29saWQgcmdiKDIwNCwyMDQsMjA0KTtwYWRkaW5nLWxlZnQ6MWV4Ij48ZGl2
IGRpcj0ibHRyIj48ZGl2IGRpcj0ibHRyIj48ZGl2IHN0eWxlPSJmb250LWZhbWlseTptb25vc3Bh
Y2UiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZiI+
T24gVGh1LCBEZWMgMTgsIDIwMjUgYXQgMTI6NTDigK9BTSBFbGkgWmFyZXRza2lpICZsdDs8YSBo
cmVmPSJtYWlsdG86ZWxpekBnbnUub3JnIiB0YXJnZXQ9Il9ibGFuayI+ZWxpekBnbnUub3JnPC9h
PiZndDsgd3JvdGU6PC9zcGFuPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj48
YmxvY2txdW90ZSBjbGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MHB4IDBweCAwcHgg
MC44ZXg7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkIHJnYigyMDQsMjA0LDIwNCk7cGFkZGluZy1sZWZ0
OjFleCI+Jmd0OyBDYzogU3BlbmNlciBCYXVnaCAmbHQ7PGEgaHJlZj0ibWFpbHRvOnNiYXVnaEBq
YW5lc3RyZWV0LmNvbSIgdGFyZ2V0PSJfYmxhbmsiPnNiYXVnaEBqYW5lc3RyZWV0LmNvbTwvYT4m
Z3Q7LDxicj4NCiZndDvCoCBLcmlzdG9mZmVyIEJhbGludG9uYSAmbHQ7PGEgaHJlZj0ibWFpbHRv
OmtyaXNiYWxpbnRvbmFAZ21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayI+a3Jpc2JhbGludG9uYUBn
bWFpbC5jb208L2E+Jmd0Oyw8YnI+DQomZ3Q7wqAgSm9vc3QgS3JlbWVycyAmbHQ7PGEgaHJlZj0i
bWFpbHRvOmpvb3N0a3JlbWVyc0BmYXN0bWFpbC5mbSIgdGFyZ2V0PSJfYmxhbmsiPmpvb3N0a3Jl
bWVyc0BmYXN0bWFpbC5mbTwvYT4mZ3Q7LCA8YSBocmVmPSJtYWlsdG86aWpxcUBwcm90b25tYWls
LmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmlqcXFAcHJvdG9ubWFpbC5jb208L2E+LDxicj4NCiZndDvC
oCBWaXN1d2VzaCAmbHQ7PGEgaHJlZj0ibWFpbHRvOnZpc3V3ZXNobUBnbWFpbC5jb20iIHRhcmdl
dD0iX2JsYW5rIj52aXN1d2VzaG1AZ21haWwuY29tPC9hPiZndDssIEFkYW0gUG9ydGVyICZsdDs8
YSBocmVmPSJtYWlsdG86YWRhbUBhbHBoYXBhcGEubmV0IiB0YXJnZXQ9Il9ibGFuayI+YWRhbUBh
bHBoYXBhcGEubmV0PC9hPiZndDssPGJyPg0KJmd0O8KgIExhcnMgSW5nZWJyaWd0c2VuICZsdDs8
YSBocmVmPSJtYWlsdG86bGFyc2lAZ251cy5vcmciIHRhcmdldD0iX2JsYW5rIj5sYXJzaUBnbnVz
Lm9yZzwvYT4mZ3Q7LCBBdWd1c3RvIFN0b2ZmZWwgJmx0OzxhIGhyZWY9Im1haWx0bzphcnN0b2Zm
ZWxAZ21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayI+YXJzdG9mZmVsQGdtYWlsLmNvbTwvYT4mZ3Q7
PGJyPg0KJmd0OyBGcm9tOiBTdMOpcGhhbmUgTWFya3MgJmx0OzxhIGhyZWY9Im1haWx0bzpzaGlw
bWludHNAZ21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayI+c2hpcG1pbnRzQGdtYWlsLmNvbTwvYT4m
Z3Q7PGJyPg0KJmd0OyBEYXRlOiBXZWQsIDE3IERlYyAyMDI1IDEzOjU3OjIwIC0wNTAwPGJyPg0K
Jmd0OyA8YnI+DQomZ3Q7IFRoaXMgaW1wbGVtZW50cyBhIHNpbXBsZSBoZXVyaXN0aWMgdG8gbGlt
aXQgdGhlIG51bWJlciBvZiB0aW1lcyBgc3RyaW5nLXBpeGVsLXdpZHRoYCBnZXRzIGNhbGxlZCBi
eSBlc3RpbWF0aW5nPGJyPg0KJmd0OyB0aGUgc3RyaW5nJiMzOTtzIHRydW5jYXRpb24gcG9zaXRp
b24gaW4gYWR2YW5jZS7CoCBUaGlzIGlzIG92ZXJyaWRhYmxlIGNvbHVtbi1ieS1jb2x1bW4gc2hv
dWxkIHNvbWUgc3RyaW5ncyBpbiB0aGU8YnI+DQomZ3Q7IHZ0YWJsZSBiZSBjb21wb3NlZCBvZiB3
aWRlbHkgdmFyeWluZyBmb250IHdpZHRocyB0aGF0IG5lY2Vzc2l0YXRlcyBtaW5vciBhZGp1c3Rt
ZW50cyB0byB0aGUgaGV1cmlzdGljLsKgIFRoaXM8YnI+DQomZ3Q7IGFwcHJvYWNoIHBlcmZvcm1z
IHdlbGwgaW4gdGVzdGluZyAoYW5kIEkgdGVzdGVkIHNldmVyYWwgYXBwcm9hY2hlcykgYW5kIGhh
cyBiZWVuIHRlc3RlZCBieSBtb3JlIHRoYW4gb25lPGJyPg0KJmd0OyB2dGFibGUgdXNlci48YnI+
DQo8YnI+DQpUaGFua3MsIGJ1dCBhcmUgeW91IHN1cmUgdGhpcyBpcyBub3QgYSBjYXNlIG9mIHBy
ZW1hdHVyZSBvcHRpbWl6YXRpb24/PGJyPg0KSG93IGltcG9ydGFudCBpcyBpdCB0byBzcGVlZCB1
cCB2dGFibGUtLWxpbWl0LXN0cmluZz/CoCBDYW4geW91IHNob3c8YnI+DQpzb21lIGJlbmNobWFy
a3Mgd2hpY2ggd2lsbCBwb2ludCB0byB0aGlzIGZ1bmN0aW9uIGFzIGEgaG90c3BvdD88YnI+DQo8
YnI+DQpBbHNvLCBjaGFuZ2luZyB0aGUgYWxnb3JpdGhtIGZyb20gYW4gZXhhY3Qgb25lIHRvIG9u
ZSB1c2luZyBoZXVyaXN0aWM8YnI+DQpyZXF1aXJlcyBzaWduaWZpY2FudCB0ZXN0aW5nIHdpdGgg
dmFyaW91cyBwcm9ibGVtYXRpYyBjYXNlczogdGV4dDxicj4NCnVzaW5nIHZhcmlhYmxlIGZvbnRz
IGFuZCBjaGFyYWN0ZXJzIG9mIGRpZmZlcmVudCBnbHlwaC13aWR0aCw8YnI+DQpjaGFyYWN0ZXIt
Y29tcG9zaXRpb24gc2VxdWVuY2VzIChlLmcuLCBlbW9qaSksIGV0Yy7CoCBDb3VsZCB5b3UgcGxl
YXNlPGJyPg0KYWRkIHN1Y2ggdGVzdHMgdG8gdGhlIHN1aXRlLCBzbyB3ZSBjb3VsZCBiZSBzdXJl
IHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0PGJyPg0KaW50cm9kdWNlIHJlZ3Jlc3Npb25zPzxicj48
L2Jsb2NrcXVvdGU+PGRpdj48YnI+PC9kaXY+PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3Nw
YWNlIj5GV0lXLCB0aGlzIGlzIG5vdCBhIHByZW1hdHVyZSBvcHRpbWl6YXRpb24sIGl0IGlzIGtl
eSBmb3IgdnRhYmxlIHBlcmZvcm1hbmNlIHdpdGggY29sdW1ucyBvZiwgc2F5IDUwMCBwaXhlbHMs
IG9uIHN0cmluZ3MgdGhhdCB3b3VsZCBvY2N1cHkgYmV5b25kIHRoYXQgcGl4ZWwgbGltaXQuwqAg
SWYgdnRhYmxlIGNvdWxkIHJlbmRlciBvbmx5IHRoZSB2aXNpYmxlIHBvcnRpb24gb2YgdGhlIGJ1
ZmZlciwgaXQgbWlnaHQgYmUgbGVzcyBvZiBhbiBpc3N1ZTsgaG93ZXZlciwgdnRhYmxlIHJlbmRl
cnMgdGhlIGVudGlyZSB0YWJsZSBldmVyeSB0aW1lIG9uIGJ1bGsgcmVmcmVzaGVzIGFuZCB0aGUg
ZXhpc3RpbmcgbG9vcGluZyBtZXRob2QgaXMgc2xvdy7CoCBTaW5nbGUgb2JqZWN0IGNoYW5nZXMg
cmVuZGVyIHNpbmdsZSBsaW5lcyBzbyB0aGF0JiMzOTtzIGxlc3Mgb2YgYW4gaXNzdWUgc2luY2Ug
dGhlaXIgbGluZSBsb2NhdGlvbiBpbiB0aGUgYnVmZmVyIGlzIGNvbXB1dGVkLjwvZGl2PjxkaXYg
c3R5bGU9ImZvbnQtZmFtaWx5Om1vbm9zcGFjZSI+PGJyPjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQt
ZmFtaWx5Om1vbm9zcGFjZSI+QXMgZmFyIGFzIGFueSBuZWdhdGl2ZSBpbXBhY3QgaXMgY29uY2Vy
bmVkLCB3aXRob3V0IGFkanVzdG1lbnQsIHRoZSB3b3JzdCBjYXNlIGlzIHByZXR0eSBtdWNoIGp1
c3QgYSBtaXNzaW5nIGRpc3BsYXllZCBjaGFyYWN0ZXIgdGhhdCBoYWQgYmVlbiBkaXNwbGF5ZWQg
YmVmb3JlLjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtZmFtaWx5Om1vbm9zcGFjZSI+PGJyPjwvZGl2
PjxkaXYgc3R5bGU9ImZvbnQtZmFtaWx5Om1vbm9zcGFjZSI+SW4gYW55IGNhc2UsIG9uZSBjYW4g
ZGlzYWJsZSB0aGUgaGV1cmlzdGljIGZvciBjb21wbGV0ZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5
IGJ5IHNldHRpbmcgYSBjb2x1bW4mIzM5O3MgbGltaXQtYWRqdXN0bWVudCBwcm9wZXJ0eSB0byBu
aWwgZm9yIGFueSBwcm9ibGVtYXRpYyBzdHJpbmdzLsKgIEkgaGF2ZSBub3QgeWV0IGZvdW5kIG9u
ZSBvZiB0aG9zZSBpbiBteSB1c2UgYnV0IEkgZG9uJiMzOTt0IHVzZcKgb3RoZXLCoGxhbmd1YWdl
cyBsaWtlIENoaW5lc2Ugb3Igd2hhdGV2ZXIgdGhhdMKgbWlnaHTCoGRlbW9uc3RyYXRlIG1vcmUg
b2YgYW4gaXNzdWUuPC9kaXY+PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlIj48YnI+
PC9kaXY+PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlIj48ZGl2Pkkgd2lsbCBhZGFw
dCBteSBiZW5jaG1hcmsgY29kZSwgYW5kIGFkZCBzb21lIHRlc3RzIGZvciBlZGdlIGNhc2VzIHN1
Y2ggYXMgdGhvc2UgeW91wqBtZW50aW9uZWQuwqAgSWYgdGhlcmUgYXJlIGFscmVhZHkgYSBzdHJp
bmcgY29ycHVzIHRvIHRlc3Qgd2l0aCBpbiB0aGUgY29kZSBiYXNlLCBsZXQgbWUga25vdyBvciBJ
JiMzOTtsbCB0YWtlIGEgbG9vayBmb3Igb25lLjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvYmxv
Y2txdW90ZT48ZGl2Pjxicj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9kZWZhdWx0IiBzdHlsZT0i
Zm9udC1mYW1pbHk6bW9ub3NwYWNlIj5JIHN0b2xlIHNvbWUgdGV4dCBmcm9tIHRoZSBlcmMgdGVz
dHMgYW5kIGFkZGVkIGEgYnVuY2ggbW9yZSBpbmNsdWRpbmcgbXVsdGktY2hhcmFjdGVyIGVtb2pp
cyBhbmQgY29uY29jdGVkIHRoaXMgdGVzdCB3aGljaCBjb21wYXJlcyB0aGUgbmFpdmUgc3RyaW5n
IGxpbWl0IGNvZGUgdG8gdGhlIGhldXJpc3RpYyBjb2RlIGxvb2tpbmcgZm9yIG1pc21hdGNoZXMg
d2l0aCB6ZXJvIGFkanVzdG1lbnQuwqAgTGV0IG1lIGtub3cgaWYgdGhlcmUgYXJlIG90aGVyIGNh
c2VzIHlvdSB0aGluayBuZWVkIGF0dGVudGlvbi48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9kZWZh
dWx0IiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlIj48YnI+PC9kaXY+PGRpdiBjbGFzcz0i
Z21haWxfZGVmYXVsdCIgc3R5bGU9ImZvbnQtZmFtaWx5Om1vbm9zcGFjZSI+KGVydC1kZWZ0ZXN0
IHRlc3QtdnRhYmxlLS1saW1pdC1zdHJpbmctc3RyZXNzICgpPGJyPsKgIChsZXQgKChtYXgtcGl4
ZWxzIDUwMCk8YnI+wqAgwqAgwqAgwqAgKHN0cmluZ3MgKGxpc3Q8YnI+wqAgwqAgwqAgwqAgwqAg
wqAgwqAgwqAgwqAgJnF1b3Q7Zm9vIGJhciBiYXogZm9vIGJhciBiYXogZm9vIGJhciBiYXogZm9v
IGJhciBiYXogZm9vIGJhciBiYXogZm9vIGJhciBiYXomcXVvdDs8YnI+wqAgwqAgwqAgwqAgwqAg
wqAgwqAgwqAgwqAgKGNvbmNhdCAmcXVvdDvoqbHoqqrlpKnkuIvlpKfli6LvvIzliIbkuYXlv4Xl
kIjvvIzlkIjkuYXlv4XliIbvvJrlkajmnKvkuIPlnIvliIbniK3vvIzlubblhaXmlrznp6bjgIIm
cXVvdDs8YnI+wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgJnF1b3Q75Y+K
56em5ruF5LmL5b6M77yM5qWa44CB5ryi5YiG54it77yM5Y+I5bm25YWl5pa85ryi44CC5ryi5pyd
6Ieq6auY56WW5pas55m96JuH6ICM6LW3576p77yMJnF1b3Q7PGJyPsKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIMKgIMKgIMKgICZxdW90O+S4gOe1seWkqeS4i+OAguW+jOS+huWFieatpuS4
reiIiO+8jOWCs+iHs+eNu+W4ne+8jOmBguWIhueCuuS4ieWci+OAguaOqOWFtuiHtOS6guS5i+eU
se+8jCZxdW90Ozxicj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAmcXVv
dDvmroblp4vmlrzmoZPjgIHpnYjkuozluJ3jgILmoZPluJ3npoHpjK7lloTpoZ7vvIzltIfkv6Hl
rqblrpjjgILlj4rmoZPluJ3ltKnvvIzpnYjluJ3ljbPkvY3vvIwmcXVvdDs8YnI+wqAgwqAgwqAg
wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgJnF1b3Q75aSn5bCH6LuN56uH5q2m44CB5aSq
5YKF6Zmz6JWD77yM5YWx55u46LyU5L2Q44CC5pmC5pyJ5a6m5a6Y5pu556+A562J5byE5qyK77yM
56uH5q2m44CB6Zmz6JWD6KyA6KqF5LmL77yMJnF1b3Q7PGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIMKgIMKgICZxdW90O+S9nOS6i+S4jeWvhu+8jOWPjeeCuuaJgOWus+OAguS4
rea2k+iHquatpOaEiOapqyZxdW90Oyk8YnI+wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKGNv
bmNhdCAmcXVvdDvQutC+0YDQvtGH0LUg0YLQtdC/0LXRgNGMINC10YHQu9C4INC/0L4g0YDRg9GB
0YHQutC4INC90LDQv9C40YHQsNGC0Ywg0LLRgdC1INGH0LXRgtC60L4g0LjQu9C4INCy0YHQtSDR
gNCw0LLQvdC+JnF1b3Q7PGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
ICZxdW90OyDQutC+0YDQvtGH0LUg0YLQtdC/0LXRgNGMINC10YHQu9C4INC/0L4g0YDRg9GB0YHQ
utC4INC90LDQv9C40YHQsNGC0Ywg0LLRgdC1INGH0LXRgtC60L4g0LjQu9C4INCy0YHQtSDRgNCw
0LLQvdC+JnF1b3Q7PGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICZx
dW90OyDQutC+0YDQvtGH0LUg0YLQtdC/0LXRgNGMINC10YHQu9C4INC/0L4g0YDRg9GB0YHQutC4
INC90LDQv9C40YHQsNGC0Ywg0LLRgdC1INGH0LXRgtC60L4g0LjQu9C4INCy0YHQtSDRgNCw0LLQ
vdC+JnF1b3Q7PGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICZxdW90
OyDQutC+0YDQvtGH0LUg0YLQtdC/0LXRgNGMINC10YHQu9C4INC/0L4g0YDRg9GB0YHQutC4INC9
0LDQv9C40YHQsNGC0Ywg0LLRgdC1INGH0LXRgtC60L4g0LjQu9C4INCy0YHQtSDRgNCw0LLQvdC+
JnF1b3Q7KTxicj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAmcXVvdDvQsdGD0LTQtdGCwqDR
gNCw0LfRgNGL0LLCoNGB0YLRgNC+0LrQuMKg0L3QtdC/0L7QvdGP0YLQvdC+wqDQs9C00LXwn4+B
8J+aqfCfjozwn4+08J+Ps++4jyDwn4+z77iPICZsdDsyMDBkJmd0O/CfjIjwn4+z77iPICZsdDsy
MDBkJmd0O+Kap++4j/Cfj7QmbHQ7MjAwZCZndDvimKDvuI8mcXVvdDs8YnI+wqAgwqAgwqAgwqAg
wqAgwqAgwqAgwqAgwqAgKGFwcGx5ICMmIzM5O2NvbmNhdCAobWFrZS1saXN0IDIwMCAmcXVvdDtc
dTAwNjVcdTAzMDEgJnF1b3Q7KSkgOyBjb21wb3NlZCBlzIEgXHUwMEU5PGJyPsKgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIMKgIChsZXQgKCh3b21hbi1sb3Zlcy1tYW4gOyDwn5Gp4oCN4p2k77iP4oCN
8J+RqDxicj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoChjb25jYXQgJnF1
b3Q7XE57V09NQU59JnF1b3Q7PGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIMKgJnF1b3Q7XE57WkVSTyBXSURUSCBKT0lORVJ9JnF1b3Q7PGJyPsKgIMKg
IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgJnF1b3Q7XE57SEVB
VlkgQkxBQ0sgSEVBUlR9JnF1b3Q7PGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIMKgIMKgJnF1b3Q7XE57VkFSSUFUSU9OIFNFTEVDVE9SLTE2fSZxdW90Ozxi
cj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCZxdW90
O1xOe1pFUk8gV0lEVEggSk9JTkVSfSZxdW90Ozxicj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC
oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCZxdW90O1xOe01BTn0mcXVvdDs8YnI+wqAgwqAgwqAg
wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAmcXVvdDsgJnF1b3Q7KSkp
PGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChhcHBseSAjJiMzOTtjb25jYXQgKG1h
a2UtbGlzdCAyMDAgd29tYW4tbG92ZXMtbWFuKSkpPGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIChwcm9wZXJ0aXplIChsZXQgKCh2YXJ5aW5nLWhlaWdodC1zdHJpbmc8YnI+wqAgwqAgwqAg
wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAobWFwY29uY2F0
PGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgICMmIzM5O2lkZW50aXR5PGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIMKgIMKgIMKgIChsaXN0ICZxdW90O0FXaSEmcXVvdDs8YnI+wqAgwqAgwqAg
wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg
KHByb3BlcnRpemUgJnF1b3Q7Zm9vJnF1b3Q7ICYjMzk7ZmFjZSAmIzM5Oyg6aGVpZ2h0IDIuNSkp
PGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIChwcm9wZXJ0aXplICZxdW90O2JhciZxdW90OyAmIzM5O2ZhY2UgJiMzOTso
OmhlaWdodCAwLjUpKTxicj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC
oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAocHJvcGVydGl6ZSAmcXVvdDtiYXomcXVvdDsgJiMz
OTtmYWNlICYjMzk7KDpoZWlnaHQgMS4wKSkpPGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICZxdW90OyAmcXVvdDspKSk8YnI+wqAgwqAg
wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKGFwcGx5ICMmIzM5O2Nv
bmNhdCAobWFrZS1saXN0IDEwMCB2YXJ5aW5nLWhlaWdodC1zdHJpbmcpKSk8YnI+wqAgwqAgwqAg
wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgJiMzOTtmYWNlICYjMzk7dmFyaWFi
bGUtcGl0Y2gpKSkpPGJyPsKgIMKgIChkb2xpc3QgKGhlaWdodCAmIzM5OygxLjAgMC41IDEuNSkp
PGJyPsKgIMKgIMKgICh3aXRoLXRlbXAtYnVmZmVyPGJyPsKgIMKgIMKgIMKgIChmYWNlLXJlbWFw
LWFkZC1yZWxhdGl2ZSAmIzM5O2RlZmF1bHQgOmhlaWdodCBoZWlnaHQpPGJyPsKgIMKgIMKgIMKg
IChkb2xpc3QgKHN0cmluZyBzdHJpbmdzKTxicj7CoCDCoCDCoCDCoCDCoCAoc2hvdWxkIChlcSAo
bGVuZ3RoICh0ZXN0LXZ0YWJsZS12dGFibGUtLWxpbWl0LXN0cmluZy1uYWl2ZSBzdHJpbmcgbWF4
LXBpeGVscyAoY3VycmVudC1idWZmZXIpKSk8YnI+wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg
wqAgwqAgKGxlbmd0aCAodnRhYmxlLS1saW1pdC1zdHJpbmcgc3RyaW5nIG1heC1waXhlbHMgKGN1
cnJlbnQtYnVmZmVyKSAwKSkpKSkpKSkpPGJyPjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2RlZmF1
bHQiIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2UiPjxicj48L2Rpdj48ZGl2IGNsYXNzPSJn
bWFpbF9kZWZhdWx0IiBzdHlsZT0iZm9udC1mYW1pbHk6bW9ub3NwYWNlIj5JIHdyb3RlIGEgYmVu
Y2htYXJrIGVydCB0ZXN0IGJ1dCBub3QgcHJlY2lzZWx5IHN1cmUgaG93IHRoYXQgd29ya3MgaW4g
dGhlIGNvbnRleHQgb2YgdGhlIG92ZXJhbGwgZXJ0IHN1aXRlIGFuZCBob3cgYmVuY2htYXJrIHJl
c3VsdHMgYXJlIGludGVuZGVkIHRvIGJlIHByb2Nlc3NlZC7CoCBQZXJoYXBzIGl0IHNob3VsZCBi
ZSBydW4gYnkgaGFuZCBhbmQgbm90IG1hZGUgYW4gZXJ0IHRlc3QgYXQgYWxsIGJ1dCBsaXZlIGlu
IHRoZSBzYW1lIHRlc3QgZmlsZSBmb3IgbWFudWFsIGV4ZWN1dGlvbi7CoCBJIGRpZG4mIzM5O3Qg
c2VlIGVydCBleGFtcGxlcyBvZiBwYWNrYWdlIGJlbmNobWFyayBjb2RlIHRoYXQgbWF5IGNoZWNr
IGZvciBwZXJmb3JtYW5jZSBkcmlmdCBvciB3aGF0ZXZlci7CoCBQZXJoYXBzIHRob3NlIGxpdmUg
c29tZXdoZXJlIGVsc2UuPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZGVmYXVsdCIgc3R5bGU9ImZv
bnQtZmFtaWx5Om1vbm9zcGFjZSI+PGJyPjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2RlZmF1bHQi
IHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2UiPi1TdMOpcGhhbmXCoDwvZGl2PjwvZGl2Pjwv
ZGl2Pg0K
--000000000000845a1606463c75c7--
bug-gnu-emacs@HIDDEN:bug#80026; Package emacs.
Full text available.Received: (at 80026) by debbugs.gnu.org; 18 Dec 2025 14:48:33 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Dec 18 09:48:33 2025 Received: from localhost ([127.0.0.1]:53071 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vWFIs-0001tA-5o for submit <at> debbugs.gnu.org; Thu, 18 Dec 2025 09:48:33 -0500 Received: from mail-ua1-x935.google.com ([2607:f8b0:4864:20::935]:46528) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1vWFIp-0001sr-3Q for 80026 <at> debbugs.gnu.org; Thu, 18 Dec 2025 09:48:28 -0500 Received: by mail-ua1-x935.google.com with SMTP id a1e0cc1a2514c-93f69720a7cso369822241.1 for <80026 <at> debbugs.gnu.org>; Thu, 18 Dec 2025 06:48:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766069301; x=1766674101; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=T+/vYx4hbsR10XG9BtrpAywJkA6vF3It1HojPWdnAJ4=; b=KSW79S0gnpyhLtkNGCm/GUfP+y6Lf4sBHA/Ts++yC2t46L0wI5CtH7QZx7P/gUUm+X xHauL2Ah3juaZ0RVTU/HU/NsXsdZWGGkmL43mkmGFOJSZkle5+GCtA/ngJMbvrA8sKhI k2SA/6Rdz6FX923phJFcHlTlmDid6bwewhwy5epcs18Rs1d/VW0jzujg3RDVLwkhm9bS /gr/tCOQVpWZsD+++iJKWnYDJLUoY9DZGW7wnMk7BakgRlrFOPT+jZm+RQWuZqsiLTBn C12YxsAt59uEaUMkEU9u4uYfegzC6IIlLa1l88gxF0olZgkOf3Eg6fluJPiNbFDRAoy+ ckrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766069301; x=1766674101; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=T+/vYx4hbsR10XG9BtrpAywJkA6vF3It1HojPWdnAJ4=; b=SNtLQ4hTH9FWW73V9sNoCrI0f37L6fuz8usDgWm+4ptR6htzfT7MV2IO1cD8Tja4ML nsnnTBvcgze/tqspp26wIIEB9tKiY+X5WT87nnmR1VA+huStyWMa2kq585haxH0U4/8+ 36C99Z8+LPfA9QVVYpPrBFp5+e+gnmSE6vSX5tsptD07tCcF/J6dPGviWpLsMwyGpb7b 4iD6+dhVT/8CO+ViUPjQTNvvkt/Nc23MKzETmlFsgNn+Fv35gMkdkrbbB3JwluDPIAN8 5cXtGbVcxtJPw5JR4jKPnbKB2j+GkVb07t52WjC/q7WClWuc3qbyfpt9aKYz+ky2b+o4 6WyQ== X-Gm-Message-State: AOJu0YyyU1WD5n+QEMryrn+kRZREOAccQ+jmejrkV2S8eGFJEliSJOty vlkbHrU4T/P/8/tGv2d9EyzOQjs9BP6GdU48qFqRoTRFzeOKw4Mj3AsvoN2FRuO9v8SRCaZTf0g MepEXtrkMF9gY4al6obRUIeqTC9bpuGI= X-Gm-Gg: AY/fxX6XRNvfKCKHNCnRwupr5+Aq3e0NE6kanrH7Zfm7tpFfpxGUOM2vdnq3lAE7yOA V4oywKbfwCTlFh87e0z8IMtrQ15NHJdmY0Hq/O1hbhmiShPRWjSF+5VNCD96EpqIGQrcv6kIzW1 9LCEr/zfJdawRHkwNsipGSECvKCesxfKN/mtOQlUZQwco8XNUaFbMLNJkdz9QtaZRqnA/s6j4CP QUjQq0pvG+jdMWMg4ZM3xhQFjHny4850W5s9NLfz+mevVZSx6RLPsz/mdP843uoyc4lm2TqZRYV BM4gaQ== X-Google-Smtp-Source: AGHT+IEaPkJaypS/Jcpj89+xws+/HMgw/ZqyNgp8ejpF5zbC7nrAjd5nKI13yPCmfOoQf7rwMxxX1C9qniYcExF/Ilg= X-Received: by 2002:a05:6102:8002:b0:5dd:b61a:a9c5 with SMTP id ada2fe7eead31-5e8272a5b7bmr7929797137.0.1766069301183; Thu, 18 Dec 2025 06:48:21 -0800 (PST) MIME-Version: 1.0 References: <CAN+1HbqKXXc+20yaSkkQuGCn-H0zGenZZFdTH3Ts=LT+QyTMGQ@HIDDEN> <86zf7g2v9t.fsf@HIDDEN> In-Reply-To: <86zf7g2v9t.fsf@HIDDEN> From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN> Date: Thu, 18 Dec 2025 09:48:09 -0500 X-Gm-Features: AQt7F2pcHLWSmbLrpU-GlvDstQkYc_uPM0JhHnLIV5Fh6Mc7jTK3m4yn_Bcxciw Message-ID: <CAN+1HbqaOS-Dhf=FayFLcux5RAqd+YTO8sjLm0dgwqfiNN-qow@HIDDEN> Subject: Re: bug#80026: [PATCH] Improve vtable--limit-string performance To: Eli Zaretskii <eliz@HIDDEN> Content-Type: multipart/alternative; boundary="000000000000588a4f06463b0d0b" X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: 80026 Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, joostkremers@HIDDEN, ijqq@HIDDEN, 80026 <at> debbugs.gnu.org, visuweshm@HIDDEN, adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --000000000000588a4f06463b0d0b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Dec 18, 2025 at 12:50=E2=80=AFAM Eli Zaretskii <eliz@HIDDEN> wrote= : > > Cc: Spencer Baugh <sbaugh@HIDDEN>, > > Kristoffer Balintona <krisbalintona@HIDDEN>, > > Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN, > > Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>, > > Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel < > arstoffel@HIDDEN> > > From: St=C3=A9phane Marks <shipmints@HIDDEN> > > Date: Wed, 17 Dec 2025 13:57:20 -0500 > > > > This implements a simple heuristic to limit the number of times > `string-pixel-width` gets called by estimating > > the string's truncation position in advance. This is overridable > column-by-column should some strings in the > > vtable be composed of widely varying font widths that necessitates mino= r > adjustments to the heuristic. This > > approach performs well in testing (and I tested several approaches) and > has been tested by more than one > > vtable user. > > Thanks, but are you sure this is not a case of premature optimization? > How important is it to speed up vtable--limit-string? Can you show > some benchmarks which will point to this function as a hotspot? > > Also, changing the algorithm from an exact one to one using heuristic > requires significant testing with various problematic cases: text > using variable fonts and characters of different glyph-width, > character-composition sequences (e.g., emoji), etc. Could you please > add such tests to the suite, so we could be sure this change doesn't > introduce regressions? > FWIW, this is not a premature optimization, it is key for vtable performance with columns of, say 500 pixels, on strings that would occupy beyond that pixel limit. If vtable could render only the visible portion of the buffer, it might be less of an issue; however, vtable renders the entire table every time on bulk refreshes and the existing looping method is slow. Single object changes render single lines so that's less of an issue since their line location in the buffer is computed. As far as any negative impact is concerned, without adjustment, the worst case is pretty much just a missing displayed character that had been displayed before. In any case, one can disable the heuristic for complete backward compatibility by setting a column's limit-adjustment property to nil for any problematic strings. I have not yet found one of those in my use but I don't use other languages like Chinese or whatever that might demonstrate more of an issue. I will adapt my benchmark code, and add some tests for edge cases such as those you mentioned. If there are already a string corpus to test with in the code base, let me know or I'll take a look for one. --000000000000588a4f06463b0d0b Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon= t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">= On Thu, Dec 18, 2025 at 12:50=E2=80=AFAM Eli Zaretskii <<a href=3D"mailt= o:eliz@HIDDEN">eliz@HIDDEN</a>> wrote:</span></div></div><div class=3D= "gmail_quote gmail_quote_container"><blockquote class=3D"gmail_quote" style= =3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding= -left:1ex">> Cc: Spencer Baugh <<a href=3D"mailto:sbaugh@HIDDEN= om" target=3D"_blank">sbaugh@HIDDEN</a>>,<br> >=C2=A0 Kristoffer Balintona <<a href=3D"mailto:krisbalintona@HIDDEN= om" target=3D"_blank">krisbalintona@HIDDEN</a>>,<br> >=C2=A0 Joost Kremers <<a href=3D"mailto:joostkremers@HIDDEN" ta= rget=3D"_blank">joostkremers@HIDDEN</a>>, <a href=3D"mailto:ijqq@pr= otonmail.com" target=3D"_blank">ijqq@HIDDEN</a>,<br> >=C2=A0 Visuwesh <<a href=3D"mailto:visuweshm@HIDDEN" target=3D"_b= lank">visuweshm@HIDDEN</a>>, Adam Porter <<a href=3D"mailto:adam@a= lphapapa.net" target=3D"_blank">adam@HIDDEN</a>>,<br> >=C2=A0 Lars Ingebrigtsen <<a href=3D"mailto:larsi@HIDDEN" target= =3D"_blank">larsi@HIDDEN</a>>, Augusto Stoffel <<a href=3D"mailto:a= rstoffel@HIDDEN" target=3D"_blank">arstoffel@HIDDEN</a>><br> > From: St=C3=A9phane Marks <<a href=3D"mailto:shipmints@HIDDEN" t= arget=3D"_blank">shipmints@HIDDEN</a>><br> > Date: Wed, 17 Dec 2025 13:57:20 -0500<br> > <br> > This implements a simple heuristic to limit the number of times `strin= g-pixel-width` gets called by estimating<br> > the string's truncation position in advance.=C2=A0 This is overrid= able column-by-column should some strings in the<br> > vtable be composed of widely varying font widths that necessitates min= or adjustments to the heuristic.=C2=A0 This<br> > approach performs well in testing (and I tested several approaches) an= d has been tested by more than one<br> > vtable user.<br> <br> Thanks, but are you sure this is not a case of premature optimization?<br> How important is it to speed up vtable--limit-string?=C2=A0 Can you show<br= > some benchmarks which will point to this function as a hotspot?<br> <br> Also, changing the algorithm from an exact one to one using heuristic<br> requires significant testing with various problematic cases: text<br> using variable fonts and characters of different glyph-width,<br> character-composition sequences (e.g., emoji), etc.=C2=A0 Could you please<= br> add such tests to the suite, so we could be sure this change doesn't<br= > introduce regressions?<br></blockquote><div><br></div><div class=3D"gmail_d= efault" style=3D"font-family:monospace">FWIW, this is not a premature optim= ization, it is key for vtable performance with columns of, say 500 pixels, = on strings that would occupy beyond that pixel limit.=C2=A0 If vtable could= render only the visible portion of the buffer, it might be less of an issu= e; however, vtable renders the entire table every time on bulk refreshes an= d the existing looping method is slow.=C2=A0 Single object changes render s= ingle lines so that's less of an issue since their line location in the= buffer is computed.</div><div class=3D"gmail_default" style=3D"font-family= :monospace"><br></div><div class=3D"gmail_default" style=3D"font-family:mon= ospace">As far as any negative impact is concerned, without adjustment, the= worst case is pretty much just a missing displayed character that had been= displayed before.</div><div class=3D"gmail_default" style=3D"font-family:m= onospace"><br></div><div class=3D"gmail_default" style=3D"font-family:monos= pace">In any case, one can disable the heuristic for complete backward comp= atibility by setting a column's limit-adjustment property to nil for an= y problematic strings.=C2=A0 I have not yet found one of those in my use bu= t I don't use=C2=A0other=C2=A0languages like Chinese or whatever that= =C2=A0might=C2=A0demonstrate more of an issue.</div><div class=3D"gmail_def= ault" style=3D"font-family:monospace"><br></div><div class=3D"gmail_default= " style=3D"font-family:monospace"><div class=3D"gmail_default">I will adapt= my benchmark code, and add some tests for edge cases such as those you=C2= =A0mentioned.=C2=A0 If there are already a string corpus to test with in th= e code base, let me know or I'll take a look for one.</div></div></div>= </div> --000000000000588a4f06463b0d0b--
bug-gnu-emacs@HIDDEN:bug#80026; Package emacs.
Full text available.Received: (at 80026) by debbugs.gnu.org; 18 Dec 2025 05:50:56 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Dec 18 00:50:56 2025 Received: from localhost ([127.0.0.1]:48601 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vW6ua-0007wU-L9 for submit <at> debbugs.gnu.org; Thu, 18 Dec 2025 00:50:56 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36038) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1vW6uX-0007wG-QM for 80026 <at> debbugs.gnu.org; Thu, 18 Dec 2025 00:50:51 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <eliz@HIDDEN>) id 1vW6uR-0005M6-Go; Thu, 18 Dec 2025 00:50:43 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=MNONo79JUn5NrUfpC08rYs1yrDkZoYF80uEnELiOgK0=; b=CjILWtICKf8RtjnBpDT7 BuLoVvlH7bwpewov1msQLobIBYAwsFziS8ZYU0YPoRqx6H61Og5CoP4CIcmCUIhdsbF+o3ra+hOpV S28c9o71UUdhzXHePb8cswm7tgAfGc77wluEN8TLACpgVCIgShcnrb99NsyyZJdl/bNUVpyGSkJuC g1myIunK8WhiWGN8eClwK/sSgtN7bH3s240YkZQF4fiXaDLLr1LEDDqeuiDUOvPlVsjy/to5+cX/U lbh6tBFyf++Y6O5RnnQpvp6Pa8Q146L+O8DRsOf/cxbx+iQnN9q0KO+c4V0n6c4iYHcOEVgLvEopI a7WHxTrUjjk7GA==; Date: Thu, 18 Dec 2025 07:50:38 +0200 Message-Id: <86zf7g2v9t.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: =?utf-8?Q?St=C3=A9phane?= Marks <shipmints@HIDDEN> In-Reply-To: <CAN+1HbqKXXc+20yaSkkQuGCn-H0zGenZZFdTH3Ts=LT+QyTMGQ@HIDDEN> (message from =?utf-8?Q?St=C3=A9phane?= Marks on Wed, 17 Dec 2025 13:57:20 -0500) Subject: Re: bug#80026: [PATCH] Improve vtable--limit-string performance References: <CAN+1HbqKXXc+20yaSkkQuGCn-H0zGenZZFdTH3Ts=LT+QyTMGQ@HIDDEN> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 80026 Cc: sbaugh@HIDDEN, krisbalintona@HIDDEN, joostkremers@HIDDEN, ijqq@HIDDEN, 80026 <at> debbugs.gnu.org, visuweshm@HIDDEN, adam@HIDDEN, larsi@HIDDEN, arstoffel@HIDDEN X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) > Cc: Spencer Baugh <sbaugh@HIDDEN>, > Kristoffer Balintona <krisbalintona@HIDDEN>, > Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN, > Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>, > Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN> > From: Stéphane Marks <shipmints@HIDDEN> > Date: Wed, 17 Dec 2025 13:57:20 -0500 > > This implements a simple heuristic to limit the number of times `string-pixel-width` gets called by estimating > the string's truncation position in advance. This is overridable column-by-column should some strings in the > vtable be composed of widely varying font widths that necessitates minor adjustments to the heuristic. This > approach performs well in testing (and I tested several approaches) and has been tested by more than one > vtable user. Thanks, but are you sure this is not a case of premature optimization? How important is it to speed up vtable--limit-string? Can you show some benchmarks which will point to this function as a hotspot? Also, changing the algorithm from an exact one to one using heuristic requires significant testing with various problematic cases: text using variable fonts and characters of different glyph-width, character-composition sequences (e.g., emoji), etc. Could you please add such tests to the suite, so we could be sure this change doesn't introduce regressions?
bug-gnu-emacs@HIDDEN:bug#80026; Package emacs.
Full text available.Received: (at submit) by debbugs.gnu.org; 17 Dec 2025 18:57:51 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Dec 17 13:57:51 2025 Received: from localhost ([127.0.0.1]:45733 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1vVwic-0006XN-O9 for submit <at> debbugs.gnu.org; Wed, 17 Dec 2025 13:57:51 -0500 Received: from lists.gnu.org ([2001:470:142::17]:55196) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>) id 1vVwia-0006X2-Cg for submit <at> debbugs.gnu.org; Wed, 17 Dec 2025 13:57:48 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <shipmints@HIDDEN>) id 1vVwiM-0008A0-Kq for bug-gnu-emacs@HIDDEN; Wed, 17 Dec 2025 13:57:37 -0500 Received: from mail-vk1-xa2b.google.com ([2607:f8b0:4864:20::a2b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <shipmints@HIDDEN>) id 1vVwiK-0006OQ-Sj for bug-gnu-emacs@HIDDEN; Wed, 17 Dec 2025 13:57:34 -0500 Received: by mail-vk1-xa2b.google.com with SMTP id 71dfb90a1353d-55b4dafb425so602085e0c.1 for <bug-gnu-emacs@HIDDEN>; Wed, 17 Dec 2025 10:57:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765997851; x=1766602651; darn=gnu.org; h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=yydn/uPeOcNChDl8Qbcou8HC87YghgbyFHUHTD3czQg=; b=RIpUW7jvwFT5nWsgiwjS2i5cDnxcWczUicGMhT/cXXCXzXLx4zX6Rrwk2EBnh6csCc ipBqUFr8mr1vh4hdZGGn9v1NsPBYRfwWmIikm/qh/uF+y7qm5RSOI6wwe7LALJR6MaHs J1yrcCVGWaw/Z58tGtE9hkKt4U3bhY6XbVJgwwRx0CIBJgc9EIZUWj3wUS0prEEjAhfC LNHTY8ki/Rx8+AplUPL53PJsQcpM+bzdIwSh0BZab/e1PZxTGGkmhjG4xiO732RbSc3s 2F+D5SAOlE3u8Ipf8dbBuNgPCPtJrAwTIVyqQcoPOLMkpZ9ykgjxPjpo6XrLHGkQzZMN 7N0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765997851; x=1766602651; h=cc:to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=yydn/uPeOcNChDl8Qbcou8HC87YghgbyFHUHTD3czQg=; b=GFaRxlmicRQX98eeVXkj1FQgQfYB22z89wdeAv5tHRUNGPiq9giXKftMMGyh/O3dXl kO7uKfAhhp+kc+3Au048DFD+IY/yUjoBY/QytlLQNlxdIopqzHlPWIQCzBYFwB0zrH6d zuJpq++LRtc16sDEWzZCpiwM0w4hupJNIHhlbcKp1JEE74lYBJnKzfomuTh9NJaR8yWi 5c9EiKAuAuTZf2QObJGGtChV5DhOc3++3xi8hpQeZC6nG4YUMYdypTExOmQA4x3ntvf+ V3zpsvzB0pgAiZ6rb4z22UWUt+VbJY8Lm0mhClEMRhSsb/5PcDpnUzhavDnJO3M/wwAd OKkQ== X-Gm-Message-State: AOJu0Yzc6DJvOzU9Z0bZ5Z1aQHmW99rwInoNnCMJ7N2KWLPDhQVhRc79 lpFVdYvBIA26b9Q6uk3SjBzFrRdHSbplmoBhxzMSx/qY12UFiksb/fOTixau38OrcAdm61OkouD NO1i35HkLkMOVxf+8RQBjJ6e8N3Wl9Xling== X-Gm-Gg: AY/fxX51TFXACqRdUcneEBza9hJrsnONRld6psrLzIYtSeWyHw64KoMe/TGnUI0gEJD NWTEELlaxxSwBNvKwsLcqok7cL0VNPfjM8TT6XMxpLIuuj0tjdGmPwWP+f6X2D2opIay0ufo6p8 vbs6cvk1DWyqPJ4d84l9MflQjirkbkdwbry2kPxRL6FpRwproGJMV9OX5yucZJTOg+O48mIXWjI 9X9rY4XRK4kmvO7gb9ZYlOD8EnkI9PZBdwNucBcmspry0QrzhKwTozcxZXHTAMtTBbypIU= X-Google-Smtp-Source: AGHT+IGtNv0llrYotTMHRbjhV/sQjwSLXhGpD9UjPENcY5Gj91wbHlL9OrjALmwfGwHGMewUJbXa9lQYAAT3vMXGPQY= X-Received: by 2002:a05:6122:4311:b0:55e:82c3:e1fb with SMTP id 71dfb90a1353d-5614f786039mr197820e0c.10.1765997851533; Wed, 17 Dec 2025 10:57:31 -0800 (PST) MIME-Version: 1.0 From: =?UTF-8?Q?St=C3=A9phane_Marks?= <shipmints@HIDDEN> Date: Wed, 17 Dec 2025 13:57:20 -0500 X-Gm-Features: AQt7F2rLC0habl-WBykBNDVR-_sMtJFOe2twSArzNhYBlLvhVp8GAr-9JwqGDY4 Message-ID: <CAN+1HbqKXXc+20yaSkkQuGCn-H0zGenZZFdTH3Ts=LT+QyTMGQ@HIDDEN> Subject: [PATCH] Improve vtable--limit-string performance To: bug-gnu-emacs@HIDDEN Content-Type: multipart/mixed; boundary="0000000000009d8f9006462a6ab0" Received-SPF: pass client-ip=2607:f8b0:4864:20::a2b; envelope-from=shipmints@HIDDEN; helo=mail-vk1-xa2b.google.com 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, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: submit Cc: Spencer Baugh <sbaugh@HIDDEN>, Kristoffer Balintona <krisbalintona@HIDDEN>, Joost Kremers <joostkremers@HIDDEN>, ijqq@HIDDEN, Visuwesh <visuweshm@HIDDEN>, Adam Porter <adam@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>, Augusto Stoffel <arstoffel@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -0.0 (/) --0000000000009d8f9006462a6ab0 Content-Type: multipart/alternative; boundary="0000000000009d8f8e06462a6aae" --0000000000009d8f8e06462a6aae Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable This implements a simple heuristic to limit the number of times `string-pixel-width` gets called by estimating the string's truncation position in advance. This is overridable column-by-column should some strings in the vtable be composed of widely varying font widths that necessitates minor adjustments to the heuristic. This approach performs well in testing (and I tested several approaches) and has been tested by more than one vtable user. -St=C3=A9phane --0000000000009d8f8e06462a6aae Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div class=3D"gmail_default" style=3D"font-family:monospac= e">This implements a simple heuristic to limit the number of times `string-= pixel-width` gets called by estimating the string's truncation position= in advance.=C2=A0 This is overridable column-by-column should some strings= in the vtable be composed of widely varying font widths that necessitates = minor adjustments to the heuristic.=C2=A0 This approach performs well in te= sting (and I tested several approaches) and has been tested by more than on= e vtable user.</div><div class=3D"gmail_default" style=3D"font-family:monos= pace"><br></div><div class=3D"gmail_default" style=3D"font-family:monospace= ">-St=C3=A9phane=C2=A0</div></div> --0000000000009d8f8e06462a6aae-- --0000000000009d8f9006462a6ab0 Content-Type: application/octet-stream; name="0001-Improve-vtable-limit-string-performance.patch" Content-Disposition: attachment; filename="0001-Improve-vtable-limit-string-performance.patch" Content-Transfer-Encoding: base64 Content-ID: <f_mjadcbln0> X-Attachment-Id: f_mjadcbln0 RnJvbSAzMzQ3MmFjMTQwZTRhNzU4MzhlYTkwOGUxYzg5MTBmZjhkYmQ0NGY2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/U3Q9QzM9QTlwaGFuZT0yME1hcmtzPz0gPHNo aXBtaW50c0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMTcgRGVjIDIwMjUgMTM6NDU6NDkgLTA1MDAK U3ViamVjdDogW1BBVENIXSBJbXByb3ZlIHZ0YWJsZS0tbGltaXQtc3RyaW5nIHBlcmZvcm1hbmNl CgoqIGRvYy9taXNjL3Z0YWJsZS50ZXhpIChDb25jZXB0cyk6IERvY3VtZW50IHRoYXQgdnRhYmxl IGNhbiBiZQppbnNlcnRlZCBpbnRvIGEgc2luZ2xlIGJ1ZmZlci4KKE1ha2luZyBBIFRhYmxlKTog RG9jdW1lbnQgdGhlIG5ldyBsaW1pdC1hZGp1c3RtZW50IGNvbHVtbgpwcm9wZXJ0eS4KKiBsaXNw L2VtYWNzLWxpc3AvdnRhYmxlLmVsICh2dGFibGUtY29sdW1uLCB2dGFibGUtLWluc2VydC1saW5l KQoodnRhYmxlLS1pbnNlcnQtaGVhZGVyLWxpbmUpOiBDYWxsIHZ0YWJsZS0tbGltaXQtc3RyaW5n IHdpdGgKZWFjaCBjb2x1bW4ncyBsaW1pdC1hZGp1c3RtZW50LgoodnRhYmxlLS1saW1pdC1zdHJp bmcpOiBJbXBsZW1lbnQgc3RyaW5nIHRydW5jYXRpb24gaGV1cmlzdGljLgoqIHRlc3QvbGlzcC9l bWFjcy1saXNwL3Z0YWJsZS10ZXN0cy5lbAoodGVzdC12dGFibGUtLWxpbWl0LXN0cmluZy13aXRo LWZhY2UtcmVtYXBwZWQtYnVmZmVyKTogQWRkCmxpbWl0LWFkanVzdG1lbnQgYXJndW1lbnQuCi0t LQogZG9jL21pc2MvdnRhYmxlLnRleGkgICAgICAgICAgICAgICAgIHwgMTYgKysrKysrKystLQog bGlzcC9lbWFjcy1saXNwL3Z0YWJsZS5lbCAgICAgICAgICAgIHwgNDcgKysrKysrKysrKysrKysr KysrKysrKystLS0tLQogdGVzdC9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLXRlc3RzLmVsIHwgIDIg Ky0KIDMgZmlsZXMgY2hhbmdlZCwgNTQgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvZG9jL21pc2MvdnRhYmxlLnRleGkgYi9kb2MvbWlzYy92dGFibGUudGV4aQpp bmRleCBkZDJmNzk1MTJjMS4uMTY4ZmI4Y2YxYmEgMTAwNjQ0Ci0tLSBhL2RvYy9taXNjL3Z0YWJs ZS50ZXhpCisrKyBiL2RvYy9taXNjL3Z0YWJsZS50ZXhpCkBAIC0yMDgsOCArMjA4LDEwIEBAIENv bmNlcHRzCiBAY2hhcHRlciBDb25jZXB0cwogCiBAY2luZGV4IHZ0YWJsZQotQSB2dGFibGUgbGlz dHMgZGF0YSBhYm91dCBhIG51bWJlciBvZiBAZGZue29iamVjdHN9LiAgRWFjaCBvYmplY3QgY2Fu Ci1iZSBhIGxpc3Qgb3IgYSB2ZWN0b3IsIGJ1dCBpdCBjYW4gYWxzbyBiZSBhbnl0aGluZyBlbHNl LgorQSB2dGFibGUgbGlzdHMgZGF0YSBhYm91dCBhIG51bWJlciBvZiBAZGZue29iamVjdHN9LiAg RWFjaCBvYmplY3QgY2FuIGJlCithIGxpc3Qgb3IgYSB2ZWN0b3IsIGJ1dCBpdCBjYW4gYWxzbyBi ZSBhbnl0aGluZyBlbHNlLiAgTm90ZSB0aGF0IGEKK3Z0YWJsZSBjYW4gYmUgaW5zZXJ0ZWQgaW50 byBvbmx5IG9uZSBidWZmZXIgYXMgaXRzIHN0YXRlIGlzIHRpZWQgdG8gdGhhdAorYnVmZmVyLgog CiBAY2luZGV4IGdldHRlciBvZiBhIHZ0YWJsZQogVG8gZ2V0IHRoZSBAZGZue3ZhbHVlfSBmb3Ig YSBwYXJ0aWN1bGFyIGNvbHVtbiwgdGhlIEBkZm57Z2V0dGVyfQpAQCAtMzE1LDYgKzMxNywxNiBA QCBNYWtpbmcgQSBUYWJsZQogZ2l2ZW4gYXMgYSBwZXJjZW50YWdlIG9mIHRoZSB3aW5kb3cgd2lk dGgsIGFuZCB5b3Ugd2FudCB0byBlbnN1cmUgdGhhdAogdGhlIGNvbHVtbiBkb2Vzbid0IGdyb3cg cG9pbnRsZXNzbHkgbGFyZ2Ugb3IgdW5yZWFkYWJseSBuYXJyb3cuCiAKK0BpdGVtIGxpbWl0LWFk anVzdG1lbnQKK3Z0YWJsZSB0cnVuY2F0ZXMgc3RyaW5ncyB0byBmaXQgaW50byBlYWNoIGNvbHVt bidzIGFsbG90dGVkIHBpeGVsIHdpZHRoLgorQSBoZXVyaXN0aWMgaXMgdXNlZCB0byByZWR1Y2Ug Y29tcHV0YXRpb24gY29zdCBvbiBsb25nIHN0cmluZ3MuICBJbiByYXJlCitjYXNlcyB3aGVyZSBh IHN0cmluZyBjb250YWlucyBmb250cyBvZiB3aWRlbHkgdmFyeWluZyB3aWR0aHMsIHVzZSB0aGUK K0Bjb2Rle2xpbWl0LWFkanVzdG1lbnR9IHByb3BlcnR5IHRvIGFkanVzdCB0aGUgaGV1cmlzdGlj IGJ5IHNwZWNpZnlpbmcKK3RoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBhZGQgdG8gdGhlIGhl dXJpc3RpYydzIGluaXRpYWwgdHJ1bmNhdGlvbgorZXN0aW1hdGUuICBAY29kZXtsaW1pdC1hZGp1 c3RtZW50fSBkZWZhdWx0cyB0byAwIHdoaWNoIGVuYWJsZXMgdGhlCitoZXVyaXN0aWMgd2l0aCBu byBjaGFyYWN0ZXIgYWRqdXN0bWVudC4gIElmIEBjb2Rle2xpbWl0LWFkanVzdG1lbnR9IGlzCitu aWwsIG5vIGhldXJpc3RpYyBpcyBhcHBsaWVkLgorCiBAaXRlbSBwcmltYXJ5CiBXaGV0aGVyIHRo aXMgaXMgdGhlIHByaW1hcnkgY29sdW1uLS0tdGhpcyB3aWxsIGJlIHVzZWQgZm9yIGluaXRpYWwK IHNvcnRpbmcuICBUaGlzIHNob3VsZCBiZSBlaXRoZXIgQGNvZGV7YXNjZW5kfSBvciBAY29kZXtk ZXNjZW5kfSB0byBzYXkKZGlmZiAtLWdpdCBhL2xpc3AvZW1hY3MtbGlzcC92dGFibGUuZWwgYi9s aXNwL2VtYWNzLWxpc3AvdnRhYmxlLmVsCmluZGV4IDI5NzkxZTJhYWEwLi43ZWQ3ODlhMTdhNiAx MDA2NDQKLS0tIGEvbGlzcC9lbWFjcy1saXNwL3Z0YWJsZS5lbAorKysgYi9saXNwL2VtYWNzLWxp c3AvdnRhYmxlLmVsCkBAIC00MCw2ICs0MCw3IEBAIHZ0YWJsZS1jb2x1bW4KICAgd2lkdGgKICAg bWluLXdpZHRoCiAgIG1heC13aWR0aAorICAobGltaXQtYWRqdXN0bWVudCAwKQogICBwcmltYXJ5 CiAgIGFsaWduCiAgIGdldHRlcgpAQCAtNjM2LDcgKzYzNyw4IEBAIHZ0YWJsZS0taW5zZXJ0LWxp bmUKICAgICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tbGltaXQtc3RyaW5nCiAgICAgICAg ICAgICAgICAgICAgICAgICBwcmUtY29tcHV0ZWQgKC0gKGVsdCB3aWR0aHMgaW5kZXgpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yIGVsbGlwc2lzLXdpZHRoIDAp KQotICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyKQorICAgICAgICAgICAgICAgICAgICAg ICAgYnVmZmVyCisgICAgICAgICAgICAgICAgICAgICAgICAodnRhYmxlLWNvbHVtbi1saW1pdC1h ZGp1c3RtZW50IGNvbHVtbikpCiAgICAgICAgICAgICAgICAgICAgICAgIGVsbGlwc2lzKQogICAg ICAgICAgICAgICAgICAgICBwcmUtY29tcHV0ZWQpKQogICAgICAgICAgICAgICAgICA7OyBSZWNv bXB1dGUgd2lkdGhzLgpAQCAtNjQ2LDcgKzY0OCw4IEBAIHZ0YWJsZS0taW5zZXJ0LWxpbmUKICAg ICAgICAgICAgICAgICAgICAgICAgKHZ0YWJsZS0tbGltaXQtc3RyaW5nCiAgICAgICAgICAgICAg ICAgICAgICAgICB2YWx1ZSAoLSAoZWx0IHdpZHRocyBpbmRleCkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChvciBlbGxpcHNpcy13aWR0aCAwKSkKLSAgICAgICAgICAgICAgICAg ICAgICAgIGJ1ZmZlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcgorICAgICAgICAg ICAgICAgICAgICAgICAgKHZ0YWJsZS1jb2x1bW4tbGltaXQtYWRqdXN0bWVudCBjb2x1bW4pKQog ICAgICAgICAgICAgICAgICAgICAgICBlbGxpcHNpcykKICAgICAgICAgICAgICAgICAgICAgdmFs dWUpKSkpCiAgICAgICAgICAgICAgICAoc3RhcnQgKHBvaW50KSkKQEAgLTc2Nyw3ICs3NzAsOCBA QCB2dGFibGUtLWluc2VydC1oZWFkZXItbGluZQogICAgICAgICAgICAgICAgICAgICAgICgtIChl bHQgd2lkdGhzIGluZGV4KSBpbmRpY2F0b3Itd2lkdGgpKQogICAgICAgICAgICAgICAgICAgICh2 dGFibGUtLWxpbWl0LXN0cmluZwogICAgICAgICAgICAgICAgICAgICBuYW1lICgtIChlbHQgd2lk dGhzIGluZGV4KSBpbmRpY2F0b3Itd2lkdGgpCi0gICAgICAgICAgICAgICAgICAgIGJ1ZmZlcikK KyAgICAgICAgICAgICAgICAgICAgYnVmZmVyCisgICAgICAgICAgICAgICAgICAgICh2dGFibGUt Y29sdW1uLWxpbWl0LWFkanVzdG1lbnQgY29sdW1uKSkKICAgICAgICAgICAgICAgICAgbmFtZSkp CiAgICAgICAgICAobGV0KiAoKGluZGljYXRvci1sZWFkLXdpZHRoCiAgICAgICAgICAgICAgICAg IDs7IFdlIHdhbnQgdGhlIGluZGljYXRvciB0byBub3QgYmUgcXVpdGUgZmx1c2ggcmlnaHQuCkBA IC04NzUsMTEgKzg3OSwzOCBAQCB2dGFibGUtLXNldC1oZWFkZXItbGluZQogICAodnRhYmxlLWhl YWRlci1tb2RlIDEpKQogCiAKLShkZWZ1biB2dGFibGUtLWxpbWl0LXN0cmluZyAoc3RyaW5nIHBp eGVscyBidWZmZXIpCi0gICh3aGlsZSAoYW5kIChsZW5ndGg+IHN0cmluZyAwKQotICAgICAgICAg ICAgICAoPiAoc3RyaW5nLXBpeGVsLXdpZHRoIHN0cmluZyBidWZmZXIpIHBpeGVscykpCi0gICAg KHNldHEgc3RyaW5nIChzdWJzdHJpbmcgc3RyaW5nIDAgKDEtIChsZW5ndGggc3RyaW5nKSkpKSkK LSAgc3RyaW5nKQorKGRlZnVuIHZ0YWJsZS0tbGltaXQtc3RyaW5nIChzdHJpbmcgcGl4ZWxzIGJ1 ZmZlciBsaW1pdC1hZGp1c3RtZW50KQorICAiVHJ1bmNhdGUgU1RSSU5HIHRvIGZpdCBpbnRvIHdp ZHRoIFBJWEVMUy4KK0NvbnN1bHQgQlVGRkVSIHRvIGRlcml2ZSB0ZXh0LXNjYWxlIGFkanVzdGVk IGZvbnRzLgorCitUbyBpbXByb3ZlIHBlcmZvcm1hbmNlIG9uIGxvbmcgc3RyaW5ncywgY29tcHV0 ZSBhIGxpbWl0IGhldXJpc3RpYyBiYXNlZAorb24gU1RSSU5HJ3MgZXN0aW1hdGVkIGF2ZXJhZ2Ug cGl4ZWwgd2lkdGggcmVsYXRpdmUgdG8gUElYRUxTLCBjb25zdWx0aW5nCitMSU1JVC1BREpVU1RN RU5ULgorSWYgTElNSVQtQURKVVNUTUVOVCBpcyBuaWwsIGRvIG5vdCBhcHBseSB0aGUgaGV1cmlz dGljLgorSWYgTElNSVQtQURKVVNUTUVOVCBpcyBhbiBpbnRlZ2VyLCBpdCBpcyB0aGUgbnVtYmVy IG9mIGFkZGl0aW9uYWwKK2NoYXJhY3RlcnMgYWRkZWQgdG8gdGhlIGVzdGltYXRlLiAgVGhpcyBt YXkgYmUgbmVlZGVkIGZvciBwcm9wZXJ0aXplZAorc3RyaW5ncyB0aGF0IGhhdmUgd2lkZWx5IHZh cnlpbmcgZm9udCBzaXplcy4gIEluY3JlYXNlIHRoZSBlc3RpbWF0ZSBieQorb25lIGNoYXJhY3Rl ciBhdCBhIHRpbWUgdW50aWwgdGhlIGRlc2lyZWQgcmVzdWx0IGlzIGFjaGlldmVkLiIKKyAgKGxl dCAoKHN0cmluZy1sZW4gKGxlbmd0aCBzdHJpbmcpKQorICAgICAgICAoc3RyaW5nLXBpeGVscykp CisgICAgKHdoZW4gKGFuZCAoPiBzdHJpbmctbGVuIDApCisgICAgICAgICAgICAgICAoaW50ZWdl cnAgbGltaXQtYWRqdXN0bWVudCkpCisgICAgICAoc2V0cSBzdHJpbmctcGl4ZWxzIChzdHJpbmct cGl4ZWwtd2lkdGggc3RyaW5nIGJ1ZmZlcikpCisgICAgICAod2hlbiAoPiBzdHJpbmctcGl4ZWxz IHBpeGVscykKKyAgICAgICAgOzsgVXNlIGF2ZXJhZ2UgcGl4ZWxzL2NoYXJhY3RlciBmcm9tIFNU UklORyB0byBzZWVkIHRoZSBndWVzcy4KKyAgICAgICAgKGxldCAoKGd1ZXNzICgrIDEKKyAgICAg ICAgICAgICAgICAgICAgICAgIGxpbWl0LWFkanVzdG1lbnQKKyAgICAgICAgICAgICAgICAgICAg ICAgIChjZWlsaW5nICgvIHBpeGVscyAoLyBzdHJpbmctcGl4ZWxzIHN0cmluZy1sZW4pKSkpKSkK KyAgICAgICAgICAod2hlbiAoPCBndWVzcyBzdHJpbmctbGVuKQorICAgICAgICAgICAgKHNldHEg c3RyaW5nIChzdWJzdHJpbmcgc3RyaW5nIDAgZ3Vlc3MpKSkpKSkKKyAgICAod2hpbGUgKGFuZCAo bGVuZ3RoPiBzdHJpbmcgMCkKKyAgICAgICAgICAgICAgICA7OyBSZXVzZSB0aGUgaW5pdGlhbCBz dHJpbmctcGl4ZWxzIGZvciB0aGUgZmFzdCBwYXRoLgorICAgICAgICAgICAgICAgIChpZiBzdHJp bmctcGl4ZWxzIChwcm9nMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo PiBzdHJpbmctcGl4ZWxzIHBpeGVscykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChzZXRxIHN0cmluZy1waXhlbHMgbmlsKSkKKyAgICAgICAgICAgICAgICAgICg+IChzdHJp bmctcGl4ZWwtd2lkdGggc3RyaW5nIGJ1ZmZlcikgcGl4ZWxzKSkpCisgICAgICAoc2V0cSBzdHJp bmcgKHN1YnN0cmluZyBzdHJpbmcgMCAoMS0gKGxlbmd0aCBzdHJpbmcpKSkpKQorICAgIHN0cmlu ZykpCiAKIChkZWZ1biB2dGFibGUtLWNoYXItd2lkdGggKHRhYmxlKQogICAoc3RyaW5nLXBpeGVs LXdpZHRoIChwcm9wZXJ0aXplICJ4IiAnZmFjZSAodnRhYmxlLWZhY2UgdGFibGUpKQpkaWZmIC0t Z2l0IGEvdGVzdC9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLXRlc3RzLmVsIGIvdGVzdC9saXNwL2Vt YWNzLWxpc3AvdnRhYmxlLXRlc3RzLmVsCmluZGV4IGUwMzI4ZTMxYmM1Li41OGFhMGE3ZjgxYSAx MDA2NDQKLS0tIGEvdGVzdC9saXNwL2VtYWNzLWxpc3AvdnRhYmxlLXRlc3RzLmVsCisrKyBiL3Rl c3QvbGlzcC9lbWFjcy1saXNwL3Z0YWJsZS10ZXN0cy5lbApAQCAtMTM4LDcgKzEzOCw3IEBAIHRl c3QtdnRhYmxlLS1saW1pdC1zdHJpbmctd2l0aC1mYWNlLXJlbWFwcGVkLWJ1ZmZlcgogICAgICAg KGlmICg+IGVtYWNzLW1ham9yLXZlcnNpb24gMzApCiAgICAgICAgICAgKHNob3VsZCAoZXEKICAg ICAgICAgICAgICAgICAgICAyCi0gICAgICAgICAgICAgICAgICAgKGxlbmd0aCAodnRhYmxlLS1s aW1pdC1zdHJpbmcgdGV4dCA1MCAoY3VycmVudC1idWZmZXIpKSkpKQorICAgICAgICAgICAgICAg ICAgIChsZW5ndGggKHZ0YWJsZS0tbGltaXQtc3RyaW5nIHRleHQgNTAgKGN1cnJlbnQtYnVmZmVy KSAwKSkpKQogICAgICAgICAoc2hvdWxkIChlcQogICAgICAgICAgICAgICAgICAyCiAgICAgICAg ICAgICAgICAgIChsZW5ndGggKHZ0YWJsZS0tbGltaXQtc3RyaW5nIHRleHQgNTApKSkpKSkpKQot LSAKMi40Ny4xCgo= --0000000000009d8f9006462a6ab0--
Stéphane Marks <shipmints@HIDDEN>:bug-gnu-emacs@HIDDEN.
Full text available.bug-gnu-emacs@HIDDEN:bug#80026; Package emacs.
Full text available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.