diff options
author | 2017-11-13 11:32:39 -0800 | |
---|---|---|
committer | 2017-11-13 11:32:39 -0800 | |
commit | 47f5c3a234c5c201ef640489af3ff25b5eec6652 (patch) | |
tree | 95308e88c2e4c19dd16030a4afe07603112ed8bc | |
parent | ae5eb83a32a2005bd2c872bdf7b0621190ddb062 (diff) |
Fix leak of FILE* in dumping
Avoid fdopen as fclose, which frees the FILE*, will close
the FD which we don't want. Just normalize on dprintf instead,
and we can add buffering if it turns out to matter at some point
Test: ran 'dumpsys gfxinfo framestats' in a loop while observing PSS
Change-Id: I7808753641aa1055cfdf570c3e017017f11f1dee
-rw-r--r-- | libs/hwui/FrameInfoVisualizer.cpp | 7 | ||||
-rw-r--r-- | libs/hwui/JankTracker.cpp | 14 | ||||
-rw-r--r-- | libs/hwui/renderthread/RenderThread.cpp | 6 |
3 files changed, 10 insertions, 17 deletions
diff --git a/libs/hwui/FrameInfoVisualizer.cpp b/libs/hwui/FrameInfoVisualizer.cpp index 91756e79ad53..5aea04d94cbe 100644 --- a/libs/hwui/FrameInfoVisualizer.cpp +++ b/libs/hwui/FrameInfoVisualizer.cpp @@ -245,22 +245,19 @@ void FrameInfoVisualizer::dumpData(int fd) { // last call to dumpData(). In other words if there's a dumpData(), draw frame, // dumpData(), the last dumpData() should only log 1 frame. - FILE* file = fdopen(fd, "a"); - fprintf(file, "\n\tDraw\tPrepare\tProcess\tExecute\n"); + dprintf(fd, "\n\tDraw\tPrepare\tProcess\tExecute\n"); for (size_t i = 0; i < mFrameSource.size(); i++) { if (mFrameSource[i][FrameInfoIndex::IntendedVsync] <= mLastFrameLogged) { continue; } mLastFrameLogged = mFrameSource[i][FrameInfoIndex::IntendedVsync]; - fprintf(file, "\t%3.2f\t%3.2f\t%3.2f\t%3.2f\n", + dprintf(fd, "\t%3.2f\t%3.2f\t%3.2f\t%3.2f\n", durationMS(i, FrameInfoIndex::IntendedVsync, FrameInfoIndex::SyncStart), durationMS(i, FrameInfoIndex::SyncStart, FrameInfoIndex::IssueDrawCommandsStart), durationMS(i, FrameInfoIndex::IssueDrawCommandsStart, FrameInfoIndex::SwapBuffers), durationMS(i, FrameInfoIndex::SwapBuffers, FrameInfoIndex::FrameCompleted)); } - - fflush(file); } } /* namespace uirenderer */ diff --git a/libs/hwui/JankTracker.cpp b/libs/hwui/JankTracker.cpp index 5b676931a620..afdd339ba0a2 100644 --- a/libs/hwui/JankTracker.cpp +++ b/libs/hwui/JankTracker.cpp @@ -174,24 +174,22 @@ void JankTracker::dumpData(int fd, const ProfileDataDescription* description, } void JankTracker::dumpFrames(int fd) { - FILE* file = fdopen(fd, "a"); - fprintf(file, "\n\n---PROFILEDATA---\n"); + dprintf(fd, "\n\n---PROFILEDATA---\n"); for (size_t i = 0; i < static_cast<size_t>(FrameInfoIndex::NumIndexes); i++) { - fprintf(file, "%s", FrameInfoNames[i].c_str()); - fprintf(file, ","); + dprintf(fd, "%s", FrameInfoNames[i].c_str()); + dprintf(fd, ","); } for (size_t i = 0; i < mFrames.size(); i++) { FrameInfo& frame = mFrames[i]; if (frame[FrameInfoIndex::SyncStart] == 0) { continue; } - fprintf(file, "\n"); + dprintf(fd, "\n"); for (int i = 0; i < static_cast<int>(FrameInfoIndex::NumIndexes); i++) { - fprintf(file, "%" PRId64 ",", frame[i]); + dprintf(fd, "%" PRId64 ",", frame[i]); } } - fprintf(file, "\n---PROFILEDATA---\n\n"); - fflush(file); + dprintf(fd, "\n---PROFILEDATA---\n\n"); } void JankTracker::reset() { diff --git a/libs/hwui/renderthread/RenderThread.cpp b/libs/hwui/renderthread/RenderThread.cpp index 574bb0212385..3e2eeee2bcf5 100644 --- a/libs/hwui/renderthread/RenderThread.cpp +++ b/libs/hwui/renderthread/RenderThread.cpp @@ -141,10 +141,8 @@ void RenderThread::dumpGraphicsMemory(int fd) { break; } - FILE* file = fdopen(fd, "a"); - fprintf(file, "\n%s\n", cachesOutput.string()); - fprintf(file, "\nPipeline=%s\n", pipeline.string()); - fflush(file); + dprintf(fd, "\n%s\n", cachesOutput.string()); + dprintf(fd, "\nPipeline=%s\n", pipeline.string()); } Readback& RenderThread::readback() { |