[前][次][番号順一覧][スレッド一覧]

ruby-changes:15120

From: nobu <ko1@a...>
Date: Sun, 21 Mar 2010 17:58:13 +0900 (JST)
Subject: [ruby-changes:15120] Ruby:r26997 (trunk): * io.c (IO_RBUF_CAPA_FOR): use large buffer as cbuf if readconv is

nobu	2010-03-21 17:57:55 +0900 (Sun, 21 Mar 2010)

  New Revision: 26997

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=26997

  Log:
    * io.c (IO_RBUF_CAPA_FOR): use large buffer as cbuf if readconv is
      needed for performance improvement.  based on a patch by Roger Pack
      in [ruby-core:28163].  [ruby-core:28162]

  Modified files:
    trunk/ChangeLog
    trunk/io.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 26996)
+++ ChangeLog	(revision 26997)
@@ -1,3 +1,9 @@
+Sun Mar 21 17:57:49 2010  Nobuyoshi Nakada  <nobu@r...>
+
+	* io.c (IO_RBUF_CAPA_FOR): use large buffer as cbuf if readconv is
+	  needed for performance improvement.  based on a patch by Roger Pack
+	  in [ruby-core:28163].  [ruby-core:28162]
+
 Sun Mar 21 17:14:49 2010  Tanaka Akira  <akr@f...>
 
 	* tool/transcode-tblgen.rb: reuse hash object.
Index: io.c
===================================================================
--- io.c	(revision 26996)
+++ io.c	(revision 26997)
@@ -109,8 +109,9 @@
 
 #define numberof(array) (int)(sizeof(array) / sizeof((array)[0]))
 
-#define IO_RBUF_CAPA_MIN 16384
-#define IO_CBUF_CAPA_MIN 16384
+#define IO_RBUF_CAPA_MIN  8192
+#define IO_CBUF_CAPA_MIN  (128*1024)
+#define IO_RBUF_CAPA_FOR(fptr) (NEED_READCONV(fptr) ? IO_CBUF_CAPA_MIN : IO_RBUF_CAPA_MIN)
 #define IO_WBUF_CAPA_MIN  8192
 
 VALUE rb_cIO;
@@ -206,6 +207,19 @@
 #  endif
 #endif
 
+#if defined(RUBY_TEST_CRLF_ENVIRONMENT) || defined(_WIN32)
+/* Windows */
+# define NEED_NEWLINE_DECORATOR_ON_READ(fptr) (!(fptr->mode & FMODE_BINMODE))
+# define NEED_NEWLINE_DECORATOR_ON_WRITE(fptr) (!(fptr->mode & FMODE_BINMODE))
+# define TEXTMODE_NEWLINE_DECORATOR_ON_WRITE ECONV_CRLF_NEWLINE_DECORATOR
+#else
+/* Unix */
+# define NEED_NEWLINE_DECORATOR_ON_READ(fptr) (fptr->mode & FMODE_TEXTMODE)
+# define NEED_NEWLINE_DECORATOR_ON_WRITE(fptr) 0
+#endif
+#define NEED_READCONV(fptr) (fptr->encs.enc2 != NULL || NEED_NEWLINE_DECORATOR_ON_READ(fptr))
+#define NEED_WRITECONV(fptr) ((fptr->encs.enc != NULL && fptr->encs.enc != rb_ascii8bit_encoding()) || NEED_NEWLINE_DECORATOR_ON_WRITE(fptr) || (fptr->encs.ecflags & (ECONV_DECORATOR_MASK|ECONV_STATEFUL_DECORATOR_MASK)))
+
 #if !defined HAVE_SHUTDOWN && !defined shutdown
 #define shutdown(a,b)	0
 #endif
@@ -336,16 +350,17 @@
     long len = RSTRING_LEN(str);
 
     if (fptr->rbuf == NULL) {
+        const int min_capa = IO_RBUF_CAPA_FOR(fptr);
         fptr->rbuf_off = 0;
         fptr->rbuf_len = 0;
 #if SIZEOF_LONG > SIZEOF_INT
 	if (len > INT_MAX)
 	    rb_raise(rb_eIOError, "ungetbyte failed");
 #endif
-	if (len > IO_RBUF_CAPA_MIN)
+	if (len > min_capa)
 	    fptr->rbuf_capa = (int)len;
 	else
-	    fptr->rbuf_capa = IO_RBUF_CAPA_MIN;
+	    fptr->rbuf_capa = min_capa;
         fptr->rbuf = ALLOC_N(char, fptr->rbuf_capa);
     }
     if (fptr->rbuf_capa < len + fptr->rbuf_len) {
@@ -705,19 +720,6 @@
     }
 }
 
-#if defined(RUBY_TEST_CRLF_ENVIRONMENT) || defined(_WIN32)
-/* Windows */
-# define NEED_NEWLINE_DECORATOR_ON_READ(fptr) (!(fptr->mode & FMODE_BINMODE))
-# define NEED_NEWLINE_DECORATOR_ON_WRITE(fptr) (!(fptr->mode & FMODE_BINMODE))
-# define TEXTMODE_NEWLINE_DECORATOR_ON_WRITE ECONV_CRLF_NEWLINE_DECORATOR
-#else
-/* Unix */
-# define NEED_NEWLINE_DECORATOR_ON_READ(fptr) (fptr->mode & FMODE_TEXTMODE)
-# define NEED_NEWLINE_DECORATOR_ON_WRITE(fptr) 0
-#endif
-#define NEED_READCONV(fptr) (fptr->encs.enc2 != NULL || NEED_NEWLINE_DECORATOR_ON_READ(fptr))
-#define NEED_WRITECONV(fptr) ((fptr->encs.enc != NULL && fptr->encs.enc != rb_ascii8bit_encoding()) || NEED_NEWLINE_DECORATOR_ON_WRITE(fptr) || (fptr->encs.ecflags & (ECONV_DECORATOR_MASK|ECONV_STATEFUL_DECORATOR_MASK)))
-
 static void
 make_writeconv(rb_io_t *fptr)
 {
@@ -1175,7 +1177,7 @@
     if (fptr->rbuf == NULL) {
         fptr->rbuf_off = 0;
         fptr->rbuf_len = 0;
-        fptr->rbuf_capa = IO_RBUF_CAPA_MIN;
+        fptr->rbuf_capa = IO_RBUF_CAPA_FOR(fptr);
         fptr->rbuf = ALLOC_N(char, fptr->rbuf_capa);
     }
     if (fptr->rbuf_len == 0) {

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]