1*d89ec533Spatrick //===-- memprof_stats.h ----------------------------------------*- C++ -*-===// 2*d89ec533Spatrick // 3*d89ec533Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*d89ec533Spatrick // See https://llvm.org/LICENSE.txt for license information. 5*d89ec533Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*d89ec533Spatrick // 7*d89ec533Spatrick //===----------------------------------------------------------------------===// 8*d89ec533Spatrick // 9*d89ec533Spatrick // This file is a part of MemProfiler, a memory profiler. 10*d89ec533Spatrick // 11*d89ec533Spatrick // MemProf-private header for statistics. 12*d89ec533Spatrick //===----------------------------------------------------------------------===// 13*d89ec533Spatrick #ifndef MEMPROF_STATS_H 14*d89ec533Spatrick #define MEMPROF_STATS_H 15*d89ec533Spatrick 16*d89ec533Spatrick #include "memprof_allocator.h" 17*d89ec533Spatrick #include "memprof_internal.h" 18*d89ec533Spatrick 19*d89ec533Spatrick namespace __memprof { 20*d89ec533Spatrick 21*d89ec533Spatrick // MemprofStats struct is NOT thread-safe. 22*d89ec533Spatrick // Each MemprofThread has its own MemprofStats, which are sometimes flushed 23*d89ec533Spatrick // to the accumulated MemprofStats. 24*d89ec533Spatrick struct MemprofStats { 25*d89ec533Spatrick // MemprofStats must be a struct consisting of uptr fields only. 26*d89ec533Spatrick // When merging two MemprofStats structs, we treat them as arrays of uptr. 27*d89ec533Spatrick uptr mallocs; 28*d89ec533Spatrick uptr malloced; 29*d89ec533Spatrick uptr malloced_overhead; 30*d89ec533Spatrick uptr frees; 31*d89ec533Spatrick uptr freed; 32*d89ec533Spatrick uptr real_frees; 33*d89ec533Spatrick uptr really_freed; 34*d89ec533Spatrick uptr reallocs; 35*d89ec533Spatrick uptr realloced; 36*d89ec533Spatrick uptr mmaps; 37*d89ec533Spatrick uptr mmaped; 38*d89ec533Spatrick uptr munmaps; 39*d89ec533Spatrick uptr munmaped; 40*d89ec533Spatrick uptr malloc_large; 41*d89ec533Spatrick uptr malloced_by_size[kNumberOfSizeClasses]; 42*d89ec533Spatrick 43*d89ec533Spatrick // Ctor for global MemprofStats (accumulated stats for dead threads). MemprofStatsMemprofStats44*d89ec533Spatrick explicit MemprofStats(LinkerInitialized) {} 45*d89ec533Spatrick // Creates empty stats. 46*d89ec533Spatrick MemprofStats(); 47*d89ec533Spatrick 48*d89ec533Spatrick void Print(); // Prints formatted stats to stderr. 49*d89ec533Spatrick void Clear(); 50*d89ec533Spatrick void MergeFrom(const MemprofStats *stats); 51*d89ec533Spatrick }; 52*d89ec533Spatrick 53*d89ec533Spatrick // Returns stats for GetCurrentThread(), or stats for fake "unknown thread" 54*d89ec533Spatrick // if GetCurrentThread() returns 0. 55*d89ec533Spatrick MemprofStats &GetCurrentThreadStats(); 56*d89ec533Spatrick // Flushes a given stats into accumulated stats of dead threads. 57*d89ec533Spatrick void FlushToDeadThreadStats(MemprofStats *stats); 58*d89ec533Spatrick 59*d89ec533Spatrick } // namespace __memprof 60*d89ec533Spatrick 61*d89ec533Spatrick #endif // MEMPROF_STATS_H 62