Home | History | Annotate | Download | only in trace_event
      1 // Copyright 2015 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef BASE_TRACE_EVENT_MEMORY_DUMP_REQUEST_ARGS_H_
      6 #define BASE_TRACE_EVENT_MEMORY_DUMP_REQUEST_ARGS_H_
      7 
      8 // This file defines the types and structs used to issue memory dump requests.
      9 // These are also used in the IPCs for coordinating inter-process memory dumps.
     10 
     11 #include <stdint.h>
     12 #include <string>
     13 
     14 #include "base/base_export.h"
     15 #include "base/callback.h"
     16 
     17 namespace base {
     18 namespace trace_event {
     19 
     20 // Captures the reason why a memory dump is being requested. This is to allow
     21 // selective enabling of dumps, filtering and post-processing.
     22 enum class MemoryDumpType {
     23   TASK_BEGIN,         // Dumping memory at the beginning of a message-loop task.
     24   TASK_END,           // Dumping memory at the ending of a message-loop task.
     25   PERIODIC_INTERVAL,  // Dumping memory at periodic intervals.
     26   EXPLICITLY_TRIGGERED,  // Non maskable dump request.
     27   LAST = EXPLICITLY_TRIGGERED // For IPC macros.
     28 };
     29 
     30 // Tells the MemoryDumpProvider(s) how much detailed their dumps should be.
     31 enum class MemoryDumpLevelOfDetail : uint32_t {
     32   FIRST,
     33 
     34   // For background tracing mode. The dump time is quick, and typically just the
     35   // totals are expected. Suballocations need not be specified. Dump name must
     36   // contain only pre-defined strings and string arguments cannot be added.
     37   BACKGROUND = FIRST,
     38 
     39   // For the levels below, MemoryDumpProvider instances must guarantee that the
     40   // total size reported in the root node is consistent. Only the granularity of
     41   // the child MemoryAllocatorDump(s) differs with the levels.
     42 
     43   // Few entries, typically a fixed number, per dump.
     44   LIGHT,
     45 
     46   // Unrestricted amount of entries per dump.
     47   DETAILED,
     48 
     49   LAST = DETAILED
     50 };
     51 
     52 // Initial request arguments for a global memory dump. (see
     53 // MemoryDumpManager::RequestGlobalMemoryDump()).
     54 struct BASE_EXPORT MemoryDumpRequestArgs {
     55   // Globally unique identifier. In multi-process dumps, all processes issue a
     56   // local dump with the same guid. This allows the trace importers to
     57   // reconstruct the global dump.
     58   uint64_t dump_guid;
     59 
     60   MemoryDumpType dump_type;
     61   MemoryDumpLevelOfDetail level_of_detail;
     62 };
     63 
     64 // Args for ProcessMemoryDump and passed to OnMemoryDump calls for memory dump
     65 // providers. Dump providers are expected to read the args for creating dumps.
     66 struct MemoryDumpArgs {
     67   // Specifies how detailed the dumps should be.
     68   MemoryDumpLevelOfDetail level_of_detail;
     69 };
     70 
     71 using MemoryDumpCallback = Callback<void(uint64_t dump_guid, bool success)>;
     72 
     73 BASE_EXPORT const char* MemoryDumpTypeToString(const MemoryDumpType& dump_type);
     74 
     75 BASE_EXPORT const char* MemoryDumpLevelOfDetailToString(
     76     const MemoryDumpLevelOfDetail& level_of_detail);
     77 
     78 BASE_EXPORT MemoryDumpLevelOfDetail
     79 StringToMemoryDumpLevelOfDetail(const std::string& str);
     80 
     81 }  // namespace trace_event
     82 }  // namespace base
     83 
     84 #endif  // BASE_TRACE_EVENT_MEMORY_DUMP_REQUEST_ARGS_H_
     85