Loading libs/tracing_perfetto/include/tracing_sdk.h +20 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,10 @@ #include "perfetto/public/te_macros.h" #include "perfetto/public/track_event.h" #include "perfetto/public/abi/pb_decoder_abi.h" #include "perfetto/public/pb_utils.h" #include "perfetto/public/tracing_session.h" /** * The objects declared here are intended to be managed by Java. * This means the Java Garbage Collector is responsible for freeing the Loading Loading @@ -452,6 +456,22 @@ class Proto { std::vector<PerfettoTeHlProtoField*> fields_; }; class Session { public: Session(bool is_backend_in_process, void* buf, size_t len); ~Session(); Session(const Session&) = delete; Session& operator=(const Session&) = delete; bool FlushBlocking(uint32_t timeout_ms); void StopBlocking(); std::vector<uint8_t> ReadBlocking(); static void delete_session(Session* session); struct PerfettoTracingSessionImpl* session_ = nullptr; }; /** * @brief Activates a trigger. * @param name The name of the trigger. Loading libs/tracing_perfetto/tests/Android.bp +4 −33 Original line number Diff line number Diff line Loading @@ -21,44 +21,12 @@ package { default_applicable_licenses: ["frameworks_native_license"], } cc_library_static { name: "libtracing_perfetto_test_utils", export_include_dirs: [ "include", ], static_libs: [ "libflagtest", "libgmock", "perfetto_trace_protos", ], cflags: [ "-Wall", "-Werror", "-Wno-enum-compare", "-Wno-unused-function", ], srcs: [ "utils.cpp", ], shared_libs: [ "libperfetto_c", "liblog", "libprotobuf-cpp-lite", ], export_shared_lib_headers: [ "libperfetto_c", ], } cc_test { name: "libtracing_perfetto_tests", static_libs: [ "libflagtest", "libgmock", "perfetto_trace_protos", "libtracing_perfetto_test_utils", ], cflags: [ "-Wall", Loading @@ -68,12 +36,15 @@ cc_test { "android.os.flags-aconfig-cc-host", "libbase", "libperfetto_c", "liblog", "libprotobuf-cpp-lite", "libtracing_perfetto", ], srcs: [ "tracing_perfetto_test.cpp", "utils.cpp", ], local_include_dirs: [ "include", ], test_suites: ["device-tests"], } libs/tracing_perfetto/tracing_sdk.cpp +41 −0 Original line number Diff line number Diff line Loading @@ -254,6 +254,47 @@ const PerfettoTeHlProtoFieldNested* ProtoFieldNested::get() const { return &field_; } Session::Session(bool is_backend_in_process, void* buf, size_t len) { session_ = PerfettoTracingSessionCreate(is_backend_in_process ? PERFETTO_BACKEND_IN_PROCESS : PERFETTO_BACKEND_SYSTEM); PerfettoTracingSessionSetup(session_, buf, len); PerfettoTracingSessionStartBlocking(session_); } Session::~Session() { PerfettoTracingSessionStopBlocking(session_); PerfettoTracingSessionDestroy(session_); } bool Session::FlushBlocking(uint32_t timeout_ms) { return PerfettoTracingSessionFlushBlocking(session_, timeout_ms); } void Session::StopBlocking() { PerfettoTracingSessionStopBlocking(session_); } std::vector<uint8_t> Session::ReadBlocking() { std::vector<uint8_t> data; PerfettoTracingSessionReadTraceBlocking( session_, [](struct PerfettoTracingSessionImpl*, const void* trace_data, size_t size, bool, void* user_arg) { auto& dst = *static_cast<std::vector<uint8_t>*>(user_arg); auto* src = static_cast<const uint8_t*>(trace_data); dst.insert(dst.end(), src, src + size); }, &data); return data; } void Session::delete_session(Session* ptr) { delete ptr; } void activate_trigger(const char* name, uint32_t ttl_ms) { const char* names[] = {name, nullptr}; PerfettoProducerActivateTriggers(names, ttl_ms); Loading Loading
libs/tracing_perfetto/include/tracing_sdk.h +20 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,10 @@ #include "perfetto/public/te_macros.h" #include "perfetto/public/track_event.h" #include "perfetto/public/abi/pb_decoder_abi.h" #include "perfetto/public/pb_utils.h" #include "perfetto/public/tracing_session.h" /** * The objects declared here are intended to be managed by Java. * This means the Java Garbage Collector is responsible for freeing the Loading Loading @@ -452,6 +456,22 @@ class Proto { std::vector<PerfettoTeHlProtoField*> fields_; }; class Session { public: Session(bool is_backend_in_process, void* buf, size_t len); ~Session(); Session(const Session&) = delete; Session& operator=(const Session&) = delete; bool FlushBlocking(uint32_t timeout_ms); void StopBlocking(); std::vector<uint8_t> ReadBlocking(); static void delete_session(Session* session); struct PerfettoTracingSessionImpl* session_ = nullptr; }; /** * @brief Activates a trigger. * @param name The name of the trigger. Loading
libs/tracing_perfetto/tests/Android.bp +4 −33 Original line number Diff line number Diff line Loading @@ -21,44 +21,12 @@ package { default_applicable_licenses: ["frameworks_native_license"], } cc_library_static { name: "libtracing_perfetto_test_utils", export_include_dirs: [ "include", ], static_libs: [ "libflagtest", "libgmock", "perfetto_trace_protos", ], cflags: [ "-Wall", "-Werror", "-Wno-enum-compare", "-Wno-unused-function", ], srcs: [ "utils.cpp", ], shared_libs: [ "libperfetto_c", "liblog", "libprotobuf-cpp-lite", ], export_shared_lib_headers: [ "libperfetto_c", ], } cc_test { name: "libtracing_perfetto_tests", static_libs: [ "libflagtest", "libgmock", "perfetto_trace_protos", "libtracing_perfetto_test_utils", ], cflags: [ "-Wall", Loading @@ -68,12 +36,15 @@ cc_test { "android.os.flags-aconfig-cc-host", "libbase", "libperfetto_c", "liblog", "libprotobuf-cpp-lite", "libtracing_perfetto", ], srcs: [ "tracing_perfetto_test.cpp", "utils.cpp", ], local_include_dirs: [ "include", ], test_suites: ["device-tests"], }
libs/tracing_perfetto/tracing_sdk.cpp +41 −0 Original line number Diff line number Diff line Loading @@ -254,6 +254,47 @@ const PerfettoTeHlProtoFieldNested* ProtoFieldNested::get() const { return &field_; } Session::Session(bool is_backend_in_process, void* buf, size_t len) { session_ = PerfettoTracingSessionCreate(is_backend_in_process ? PERFETTO_BACKEND_IN_PROCESS : PERFETTO_BACKEND_SYSTEM); PerfettoTracingSessionSetup(session_, buf, len); PerfettoTracingSessionStartBlocking(session_); } Session::~Session() { PerfettoTracingSessionStopBlocking(session_); PerfettoTracingSessionDestroy(session_); } bool Session::FlushBlocking(uint32_t timeout_ms) { return PerfettoTracingSessionFlushBlocking(session_, timeout_ms); } void Session::StopBlocking() { PerfettoTracingSessionStopBlocking(session_); } std::vector<uint8_t> Session::ReadBlocking() { std::vector<uint8_t> data; PerfettoTracingSessionReadTraceBlocking( session_, [](struct PerfettoTracingSessionImpl*, const void* trace_data, size_t size, bool, void* user_arg) { auto& dst = *static_cast<std::vector<uint8_t>*>(user_arg); auto* src = static_cast<const uint8_t*>(trace_data); dst.insert(dst.end(), src, src + size); }, &data); return data; } void Session::delete_session(Session* ptr) { delete ptr; } void activate_trigger(const char* name, uint32_t ttl_ms) { const char* names[] = {name, nullptr}; PerfettoProducerActivateTriggers(names, ttl_ms); Loading