Index: snapshot/memory_snapshot.h |
diff --git a/snapshot/memory_snapshot.h b/snapshot/memory_snapshot.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e7d831668944bcb7db08d9ebc48156c4559d2513 |
--- /dev/null |
+++ b/snapshot/memory_snapshot.h |
@@ -0,0 +1,78 @@ |
+// Copyright 2014 The Crashpad Authors. All rights reserved. |
+// |
+// Licensed under the Apache License, Version 2.0 (the "License"); |
+// you may not use this file except in compliance with the License. |
+// You may obtain a copy of the License at |
+// |
+// http://www.apache.org/licenses/LICENSE-2.0 |
+// |
+// Unless required by applicable law or agreed to in writing, software |
+// distributed under the License is distributed on an "AS IS" BASIS, |
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+// See the License for the specific language governing permissions and |
+// limitations under the License. |
+ |
+#ifndef CRASHPAD_SNAPSHOT_MEMORY_SNAPSHOT_H_ |
+#define CRASHPAD_SNAPSHOT_MEMORY_SNAPSHOT_H_ |
+ |
+#include <stdint.h> |
+#include <sys/types.h> |
+ |
+namespace crashpad { |
+ |
+//! \brief An abstract interface to a snapshot representing a region of memory |
+//! present in a snapshot process. |
+class MemorySnapshot { |
+ public: |
+ //! \brief An interface that MemorySnapshot clients must implement in order to |
+ //! receive memory snapshot data. |
+ //! |
+ //! This callback-based model frees MemorySnapshot implementations from having |
+ //! to deal with memory region ownership problems. When a memory snapshot’s |
+ //! data is read, it will be passed to a delegate method. |
+ class Delegate { |
+ public: |
+ //! \brief Called by MemorySnapshot::Read() to provide data requested by a |
+ //! call to that method. |
+ //! |
+ //! \param[in] data A pointer to the data that was read. The callee does not |
+ //! take ownership of this data. This data is only valid for the |
+ //! duration of the call to this method. |
+ //! \param[in] size The size of the data that was read. |
+ //! |
+ //! \return `true` on success, `false` on failure. MemoryDelegate::Read() |
+ //! will use this as its own return value. |
+ virtual bool MemorySnapshotDelegateRead(void* data, size_t size) = 0; |
+ |
+ protected: |
+ ~Delegate() {} |
+ }; |
+ |
+ //! \brief The base address of the memory snapshot in the snapshot process’ |
+ //! address space. |
+ virtual uint64_t Address() const = 0; |
+ |
+ //! \brief The size of the memory snapshot. |
+ virtual size_t Size() const = 0; |
+ |
+ //! \brief Calls Delegate::MemorySnapshotDelegateRead(), providing it with |
+ //! the memory snapshot’s data. |
+ //! |
+ //! Implementations do not necessarily read the memory snapshot data prior to |
+ //! this method being called. Memory snapshot data may be loaded lazily and |
+ //! may be discarded after being passed to the delegate. This provides clean |
+ //! memory management without burdening a snapshot implementation with the |
+ //! requirement that it track all memory region data simultaneously. |
+ //! |
+ //! \return `false` on failure, otherwise, the return value of |
+ //! Delegate::MemorySnapshotDelegateRead(), which should be `true` on |
+ //! success and `false` on failure. |
+ virtual bool Read(Delegate* delegate) const = 0; |
+ |
+ protected: |
+ ~MemorySnapshot() {} |
+}; |
+ |
+} // namespace crashpad |
+ |
+#endif // CRASHPAD_SNAPSHOT_MEMORY_SNAPSHOT_H_ |