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

Side by Side Diff: base/debug/trace_memory_unittest.cc

Issue 15418002: Record Chrome trace events in tcmalloc heap profiles (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase, cleanup Created 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/debug/trace_memory.h"
6
7 #include "base/debug/trace_event_impl.h"
8 #include "base/message_loop.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 namespace base {
12 namespace debug {
13
14 typedef testing::Test TraceMemoryTest;
15
16 TEST_F(TraceMemoryTest, TraceMemoryTraceLogObserver) {
17 MessageLoop message_loop;
18
19 // Start with no observers of the TraceLog.
20 EXPECT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest());
21
22 // Creating an observer adds it to the TraceLog observer list.
23 scoped_ptr<TraceMemoryTraceLogObserver> observer(
24 new TraceMemoryTraceLogObserver(
25 message_loop.message_loop_proxy()));
26 EXPECT_EQ(1u, TraceLog::GetInstance()->GetObserverCountForTest());
27 EXPECT_TRUE(TraceLog::GetInstance()->HasEnabledStateObserver(observer.get()));
28
29 // By default the observer isn't dumping memory profiles.
30 EXPECT_FALSE(observer->IsTimerRunningForTest());
31
32 // Simulate enabling tracing.
33 observer->OnTraceLogEnabled();
34 message_loop.RunUntilIdle();
35 EXPECT_TRUE(observer->IsTimerRunningForTest());
36
37 // Simulate disabling tracing.
38 observer->OnTraceLogDisabled();
39 message_loop.RunUntilIdle();
40 EXPECT_FALSE(observer->IsTimerRunningForTest());
41
42 // Deleting the observer removes it from the TraceLog observer list.
43 observer.reset();
44 EXPECT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest());
45 }
46
47 TEST_F(TraceMemoryTest, ScopedTraceMemory) {
48 // Start with an empty stack.
49 EXPECT_EQ(0, ScopedTraceMemory::GetStackIndexForTest());
50
51 {
52 // Push an item.
53 const char kScope1[] = "scope1";
54 ScopedTraceMemory scope1(kScope1);
55 EXPECT_EQ(1, ScopedTraceMemory::GetStackIndexForTest());
56 EXPECT_EQ(kScope1, ScopedTraceMemory::GetItemForTest(0));
57
58 {
59 // One more item.
60 const char kScope2[] = "scope2";
61 ScopedTraceMemory scope2(kScope2);
62 EXPECT_EQ(2, ScopedTraceMemory::GetStackIndexForTest());
63 EXPECT_EQ(kScope2, ScopedTraceMemory::GetItemForTest(1));
64 }
65
66 // Ended scope 2.
67 EXPECT_EQ(1, ScopedTraceMemory::GetStackIndexForTest());
68 }
69
70 // Ended scope 1.
71 EXPECT_EQ(0, ScopedTraceMemory::GetStackIndexForTest());
72 }
73
74 void TestDeepScopeNesting(int current, int depth) {
75 EXPECT_EQ(current, ScopedTraceMemory::GetStackIndexForTest());
76 const char kCategory[] = "foo";
77 ScopedTraceMemory scope(kCategory);
78 if (current < depth)
79 TestDeepScopeNesting(current + 1, depth);
80 EXPECT_EQ(current + 1, ScopedTraceMemory::GetStackIndexForTest());
81 }
82
83 TEST_F(TraceMemoryTest, DeepScopeNesting) {
84 // Ensure really deep scopes don't crash.
85 TestDeepScopeNesting(0, 100);
86 }
87
88 } // namespace debug
89 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698