Loading cmds/atrace/atrace.cpp +20 −17 Original line number Original line Diff line number Diff line Loading @@ -31,6 +31,8 @@ #include <unistd.h> #include <unistd.h> #include <zlib.h> #include <zlib.h> #include <memory> #include <binder/IBinder.h> #include <binder/IBinder.h> #include <binder/IServiceManager.h> #include <binder/IServiceManager.h> #include <binder/Parcel.h> #include <binder/Parcel.h> Loading Loading @@ -842,30 +844,34 @@ static void dumpTrace(int outFd) if (g_compress) { if (g_compress) { z_stream zs; z_stream zs; uint8_t *in, *out; int result, flush; memset(&zs, 0, sizeof(zs)); memset(&zs, 0, sizeof(zs)); result = deflateInit(&zs, Z_DEFAULT_COMPRESSION); int result = deflateInit(&zs, Z_DEFAULT_COMPRESSION); if (result != Z_OK) { if (result != Z_OK) { fprintf(stderr, "error initializing zlib: %d\n", result); fprintf(stderr, "error initializing zlib: %d\n", result); close(traceFD); close(traceFD); return; return; } } const size_t bufSize = 64*1024; constexpr size_t bufSize = 64*1024; in = (uint8_t*)malloc(bufSize); std::unique_ptr<uint8_t> in(new uint8_t[bufSize]); out = (uint8_t*)malloc(bufSize); std::unique_ptr<uint8_t> out(new uint8_t[bufSize]); flush = Z_NO_FLUSH; if (!in || !out) { fprintf(stderr, "couldn't allocate buffers\n"); close(traceFD); return; } int flush = Z_NO_FLUSH; zs.next_out = out; zs.next_out = reinterpret_cast<Bytef*>(out.get()); zs.avail_out = bufSize; zs.avail_out = bufSize; do { do { if (zs.avail_in == 0) { if (zs.avail_in == 0) { // More input is needed. // More input is needed. result = read(traceFD, in, bufSize); result = read(traceFD, in.get(), bufSize); if (result < 0) { if (result < 0) { fprintf(stderr, "error reading trace: %s (%d)\n", fprintf(stderr, "error reading trace: %s (%d)\n", strerror(errno), errno); strerror(errno), errno); Loading @@ -874,14 +880,14 @@ static void dumpTrace(int outFd) } else if (result == 0) { } else if (result == 0) { flush = Z_FINISH; flush = Z_FINISH; } else { } else { zs.next_in = in; zs.next_in = reinterpret_cast<Bytef*>(in.get()); zs.avail_in = result; zs.avail_in = result; } } } } if (zs.avail_out == 0) { if (zs.avail_out == 0) { // Need to write the output. // Need to write the output. result = write(outFd, out, bufSize); result = write(outFd, out.get(), bufSize); if ((size_t)result < bufSize) { if ((size_t)result < bufSize) { fprintf(stderr, "error writing deflated trace: %s (%d)\n", fprintf(stderr, "error writing deflated trace: %s (%d)\n", strerror(errno), errno); strerror(errno), errno); Loading @@ -889,7 +895,7 @@ static void dumpTrace(int outFd) zs.avail_out = bufSize; // skip the final write zs.avail_out = bufSize; // skip the final write break; break; } } zs.next_out = out; zs.next_out = reinterpret_cast<Bytef*>(out.get()); zs.avail_out = bufSize; zs.avail_out = bufSize; } } Loading @@ -901,7 +907,7 @@ static void dumpTrace(int outFd) if (zs.avail_out < bufSize) { if (zs.avail_out < bufSize) { size_t bytes = bufSize - zs.avail_out; size_t bytes = bufSize - zs.avail_out; result = write(outFd, out, bytes); result = write(outFd, out.get(), bytes); if ((size_t)result < bytes) { if ((size_t)result < bytes) { fprintf(stderr, "error writing deflated trace: %s (%d)\n", fprintf(stderr, "error writing deflated trace: %s (%d)\n", strerror(errno), errno); strerror(errno), errno); Loading @@ -912,9 +918,6 @@ static void dumpTrace(int outFd) if (result != Z_OK) { if (result != Z_OK) { fprintf(stderr, "error cleaning up zlib: %d\n", result); fprintf(stderr, "error cleaning up zlib: %d\n", result); } } free(in); free(out); } else { } else { ssize_t sent = 0; ssize_t sent = 0; while ((sent = sendfile(outFd, traceFD, NULL, 64*1024*1024)) > 0); while ((sent = sendfile(outFd, traceFD, NULL, 64*1024*1024)) > 0); Loading Loading
cmds/atrace/atrace.cpp +20 −17 Original line number Original line Diff line number Diff line Loading @@ -31,6 +31,8 @@ #include <unistd.h> #include <unistd.h> #include <zlib.h> #include <zlib.h> #include <memory> #include <binder/IBinder.h> #include <binder/IBinder.h> #include <binder/IServiceManager.h> #include <binder/IServiceManager.h> #include <binder/Parcel.h> #include <binder/Parcel.h> Loading Loading @@ -842,30 +844,34 @@ static void dumpTrace(int outFd) if (g_compress) { if (g_compress) { z_stream zs; z_stream zs; uint8_t *in, *out; int result, flush; memset(&zs, 0, sizeof(zs)); memset(&zs, 0, sizeof(zs)); result = deflateInit(&zs, Z_DEFAULT_COMPRESSION); int result = deflateInit(&zs, Z_DEFAULT_COMPRESSION); if (result != Z_OK) { if (result != Z_OK) { fprintf(stderr, "error initializing zlib: %d\n", result); fprintf(stderr, "error initializing zlib: %d\n", result); close(traceFD); close(traceFD); return; return; } } const size_t bufSize = 64*1024; constexpr size_t bufSize = 64*1024; in = (uint8_t*)malloc(bufSize); std::unique_ptr<uint8_t> in(new uint8_t[bufSize]); out = (uint8_t*)malloc(bufSize); std::unique_ptr<uint8_t> out(new uint8_t[bufSize]); flush = Z_NO_FLUSH; if (!in || !out) { fprintf(stderr, "couldn't allocate buffers\n"); close(traceFD); return; } int flush = Z_NO_FLUSH; zs.next_out = out; zs.next_out = reinterpret_cast<Bytef*>(out.get()); zs.avail_out = bufSize; zs.avail_out = bufSize; do { do { if (zs.avail_in == 0) { if (zs.avail_in == 0) { // More input is needed. // More input is needed. result = read(traceFD, in, bufSize); result = read(traceFD, in.get(), bufSize); if (result < 0) { if (result < 0) { fprintf(stderr, "error reading trace: %s (%d)\n", fprintf(stderr, "error reading trace: %s (%d)\n", strerror(errno), errno); strerror(errno), errno); Loading @@ -874,14 +880,14 @@ static void dumpTrace(int outFd) } else if (result == 0) { } else if (result == 0) { flush = Z_FINISH; flush = Z_FINISH; } else { } else { zs.next_in = in; zs.next_in = reinterpret_cast<Bytef*>(in.get()); zs.avail_in = result; zs.avail_in = result; } } } } if (zs.avail_out == 0) { if (zs.avail_out == 0) { // Need to write the output. // Need to write the output. result = write(outFd, out, bufSize); result = write(outFd, out.get(), bufSize); if ((size_t)result < bufSize) { if ((size_t)result < bufSize) { fprintf(stderr, "error writing deflated trace: %s (%d)\n", fprintf(stderr, "error writing deflated trace: %s (%d)\n", strerror(errno), errno); strerror(errno), errno); Loading @@ -889,7 +895,7 @@ static void dumpTrace(int outFd) zs.avail_out = bufSize; // skip the final write zs.avail_out = bufSize; // skip the final write break; break; } } zs.next_out = out; zs.next_out = reinterpret_cast<Bytef*>(out.get()); zs.avail_out = bufSize; zs.avail_out = bufSize; } } Loading @@ -901,7 +907,7 @@ static void dumpTrace(int outFd) if (zs.avail_out < bufSize) { if (zs.avail_out < bufSize) { size_t bytes = bufSize - zs.avail_out; size_t bytes = bufSize - zs.avail_out; result = write(outFd, out, bytes); result = write(outFd, out.get(), bytes); if ((size_t)result < bytes) { if ((size_t)result < bytes) { fprintf(stderr, "error writing deflated trace: %s (%d)\n", fprintf(stderr, "error writing deflated trace: %s (%d)\n", strerror(errno), errno); strerror(errno), errno); Loading @@ -912,9 +918,6 @@ static void dumpTrace(int outFd) if (result != Z_OK) { if (result != Z_OK) { fprintf(stderr, "error cleaning up zlib: %d\n", result); fprintf(stderr, "error cleaning up zlib: %d\n", result); } } free(in); free(out); } else { } else { ssize_t sent = 0; ssize_t sent = 0; while ((sent = sendfile(outFd, traceFD, NULL, 64*1024*1024)) > 0); while ((sent = sendfile(outFd, traceFD, NULL, 64*1024*1024)) > 0); Loading