12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- // 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 COMPONENTS_SERVICES_HEAP_PROFILING_ALLOCATION_H_
- #define COMPONENTS_SERVICES_HEAP_PROFILING_ALLOCATION_H_
- #include <unordered_map>
- #include <vector>
- #include "components/services/heap_profiling/public/mojom/heap_profiling_client.mojom.h"
- namespace heap_profiling {
- using Address = uint64_t;
- using mojom::AllocatorType;
- // The struct is a descriptor of an allocation site. It is used as a unique
- // key in the AllocationMap.
- struct AllocationSite {
- AllocationSite(AllocatorType allocator,
- std::vector<Address>&& stack,
- int context_id);
- AllocationSite(const AllocationSite&) = delete;
- AllocationSite& operator=(const AllocationSite&) = delete;
- ~AllocationSite();
- // Type of the allocator responsible for the allocation. Possible values are
- // kMalloc, kPartitionAlloc, or kOilpan.
- const AllocatorType allocator;
- // Program call stack at the moment of allocation. Each address is correspond
- // to a code memory location in the inspected process.
- const std::vector<Address> stack;
- // Each allocation call may be associated with a context string.
- // This field contains the id of the context string. The string itself is
- // stored in |context_map| array in ExportParams class.
- const int context_id;
- struct Hash {
- size_t operator()(const AllocationSite& alloc) const { return alloc.hash_; }
- };
- private:
- const uint32_t hash_;
- };
- inline bool operator==(const AllocationSite& a, const AllocationSite& b) {
- return a.allocator == b.allocator && a.stack == b.stack &&
- a.context_id == b.context_id;
- }
- // Data associated with an allocation site in the AllocationMap.
- struct AllocationMetrics {
- // Total size of allocations associated with a given sample.
- size_t size = 0;
- // Number of allocations associated with the sample.
- float count = 0;
- };
- using AllocationMap =
- std::unordered_map<AllocationSite, AllocationMetrics, AllocationSite::Hash>;
- } // namespace heap_profiling
- #endif // COMPONENTS_SERVICES_HEAP_PROFILING_ALLOCATION_H_
|