Skip to content

Commit 23069b3

Browse files
zezeozueAndroid (Google) Code Review
authored andcommitted
Merge "Support starting and stopping perfetto tracing sessions" into main
2 parents cd1f3a5 + 42d55e6 commit 23069b3

3 files changed

Lines changed: 65 additions & 33 deletions

File tree

libs/tracing_perfetto/include/tracing_sdk.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@
2727
#include "perfetto/public/te_macros.h"
2828
#include "perfetto/public/track_event.h"
2929

30+
#include "perfetto/public/abi/pb_decoder_abi.h"
31+
#include "perfetto/public/pb_utils.h"
32+
#include "perfetto/public/tracing_session.h"
33+
3034
/**
3135
* The objects declared here are intended to be managed by Java.
3236
* This means the Java Garbage Collector is responsible for freeing the
@@ -452,6 +456,22 @@ class Proto {
452456
std::vector<PerfettoTeHlProtoField*> fields_;
453457
};
454458

459+
class Session {
460+
public:
461+
Session(bool is_backend_in_process, void* buf, size_t len);
462+
~Session();
463+
Session(const Session&) = delete;
464+
Session& operator=(const Session&) = delete;
465+
466+
bool FlushBlocking(uint32_t timeout_ms);
467+
void StopBlocking();
468+
std::vector<uint8_t> ReadBlocking();
469+
470+
static void delete_session(Session* session);
471+
472+
struct PerfettoTracingSessionImpl* session_ = nullptr;
473+
};
474+
455475
/**
456476
* @brief Activates a trigger.
457477
* @param name The name of the trigger.

libs/tracing_perfetto/tests/Android.bp

Lines changed: 4 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -21,44 +21,12 @@ package {
2121
default_applicable_licenses: ["frameworks_native_license"],
2222
}
2323

24-
cc_library_static {
25-
name: "libtracing_perfetto_test_utils",
26-
export_include_dirs: [
27-
"include",
28-
],
29-
static_libs: [
30-
"libflagtest",
31-
"libgmock",
32-
"perfetto_trace_protos",
33-
],
34-
cflags: [
35-
"-Wall",
36-
"-Werror",
37-
"-Wno-enum-compare",
38-
"-Wno-unused-function",
39-
],
40-
41-
srcs: [
42-
"utils.cpp",
43-
],
44-
45-
shared_libs: [
46-
"libperfetto_c",
47-
"liblog",
48-
"libprotobuf-cpp-lite",
49-
],
50-
export_shared_lib_headers: [
51-
"libperfetto_c",
52-
],
53-
}
54-
5524
cc_test {
5625
name: "libtracing_perfetto_tests",
5726
static_libs: [
5827
"libflagtest",
5928
"libgmock",
6029
"perfetto_trace_protos",
61-
"libtracing_perfetto_test_utils",
6230
],
6331
cflags: [
6432
"-Wall",
@@ -68,12 +36,15 @@ cc_test {
6836
"android.os.flags-aconfig-cc-host",
6937
"libbase",
7038
"libperfetto_c",
71-
"liblog",
7239
"libprotobuf-cpp-lite",
7340
"libtracing_perfetto",
7441
],
7542
srcs: [
7643
"tracing_perfetto_test.cpp",
44+
"utils.cpp",
45+
],
46+
local_include_dirs: [
47+
"include",
7748
],
7849
test_suites: ["device-tests"],
7950
}

libs/tracing_perfetto/tracing_sdk.cpp

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,47 @@ const PerfettoTeHlProtoFieldNested* ProtoFieldNested::get() const {
254254
return &field_;
255255
}
256256

257+
Session::Session(bool is_backend_in_process, void* buf, size_t len) {
258+
session_ = PerfettoTracingSessionCreate(is_backend_in_process
259+
? PERFETTO_BACKEND_IN_PROCESS
260+
: PERFETTO_BACKEND_SYSTEM);
261+
262+
PerfettoTracingSessionSetup(session_, buf, len);
263+
264+
PerfettoTracingSessionStartBlocking(session_);
265+
}
266+
267+
Session::~Session() {
268+
PerfettoTracingSessionStopBlocking(session_);
269+
PerfettoTracingSessionDestroy(session_);
270+
}
271+
272+
bool Session::FlushBlocking(uint32_t timeout_ms) {
273+
return PerfettoTracingSessionFlushBlocking(session_, timeout_ms);
274+
}
275+
276+
void Session::StopBlocking() {
277+
PerfettoTracingSessionStopBlocking(session_);
278+
}
279+
280+
std::vector<uint8_t> Session::ReadBlocking() {
281+
std::vector<uint8_t> data;
282+
PerfettoTracingSessionReadTraceBlocking(
283+
session_,
284+
[](struct PerfettoTracingSessionImpl*, const void* trace_data,
285+
size_t size, bool, void* user_arg) {
286+
auto& dst = *static_cast<std::vector<uint8_t>*>(user_arg);
287+
auto* src = static_cast<const uint8_t*>(trace_data);
288+
dst.insert(dst.end(), src, src + size);
289+
},
290+
&data);
291+
return data;
292+
}
293+
294+
void Session::delete_session(Session* ptr) {
295+
delete ptr;
296+
}
297+
257298
void activate_trigger(const char* name, uint32_t ttl_ms) {
258299
const char* names[] = {name, nullptr};
259300
PerfettoProducerActivateTriggers(names, ttl_ms);

0 commit comments

Comments
 (0)