Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 08929cc3 authored by Elliott Hughes's avatar Elliott Hughes
Browse files

Avoid zero-initializing our most-used buffers.

The StringPrintf one is heavily used and brings the overhead versus
fmtlib down to 1.5x rather than 2x. I don't have a convenient benchmark
for the other two.

Test: libbase tests & benchmarks
Bug: http://b/155324241
Change-Id: I9e704a360846d5520c53f668e7c315b0c0ea55f8
(cherry picked from commit 8c253d4d)
parent 053ade43
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -225,7 +225,7 @@ bool ReadFdToString(borrowed_fd fd, std::string* content) {
    content->reserve(sb.st_size);
  }

  char buf[BUFSIZ];
  char buf[BUFSIZ] __attribute__((__uninitialized__));
  ssize_t n;
  while ((n = TEMP_FAILURE_RETRY(read(fd.get(), &buf[0], sizeof(buf)))) > 0) {
    content->append(buf, n);
+1 −1
Original line number Diff line number Diff line
@@ -260,7 +260,7 @@ static void KernelLogLine(const char* msg, int length, android::base::LogSeverit
  // The kernel's printk buffer is only 1024 bytes.
  // TODO: should we automatically break up long lines into multiple lines?
  // Or we could log but with something like "..." at the end?
  char buf[1024];
  char buf[1024] __attribute__((__uninitialized__));
  size_t size = snprintf(buf, sizeof(buf), "<%d>%s: %.*s\n", level, tag, length, msg);
  if (size > sizeof(buf)) {
    size = snprintf(buf, sizeof(buf), "<%d>%s: %zu-byte message too long for printk\n",
+1 −1
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ namespace base {

void StringAppendV(std::string* dst, const char* format, va_list ap) {
  // First try with a small fixed size buffer
  char space[1024];
  char space[1024] __attribute__((__uninitialized__));

  // It's possible for methods that use a va_list to invalidate
  // the data in it upon use.  The fix is to make a copy