Ensure FrameTracer is only initialized once.
Bug: 140307339
Test: adb shell service call SurfaceFlinger 1 (This triggers bootFinished)
Change-Id: I4a9c5587288d7a67d955e91bf3185fc2f2ccfd77
diff --git a/services/surfaceflinger/FrameTracer/FrameTracer.cpp b/services/surfaceflinger/FrameTracer/FrameTracer.cpp
index 7cbb8d8..006dbfe 100644
--- a/services/surfaceflinger/FrameTracer/FrameTracer.cpp
+++ b/services/surfaceflinger/FrameTracer/FrameTracer.cpp
@@ -23,16 +23,19 @@
#include <android-base/stringprintf.h>
#include <algorithm>
+#include <mutex>
PERFETTO_DEFINE_DATA_SOURCE_STATIC_MEMBERS(android::FrameTracer::FrameTracerDataSource);
namespace android {
void FrameTracer::initialize() {
- perfetto::TracingInitArgs args;
- args.backends = perfetto::kSystemBackend;
- perfetto::Tracing::Initialize(args);
- registerDataSource();
+ std::call_once(mInitializationFlag, [this]() {
+ perfetto::TracingInitArgs args;
+ args.backends = perfetto::kSystemBackend;
+ perfetto::Tracing::Initialize(args);
+ registerDataSource();
+ });
}
void FrameTracer::registerDataSource() {
diff --git a/services/surfaceflinger/FrameTracer/FrameTracer.h b/services/surfaceflinger/FrameTracer/FrameTracer.h
index d34ad81..d4dfab9 100644
--- a/services/surfaceflinger/FrameTracer/FrameTracer.h
+++ b/services/surfaceflinger/FrameTracer/FrameTracer.h
@@ -100,6 +100,7 @@
std::mutex mTraceMutex;
std::unordered_map<int32_t, TraceRecord> mTraceTracker;
+ std::once_flag mInitializationFlag;
};
} // namespace android