| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 | // 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/callback.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,                   UnwindersFactory core_unwinders_factory,                   ModuleCache* module_cache,                   RepeatingClosure record_sample_callback = RepeatingClosure(),                   StackSamplerTestDelegate* test_delegate = nullptr);  ~StackSamplerImpl() override;  StackSamplerImpl(const StackSamplerImpl&) = delete;  StackSamplerImpl& operator=(const StackSamplerImpl&) = delete;  // StackSampler:  void Initialize() override;  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_;  UnwindersFactory unwinders_factory_;  // Unwinders are stored in decreasing priority order.  base::circular_deque<std::unique_ptr<Unwinder>> unwinders_;  ModuleCache* const module_cache_;  const RepeatingClosure record_sample_callback_;  StackSamplerTestDelegate* const test_delegate_;};}  // namespace base#endif  // BASE_PROFILER_STACK_SAMPLER_IMPL_H_
 |