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

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

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

Powered by Google App Engine
This is Rietveld 408576698