1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- // Copyright 2019 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef BASE_PROFILER_STACK_SAMPLER_IMPL_H_
- #define BASE_PROFILER_STACK_SAMPLER_IMPL_H_
- #include <memory>
- #include "base/base_export.h"
- #include "base/containers/circular_deque.h"
- #include "base/profiler/frame.h"
- #include "base/profiler/register_context.h"
- #include "base/profiler/stack_copier.h"
- #include "base/profiler/stack_sampler.h"
- namespace base {
- class Unwinder;
- // Cross-platform stack sampler implementation. Delegates to StackCopier for the
- // platform-specific stack copying implementation.
- class BASE_EXPORT StackSamplerImpl : public StackSampler {
- public:
- StackSamplerImpl(std::unique_ptr<StackCopier> stack_copier,
- std::vector<std::unique_ptr<Unwinder>> core_unwinders,
- ModuleCache* module_cache,
- StackSamplerTestDelegate* test_delegate = nullptr);
- ~StackSamplerImpl() override;
- StackSamplerImpl(const StackSamplerImpl&) = delete;
- StackSamplerImpl& operator=(const StackSamplerImpl&) = delete;
- // StackSampler:
- void AddAuxUnwinder(std::unique_ptr<Unwinder> unwinder) override;
- void RecordStackFrames(StackBuffer* stack_buffer,
- ProfileBuilder* profile_builder) override;
- // Exposes the internal function for unit testing.
- static std::vector<Frame> WalkStackForTesting(
- ModuleCache* module_cache,
- RegisterContext* thread_context,
- uintptr_t stack_top,
- const base::circular_deque<std::unique_ptr<Unwinder>>& unwinders);
- private:
- static std::vector<Frame> WalkStack(
- ModuleCache* module_cache,
- RegisterContext* thread_context,
- uintptr_t stack_top,
- const base::circular_deque<std::unique_ptr<Unwinder>>& unwinders);
- const std::unique_ptr<StackCopier> stack_copier_;
- // Store all unwinder in decreasing priority order.
- base::circular_deque<std::unique_ptr<Unwinder>> unwinders_;
- ModuleCache* const module_cache_;
- StackSamplerTestDelegate* const test_delegate_;
- };
- } // namespace base
- #endif // BASE_PROFILER_STACK_SAMPLER_IMPL_H_
|