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

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

Issue 1852433005: Convert //base to use std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase after r384946 Created 4 years, 8 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
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/heap_profiler_stack_frame_deduplicator.h"
6
5 #include <iterator> 7 #include <iterator>
8 #include <memory>
6 9
7 #include "base/macros.h" 10 #include "base/macros.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "base/trace_event/heap_profiler_allocation_context.h" 11 #include "base/trace_event/heap_profiler_allocation_context.h"
10 #include "base/trace_event/heap_profiler_stack_frame_deduplicator.h"
11 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
12 13
13 namespace base { 14 namespace base {
14 namespace trace_event { 15 namespace trace_event {
15 16
16 // Define all strings once, because the deduplicator requires pointer equality, 17 // Define all strings once, because the deduplicator requires pointer equality,
17 // and string interning is unreliable. 18 // and string interning is unreliable.
18 const char kBrowserMain[] = "BrowserMain"; 19 const char kBrowserMain[] = "BrowserMain";
19 const char kRendererMain[] = "RendererMain"; 20 const char kRendererMain[] = "RendererMain";
20 const char kCreateWidget[] = "CreateWidget"; 21 const char kCreateWidget[] = "CreateWidget";
21 const char kInitialize[] = "Initialize"; 22 const char kInitialize[] = "Initialize";
22 const char kMalloc[] = "malloc"; 23 const char kMalloc[] = "malloc";
23 24
24 TEST(StackFrameDeduplicatorTest, SingleBacktrace) { 25 TEST(StackFrameDeduplicatorTest, SingleBacktrace) {
25 StackFrame bt[] = {kBrowserMain, kCreateWidget, kMalloc}; 26 StackFrame bt[] = {kBrowserMain, kCreateWidget, kMalloc};
26 27
27 // The call tree should look like this (index in brackets). 28 // The call tree should look like this (index in brackets).
28 // 29 //
29 // BrowserMain [0] 30 // BrowserMain [0]
30 // CreateWidget [1] 31 // CreateWidget [1]
31 // malloc [2] 32 // malloc [2]
32 33
33 scoped_ptr<StackFrameDeduplicator> dedup(new StackFrameDeduplicator); 34 std::unique_ptr<StackFrameDeduplicator> dedup(new StackFrameDeduplicator);
34 ASSERT_EQ(2, dedup->Insert(std::begin(bt), std::end(bt))); 35 ASSERT_EQ(2, dedup->Insert(std::begin(bt), std::end(bt)));
35 36
36 auto iter = dedup->begin(); 37 auto iter = dedup->begin();
37 ASSERT_EQ(kBrowserMain, (iter + 0)->frame); 38 ASSERT_EQ(kBrowserMain, (iter + 0)->frame);
38 ASSERT_EQ(-1, (iter + 0)->parent_frame_index); 39 ASSERT_EQ(-1, (iter + 0)->parent_frame_index);
39 40
40 ASSERT_EQ(kCreateWidget, (iter + 1)->frame); 41 ASSERT_EQ(kCreateWidget, (iter + 1)->frame);
41 ASSERT_EQ(0, (iter + 1)->parent_frame_index); 42 ASSERT_EQ(0, (iter + 1)->parent_frame_index);
42 43
43 ASSERT_EQ(kMalloc, (iter + 2)->frame); 44 ASSERT_EQ(kMalloc, (iter + 2)->frame);
(...skipping 12 matching lines...) Expand all
56 // The call tree should look like this (index in brackets). 57 // The call tree should look like this (index in brackets).
57 // 58 //
58 // BrowserMain [0] 59 // BrowserMain [0]
59 // CreateWidget [1] 60 // CreateWidget [1]
60 // RendererMain [2] 61 // RendererMain [2]
61 // CreateWidget [3] 62 // CreateWidget [3]
62 // 63 //
63 // Note that there will be two instances of CreateWidget, 64 // Note that there will be two instances of CreateWidget,
64 // with different parents. 65 // with different parents.
65 66
66 scoped_ptr<StackFrameDeduplicator> dedup(new StackFrameDeduplicator); 67 std::unique_ptr<StackFrameDeduplicator> dedup(new StackFrameDeduplicator);
67 ASSERT_EQ(1, dedup->Insert(std::begin(bt0), std::end(bt0))); 68 ASSERT_EQ(1, dedup->Insert(std::begin(bt0), std::end(bt0)));
68 ASSERT_EQ(3, dedup->Insert(std::begin(bt1), std::end(bt1))); 69 ASSERT_EQ(3, dedup->Insert(std::begin(bt1), std::end(bt1)));
69 70
70 auto iter = dedup->begin(); 71 auto iter = dedup->begin();
71 ASSERT_EQ(kBrowserMain, (iter + 0)->frame); 72 ASSERT_EQ(kBrowserMain, (iter + 0)->frame);
72 ASSERT_EQ(-1, (iter + 0)->parent_frame_index); 73 ASSERT_EQ(-1, (iter + 0)->parent_frame_index);
73 74
74 ASSERT_EQ(kCreateWidget, (iter + 1)->frame); 75 ASSERT_EQ(kCreateWidget, (iter + 1)->frame);
75 ASSERT_EQ(0, (iter + 1)->parent_frame_index); 76 ASSERT_EQ(0, (iter + 1)->parent_frame_index);
76 77
(...skipping 11 matching lines...) Expand all
88 StackFrame bt1[] = {kBrowserMain, kInitialize}; 89 StackFrame bt1[] = {kBrowserMain, kInitialize};
89 90
90 // The call tree should look like this (index in brackets). 91 // The call tree should look like this (index in brackets).
91 // 92 //
92 // BrowserMain [0] 93 // BrowserMain [0]
93 // CreateWidget [1] 94 // CreateWidget [1]
94 // Initialize [2] 95 // Initialize [2]
95 // 96 //
96 // Note that BrowserMain will be re-used. 97 // Note that BrowserMain will be re-used.
97 98
98 scoped_ptr<StackFrameDeduplicator> dedup(new StackFrameDeduplicator); 99 std::unique_ptr<StackFrameDeduplicator> dedup(new StackFrameDeduplicator);
99 ASSERT_EQ(1, dedup->Insert(std::begin(bt0), std::end(bt0))); 100 ASSERT_EQ(1, dedup->Insert(std::begin(bt0), std::end(bt0)));
100 ASSERT_EQ(2, dedup->Insert(std::begin(bt1), std::end(bt1))); 101 ASSERT_EQ(2, dedup->Insert(std::begin(bt1), std::end(bt1)));
101 102
102 auto iter = dedup->begin(); 103 auto iter = dedup->begin();
103 ASSERT_EQ(kBrowserMain, (iter + 0)->frame); 104 ASSERT_EQ(kBrowserMain, (iter + 0)->frame);
104 ASSERT_EQ(-1, (iter + 0)->parent_frame_index); 105 ASSERT_EQ(-1, (iter + 0)->parent_frame_index);
105 106
106 ASSERT_EQ(kCreateWidget, (iter + 1)->frame); 107 ASSERT_EQ(kCreateWidget, (iter + 1)->frame);
107 ASSERT_EQ(0, (iter + 1)->parent_frame_index); 108 ASSERT_EQ(0, (iter + 1)->parent_frame_index);
108 109
109 ASSERT_EQ(kInitialize, (iter + 2)->frame); 110 ASSERT_EQ(kInitialize, (iter + 2)->frame);
110 ASSERT_EQ(0, (iter + 2)->parent_frame_index); 111 ASSERT_EQ(0, (iter + 2)->parent_frame_index);
111 112
112 ASSERT_EQ(iter + 3, dedup->end()); 113 ASSERT_EQ(iter + 3, dedup->end());
113 114
114 // Inserting the same backtrace again should return the index of the existing 115 // Inserting the same backtrace again should return the index of the existing
115 // node. 116 // node.
116 ASSERT_EQ(1, dedup->Insert(std::begin(bt0), std::end(bt0))); 117 ASSERT_EQ(1, dedup->Insert(std::begin(bt0), std::end(bt0)));
117 ASSERT_EQ(2, dedup->Insert(std::begin(bt1), std::end(bt1))); 118 ASSERT_EQ(2, dedup->Insert(std::begin(bt1), std::end(bt1)));
118 ASSERT_EQ(dedup->begin() + 3, dedup->end()); 119 ASSERT_EQ(dedup->begin() + 3, dedup->end());
119 } 120 }
120 121
121 TEST(StackFrameDeduplicatorTest, NullPaddingIsRemoved) { 122 TEST(StackFrameDeduplicatorTest, NullPaddingIsRemoved) {
122 StackFrame bt0[] = {kBrowserMain, nullptr, nullptr, nullptr}; 123 StackFrame bt0[] = {kBrowserMain, nullptr, nullptr, nullptr};
123 124
124 scoped_ptr<StackFrameDeduplicator> dedup(new StackFrameDeduplicator); 125 std::unique_ptr<StackFrameDeduplicator> dedup(new StackFrameDeduplicator);
125 126
126 // There are four frames in the backtrace, but the null pointers should be 127 // There are four frames in the backtrace, but the null pointers should be
127 // skipped, so only one frame is inserted, which will have index 0. 128 // skipped, so only one frame is inserted, which will have index 0.
128 ASSERT_EQ(4u, arraysize(bt0)); 129 ASSERT_EQ(4u, arraysize(bt0));
129 ASSERT_EQ(0, dedup->Insert(std::begin(bt0), std::end(bt0))); 130 ASSERT_EQ(0, dedup->Insert(std::begin(bt0), std::end(bt0)));
130 ASSERT_EQ(dedup->begin() + 1, dedup->end()); 131 ASSERT_EQ(dedup->begin() + 1, dedup->end());
131 } 132 }
132 133
133 } // namespace trace_event 134 } // namespace trace_event
134 } // namespace base 135 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698