[layertracegenerator] stream layer trace to file
Write the generated layer trace entry by entry
so we don't hold the entire unserialized layer trace
in memory.
Fixes: 272158947
Test: presubmit
Test: open streamed trace in winscope
Test: cat /proc/`pidof layertracegenerator`/status
old
VmHWM: 959496 kB
new
VmHWM: 21416 kB
Change-Id: I4bf0cd8fe98d1e2a44fb6b7c85c4e06e586a52ed
diff --git a/services/surfaceflinger/Tracing/RingBuffer.h b/services/surfaceflinger/Tracing/RingBuffer.h
index 7e38c55..b41c65b 100644
--- a/services/surfaceflinger/Tracing/RingBuffer.h
+++ b/services/surfaceflinger/Tracing/RingBuffer.h
@@ -24,6 +24,7 @@
#include <utils/Timers.h>
#include <utils/Trace.h>
#include <chrono>
+#include <fstream>
#include <queue>
namespace android {
@@ -73,6 +74,19 @@
return NO_ERROR;
}
+ status_t appendToStream(FileProto& fileProto, std::ofstream& out) {
+ ATRACE_CALL();
+ writeToProto(fileProto);
+ std::string output;
+ if (!fileProto.SerializeToString(&output)) {
+ ALOGE("Could not serialize proto.");
+ return UNKNOWN_ERROR;
+ }
+
+ out << output;
+ return NO_ERROR;
+ }
+
std::vector<std::string> emplace(std::string&& serializedProto) {
std::vector<std::string> replacedEntries;
size_t protoSize = static_cast<size_t>(serializedProto.size());