summaryrefslogtreecommitdiffstats
path: root/libbacktrace
diff options
context:
space:
mode:
authorChristopher Ferris <cferris@google.com>2018-04-03 16:03:28 -0700
committerChristopher Ferris <cferris@google.com>2018-04-03 18:37:52 -0700
commit6633b0ca090dd3da45b8936d587a1316401e46ba (patch)
tree0b87776d1449833c2be01ed02d1b5352f23ac867 /libbacktrace
parenta10d40e2b2a6132b7e06397f62ac07a4d9bfb5e1 (diff)
downloadsystem_core-6633b0ca090dd3da45b8936d587a1316401e46ba.tar.gz
system_core-6633b0ca090dd3da45b8936d587a1316401e46ba.tar.bz2
system_core-6633b0ca090dd3da45b8936d587a1316401e46ba.zip
Add a MemoryOfflineBuffer object.
Use this for offline stack data so that it's not necessary to copy any data around. Add unit tests for the new object. Bug: 77258731 Bug: 74354410 Test: Ran libunwindstack/libbacktrace unit tests. Change-Id: I9b0f25d9520c96e64aedef5f295423c60ddb3488
Diffstat (limited to 'libbacktrace')
-rw-r--r--libbacktrace/UnwindStackMap.cpp13
-rw-r--r--libbacktrace/UnwindStackMap.h3
2 files changed, 9 insertions, 7 deletions
diff --git a/libbacktrace/UnwindStackMap.cpp b/libbacktrace/UnwindStackMap.cpp
index 9c6fed43c..d2d6ab8fa 100644
--- a/libbacktrace/UnwindStackMap.cpp
+++ b/libbacktrace/UnwindStackMap.cpp
@@ -149,13 +149,12 @@ bool UnwindStackOfflineMap::CreateProcessMemory(const backtrace_stackinfo_t& sta
}
// Create the process memory from the stack data.
- uint64_t size = stack.end - stack.start;
- unwindstack::MemoryBuffer* memory = new unwindstack::MemoryBuffer;
- memory->Resize(size);
- memcpy(memory->GetPtr(0), stack.data, size);
- std::shared_ptr<unwindstack::Memory> shared_memory(memory);
-
- process_memory_.reset(new unwindstack::MemoryRange(shared_memory, 0, size, stack.start));
+ if (memory_ == nullptr) {
+ memory_ = new unwindstack::MemoryOfflineBuffer(stack.data, stack.start, stack.end);
+ process_memory_.reset(memory_);
+ } else {
+ memory_->Reset(stack.data, stack.start, stack.end);
+ }
return true;
}
diff --git a/libbacktrace/UnwindStackMap.h b/libbacktrace/UnwindStackMap.h
index ec0d9c148..039f4a289 100644
--- a/libbacktrace/UnwindStackMap.h
+++ b/libbacktrace/UnwindStackMap.h
@@ -79,6 +79,9 @@ class UnwindStackOfflineMap : public UnwindStackMap {
bool Build(const std::vector<backtrace_map_t>& maps);
bool CreateProcessMemory(const backtrace_stackinfo_t& stack);
+
+ private:
+ unwindstack::MemoryOfflineBuffer* memory_ = nullptr;
};
#endif // _LIBBACKTRACE_UNWINDSTACK_MAP_H