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

Side by Side Diff: base/trace_event/memory_dump_manager_unittest.cc

Issue 988693005: Chromium roll (https://codereview.chromium.org/976353002) (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: fixed bad android build patch Created 5 years, 9 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
« no previous file with comments | « base/trace_event/memory_dump_manager.cc ('k') | base/trace_event/memory_dump_provider.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/trace_event/memory_dump_manager.h" 5 #include "base/trace_event/memory_dump_manager.h"
6 6
7 #include "base/trace_event/memory_dump_provider.h" 7 #include "base/trace_event/memory_dump_provider.h"
8 #include "base/trace_event/process_memory_dump.h" 8 #include "base/trace_event/process_memory_dump.h"
9 #include "testing/gmock/include/gmock/gmock.h" 9 #include "testing/gmock/include/gmock/gmock.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
11 11
12 using testing::_; 12 using testing::_;
13 using testing::Return;
13 14
14 namespace base { 15 namespace base {
15 namespace trace_event { 16 namespace trace_event {
16 17
17 class MemoryDumpManagerTest : public testing::Test { 18 class MemoryDumpManagerTest : public testing::Test {
18 public: 19 public:
19 void SetUp() override { 20 void SetUp() override {
20 mdm_.reset(new MemoryDumpManager()); 21 mdm_.reset(new MemoryDumpManager());
21 MemoryDumpManager::SetInstanceForTesting(mdm_.get()); 22 MemoryDumpManager::SetInstanceForTesting(mdm_.get());
22 ASSERT_EQ(mdm_, MemoryDumpManager::GetInstance()); 23 ASSERT_EQ(mdm_, MemoryDumpManager::GetInstance());
(...skipping 18 matching lines...) Expand all
41 42
42 scoped_ptr<MemoryDumpManager> mdm_; 43 scoped_ptr<MemoryDumpManager> mdm_;
43 44
44 private: 45 private:
45 // We want our singleton torn down after each test. 46 // We want our singleton torn down after each test.
46 ShadowingAtExitManager at_exit_manager_; 47 ShadowingAtExitManager at_exit_manager_;
47 }; 48 };
48 49
49 class MockDumpProvider : public MemoryDumpProvider { 50 class MockDumpProvider : public MemoryDumpProvider {
50 public: 51 public:
51 MOCK_METHOD1(DumpInto, void(ProcessMemoryDump* pmd)); 52 MOCK_METHOD1(DumpInto, bool(ProcessMemoryDump* pmd));
53
54 const char* GetFriendlyName() const override { return "MockDumpProvider"; }
52 }; 55 };
53 56
54 TEST_F(MemoryDumpManagerTest, SingleDumper) { 57 TEST_F(MemoryDumpManagerTest, SingleDumper) {
55 MockDumpProvider mdp; 58 MockDumpProvider mdp;
56 mdm_->RegisterDumpProvider(&mdp); 59 mdm_->RegisterDumpProvider(&mdp);
57 60
58 // Check that the dumper is not called if the memory category is not enabled. 61 // Check that the dumper is not called if the memory category is not enabled.
59 EnableTracing("foo-and-bar-but-not-memory"); 62 EnableTracing("foo-and-bar-but-not-memory");
60 EXPECT_CALL(mdp, DumpInto(_)).Times(0); 63 EXPECT_CALL(mdp, DumpInto(_)).Times(0);
61 mdm_->RequestDumpPoint(DumpPointType::EXPLICITLY_TRIGGERED); 64 mdm_->RequestDumpPoint(DumpPointType::EXPLICITLY_TRIGGERED);
62 DisableTracing(); 65 DisableTracing();
63 66
64 // Now repeat enabling the memory category and check that the dumper is 67 // Now repeat enabling the memory category and check that the dumper is
65 // invoked this time. 68 // invoked this time.
66 EnableTracing(kTraceCategory); 69 EnableTracing(kTraceCategory);
67 EXPECT_CALL(mdp, DumpInto(_)).Times(3); 70 EXPECT_CALL(mdp, DumpInto(_)).Times(3).WillRepeatedly(Return(true));
68 for (int i = 0; i < 3; ++i) 71 for (int i = 0; i < 3; ++i)
69 mdm_->RequestDumpPoint(DumpPointType::EXPLICITLY_TRIGGERED); 72 mdm_->RequestDumpPoint(DumpPointType::EXPLICITLY_TRIGGERED);
70 DisableTracing(); 73 DisableTracing();
71 74
72 mdm_->UnregisterDumpProvider(&mdp); 75 mdm_->UnregisterDumpProvider(&mdp);
73 76
74 // Finally check the unregister logic (no calls to the mdp after unregister). 77 // Finally check the unregister logic (no calls to the mdp after unregister).
75 EnableTracing(kTraceCategory); 78 EnableTracing(kTraceCategory);
76 EXPECT_CALL(mdp, DumpInto(_)).Times(0); 79 EXPECT_CALL(mdp, DumpInto(_)).Times(0);
77 mdm_->RequestDumpPoint(DumpPointType::EXPLICITLY_TRIGGERED); 80 mdm_->RequestDumpPoint(DumpPointType::EXPLICITLY_TRIGGERED);
78 TraceLog::GetInstance()->SetDisabled(); 81 TraceLog::GetInstance()->SetDisabled();
79 } 82 }
80 83
81 TEST_F(MemoryDumpManagerTest, UnregisterDumperWhileTracing) { 84 TEST_F(MemoryDumpManagerTest, UnregisterDumperWhileTracing) {
82 MockDumpProvider mdp; 85 MockDumpProvider mdp;
83 mdm_->RegisterDumpProvider(&mdp); 86 mdm_->RegisterDumpProvider(&mdp);
84 87
85 EnableTracing(kTraceCategory); 88 EnableTracing(kTraceCategory);
86 EXPECT_CALL(mdp, DumpInto(_)).Times(1); 89 EXPECT_CALL(mdp, DumpInto(_)).Times(1).WillRepeatedly(Return(true));
87 mdm_->RequestDumpPoint(DumpPointType::EXPLICITLY_TRIGGERED); 90 mdm_->RequestDumpPoint(DumpPointType::EXPLICITLY_TRIGGERED);
88 91
89 mdm_->UnregisterDumpProvider(&mdp); 92 mdm_->UnregisterDumpProvider(&mdp);
90 EXPECT_CALL(mdp, DumpInto(_)).Times(0); 93 EXPECT_CALL(mdp, DumpInto(_)).Times(0);
91 mdm_->RequestDumpPoint(DumpPointType::EXPLICITLY_TRIGGERED); 94 mdm_->RequestDumpPoint(DumpPointType::EXPLICITLY_TRIGGERED);
92 95
93 DisableTracing(); 96 DisableTracing();
94 } 97 }
95 98
96 TEST_F(MemoryDumpManagerTest, MultipleDumpers) { 99 TEST_F(MemoryDumpManagerTest, MultipleDumpers) {
97 MockDumpProvider mdp1; 100 MockDumpProvider mdp1;
98 MockDumpProvider mdp2; 101 MockDumpProvider mdp2;
99 102
100 // Enable only mdp1. 103 // Enable only mdp1.
101 mdm_->RegisterDumpProvider(&mdp1); 104 mdm_->RegisterDumpProvider(&mdp1);
102 EnableTracing(kTraceCategory); 105 EnableTracing(kTraceCategory);
103 EXPECT_CALL(mdp1, DumpInto(_)).Times(1); 106 EXPECT_CALL(mdp1, DumpInto(_)).Times(1).WillRepeatedly(Return(true));
104 EXPECT_CALL(mdp2, DumpInto(_)).Times(0); 107 EXPECT_CALL(mdp2, DumpInto(_)).Times(0);
105 mdm_->RequestDumpPoint(DumpPointType::EXPLICITLY_TRIGGERED); 108 mdm_->RequestDumpPoint(DumpPointType::EXPLICITLY_TRIGGERED);
106 DisableTracing(); 109 DisableTracing();
107 110
108 // Invert: enable mdp1 and disable mdp2. 111 // Invert: enable mdp1 and disable mdp2.
109 mdm_->UnregisterDumpProvider(&mdp1); 112 mdm_->UnregisterDumpProvider(&mdp1);
110 mdm_->RegisterDumpProvider(&mdp2); 113 mdm_->RegisterDumpProvider(&mdp2);
111 EnableTracing(kTraceCategory); 114 EnableTracing(kTraceCategory);
112 EXPECT_CALL(mdp1, DumpInto(_)).Times(0); 115 EXPECT_CALL(mdp1, DumpInto(_)).Times(0);
113 EXPECT_CALL(mdp2, DumpInto(_)).Times(1); 116 EXPECT_CALL(mdp2, DumpInto(_)).Times(1).WillRepeatedly(Return(true));
114 mdm_->RequestDumpPoint(DumpPointType::EXPLICITLY_TRIGGERED); 117 mdm_->RequestDumpPoint(DumpPointType::EXPLICITLY_TRIGGERED);
115 DisableTracing(); 118 DisableTracing();
116 119
117 // Enable both mdp1 and mdp2. 120 // Enable both mdp1 and mdp2.
118 mdm_->RegisterDumpProvider(&mdp1); 121 mdm_->RegisterDumpProvider(&mdp1);
119 EnableTracing(kTraceCategory); 122 EnableTracing(kTraceCategory);
120 EXPECT_CALL(mdp1, DumpInto(_)).Times(1); 123 EXPECT_CALL(mdp1, DumpInto(_)).Times(1).WillRepeatedly(Return(true));
121 EXPECT_CALL(mdp2, DumpInto(_)).Times(1); 124 EXPECT_CALL(mdp2, DumpInto(_)).Times(1).WillRepeatedly(Return(true));
122 mdm_->RequestDumpPoint(DumpPointType::EXPLICITLY_TRIGGERED); 125 mdm_->RequestDumpPoint(DumpPointType::EXPLICITLY_TRIGGERED);
123 DisableTracing(); 126 DisableTracing();
124 } 127 }
125 128
129 // Enable both dump providers, make mdp1 fail and assert that only mdp2 is
130 // invoked the 2nd time.
131 // FIXME(primiano): remove once crbug.com/461788 gets fixed.
132 TEST_F(MemoryDumpManagerTest, DisableFailingDumpers) {
133 MockDumpProvider mdp1;
134 MockDumpProvider mdp2;
135
136 mdm_->RegisterDumpProvider(&mdp1);
137 mdm_->RegisterDumpProvider(&mdp2);
138 EnableTracing(kTraceCategory);
139
140 EXPECT_CALL(mdp1, DumpInto(_)).Times(1).WillRepeatedly(Return(false));
141 EXPECT_CALL(mdp2, DumpInto(_)).Times(1).WillRepeatedly(Return(true));
142 mdm_->RequestDumpPoint(DumpPointType::EXPLICITLY_TRIGGERED);
143
144 EXPECT_CALL(mdp1, DumpInto(_)).Times(0);
145 EXPECT_CALL(mdp2, DumpInto(_)).Times(1).WillRepeatedly(Return(false));
146 mdm_->RequestDumpPoint(DumpPointType::EXPLICITLY_TRIGGERED);
147
148 DisableTracing();
149 }
150
126 } // namespace trace_Event 151 } // namespace trace_Event
127 } // namespace base 152 } // namespace base
OLDNEW
« no previous file with comments | « base/trace_event/memory_dump_manager.cc ('k') | base/trace_event/memory_dump_provider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698