blob: 787ecff3ffce5b8b619fc120e22ac772ce82b679 [file]
/*
* Copyright 2026 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkAndroidFrameworkTraceUtils_DEFINED
#define SkAndroidFrameworkTraceUtils_DEFINED
#include <atomic>
#include "include/core/SkTypes.h"
class SkAndroidFrameworkTraceUtils {
public:
SkAndroidFrameworkTraceUtils() = delete;
// Controls whether broad tracing is enabled.
//
// Some key trace events may still be recorded when this is disabled, if a relevant tracing
// session is active.
//
// ATrace is used by default, but can be replaced with Perfetto by calling
// SetUsePerfettoTrackEvents(true)
static void SetEnableDetailedTracing(bool enableDetailedTracing) {
gEnableDetailedTracing.store(enableDetailedTracing, std::memory_order_release);
}
// Deprecated: use SetEnableDetailedTracing
static inline void setEnableTracing(bool enableAndroidTracing) {
SetEnableDetailedTracing(enableAndroidTracing);
}
// Controls whether tracing uses Perfetto instead of ATrace.
//
// Returns true if Skia was built with Perfetto, false otherwise.
static bool SetUsePerfettoTrackEvents(bool usePerfettoTrackEvents) {
#ifdef SK_ANDROID_FRAMEWORK_USE_PERFETTO
// Ensure Perfetto is initialized if it wasn't already the preferred tracing backend.
if (usePerfettoTrackEvents && !gUsePerfettoTrackEvents.load(std::memory_order_acquire)) {
InitPerfetto();
}
gUsePerfettoTrackEvents.store(usePerfettoTrackEvents, std::memory_order_release);
return true;
#else // !SK_ANDROID_FRAMEWORK_USE_PERFETTO
return false;
#endif // SK_ANDROID_FRAMEWORK_USE_PERFETTO
}
// Deprecated: use SetUsePerfettoTrackEvents
static inline bool setUsePerfettoTrackEvents(bool usePerfettoTrackEvents) {
return SetUsePerfettoTrackEvents(usePerfettoTrackEvents);
}
static bool GetEnableDetailedTracing() {
return gEnableDetailedTracing.load(std::memory_order_acquire);
}
static bool GetUsePerfettoTrackEvents() {
return gUsePerfettoTrackEvents.load(std::memory_order_acquire);
}
private:
static std::atomic<bool> gEnableDetailedTracing;
static std::atomic<bool> gUsePerfettoTrackEvents;
#ifdef SK_ANDROID_FRAMEWORK_USE_PERFETTO
// Initializes tracing systems, and establishes a connection to the 'traced' daemon.
//
// Can be called multiple times.
static void InitPerfetto();
#endif // SK_ANDROID_FRAMEWORK_USE_PERFETTO
};
// TODO(nscobie): remove this after migrating clients
using SkAndroidFrameworkTraceUtil = SkAndroidFrameworkTraceUtils;
#endif // SkAndroidFrameworkTraceUtils_DEFINED