Index: net/socket/ssl_client_socket_unittest.cc |
diff --git a/net/socket/ssl_client_socket_unittest.cc b/net/socket/ssl_client_socket_unittest.cc |
index b80aa4ddf5af432f12e54a5e7a7012dea7cd1b0a..779ce5c65cedd0708ce1bb249e847b440588ab6a 100644 |
--- a/net/socket/ssl_client_socket_unittest.cc |
+++ b/net/socket/ssl_client_socket_unittest.cc |
@@ -18,6 +18,8 @@ |
#include "base/single_thread_task_runner.h" |
#include "base/threading/thread_task_runner_handle.h" |
#include "base/time/time.h" |
+#include "base/trace_event/memory_allocator_dump.h" |
+#include "base/trace_event/process_memory_dump.h" |
#include "net/base/address_list.h" |
#include "net/base/io_buffer.h" |
#include "net/base/net_errors.h" |
@@ -3674,4 +3676,61 @@ TEST_F(SSLClientSocketTest, AccessDeniedClientCerts) { |
EXPECT_THAT(rv, IsError(ERR_BAD_SSL_CLIENT_AUTH_CERT)); |
} |
+// Basic test for dumping memory stats. |
+TEST_F(SSLClientSocketTest, DumpMemoryStats) { |
+ ASSERT_TRUE(StartTestServer(SpawnedTestServer::SSLOptions())); |
+ |
+ int rv; |
+ ASSERT_TRUE(CreateAndConnectSSLClientSocket(SSLConfig(), &rv)); |
+ EXPECT_THAT(rv, IsOk()); |
+ |
+ base::trace_event::MemoryDumpArgs dump_args = { |
+ base::trace_event::MemoryDumpLevelOfDetail::DETAILED}; |
+ std::unique_ptr<base::trace_event::ProcessMemoryDump> process_memory_dump( |
+ new base::trace_event::ProcessMemoryDump(nullptr, dump_args)); |
+ base::trace_event::MemoryAllocatorDump* parent_dump1 = |
+ process_memory_dump->CreateAllocatorDump("parent1"); |
+ sock_->DumpMemoryStats(process_memory_dump.get(), |
+ parent_dump1->absolute_name()); |
+ |
+ // Write the request. |
+ std::string request_text = "GET / HTTP/1.1\r\n\r\n"; |
+ scoped_refptr<IOBuffer> request_buffer(new StringIOBuffer(request_text)); |
+ TestCompletionCallback write_callback; |
+ rv = write_callback.GetResult(sock_->Write( |
+ request_buffer.get(), request_text.size(), write_callback.callback())); |
+ EXPECT_EQ(static_cast<int>(request_text.size()), rv); |
+ |
+ base::trace_event::MemoryAllocatorDump* parent_dump2 = |
+ process_memory_dump->CreateAllocatorDump("parent2"); |
+ sock_->DumpMemoryStats(process_memory_dump.get(), |
+ parent_dump2->absolute_name()); |
davidben
2016/12/06 01:02:07
I'm not familiar with the MemoryAllocatorDump stuf
xunjieli
2016/12/06 18:36:08
Done. I tried to dump memory multiple times to be
|
+ |
+ // Read the response. |
+ TestCompletionCallback read_callback; |
+ scoped_refptr<IOBuffer> buf(new IOBuffer(4096)); |
+ rv = sock_->Read(buf.get(), 4096, read_callback.callback()); |
+ rv = read_callback.WaitForResult(); |
+ EXPECT_GT(rv, 0); |
+ |
+ base::trace_event::MemoryAllocatorDump* parent_dump3 = |
+ process_memory_dump->CreateAllocatorDump("parent3"); |
+ sock_->DumpMemoryStats(process_memory_dump.get(), |
+ parent_dump3->absolute_name()); |
+ |
+ const base::trace_event::ProcessMemoryDump::AllocatorDumpsMap& |
+ allocator_dumps = process_memory_dump->allocator_dumps(); |
+ bool did_dump[] = {false, false, false}; |
+ for (const auto& it : allocator_dumps) { |
davidben
2016/12/06 01:02:07
Super nitpicky nitpick: it => pair? it is usually
xunjieli
2016/12/06 18:36:08
Done.
|
+ const std::string& dump_name = it.first; |
+ if (dump_name.find("parent1/ssl_socket") != std::string::npos) |
+ did_dump[0] = true; |
+ if (dump_name.find("parent2/ssl_socket") != std::string::npos) |
+ did_dump[1] = true; |
+ if (dump_name.find("parent3/ssl_socket") != std::string::npos) |
+ did_dump[2] = true; |
+ } |
+ EXPECT_THAT(did_dump, testing::ElementsAre(true, true, true)); |
+} |
+ |
} // namespace net |