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