| 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
|
|
|