diff --git a/media/libnbaio/NBLog.cpp b/media/libnbaio/NBLog.cpp
index f00d86f..0adeb46 100644
--- a/media/libnbaio/NBLog.cpp
+++ b/media/libnbaio/NBLog.cpp
@@ -92,7 +92,6 @@
 #include <climits>
 #include <deque>
 #include <fstream>
-// #include <inttypes.h>
 #include <iostream>
 #include <math.h>
 #include <numeric>
@@ -941,22 +940,8 @@
     getAndProcessSnapshot(*snap);
 }
 
-// TODO: move this function to a different class than NBLog::Reader
-// writes summary of performance to the console
-void NBLog::MergeReader::dump(int fd, size_t indent)
-{
-    mFd = fd;
-    mIndent = indent;
-    String8 body, timestamp;
-    // TODO: check: is the FIXME below still a problem?
-    // FIXME: this is not thread safe
-    for (auto & threadReport : mThreadPerformanceAnalysis) {
-        threadReport.second.reportPerformance(&body);
-    }
-    if (!body.isEmpty()) {
-        ALOGD("body is not empty");
-        dumpLine(timestamp, body);
-    }
+void NBLog::MergeReader::dump(int fd, int indent) {
+    ReportPerformance::dump(fd, indent, mThreadPerformanceAnalysis);
 }
 
 // Writes a string to the console
diff --git a/media/libnbaio/PerformanceAnalysis.cpp b/media/libnbaio/PerformanceAnalysis.cpp
index 41184a6..37d6d9f 100644
--- a/media/libnbaio/PerformanceAnalysis.cpp
+++ b/media/libnbaio/PerformanceAnalysis.cpp
@@ -36,7 +36,6 @@
 #include <media/nbaio/NBLog.h>
 #include <media/nbaio/PerformanceAnalysis.h>
 #include <media/nbaio/ReportPerformance.h>
-// #include <utils/CallStack.h> // used to print callstack
 #include <utils/Log.h>
 #include <utils/String8.h>
 
@@ -242,7 +241,7 @@
 // TODO Make it return a std::string instead of modifying body --> is this still relevant?
 // TODO consider changing all ints to uint32_t or uint64_t
 // TODO: move this to ReportPerformance, probably make it a friend function of PerformanceAnalysis
-void PerformanceAnalysis::reportPerformance(String8 *body, int maxHeight) {
+void PerformanceAnalysis::reportPerformance(String8 *body, int maxHeight) const {
     if (mHists.empty()) {
         ALOGD("reportPerformance: mHists is empty");
         return;
@@ -346,6 +345,26 @@
     return;
 }
 
+//------------------------------------------------------------------------------
+
+// writes summary of performance into specified file descriptor
+void dump(int fd, int indent, const std::map<int, PerformanceAnalysis>
+          &threadPerformanceAnalysis) {
+    String8 body;
+    for (auto & thread : threadPerformanceAnalysis) {
+        thread.second.reportPerformance(&body);
+    }
+    if (!body.isEmpty()) {
+        dumpLine(fd, indent, body);
+        body.clear();
+    }
+}
+
+// Writes a string into specified file descriptor
+void dumpLine(int fd, int indent, const String8 &body) {
+    dprintf(fd, "%.*s%s \n", indent, "", body.string());
+}
+
 } // namespace ReportPerformance
 
 }   // namespace android
diff --git a/media/libnbaio/include/media/nbaio/NBLog.h b/media/libnbaio/include/media/nbaio/NBLog.h
index 1504f81..b4af58b 100644
--- a/media/libnbaio/include/media/nbaio/NBLog.h
+++ b/media/libnbaio/include/media/nbaio/NBLog.h
@@ -452,10 +452,11 @@
 
         // get snapshot of readers fifo buffer, effectively consuming the buffer
         std::unique_ptr<Snapshot> getSnapshot();
-        // print a summary of the performance to the console
+
         bool     isIMemory(const sp<IMemory>& iMemory) const;
 
     protected:
+        // print a summary of the performance to the console
         void    dumpLine(const String8& timestamp, String8& body);
         EntryIterator   handleFormat(const FormatEntry &fmtEntry,
                                      String8 *timestamp,
@@ -544,8 +545,7 @@
     public:
         MergeReader(const void *shared, size_t size, Merger &merger);
 
-        // TODO: consider moving dump to ReportPerformance
-        void dump(int fd, size_t indent = 0);
+        void dump(int fd, int indent = 0);
         // process a particular snapshot of the reader
         void getAndProcessSnapshot(Snapshot & snap);
         // call getSnapshot of the content of the reader's buffer and process the data
diff --git a/media/libnbaio/include/media/nbaio/PerformanceAnalysis.h b/media/libnbaio/include/media/nbaio/PerformanceAnalysis.h
index 0f47619..67bd3ac 100644
--- a/media/libnbaio/include/media/nbaio/PerformanceAnalysis.h
+++ b/media/libnbaio/include/media/nbaio/PerformanceAnalysis.h
@@ -73,7 +73,7 @@
     // input: series of short histograms. Generates a string of analysis of the buffer periods
     // TODO: WIP write more detailed analysis
     // FIXME: move this data visualization to a separate class. Model/view/controller
-    void reportPerformance(String8 *body, int maxHeight = 10);
+    void reportPerformance(String8 *body, int maxHeight = 10) const;
 
     // TODO: delete this. temp for testing
     void testFunction();
@@ -134,6 +134,11 @@
 
 };
 
+void dump(int fd, int indent, const std::map<int, PerformanceAnalysis>
+          &threadPerformanceAnalysis);
+
+void dumpLine(int fd, int indent, const String8 &body);
+
 } // namespace ReportPerformance
 
 }   // namespace android
