xref: /aosp_15_r20/external/cronet/base/profiler/thread_delegate.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_H_
6*6777b538SAndroid Build Coastguard Worker #define BASE_PROFILER_THREAD_DELEGATE_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include <vector>
9*6777b538SAndroid Build Coastguard Worker 
10*6777b538SAndroid Build Coastguard Worker #include "base/base_export.h"
11*6777b538SAndroid Build Coastguard Worker #include "base/profiler/register_context.h"
12*6777b538SAndroid Build Coastguard Worker #include "base/threading/platform_thread.h"
13*6777b538SAndroid Build Coastguard Worker 
14*6777b538SAndroid Build Coastguard Worker namespace base {
15*6777b538SAndroid Build Coastguard Worker 
16*6777b538SAndroid Build Coastguard Worker // Platform-specific thread and stack manipulation delegate, for use by the
17*6777b538SAndroid Build Coastguard Worker // platform-independent stack copying/walking implementation in
18*6777b538SAndroid Build Coastguard Worker // StackSamplerImpl. Provides the common interface across signal- and
19*6777b538SAndroid Build Coastguard Worker // suspend-based stack copy implementations.
20*6777b538SAndroid Build Coastguard Worker class BASE_EXPORT ThreadDelegate {
21*6777b538SAndroid Build Coastguard Worker  public:
22*6777b538SAndroid Build Coastguard Worker   ThreadDelegate() = default;
23*6777b538SAndroid Build Coastguard Worker   virtual ~ThreadDelegate() = default;
24*6777b538SAndroid Build Coastguard Worker 
25*6777b538SAndroid Build Coastguard Worker   ThreadDelegate(const ThreadDelegate&) = delete;
26*6777b538SAndroid Build Coastguard Worker   ThreadDelegate& operator=(const ThreadDelegate&) = delete;
27*6777b538SAndroid Build Coastguard Worker 
28*6777b538SAndroid Build Coastguard Worker   // Gets the platform-specific id for the thread.
29*6777b538SAndroid Build Coastguard Worker   virtual PlatformThreadId GetThreadId() const = 0;
30*6777b538SAndroid Build Coastguard Worker 
31*6777b538SAndroid Build Coastguard Worker   // Gets the base address of the thread's stack.
32*6777b538SAndroid Build Coastguard Worker   virtual uintptr_t GetStackBaseAddress() const = 0;
33*6777b538SAndroid Build Coastguard Worker 
34*6777b538SAndroid Build Coastguard Worker   // Returns a list of registers that should be rewritten to point into the
35*6777b538SAndroid Build Coastguard Worker   // stack copy, if they originally pointed into the original stack.
36*6777b538SAndroid Build Coastguard Worker   // May heap allocate.
37*6777b538SAndroid Build Coastguard Worker   virtual std::vector<uintptr_t*> GetRegistersToRewrite(
38*6777b538SAndroid Build Coastguard Worker       RegisterContext* thread_context) = 0;
39*6777b538SAndroid Build Coastguard Worker };
40*6777b538SAndroid Build Coastguard Worker 
41*6777b538SAndroid Build Coastguard Worker }  // namespace base
42*6777b538SAndroid Build Coastguard Worker 
43*6777b538SAndroid Build Coastguard Worker #endif  // BASE_PROFILER_THREAD_DELEGATE_H_
44