| Index: base/trace_event/memory_dump_manager.h
|
| diff --git a/base/trace_event/memory_dump_manager.h b/base/trace_event/memory_dump_manager.h
|
| index e34bdb0853cc6200d3a494969fe8582eb2040f79..ddf17339b2b2619f75b449fc7670996b3aed14cc 100644
|
| --- a/base/trace_event/memory_dump_manager.h
|
| +++ b/base/trace_event/memory_dump_manager.h
|
| @@ -36,6 +36,7 @@ class MemoryDumpSessionState;
|
| // RequestDumpPoint(). The extension by Un(RegisterDumpProvider).
|
| class BASE_EXPORT MemoryDumpManager : public TraceLog::EnabledStateObserver {
|
| public:
|
| + static const int kInvalidTracingProcessId;
|
| static const char* const kTraceCategoryForTesting;
|
|
|
| static MemoryDumpManager* GetInstance();
|
| @@ -81,6 +82,24 @@ class BASE_EXPORT MemoryDumpManager : public TraceLog::EnabledStateObserver {
|
| return session_state_;
|
| }
|
|
|
| + // Derives a tracing process id from a child process id. Child process ids
|
| + // cannot be used directly in tracing for security reasons (see: discussion in
|
| + // crrev.com/1173263004). This method is meant to be used when dumping
|
| + // cross-process shared memory from a process which knows the child process id
|
| + // of its endpoints. The value returned by this method is guaranteed to be
|
| + // equal to the value returned by tracing_process_id() in the corresponding
|
| + // child process.
|
| + static int ChildProcessIdToTracingProcessId(int child_id);
|
| +
|
| + // Returns a unique id for the current process. The id can be retrieved only
|
| + // by child processes and only when tracing is enabled. This is intended to
|
| + // express cross-process sharing of memory dumps on the child-process side,
|
| + // without having to know its own child process id.
|
| + int tracing_process_id() const {
|
| + DCHECK_NE(kInvalidTracingProcessId, tracing_process_id_);
|
| + return tracing_process_id_;
|
| + }
|
| +
|
| private:
|
| // Descriptor struct used to hold information about registered MDPs. It is
|
| // deliberately copyable, in order to allow to be used as hash_map value.
|
| @@ -121,6 +140,14 @@ class BASE_EXPORT MemoryDumpManager : public TraceLog::EnabledStateObserver {
|
| MemoryDumpProvider* mdp,
|
| scoped_refptr<ProcessMemoryDumpHolder> pmd_holder);
|
|
|
| + // Pass kInvalidTracingProcessId for invalidating the id.
|
| + void set_tracing_process_id(int id) {
|
| + DCHECK(tracing_process_id_ == kInvalidTracingProcessId ||
|
| + id == kInvalidTracingProcessId ||
|
| + tracing_process_id_ == id);
|
| + tracing_process_id_ = id;
|
| + }
|
| +
|
| hash_map<MemoryDumpProvider*, MemoryDumpProviderInfo> dump_providers_;
|
|
|
| // Shared among all the PMDs to keep state scoped to the tracing session.
|
| @@ -139,6 +166,10 @@ class BASE_EXPORT MemoryDumpManager : public TraceLog::EnabledStateObserver {
|
| // For time-triggered periodic dumps.
|
| RepeatingTimer<MemoryDumpManager> periodic_dump_timer_;
|
|
|
| + // The unique id of the child process. This is created only for tracing and is
|
| + // expected to be valid only when tracing is enabled.
|
| + int tracing_process_id_;
|
| +
|
| // Skips the auto-registration of the core dumpers during Initialize().
|
| bool skip_core_dumpers_auto_registration_for_testing_;
|
|
|
| @@ -165,6 +196,10 @@ class BASE_EXPORT MemoryDumpManagerDelegate {
|
| MemoryDumpManager::GetInstance()->CreateProcessDump(args, callback);
|
| }
|
|
|
| + void set_tracing_process_id(int id) {
|
| + MemoryDumpManager::GetInstance()->set_tracing_process_id(id);
|
| + }
|
| +
|
| private:
|
| DISALLOW_COPY_AND_ASSIGN(MemoryDumpManagerDelegate);
|
| };
|
|
|