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

Unified Diff: base/trace_event/memory_dump_manager.h

Issue 1173263004: [tracing] Send unique tracing process id for cross-process memory dumps identification. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixing DCHECK while setting id. Created 5 years, 6 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 | « no previous file | base/trace_event/memory_dump_manager.cc » ('j') | base/trace_event/memory_dump_manager.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
};
« no previous file with comments | « no previous file | base/trace_event/memory_dump_manager.cc » ('j') | base/trace_event/memory_dump_manager.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698