@@ -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+
257298void activate_trigger (const char * name, uint32_t ttl_ms) {
258299 const char * names[] = {name, nullptr };
259300 PerfettoProducerActivateTriggers (names, ttl_ms);
0 commit comments