Loading libs/tracing_perfetto/include/tracing_perfetto.h +7 −4 Original line number Diff line number Diff line Loading @@ -14,8 +14,7 @@ * limitations under the License. */ #ifndef TRACING_PERFETTO_H #define TRACING_PERFETTO_H #pragma once #include <stdint.h> Loading @@ -29,6 +28,8 @@ void traceEnd(uint64_t category); void traceAsyncBegin(uint64_t category, const char* name, int32_t cookie); void traceFormatBegin(uint64_t category, const char* fmt, ...); void traceAsyncEnd(uint64_t category, const char* name, int32_t cookie); void traceAsyncBeginForTrack(uint64_t category, const char* name, Loading @@ -39,12 +40,14 @@ void traceAsyncEndForTrack(uint64_t category, const char* trackName, void traceInstant(uint64_t category, const char* name); void traceFormatInstant(uint64_t category, const char* fmt, ...); void traceInstantForTrack(uint64_t category, const char* trackName, const char* name); void traceCounter(uint64_t category, const char* name, int64_t value); void traceCounter32(uint64_t category, const char* name, int32_t value); bool isTagEnabled(uint64_t category); } // namespace tracing_perfetto #endif // TRACING_PERFETTO_H libs/tracing_perfetto/tracing_perfetto.cpp +61 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ #include "tracing_perfetto.h" #include <cutils/trace.h> #include <cstdarg> #include "perfetto/public/te_category_macros.h" #include "trace_categories.h" Loading @@ -39,6 +40,31 @@ void traceBegin(uint64_t category, const char* name) { } } void traceFormatBegin(uint64_t category, const char* fmt, ...) { struct PerfettoTeCategory* perfettoTeCategory = internal::toPerfettoCategory(category); const bool preferAtrace = internal::shouldPreferAtrace(perfettoTeCategory, category); const bool preferPerfetto = internal::isPerfettoCategoryEnabled(perfettoTeCategory); if (CC_LIKELY(!(preferAtrace || preferPerfetto))) { return; } const int BUFFER_SIZE = 256; va_list ap; char buf[BUFFER_SIZE]; va_start(ap, fmt); vsnprintf(buf, BUFFER_SIZE, fmt, ap); va_end(ap); if (preferAtrace) { atrace_begin(category, buf); } else if (preferPerfetto) { internal::perfettoTraceBegin(*perfettoTeCategory, buf); } } void traceEnd(uint64_t category) { struct PerfettoTeCategory* perfettoTeCategory = internal::toPerfettoCategory(category); Loading Loading @@ -107,6 +133,30 @@ void traceInstant(uint64_t category, const char* name) { } } void traceFormatInstant(uint64_t category, const char* fmt, ...) { struct PerfettoTeCategory* perfettoTeCategory = internal::toPerfettoCategory(category); const bool preferAtrace = internal::shouldPreferAtrace(perfettoTeCategory, category); const bool preferPerfetto = internal::isPerfettoCategoryEnabled(perfettoTeCategory); if (CC_LIKELY(!(preferAtrace || preferPerfetto))) { return; } const int BUFFER_SIZE = 256; va_list ap; char buf[BUFFER_SIZE]; va_start(ap, fmt); vsnprintf(buf, BUFFER_SIZE, fmt, ap); va_end(ap); if (preferAtrace) { atrace_instant(category, buf); } else if (preferPerfetto) { internal::perfettoTraceInstant(*perfettoTeCategory, buf); } } void traceInstantForTrack(uint64_t category, const char* trackName, const char* name) { struct PerfettoTeCategory* perfettoTeCategory = Loading @@ -130,10 +180,21 @@ void traceCounter(uint64_t category, const char* name, int64_t value) { } } void traceCounter32(uint64_t category, const char* name, int32_t value) { struct PerfettoTeCategory* perfettoTeCategory = internal::toPerfettoCategory(category); if (internal::shouldPreferAtrace(perfettoTeCategory, category)) { atrace_int(category, name, value); } else if (internal::isPerfettoCategoryEnabled(perfettoTeCategory)) { internal::perfettoTraceCounter(*perfettoTeCategory, name, static_cast<int64_t>(value)); } } bool isTagEnabled(uint64_t category) { struct PerfettoTeCategory* perfettoTeCategory = internal::toPerfettoCategory(category); return internal::isPerfettoCategoryEnabled(perfettoTeCategory) || atrace_is_tag_enabled(category); } } // namespace tracing_perfetto services/surfaceflinger/SurfaceFlinger.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -729,6 +729,7 @@ void SurfaceFlinger::bootFinished() { mBootFinished = true; FlagManager::getMutableInstance().markBootCompleted(); ::tracing_perfetto::registerWithPerfetto(); mInitBootPropsFuture.wait(); mRenderEnginePrimeCacheFuture.wait(); Loading services/surfaceflinger/TimeStats/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ cc_defaults { "libtimestats_atoms_proto", "libui", "libutils", "libtracing_perfetto", ], static_libs: [ Loading services/surfaceflinger/Tracing/tools/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ cc_binary { "libsurfaceflinger_mocks_defaults", "librenderengine_deps", "surfaceflinger_defaults", "libsurfaceflinger_common_deps", ], srcs: [ ":libsurfaceflinger_sources", Loading Loading
libs/tracing_perfetto/include/tracing_perfetto.h +7 −4 Original line number Diff line number Diff line Loading @@ -14,8 +14,7 @@ * limitations under the License. */ #ifndef TRACING_PERFETTO_H #define TRACING_PERFETTO_H #pragma once #include <stdint.h> Loading @@ -29,6 +28,8 @@ void traceEnd(uint64_t category); void traceAsyncBegin(uint64_t category, const char* name, int32_t cookie); void traceFormatBegin(uint64_t category, const char* fmt, ...); void traceAsyncEnd(uint64_t category, const char* name, int32_t cookie); void traceAsyncBeginForTrack(uint64_t category, const char* name, Loading @@ -39,12 +40,14 @@ void traceAsyncEndForTrack(uint64_t category, const char* trackName, void traceInstant(uint64_t category, const char* name); void traceFormatInstant(uint64_t category, const char* fmt, ...); void traceInstantForTrack(uint64_t category, const char* trackName, const char* name); void traceCounter(uint64_t category, const char* name, int64_t value); void traceCounter32(uint64_t category, const char* name, int32_t value); bool isTagEnabled(uint64_t category); } // namespace tracing_perfetto #endif // TRACING_PERFETTO_H
libs/tracing_perfetto/tracing_perfetto.cpp +61 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ #include "tracing_perfetto.h" #include <cutils/trace.h> #include <cstdarg> #include "perfetto/public/te_category_macros.h" #include "trace_categories.h" Loading @@ -39,6 +40,31 @@ void traceBegin(uint64_t category, const char* name) { } } void traceFormatBegin(uint64_t category, const char* fmt, ...) { struct PerfettoTeCategory* perfettoTeCategory = internal::toPerfettoCategory(category); const bool preferAtrace = internal::shouldPreferAtrace(perfettoTeCategory, category); const bool preferPerfetto = internal::isPerfettoCategoryEnabled(perfettoTeCategory); if (CC_LIKELY(!(preferAtrace || preferPerfetto))) { return; } const int BUFFER_SIZE = 256; va_list ap; char buf[BUFFER_SIZE]; va_start(ap, fmt); vsnprintf(buf, BUFFER_SIZE, fmt, ap); va_end(ap); if (preferAtrace) { atrace_begin(category, buf); } else if (preferPerfetto) { internal::perfettoTraceBegin(*perfettoTeCategory, buf); } } void traceEnd(uint64_t category) { struct PerfettoTeCategory* perfettoTeCategory = internal::toPerfettoCategory(category); Loading Loading @@ -107,6 +133,30 @@ void traceInstant(uint64_t category, const char* name) { } } void traceFormatInstant(uint64_t category, const char* fmt, ...) { struct PerfettoTeCategory* perfettoTeCategory = internal::toPerfettoCategory(category); const bool preferAtrace = internal::shouldPreferAtrace(perfettoTeCategory, category); const bool preferPerfetto = internal::isPerfettoCategoryEnabled(perfettoTeCategory); if (CC_LIKELY(!(preferAtrace || preferPerfetto))) { return; } const int BUFFER_SIZE = 256; va_list ap; char buf[BUFFER_SIZE]; va_start(ap, fmt); vsnprintf(buf, BUFFER_SIZE, fmt, ap); va_end(ap); if (preferAtrace) { atrace_instant(category, buf); } else if (preferPerfetto) { internal::perfettoTraceInstant(*perfettoTeCategory, buf); } } void traceInstantForTrack(uint64_t category, const char* trackName, const char* name) { struct PerfettoTeCategory* perfettoTeCategory = Loading @@ -130,10 +180,21 @@ void traceCounter(uint64_t category, const char* name, int64_t value) { } } void traceCounter32(uint64_t category, const char* name, int32_t value) { struct PerfettoTeCategory* perfettoTeCategory = internal::toPerfettoCategory(category); if (internal::shouldPreferAtrace(perfettoTeCategory, category)) { atrace_int(category, name, value); } else if (internal::isPerfettoCategoryEnabled(perfettoTeCategory)) { internal::perfettoTraceCounter(*perfettoTeCategory, name, static_cast<int64_t>(value)); } } bool isTagEnabled(uint64_t category) { struct PerfettoTeCategory* perfettoTeCategory = internal::toPerfettoCategory(category); return internal::isPerfettoCategoryEnabled(perfettoTeCategory) || atrace_is_tag_enabled(category); } } // namespace tracing_perfetto
services/surfaceflinger/SurfaceFlinger.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -729,6 +729,7 @@ void SurfaceFlinger::bootFinished() { mBootFinished = true; FlagManager::getMutableInstance().markBootCompleted(); ::tracing_perfetto::registerWithPerfetto(); mInitBootPropsFuture.wait(); mRenderEnginePrimeCacheFuture.wait(); Loading
services/surfaceflinger/TimeStats/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ cc_defaults { "libtimestats_atoms_proto", "libui", "libutils", "libtracing_perfetto", ], static_libs: [ Loading
services/surfaceflinger/Tracing/tools/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ cc_binary { "libsurfaceflinger_mocks_defaults", "librenderengine_deps", "surfaceflinger_defaults", "libsurfaceflinger_common_deps", ], srcs: [ ":libsurfaceflinger_sources", Loading