--- a/hotspot/src/share/vm/utilities/ostream.cpp Thu Jan 28 02:30:57 2016 +0100
+++ b/hotspot/src/share/vm/utilities/ostream.cpp Wed Jan 27 11:51:56 2016 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -44,6 +44,8 @@
_newlines = 0;
_precount = 0;
_indentation = 0;
+ _scratch = NULL;
+ _scratch_len = 0;
}
outputStream::outputStream(int width, bool has_time_stamps) {
@@ -52,6 +54,8 @@
_newlines = 0;
_precount = 0;
_indentation = 0;
+ _scratch = NULL;
+ _scratch_len = 0;
if (has_time_stamps) _stamp.update();
}
@@ -119,38 +123,47 @@
return result;
}
+void outputStream::do_vsnprintf_and_write_with_automatic_buffer(const char* format, va_list ap, bool add_cr) {
+ char buffer[O_BUFLEN];
+ size_t len;
+ const char* str = do_vsnprintf(buffer, sizeof(buffer), format, ap, add_cr, len);
+ write(str, len);
+}
+
+void outputStream::do_vsnprintf_and_write_with_scratch_buffer(const char* format, va_list ap, bool add_cr) {
+ size_t len;
+ const char* str = do_vsnprintf(_scratch, _scratch_len, format, ap, add_cr, len);
+ write(str, len);
+}
+
+void outputStream::do_vsnprintf_and_write(const char* format, va_list ap, bool add_cr) {
+ if (_scratch) {
+ do_vsnprintf_and_write_with_scratch_buffer(format, ap, add_cr);
+ } else {
+ do_vsnprintf_and_write_with_automatic_buffer(format, ap, add_cr);
+ }
+}
+
void outputStream::print(const char* format, ...) {
- char buffer[O_BUFLEN];
va_list ap;
va_start(ap, format);
- size_t len;
- const char* str = do_vsnprintf(buffer, O_BUFLEN, format, ap, false, len);
- write(str, len);
+ do_vsnprintf_and_write(format, ap, false);
va_end(ap);
}
void outputStream::print_cr(const char* format, ...) {
- char buffer[O_BUFLEN];
va_list ap;
va_start(ap, format);
- size_t len;
- const char* str = do_vsnprintf(buffer, O_BUFLEN, format, ap, true, len);
- write(str, len);
+ do_vsnprintf_and_write(format, ap, true);
va_end(ap);
}
void outputStream::vprint(const char *format, va_list argptr) {
- char buffer[O_BUFLEN];
- size_t len;
- const char* str = do_vsnprintf(buffer, O_BUFLEN, format, argptr, false, len);
- write(str, len);
+ do_vsnprintf_and_write(format, argptr, false);
}
void outputStream::vprint_cr(const char* format, va_list argptr) {
- char buffer[O_BUFLEN];
- size_t len;
- const char* str = do_vsnprintf(buffer, O_BUFLEN, format, argptr, true, len);
- write(str, len);
+ do_vsnprintf_and_write(format, argptr, true);
}
void outputStream::fill_to(int col) {
@@ -958,53 +971,6 @@
}
}
-staticBufferStream::staticBufferStream(char* buffer, size_t buflen,
- outputStream *outer_stream) {
- _buffer = buffer;
- _buflen = buflen;
- _outer_stream = outer_stream;
- // compile task prints time stamp relative to VM start
- _stamp.update_to(1);
-}
-
-void staticBufferStream::write(const char* c, size_t len) {
- _outer_stream->print_raw(c, (int)len);
-}
-
-void staticBufferStream::flush() {
- _outer_stream->flush();
-}
-
-void staticBufferStream::print(const char* format, ...) {
- va_list ap;
- va_start(ap, format);
- size_t len;
- const char* str = do_vsnprintf(_buffer, _buflen, format, ap, false, len);
- write(str, len);
- va_end(ap);
-}
-
-void staticBufferStream::print_cr(const char* format, ...) {
- va_list ap;
- va_start(ap, format);
- size_t len;
- const char* str = do_vsnprintf(_buffer, _buflen, format, ap, true, len);
- write(str, len);
- va_end(ap);
-}
-
-void staticBufferStream::vprint(const char *format, va_list argptr) {
- size_t len;
- const char* str = do_vsnprintf(_buffer, _buflen, format, argptr, false, len);
- write(str, len);
-}
-
-void staticBufferStream::vprint_cr(const char* format, va_list argptr) {
- size_t len;
- const char* str = do_vsnprintf(_buffer, _buflen, format, argptr, true, len);
- write(str, len);
-}
-
bufferedStream::bufferedStream(size_t initial_size, size_t bufmax) : outputStream() {
buffer_length = initial_size;
buffer = NEW_C_HEAP_ARRAY(char, buffer_length, mtInternal);