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