summaryrefslogtreecommitdiffstats
path: root/src/perfetto/perfetto_consumer.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/perfetto/perfetto_consumer.h')
-rw-r--r--src/perfetto/perfetto_consumer.h35
1 files changed, 32 insertions, 3 deletions
diff --git a/src/perfetto/perfetto_consumer.h b/src/perfetto/perfetto_consumer.h
index ce04ffd..2d828c0 100644
--- a/src/perfetto/perfetto_consumer.h
+++ b/src/perfetto/perfetto_consumer.h
@@ -18,6 +18,10 @@
#include <fruit/fruit.h>
#include <perfetto/public/consumer_api.h> // libperfetto
+namespace android {
+class Printer;
+} // namespace android
+
namespace iorap::perfetto {
// Abstract out the Perfetto C API behind a virtual interface:
@@ -48,9 +52,9 @@ struct PerfettoConsumer {
};
// "Live" implementation that calls down to libperfetto.
-struct PerfettoConsumerImpl : public PerfettoConsumer {
+struct PerfettoConsumerRawImpl : public PerfettoConsumer {
// Marks this constructor as the one to use for injection.
- INJECT(PerfettoConsumerImpl()) = default;
+ INJECT(PerfettoConsumerRawImpl()) = default;
virtual Handle Create(const void* config_proto,
size_t config_len,
@@ -77,7 +81,32 @@ struct PerfettoConsumerImpl : public PerfettoConsumer {
return ::perfetto::consumer::PollState(handle);
}
- virtual ~PerfettoConsumerImpl() {}
+ virtual ~PerfettoConsumerRawImpl() {}
+};
+
+// "Safe" implementation that has extra checking around it.
+class PerfettoConsumerImpl : public PerfettoConsumer {
+ public:
+ // Marks this constructor as the one to use for injection.
+ INJECT(PerfettoConsumerImpl()) { Initialize(); }
+
+ virtual Handle Create(const void* config_proto,
+ size_t config_len,
+ OnStateChangedCb callback,
+ void* callback_arg) override;
+ virtual void StartTracing(Handle handle) override;
+ virtual TraceBuffer ReadTrace(Handle handle) override;
+ virtual void Destroy(Handle handle) override;
+ virtual State PollState(Handle handle) override;
+
+ virtual ~PerfettoConsumerImpl();
+
+ static void Dump(/*borrow*/::android::Printer& printer);
+
+ private:
+ void Initialize();
+ struct Impl;
+ PerfettoConsumerImpl::Impl* impl_;
};
} // namespace iorap::perfetto