From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: martin rudalics Newsgroups: gmane.emacs.devel Subject: Re: jit-lock timer etc. Date: Mon, 21 Aug 2006 18:57:25 +0200 Message-ID: <44E9E5F5.8000400@gmx.at> References: NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------010405020100080909090600" X-Trace: sea.gmane.org 1156179656 20689 80.91.229.2 (21 Aug 2006 17:00:56 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Mon, 21 Aug 2006 17:00:56 +0000 (UTC) Cc: rms@gnu.org, emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Aug 21 19:00:49 2006 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1GFD8n-00049S-68 for ged-emacs-devel@m.gmane.org; Mon, 21 Aug 2006 19:00:45 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1GFD8m-0008Mj-MI for ged-emacs-devel@m.gmane.org; Mon, 21 Aug 2006 13:00:44 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1GFD8O-00089R-Ek for emacs-devel@gnu.org; Mon, 21 Aug 2006 13:00:20 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1GFD8N-000887-CG for emacs-devel@gnu.org; Mon, 21 Aug 2006 13:00:19 -0400 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1GFD8M-00087h-VE for emacs-devel@gnu.org; Mon, 21 Aug 2006 13:00:19 -0400 Original-Received: from [213.165.64.20] (helo=mail.gmx.net) by monty-python.gnu.org with smtp (Exim 4.52) id 1GFDFm-0004Bm-QG for emacs-devel@gnu.org; Mon, 21 Aug 2006 13:07:59 -0400 Original-Received: (qmail invoked by alias); 21 Aug 2006 17:00:16 -0000 Original-Received: from M3153P002.adsl.highway.telekom.at (EHLO [88.117.42.2]) [88.117.42.2] by mail.gmx.net (mp001) with SMTP; 21 Aug 2006 19:00:16 +0200 X-Authenticated: #14592706 User-Agent: Mozilla Thunderbird 1.0 (Windows/20041206) X-Accept-Language: de-DE, de, en-us, en Original-To: "Kim F. Storm" In-Reply-To: X-Y-GMX-Trusted: 0 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:58651 Archived-At: This is a multi-part message in MIME format. --------------010405020100080909090600 Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit > Martin, would you like to try to update your patch ? Apparently, my patch works also without restricting the values of `run-at-time' as I did earlier. Could you please try the attached revision with "pathological" values for `jit-lock-stealth-time' and `jit-lock-stealth-nice'. --------------010405020100080909090600 Content-Type: text/plain; name="jit-lock.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="jit-lock.patch" *** jit-lock.el.~1.54.~ Mon Aug 21 14:35:24 2006 --- jit-lock.el Mon Aug 21 18:14:28 2006 *************** *** 444,512 **** result)))) ! (defun jit-lock-stealth-fontify () "Fontify buffers stealthily. ! This functions is called after Emacs has been idle for ! `jit-lock-stealth-time' seconds." ! ;; I used to check `inhibit-read-only' here, but I can't remember why. -stef ! (unless (or executing-kbd-macro memory-full ! (window-minibuffer-p (selected-window))) ! (let ((buffers (buffer-list)) ! (outer-buffer (current-buffer)) minibuffer-auto-raise ! message-log-max) ! (with-local-quit ! (while (and buffers (not (input-pending-p))) ! (with-current-buffer (pop buffers) ! (when jit-lock-mode ! ;; This is funny. Calling sit-for with 3rd arg non-nil ! ;; so that it doesn't redisplay, internally calls ! ;; wait_reading_process_input also with a parameter ! ;; saying "don't redisplay." Since this function here ! ;; is called periodically, this effectively leads to ! ;; process output not being redisplayed at all because ! ;; redisplay_internal is never called. (That didn't ! ;; work in the old redisplay either.) So, we learn that ! ;; we mustn't call sit-for that way here. But then, we ! ;; have to be cautious not to call sit-for in a widened ! ;; buffer, since this could display hidden parts of that ! ;; buffer. This explains the seemingly weird use of ! ;; save-restriction/widen here. ! (with-temp-message (if jit-lock-stealth-verbose (concat "JIT stealth lock " (buffer-name))) ! ! ;; In the following code, the `sit-for' calls cause a ! ;; redisplay, so it's required that the ! ;; buffer-modified flag of a buffer that is displayed ! ;; has the right value---otherwise the mode line of ! ;; an unmodified buffer would show a `*'. ! (let (start ! (nice (or jit-lock-stealth-nice 0)) ! (point (point-min))) ! (while (and (setq start ! (jit-lock-stealth-chunk-start point)) ! ;; In case sit-for runs any timers, ! ;; give them the expected current buffer. ! (with-current-buffer outer-buffer ! (sit-for nice))) ! ! ;; fontify a block. ! (jit-lock-fontify-now start (+ start jit-lock-chunk-size)) ! ;; If stealth jit-locking is done backwards, this leads to ! ;; excessive O(n^2) refontification. -stef ! ;; (when (>= jit-lock-context-unfontify-pos start) ! ;; (setq jit-lock-context-unfontify-pos end)) ! ! ;; Wait a little if load is too high. ! (when (and jit-lock-stealth-load ! (> (car (load-average)) jit-lock-stealth-load)) ! ;; In case sit-for runs any timers, ! ;; give them the expected current buffer. ! (with-current-buffer outer-buffer ! (sit-for (or jit-lock-stealth-time 30)))))))))))))) --- 444,491 ---- result)))) ! (defun jit-lock-stealth-fontify (&optional repeat) "Fontify buffers stealthily. ! This function is called repeatedly after Emacs has become idle for ! `jit-lock-stealth-time' seconds. Optional argument REPEAT is expected ! non-nil in a repeated invocation of this function." ! (unless (or (input-pending-p) ! executing-kbd-macro memory-full ! (window-minibuffer-p (selected-window)) ! (null (if repeat ! ;; In repeated invocations `jit-lock-stealth-buffers' ! ;; has been already set up. ! jit-lock-stealth-buffers ! ;; In first invocation set up `jit-lock-stealth-buffers' ! ;; from `buffer-list'. ! (setq jit-lock-stealth-buffers (buffer-list))))) ! (let ((buffer (car jit-lock-stealth-buffers)) minibuffer-auto-raise ! message-log-max ! start load-delay) ! (when (or (not jit-lock-stealth-load) ! (or (<= (car (load-average)) jit-lock-stealth-load) ! ;; If load is too high, remember this in `load-delay'. ! (not (setq load-delay t)))) ! (with-current-buffer buffer ! (if (and jit-lock-mode ! (setq start (jit-lock-stealth-chunk-start (point)))) ! ;; Fontify one block of at most `jit-lock-chunk-size' characters. (with-temp-message (if jit-lock-stealth-verbose (concat "JIT stealth lock " (buffer-name))) ! (jit-lock-fontify-now start (+ start jit-lock-chunk-size))) ! ;; Nothing to fontify here. Remove this buffer from ! ;; `jit-lock-stealth-buffers'. ! (setq jit-lock-stealth-buffers (cdr jit-lock-stealth-buffers))))) ! (when (and jit-lock-stealth-buffers jit-lock-stealth-time) ! ;; Call us again. ! (run-at-time ! ;; If load was too high, call again after `jit-lock-stealth-time' ! ;; seconds. Otherwise repeat after `jit-lock-stealth-nice' seconds. ! (if load-delay jit-lock-stealth-time (or jit-lock-stealth-nice 0)) ! nil 'jit-lock-stealth-fontify t))))) --------------010405020100080909090600 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Emacs-devel mailing list Emacs-devel@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-devel --------------010405020100080909090600--