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() {