Index: base/debug/trace_event_memory_unittest.cc |
diff --git a/base/debug/trace_event_memory_unittest.cc b/base/debug/trace_event_memory_unittest.cc |
deleted file mode 100644 |
index 12135b81c3abe29f74ab882938d5c9ef741ee824..0000000000000000000000000000000000000000 |
--- a/base/debug/trace_event_memory_unittest.cc |
+++ /dev/null |
@@ -1,240 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "base/debug/trace_event_memory.h" |
- |
-#include <sstream> |
-#include <string> |
- |
-#include "base/debug/trace_event_impl.h" |
-#include "base/message_loop/message_loop.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-#if defined(TCMALLOC_TRACE_MEMORY_SUPPORTED) |
-#include "third_party/tcmalloc/chromium/src/gperftools/heap-profiler.h" |
-#endif |
- |
-namespace base { |
-namespace debug { |
- |
-// Tests for the trace event memory tracking system. Exists as a class so it |
-// can be a friend of TraceMemoryController. |
-class TraceMemoryTest : public testing::Test { |
- public: |
- TraceMemoryTest() {} |
- ~TraceMemoryTest() override {} |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(TraceMemoryTest); |
-}; |
- |
-////////////////////////////////////////////////////////////////////////////// |
- |
-#if defined(TCMALLOC_TRACE_MEMORY_SUPPORTED) |
- |
-TEST_F(TraceMemoryTest, TraceMemoryController) { |
- MessageLoop message_loop; |
- |
- // Start with no observers of the TraceLog. |
- EXPECT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest()); |
- |
- // Creating a controller adds it to the TraceLog observer list. |
- scoped_ptr<TraceMemoryController> controller( |
- new TraceMemoryController( |
- message_loop.message_loop_proxy(), |
- ::HeapProfilerWithPseudoStackStart, |
- ::HeapProfilerStop, |
- ::GetHeapProfile)); |
- EXPECT_EQ(1u, TraceLog::GetInstance()->GetObserverCountForTest()); |
- EXPECT_TRUE( |
- TraceLog::GetInstance()->HasEnabledStateObserver(controller.get())); |
- |
- // By default the observer isn't dumping memory profiles. |
- EXPECT_FALSE(controller->IsTimerRunningForTest()); |
- |
- // Simulate enabling tracing. |
- controller->StartProfiling(); |
- message_loop.RunUntilIdle(); |
- EXPECT_TRUE(controller->IsTimerRunningForTest()); |
- |
- // Simulate disabling tracing. |
- controller->StopProfiling(); |
- message_loop.RunUntilIdle(); |
- EXPECT_FALSE(controller->IsTimerRunningForTest()); |
- |
- // Deleting the observer removes it from the TraceLog observer list. |
- controller.reset(); |
- EXPECT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest()); |
-} |
- |
-TEST_F(TraceMemoryTest, ScopedTraceMemory) { |
- ScopedTraceMemory::InitForTest(); |
- |
- // Start with an empty stack. |
- EXPECT_EQ(0, ScopedTraceMemory::GetStackDepthForTest()); |
- |
- { |
- // Push an item. |
- ScopedTraceMemory scope1("cat1", "name1"); |
- EXPECT_EQ(1, ScopedTraceMemory::GetStackDepthForTest()); |
- EXPECT_EQ("cat1", ScopedTraceMemory::GetScopeDataForTest(0).category); |
- EXPECT_EQ("name1", ScopedTraceMemory::GetScopeDataForTest(0).name); |
- |
- { |
- // One more item. |
- ScopedTraceMemory scope2("cat2", "name2"); |
- EXPECT_EQ(2, ScopedTraceMemory::GetStackDepthForTest()); |
- EXPECT_EQ("cat2", ScopedTraceMemory::GetScopeDataForTest(1).category); |
- EXPECT_EQ("name2", ScopedTraceMemory::GetScopeDataForTest(1).name); |
- } |
- |
- // Ended scope 2. |
- EXPECT_EQ(1, ScopedTraceMemory::GetStackDepthForTest()); |
- } |
- |
- // Ended scope 1. |
- EXPECT_EQ(0, ScopedTraceMemory::GetStackDepthForTest()); |
- |
- ScopedTraceMemory::CleanupForTest(); |
-} |
- |
-void TestDeepScopeNesting(int current, int depth) { |
- EXPECT_EQ(current, ScopedTraceMemory::GetStackDepthForTest()); |
- ScopedTraceMemory scope("category", "name"); |
- if (current < depth) |
- TestDeepScopeNesting(current + 1, depth); |
- EXPECT_EQ(current + 1, ScopedTraceMemory::GetStackDepthForTest()); |
-} |
- |
-TEST_F(TraceMemoryTest, DeepScopeNesting) { |
- ScopedTraceMemory::InitForTest(); |
- |
- // Ensure really deep scopes don't crash. |
- TestDeepScopeNesting(0, 100); |
- |
- ScopedTraceMemory::CleanupForTest(); |
-} |
- |
-#endif // defined(TRACE_MEMORY_SUPPORTED) |
- |
-///////////////////////////////////////////////////////////////////////////// |
- |
-TEST_F(TraceMemoryTest, AppendHeapProfileTotalsAsTraceFormat) { |
- // Empty input gives empty output. |
- std::string empty_output; |
- AppendHeapProfileTotalsAsTraceFormat("", &empty_output); |
- EXPECT_EQ("", empty_output); |
- |
- // Typical case. |
- const char input[] = |
- "heap profile: 357: 55227 [ 14653: 2624014] @ heapprofile"; |
- const std::string kExpectedOutput = |
- "{\"current_allocs\": 357, \"current_bytes\": 55227, \"trace\": \"\"}"; |
- std::string output; |
- AppendHeapProfileTotalsAsTraceFormat(input, &output); |
- EXPECT_EQ(kExpectedOutput, output); |
-} |
- |
-TEST_F(TraceMemoryTest, AppendHeapProfileLineAsTraceFormat) { |
- // Empty input gives empty output. |
- std::string empty_output; |
- EXPECT_FALSE(AppendHeapProfileLineAsTraceFormat("", &empty_output)); |
- EXPECT_EQ("", empty_output); |
- |
- // Invalid input returns false. |
- std::string junk_output; |
- EXPECT_FALSE(AppendHeapProfileLineAsTraceFormat("junk", &junk_output)); |
- |
- // Input with normal category and name entries. |
- const char kCategory[] = "category"; |
- const char kName[] = "name"; |
- std::ostringstream input; |
- input << " 68: 4195 [ 1087: 98009] @ " << &kCategory << " " |
- << &kName; |
- const std::string kExpectedOutput = |
- ",\n" |
- "{" |
- "\"current_allocs\": 68, " |
- "\"current_bytes\": 4195, " |
- "\"trace\": \"name \"" |
- "}"; |
- std::string output; |
- EXPECT_TRUE( |
- AppendHeapProfileLineAsTraceFormat(input.str().c_str(), &output)); |
- EXPECT_EQ(kExpectedOutput, output); |
- |
- // Input with with the category "toplevel". |
- // TODO(jamescook): Eliminate this special case and move the logic to the |
- // trace viewer code. |
- const char kTaskCategory[] = "toplevel"; |
- const char kTaskName[] = "TaskName"; |
- std::ostringstream input2; |
- input2 << " 68: 4195 [ 1087: 98009] @ " << &kTaskCategory << " " |
- << &kTaskName; |
- const std::string kExpectedOutput2 = |
- ",\n" |
- "{" |
- "\"current_allocs\": 68, " |
- "\"current_bytes\": 4195, " |
- "\"trace\": \"TaskName->PostTask \"" |
- "}"; |
- std::string output2; |
- EXPECT_TRUE( |
- AppendHeapProfileLineAsTraceFormat(input2.str().c_str(), &output2)); |
- EXPECT_EQ(kExpectedOutput2, output2); |
- |
- // Zero current allocations is skipped. |
- std::ostringstream zero_input; |
- zero_input << " 0: 0 [ 1087: 98009] @ " << &kCategory << " " |
- << &kName; |
- std::string zero_output; |
- EXPECT_FALSE(AppendHeapProfileLineAsTraceFormat(zero_input.str().c_str(), |
- &zero_output)); |
- EXPECT_EQ("", zero_output); |
-} |
- |
-TEST_F(TraceMemoryTest, AppendHeapProfileAsTraceFormat) { |
- // Empty input gives empty output. |
- std::string empty_output; |
- AppendHeapProfileAsTraceFormat("", &empty_output); |
- EXPECT_EQ("", empty_output); |
- |
- // Typical case. |
- const char input[] = |
- "heap profile: 357: 55227 [ 14653: 2624014] @ heapprofile\n" |
- " 95: 40940 [ 649: 114260] @\n" |
- " 77: 32546 [ 742: 106234] @ 0x0 0x0\n" |
- " 0: 0 [ 132: 4236] @ 0x0\n" |
- "\n" |
- "MAPPED_LIBRARIES:\n" |
- "1be411fc1000-1be4139e4000 rw-p 00000000 00:00 0\n" |
- "1be4139e4000-1be4139e5000 ---p 00000000 00:00 0\n"; |
- const std::string kExpectedOutput = |
- "[{" |
- "\"current_allocs\": 357, " |
- "\"current_bytes\": 55227, " |
- "\"trace\": \"\"},\n" |
- "{\"current_allocs\": 95, " |
- "\"current_bytes\": 40940, " |
- "\"trace\": \"\"},\n" |
- "{\"current_allocs\": 77, " |
- "\"current_bytes\": 32546, " |
- "\"trace\": \"null \"" |
- "}]\n"; |
- std::string output; |
- AppendHeapProfileAsTraceFormat(input, &output); |
- EXPECT_EQ(kExpectedOutput, output); |
-} |
- |
-TEST_F(TraceMemoryTest, StringFromHexAddress) { |
- EXPECT_STREQ("null", StringFromHexAddress("0x0")); |
- EXPECT_STREQ("error", StringFromHexAddress("not an address")); |
- const char kHello[] = "hello"; |
- std::ostringstream hex_address; |
- hex_address << &kHello; |
- EXPECT_STREQ(kHello, StringFromHexAddress(hex_address.str())); |
-} |
- |
-} // namespace debug |
-} // namespace base |