Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 23069b31 authored by Zimuzo Ezeozue's avatar Zimuzo Ezeozue Committed by Android (Google) Code Review
Browse files

Merge "Support starting and stopping perfetto tracing sessions" into main

parents cd1f3a5d 42d55e6d
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -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
@@ -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.
+4 −33
Original line number Diff line number Diff line
@@ -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",
@@ -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"],
}
+41 −0
Original line number Diff line number Diff line
@@ -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);