xref: /aosp_15_r20/external/cronet/base/tracing/perfetto_platform.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2020 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_TRACING_PERFETTO_PLATFORM_H_
6*6777b538SAndroid Build Coastguard Worker #define BASE_TRACING_PERFETTO_PLATFORM_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include "third_party/perfetto/include/perfetto/base/thread_utils.h"
9*6777b538SAndroid Build Coastguard Worker #include "third_party/perfetto/include/perfetto/tracing/platform.h"
10*6777b538SAndroid Build Coastguard Worker 
11*6777b538SAndroid Build Coastguard Worker #include "base/base_export.h"
12*6777b538SAndroid Build Coastguard Worker #include "base/memory/scoped_refptr.h"
13*6777b538SAndroid Build Coastguard Worker #include "base/threading/thread_local_storage.h"
14*6777b538SAndroid Build Coastguard Worker 
15*6777b538SAndroid Build Coastguard Worker namespace base {
16*6777b538SAndroid Build Coastguard Worker class DeferredSequencedTaskRunner;
17*6777b538SAndroid Build Coastguard Worker 
18*6777b538SAndroid Build Coastguard Worker namespace tracing {
19*6777b538SAndroid Build Coastguard Worker 
20*6777b538SAndroid Build Coastguard Worker class BASE_EXPORT PerfettoPlatform : public perfetto::Platform {
21*6777b538SAndroid Build Coastguard Worker  public:
22*6777b538SAndroid Build Coastguard Worker   // Specifies the type of task runner used by Perfetto.
23*6777b538SAndroid Build Coastguard Worker   // TODO(skyostil): Move all scenarios to use the default task runner to
24*6777b538SAndroid Build Coastguard Worker   // avoid problems with unexpected re-entrancy and IPC deadlocks.
25*6777b538SAndroid Build Coastguard Worker   enum class TaskRunnerType {
26*6777b538SAndroid Build Coastguard Worker     // Use Perfetto's own task runner which runs tasks on a dedicated (internal)
27*6777b538SAndroid Build Coastguard Worker     // thread.
28*6777b538SAndroid Build Coastguard Worker     kBuiltin,
29*6777b538SAndroid Build Coastguard Worker     // Use base::ThreadPool.
30*6777b538SAndroid Build Coastguard Worker     kThreadPool,
31*6777b538SAndroid Build Coastguard Worker   };
32*6777b538SAndroid Build Coastguard Worker 
33*6777b538SAndroid Build Coastguard Worker   explicit PerfettoPlatform(TaskRunnerType = TaskRunnerType::kThreadPool);
34*6777b538SAndroid Build Coastguard Worker   ~PerfettoPlatform() override;
35*6777b538SAndroid Build Coastguard Worker 
36*6777b538SAndroid Build Coastguard Worker   SequencedTaskRunner* task_runner() const;
did_start_task_runner()37*6777b538SAndroid Build Coastguard Worker   bool did_start_task_runner() const { return did_start_task_runner_; }
38*6777b538SAndroid Build Coastguard Worker   void StartTaskRunner(scoped_refptr<SequencedTaskRunner>);
39*6777b538SAndroid Build Coastguard Worker 
40*6777b538SAndroid Build Coastguard Worker   // perfetto::Platform implementation:
41*6777b538SAndroid Build Coastguard Worker   ThreadLocalObject* GetOrCreateThreadLocalObject() override;
42*6777b538SAndroid Build Coastguard Worker   std::unique_ptr<perfetto::base::TaskRunner> CreateTaskRunner(
43*6777b538SAndroid Build Coastguard Worker       const CreateTaskRunnerArgs&) override;
44*6777b538SAndroid Build Coastguard Worker   std::string GetCurrentProcessName() override;
45*6777b538SAndroid Build Coastguard Worker 
46*6777b538SAndroid Build Coastguard Worker   // Chrome uses different thread IDs than Perfetto on Mac. So we need to
47*6777b538SAndroid Build Coastguard Worker   // override this method to keep Perfetto tracks consistent with Chrome
48*6777b538SAndroid Build Coastguard Worker   // thread IDs.
49*6777b538SAndroid Build Coastguard Worker   perfetto::base::PlatformThreadId GetCurrentThreadId() override;
50*6777b538SAndroid Build Coastguard Worker 
51*6777b538SAndroid Build Coastguard Worker  private:
52*6777b538SAndroid Build Coastguard Worker   const TaskRunnerType task_runner_type_;
53*6777b538SAndroid Build Coastguard Worker   scoped_refptr<DeferredSequencedTaskRunner> deferred_task_runner_;
54*6777b538SAndroid Build Coastguard Worker   bool did_start_task_runner_ = false;
55*6777b538SAndroid Build Coastguard Worker   ThreadLocalStorage::Slot thread_local_object_;
56*6777b538SAndroid Build Coastguard Worker };
57*6777b538SAndroid Build Coastguard Worker 
58*6777b538SAndroid Build Coastguard Worker }  // namespace tracing
59*6777b538SAndroid Build Coastguard Worker }  // namespace base
60*6777b538SAndroid Build Coastguard Worker 
61*6777b538SAndroid Build Coastguard Worker #endif  // BASE_TRACING_PERFETTO_PLATFORM_H_
62