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

Unified Diff: mojo/edk/system/handle_table.cc

Issue 2915013006: Add a Mojo MemoryDumpProvider. (Closed)
Patch Set: compile error. Created 3 years, 7 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 | « mojo/edk/system/handle_table.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/edk/system/handle_table.cc
diff --git a/mojo/edk/system/handle_table.cc b/mojo/edk/system/handle_table.cc
index b570793dbe0f4286dc204f76402fa29665c40b91..03b6d0b0b527ec591e5693304b72d2b4a641f05b 100644
--- a/mojo/edk/system/handle_table.cc
+++ b/mojo/edk/system/handle_table.cc
@@ -8,12 +8,50 @@
#include <limits>
+#include "base/trace_event/memory_dump_manager.h"
+
namespace mojo {
namespace edk {
-HandleTable::HandleTable() {}
+namespace {
+
+const char* GetNameForDispatcherType(Dispatcher::Type type) {
+ switch (type) {
+ case Dispatcher::Type::UNKNOWN:
+ return "unknown";
+ case Dispatcher::Type::MESSAGE_PIPE:
+ return "message_pipe";
+ case Dispatcher::Type::DATA_PIPE_PRODUCER:
+ return "data_pipe_producer";
+ case Dispatcher::Type::DATA_PIPE_CONSUMER:
+ return "data_pipe_consumer";
+ case Dispatcher::Type::SHARED_BUFFER:
+ return "shared_buffer";
+ case Dispatcher::Type::WATCHER:
+ return "watcher";
+ case Dispatcher::Type::PLATFORM_HANDLE:
+ return "platform_handle";
+ }
+ return "unknown";
ssid 2017/06/07 00:30:28 Can you add NOTREACHED() here? Creating 2 memory d
+}
-HandleTable::~HandleTable() {}
+const char* kDumpProviderName = "MojoHandleTable";
ssid 2017/06/07 00:30:28 remove this constant here and just inline. Will be
+
+} // namespace
+
+HandleTable::HandleTable() {
+ base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
+ this, kDumpProviderName, nullptr);
+}
+
+HandleTable::~HandleTable() {
+ base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
ssid 2017/06/07 00:30:28 Why are you registering the dump provider again. T
+ this, kDumpProviderName, nullptr);
+}
+
+base::Lock& HandleTable::GetLock() {
+ return lock_;
+}
MojoHandle HandleTable::AddDispatcher(scoped_refptr<Dispatcher> dispatcher) {
// Oops, we're out of handles.
@@ -122,6 +160,38 @@ void HandleTable::GetActiveHandlesForTest(std::vector<MojoHandle>* handles) {
handles->push_back(entry.first);
}
+// MemoryDumpProvider implementation.
+bool HandleTable::OnMemoryDump(const base::trace_event::MemoryDumpArgs& args,
ssid 2017/06/07 00:30:28 Is it possible to add test for this? If this is to
+ base::trace_event::ProcessMemoryDump* pmd) {
+ // Create entries for all relevant dispatcher types to ensure they are present
+ // in the final dump.
+ std::map<Dispatcher::Type, int> handle_count;
+ handle_count[Dispatcher::Type::MESSAGE_PIPE];
+ handle_count[Dispatcher::Type::DATA_PIPE_PRODUCER];
+ handle_count[Dispatcher::Type::DATA_PIPE_CONSUMER];
+ handle_count[Dispatcher::Type::SHARED_BUFFER];
+ handle_count[Dispatcher::Type::WATCHER];
+ handle_count[Dispatcher::Type::PLATFORM_HANDLE];
ssid 2017/06/07 00:30:28 These lines are not needed. Just doing ++handle_co
+
+ // Count the number of each dispatcher type.
+ {
+ base::AutoLock lock(GetLock());
+ for (const auto& entry : handles_) {
+ ++handle_count[entry.second.dispatcher->GetType()];
+ }
+ }
+
+ base::trace_event::MemoryAllocatorDump* outer_dump =
+ pmd->CreateAllocatorDump("mojo");
+ for (const auto& entry : handle_count) {
+ outer_dump->AddScalar(GetNameForDispatcherType(entry.first),
ssid 2017/06/07 00:30:28 This should be "mojo/unknown" and so on. Else no s
ssid 2017/06/07 00:31:16 just noticed that this is fixed. please ignore.
+ base::trace_event::MemoryAllocatorDump::kUnitsObjects,
+ entry.second);
+ }
+
+ return true;
+}
+
HandleTable::Entry::Entry() {}
HandleTable::Entry::Entry(scoped_refptr<Dispatcher> dispatcher)
« no previous file with comments | « mojo/edk/system/handle_table.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698