]> source.dussan.org Git - jgit.git/commitdiff
Optimize EolAwareOutputStream for bulk output 63/45063/1
authorShawn Pearce <spearce@spearce.org>
Wed, 1 Apr 2015 19:47:57 +0000 (12:47 -0700)
committerShawn Pearce <spearce@spearce.org>
Wed, 1 Apr 2015 20:02:07 +0000 (13:02 -0700)
Formatting merge conflicts one byte at a time is going to be very
slow when the final OutputStream is a FileOutputStream and the JVM
is making system calls for each byte output.

When outputting a range of bytes from a byte[] the bol (beginning
of line) value only depends on the value of the last byte written.
Other bytes in the array can be passed directly to the lower stream
for more efficient output.

Change-Id: I3415f9a390ee215210a17bb5bf39164d197e1348

org.eclipse.jgit/src/org/eclipse/jgit/merge/EolAwareOutputStream.java

index 3fd2374f376fff69975e3f9b55382862f121c81a..1ddac18e5649eaafe35eb7cecb967e89431f75bd 100644 (file)
@@ -84,4 +84,12 @@ class EolAwareOutputStream extends OutputStream {
                out.write(val);
                bol = (val == '\n');
        }
+
+       @Override
+       public void write(byte[] buf, int pos, int cnt) throws IOException {
+               if (cnt > 0) {
+                       out.write(buf, pos, cnt);
+                       bol = (buf[pos + (cnt - 1)] == '\n');
+               }
+       }
 }