Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(120)

Unified Diff: third_party/tcmalloc/chromium/src/deep-heap-profile.h

Issue 1331973002: Remove clang type profiler and deep memory profiler. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/app/content_main_runner.cc ('k') | third_party/tcmalloc/chromium/src/deep-heap-profile.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/tcmalloc/chromium/src/deep-heap-profile.h
diff --git a/third_party/tcmalloc/chromium/src/deep-heap-profile.h b/third_party/tcmalloc/chromium/src/deep-heap-profile.h
deleted file mode 100644
index 0544b31c7dd1de95a87f811ff87bf2f734c19855..0000000000000000000000000000000000000000
--- a/third_party/tcmalloc/chromium/src/deep-heap-profile.h
+++ /dev/null
@@ -1,407 +0,0 @@
-// Copyright (c) 2012 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.
-
-// ---
-// Author: Sainbayar Sukhbaatar
-// Dai Mikurube
-//
-// This file contains a class DeepHeapProfile and its public function
-// DeepHeapProfile::DumpOrderedProfile(). The function works like
-// HeapProfileTable::FillOrderedProfile(), but dumps directory to files.
-//
-// DeepHeapProfile::DumpOrderedProfile() dumps more detailed information about
-// heap usage, which includes OS-level information such as memory residency and
-// type information if the type profiler is available.
-//
-// DeepHeapProfile::DumpOrderedProfile() uses data stored in HeapProfileTable.
-// Any code in DeepHeapProfile runs only when DumpOrderedProfile() is called.
-// It has overhead in dumping, but no overhead in logging.
-//
-// It currently works only on Linux including Android. It does nothing in
-// non-Linux environments.
-
-// Note that uint64 is used to represent addresses instead of uintptr_t, and
-// int is used to represent buffer sizes instead of size_t.
-// It's for consistency with other TCMalloc functions. ProcMapsIterator uses
-// uint64 for addresses, and HeapProfileTable::DumpOrderedProfile uses int
-// for buffer sizes.
-
-#ifndef BASE_DEEP_HEAP_PROFILE_H_
-#define BASE_DEEP_HEAP_PROFILE_H_
-
-#include "config.h"
-
-#if defined(TYPE_PROFILING)
-#include <typeinfo>
-#endif
-
-#if defined(__linux__) || defined(_WIN32) || defined(_WIN64)
-#define USE_DEEP_HEAP_PROFILE 1
-#endif
-
-#include "addressmap-inl.h"
-#include "heap-profile-table.h"
-#include "memory_region_map.h"
-
-class DeepHeapProfile {
- public:
- enum PageFrameType {
- DUMP_NO_PAGEFRAME = 0, // Dumps nothing about pageframes
- DUMP_PFN = 1, // Dumps only pageframe numbers (PFNs)
- DUMP_PAGECOUNT = 2, // Dumps PFNs and pagecounts
- };
-
- // Constructs a DeepHeapProfile instance. It works as a wrapper of
- // HeapProfileTable.
- //
- // |heap_profile| is a pointer to HeapProfileTable. DeepHeapProfile reads
- // data in |heap_profile| and forwards operations to |heap_profile| if
- // DeepHeapProfile is not available (non-Linux).
- // |prefix| is a prefix of dumped file names.
- // |pageframe_type| means what information is dumped for pageframes.
- DeepHeapProfile(HeapProfileTable* heap_profile,
- const char* prefix,
- enum PageFrameType pageframe_type);
- ~DeepHeapProfile();
-
- // Dumps a deep profile into |fd| with using |raw_buffer| of |buffer_size|.
- //
- // In addition, a list of buckets is dumped into a ".buckets" file in
- // descending order of allocated bytes.
- void DumpOrderedProfile(const char* reason,
- char raw_buffer[],
- int buffer_size,
- RawFD fd);
-
- private:
-#ifdef USE_DEEP_HEAP_PROFILE
- typedef HeapProfileTable::Stats Stats;
- typedef HeapProfileTable::Bucket Bucket;
- typedef HeapProfileTable::AllocValue AllocValue;
- typedef HeapProfileTable::AllocationMap AllocationMap;
-
- enum MapsRegionType {
- // Bytes of memory which were not recognized with /proc/<pid>/maps.
- // This size should be 0.
- ABSENT,
-
- // Bytes of memory which is mapped anonymously.
- // Regions which contain nothing in the last column of /proc/<pid>/maps.
- ANONYMOUS,
-
- // Bytes of memory which is mapped to a executable/non-executable file.
- // Regions which contain file paths in the last column of /proc/<pid>/maps.
- FILE_EXEC,
- FILE_NONEXEC,
-
- // Bytes of memory which is labeled [stack] in /proc/<pid>/maps.
- STACK,
-
- // Bytes of memory which is labeled, but not mapped to any file.
- // Regions which contain non-path strings in the last column of
- // /proc/<pid>/maps.
- OTHER,
-
- NUMBER_OF_MAPS_REGION_TYPES
- };
-
- static const char* kMapsRegionTypeDict[NUMBER_OF_MAPS_REGION_TYPES];
-
- // Manages a buffer to keep a text to be dumped to a file.
- class TextBuffer {
- public:
- TextBuffer(char *raw_buffer, int size, RawFD fd)
- : buffer_(raw_buffer),
- size_(size),
- cursor_(0),
- fd_(fd) {
- }
-
- int Size();
- int FilledBytes();
- void Clear();
- void Flush();
-
- bool AppendChar(char value);
- bool AppendString(const char* value, int width);
- bool AppendInt(int value, int width, bool leading_zero);
- bool AppendLong(long value, int width);
- bool AppendUnsignedLong(unsigned long value, int width);
- bool AppendInt64(int64 value, int width);
- bool AppendBase64(uint64 value, int width);
- bool AppendPtr(uint64 value, int width);
-
- private:
- bool ForwardCursor(int appended);
-
- char *buffer_;
- int size_;
- int cursor_;
- RawFD fd_;
- DISALLOW_COPY_AND_ASSIGN(TextBuffer);
- };
-
- // Defines an interface for getting info about memory residence.
- class MemoryResidenceInfoGetterInterface {
- public:
- virtual ~MemoryResidenceInfoGetterInterface();
-
- // Initializes the instance.
- virtual void Initialize() = 0;
-
- // Returns the number of resident (including swapped) bytes of the given
- // memory region from |first_address| to |last_address| inclusive.
- virtual size_t CommittedSize(uint64 first_address,
- uint64 last_address,
- TextBuffer* buffer) const = 0;
-
- // Creates a new platform specific MemoryResidenceInfoGetterInterface.
- static MemoryResidenceInfoGetterInterface* Create(
- PageFrameType pageframe_type);
-
- virtual bool IsPageCountAvailable() const = 0;
-
- protected:
- MemoryResidenceInfoGetterInterface();
- };
-
-#if defined(_WIN32) || defined(_WIN64)
- // TODO(peria): Implement this class.
- class MemoryInfoGetterWindows : public MemoryResidenceInfoGetterInterface {
- public:
- MemoryInfoGetterWindows(PageFrameType) {}
- virtual ~MemoryInfoGetterWindows() {}
-
- virtual void Initialize();
-
- virtual size_t CommittedSize(uint64 first_address,
- uint64 last_address,
- TextBuffer* buffer) const;
-
- virtual bool IsPageCountAvailable() const;
- };
-#endif // defined(_WIN32) || defined(_WIN64)
-
-#if defined(__linux__)
- // Implements MemoryResidenceInfoGetterInterface for Linux.
- class MemoryInfoGetterLinux : public MemoryResidenceInfoGetterInterface {
- public:
- MemoryInfoGetterLinux(PageFrameType pageframe_type)
- : pageframe_type_(pageframe_type),
- pagemap_fd_(kIllegalRawFD),
- kpagecount_fd_(kIllegalRawFD) {}
- virtual ~MemoryInfoGetterLinux() {}
-
- // Opens /proc/<pid>/pagemap and stores its file descriptor.
- // It keeps open while the process is running.
- //
- // Note that file descriptors need to be refreshed after fork.
- virtual void Initialize();
-
- // Returns the number of resident (including swapped) bytes of the given
- // memory region from |first_address| to |last_address| inclusive.
- virtual size_t CommittedSize(uint64 first_address,
- uint64 last_address,
- TextBuffer* buffer) const;
-
- virtual bool IsPageCountAvailable() const;
-
- private:
- struct State {
- uint64 pfn;
- bool is_committed; // Currently, we use only this
- bool is_present;
- bool is_swapped;
- bool is_shared;
- bool is_mmap;
- };
-
- uint64 ReadPageCount(uint64 pfn) const;
-
- // Seeks to the offset of the open pagemap file.
- // It returns true if succeeded.
- bool Seek(uint64 address) const;
-
- // Reads a pagemap state from the current offset.
- // It returns true if succeeded.
- bool Read(State* state, bool get_pfn) const;
-
- PageFrameType pageframe_type_;
- RawFD pagemap_fd_;
- RawFD kpagecount_fd_;
- };
-#endif // defined(__linux__)
-
- // Contains extended information for HeapProfileTable::Bucket. These objects
- // are managed in a hash table (DeepBucketTable) whose key is an address of
- // a Bucket and other additional information.
- struct DeepBucket {
- public:
- void UnparseForStats(TextBuffer* buffer);
- void UnparseForBucketFile(TextBuffer* buffer);
-
- Bucket* bucket;
-#if defined(TYPE_PROFILING)
- const std::type_info* type; // A type of the object
-#endif
- size_t committed_size; // A resident size of this bucket
- bool is_mmap; // True if the bucket represents a mmap region
- int id; // A unique ID of the bucket
- bool is_logged; // True if the stracktrace is logged to a file
- DeepBucket* next; // A reference to the next entry in the hash table
- };
-
- // Manages a hash table for DeepBucket.
- class DeepBucketTable {
- public:
- DeepBucketTable(int size,
- HeapProfileTable::Allocator alloc,
- HeapProfileTable::DeAllocator dealloc);
- ~DeepBucketTable();
-
- // Finds a DeepBucket instance corresponding to the given |bucket|, or
- // creates a new DeepBucket object if it doesn't exist.
- DeepBucket* Lookup(Bucket* bucket,
-#if defined(TYPE_PROFILING)
- const std::type_info* type,
-#endif
- bool is_mmap);
-
- // Writes stats of the hash table to |buffer| for DumpOrderedProfile.
- void UnparseForStats(TextBuffer* buffer);
-
- // Writes all buckets for a bucket file with using |buffer|.
- void WriteForBucketFile(const char* prefix,
- int dump_count,
- char raw_buffer[],
- int buffer_size);
-
- // Resets 'committed_size' members in DeepBucket objects.
- void ResetCommittedSize();
-
- // Resets all 'is_loggeed' flags in DeepBucket objects.
- void ResetIsLogged();
-
- private:
- // Adds |add| to a |hash_value| for Lookup.
- inline static void AddToHashValue(uintptr_t add, uintptr_t* hash_value);
- inline static void FinishHashValue(uintptr_t* hash_value);
-
- DeepBucket** table_;
- size_t table_size_;
- HeapProfileTable::Allocator alloc_;
- HeapProfileTable::DeAllocator dealloc_;
- int bucket_id_;
- };
-
- class RegionStats {
- public:
- RegionStats(): virtual_bytes_(0), committed_bytes_(0) {}
- ~RegionStats() {}
-
- // Initializes 'virtual_bytes_' and 'committed_bytes_'.
- void Initialize();
-
- // Updates itself to contain the tallies of 'virtual_bytes' and
- // 'committed_bytes' in the region from |first_adress| to |last_address|
- // inclusive.
- uint64 Record(
- const MemoryResidenceInfoGetterInterface* memory_residence_info_getter,
- uint64 first_address,
- uint64 last_address,
- TextBuffer* buffer);
-
- // Writes stats of the region into |buffer| with |name|.
- void Unparse(const char* name, TextBuffer* buffer);
-
- size_t virtual_bytes() const { return virtual_bytes_; }
- size_t committed_bytes() const { return committed_bytes_; }
- void AddToVirtualBytes(size_t additional_virtual_bytes) {
- virtual_bytes_ += additional_virtual_bytes;
- }
- void AddToCommittedBytes(size_t additional_committed_bytes) {
- committed_bytes_ += additional_committed_bytes;
- }
- void AddAnotherRegionStat(const RegionStats& other) {
- virtual_bytes_ += other.virtual_bytes_;
- committed_bytes_ += other.committed_bytes_;
- }
-
- private:
- size_t virtual_bytes_;
- size_t committed_bytes_;
- DISALLOW_COPY_AND_ASSIGN(RegionStats);
- };
-
- class GlobalStats {
- public:
- // Snapshots and calculates global stats from /proc/<pid>/maps and pagemap.
- void SnapshotMaps(
- const MemoryResidenceInfoGetterInterface* memory_residence_info_getter,
- DeepHeapProfile* deep_profile,
- TextBuffer* mmap_dump_buffer);
-
- // Snapshots allocations by malloc and mmap.
- void SnapshotAllocations(DeepHeapProfile* deep_profile);
-
- // Writes global stats into |buffer|.
- void Unparse(TextBuffer* buffer);
-
- private:
- // Records both virtual and committed byte counts of malloc and mmap regions
- // as callback functions for AllocationMap::Iterate().
- static void RecordAlloc(const void* pointer,
- AllocValue* alloc_value,
- DeepHeapProfile* deep_profile);
-
- DeepBucket* GetInformationOfMemoryRegion(
- const MemoryRegionMap::RegionIterator& mmap_iter,
- const MemoryResidenceInfoGetterInterface* memory_residence_info_getter,
- DeepHeapProfile* deep_profile);
-
- // All RegionStats members in this class contain the bytes of virtual
- // memory and committed memory.
- // TODO(dmikurube): These regions should be classified more precisely later
- // for more detailed analysis.
- RegionStats all_[NUMBER_OF_MAPS_REGION_TYPES];
-
- RegionStats unhooked_[NUMBER_OF_MAPS_REGION_TYPES];
-
- // Total bytes of malloc'ed regions.
- RegionStats profiled_malloc_;
-
- // Total bytes of mmap'ed regions.
- RegionStats profiled_mmap_;
- };
-
- // Writes reformatted /proc/<pid>/maps into a file "|prefix|.<pid>.maps"
- // with using |raw_buffer| of |buffer_size|.
- static void WriteProcMaps(const char* prefix,
- char raw_buffer[],
- int buffer_size);
-
- // Appends the command line (/proc/pid/cmdline on Linux) into |buffer|.
- bool AppendCommandLine(TextBuffer* buffer);
-
- MemoryResidenceInfoGetterInterface* memory_residence_info_getter_;
-
- // Process ID of the last dump. This can change by fork.
- pid_t most_recent_pid_;
-
- GlobalStats stats_; // Stats about total memory.
- int dump_count_; // The number of dumps.
- char* filename_prefix_; // Output file prefix.
- char run_id_[128];
-
- DeepBucketTable deep_table_;
-
- enum PageFrameType pageframe_type_;
-#endif // USE_DEEP_HEAP_PROFILE
-
- HeapProfileTable* heap_profile_;
-
- DISALLOW_COPY_AND_ASSIGN(DeepHeapProfile);
-};
-
-#endif // BASE_DEEP_HEAP_PROFILE_H_
« no previous file with comments | « content/app/content_main_runner.cc ('k') | third_party/tcmalloc/chromium/src/deep-heap-profile.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698