changeset 53473:e93d01ecd023

*** empty log message ***
author Kim F. Storm <storm@cua.dk>
date Thu, 01 Jan 2004 23:44:00 +0000
parents 1a5fe79d27f3
children dc7da3850335 0abaf12fa706
files etc/NEWS src/ChangeLog
diffstat 2 files changed, 38 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/etc/NEWS	Thu Jan 01 23:34:14 2004 +0000
+++ b/etc/NEWS	Thu Jan 01 23:44:00 2004 +0000
@@ -1,5 +1,5 @@
 GNU Emacs NEWS -- history of user-visible changes.  2003-05-21
-Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
 See the end for copying conditions.
 
 Please send Emacs bug reports to bug-gnu-emacs@gnu.org.
@@ -2523,6 +2523,17 @@
 The new low-level functions process-plist and set-process-plist are
 used to access and replace the entire property list of a process.
 
+???
+*** Adaptive read buffering of subprocess output.
+
+On some systems, when emacs reads the output from a subprocess, the
+output data is read in very small blocks, potentially resulting in
+very poor performance.  This behaviour can be remedied to some extent
+by setting the new variable process-adaptive-read-buffering to a
+non-nil value (the default), as it will automatically delay reading
+from such processes, to allowing them to produce more output before
+emacs tries to read it.
+
 +++
 ** Enhanced networking support.
 
--- a/src/ChangeLog	Thu Jan 01 23:34:14 2004 +0000
+++ b/src/ChangeLog	Thu Jan 01 23:44:00 2004 +0000
@@ -1,3 +1,29 @@
+2004-01-02  Kim F. Storm  <storm@cua.dk>
+
+	* process.h (struct Lisp_Process): New members for adaptive read
+	buffering: adaptive_read_buffering, read_output_delay, and
+	read_output_skip.
+
+	* process.c (ADAPTIVE_READ_BUFFERING): New conditional.
+	(READ_OUTPUT_DELAY_INCREMENT, READ_OUTPUT_DELAY_MAX)
+	(READ_OUTPUT_DELAY_MAX_MAX): New constants.
+	(process_output_delay_count, process_output_skip): New vars.
+	(Vprocess_adaptive_read_buffering): New variable.
+	(make_process): Initialize adaptive read buffering members.
+	(Fstart_process): Set adaptive_read_buffering member.
+	(deactivate_process): Cleanup adaptive read buffering.
+	(wait_reading_process_input): Temporarily omit delayed
+	subprocesses from the set of file descriptors to read from;
+	adjust the select timeout if we skipped any subprocesses.
+	(read_process_output): Increase adaptive read buffering delay if
+	we read less than a full buffer; reduce delay when we read a
+	full buffer.
+	(send_process): Simplify using local Lisp_Process var.
+	Reset adaptive read buffering delay after write.
+	(init_process): Initialize process_output_delay_count and
+	process_output_skip.
+	(syms_of_process): DEFVAR_LISP Vprocess_adaptive_read_buffering.
+
 2004-01-01  Jason Rumney  <jasonr@gnu.org>
 
 	* w32term.c (w32_text_out): Use s->font, for consistency with