xref: /aosp_15_r20/external/cronet/base/profiler/thread_delegate_posix.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2019 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_PROFILER_THREAD_DELEGATE_POSIX_H_
6*6777b538SAndroid Build Coastguard Worker #define BASE_PROFILER_THREAD_DELEGATE_POSIX_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include <memory>
9*6777b538SAndroid Build Coastguard Worker #include <vector>
10*6777b538SAndroid Build Coastguard Worker 
11*6777b538SAndroid Build Coastguard Worker #include "base/base_export.h"
12*6777b538SAndroid Build Coastguard Worker #include "base/profiler/sampling_profiler_thread_token.h"
13*6777b538SAndroid Build Coastguard Worker #include "base/profiler/thread_delegate.h"
14*6777b538SAndroid Build Coastguard Worker #include "base/threading/platform_thread.h"
15*6777b538SAndroid Build Coastguard Worker 
16*6777b538SAndroid Build Coastguard Worker namespace base {
17*6777b538SAndroid Build Coastguard Worker 
18*6777b538SAndroid Build Coastguard Worker // Platform- and thread-specific implementation in support of stack sampling on
19*6777b538SAndroid Build Coastguard Worker // POSIX.
20*6777b538SAndroid Build Coastguard Worker class BASE_EXPORT ThreadDelegatePosix : public ThreadDelegate {
21*6777b538SAndroid Build Coastguard Worker  public:
22*6777b538SAndroid Build Coastguard Worker   static std::unique_ptr<ThreadDelegatePosix> Create(
23*6777b538SAndroid Build Coastguard Worker       SamplingProfilerThreadToken thread_token);
24*6777b538SAndroid Build Coastguard Worker 
25*6777b538SAndroid Build Coastguard Worker   ~ThreadDelegatePosix() override;
26*6777b538SAndroid Build Coastguard Worker 
27*6777b538SAndroid Build Coastguard Worker   ThreadDelegatePosix(const ThreadDelegatePosix&) = delete;
28*6777b538SAndroid Build Coastguard Worker   ThreadDelegatePosix& operator=(const ThreadDelegatePosix&) = delete;
29*6777b538SAndroid Build Coastguard Worker 
30*6777b538SAndroid Build Coastguard Worker   // ThreadDelegate
31*6777b538SAndroid Build Coastguard Worker   PlatformThreadId GetThreadId() const override;
32*6777b538SAndroid Build Coastguard Worker   uintptr_t GetStackBaseAddress() const override;
33*6777b538SAndroid Build Coastguard Worker   std::vector<uintptr_t*> GetRegistersToRewrite(
34*6777b538SAndroid Build Coastguard Worker       RegisterContext* thread_context) override;
35*6777b538SAndroid Build Coastguard Worker 
36*6777b538SAndroid Build Coastguard Worker  private:
37*6777b538SAndroid Build Coastguard Worker   ThreadDelegatePosix(PlatformThreadId id, uintptr_t base_address);
38*6777b538SAndroid Build Coastguard Worker 
39*6777b538SAndroid Build Coastguard Worker   const PlatformThreadId thread_id_;
40*6777b538SAndroid Build Coastguard Worker   const uintptr_t thread_stack_base_address_;
41*6777b538SAndroid Build Coastguard Worker };
42*6777b538SAndroid Build Coastguard Worker 
43*6777b538SAndroid Build Coastguard Worker }  // namespace base
44*6777b538SAndroid Build Coastguard Worker 
45*6777b538SAndroid Build Coastguard Worker #endif  // BASE_PROFILER_THREAD_DELEGATE_POSIX_H_
46