// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef BASE_PROFILER_NATIVE_UNWINDER_ANDROID_MEMORY_REGIONS_MAP_IMPL_H_
#define BASE_PROFILER_NATIVE_UNWINDER_ANDROID_MEMORY_REGIONS_MAP_IMPL_H_
#include "base/profiler/native_unwinder_android_memory_regions_map.h"
#include "third_party/libunwindstack/src/libunwindstack/include/unwindstack/Maps.h"
#include "third_party/libunwindstack/src/libunwindstack/include/unwindstack/Memory.h"
namespace base {
class NativeUnwinderAndroidMemoryRegionsMapImpl
: public NativeUnwinderAndroidMemoryRegionsMap {
public:
NativeUnwinderAndroidMemoryRegionsMapImpl(
std::unique_ptr<unwindstack::Maps> maps,
std::unique_ptr<unwindstack::Memory> memory);
~NativeUnwinderAndroidMemoryRegionsMapImpl() override;
unwindstack::Maps* maps() { return maps_.get(); }
// We use a non-const reference here because some functions in libunwindstack
// expect that.
std::shared_ptr<unwindstack::Memory>& memory() { return memory_; }
void SetMapsForTesting(std::unique_ptr<unwindstack::Maps> maps) {
maps_ = std::move(maps);
}
private:
std::unique_ptr<unwindstack::Maps> maps_;
std::shared_ptr<unwindstack::Memory> memory_;
};
} // namespace base
#endif // BASE_PROFILER_NATIVE_UNWINDER_ANDROID_MEMORY_REGIONS_MAP_IMPL_H_