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

Side by Side Diff: base/debug/trace_event_argument.h

Issue 380763002: Add builders for tracing event's structural arguments (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Added non-template TracedArrayBase and TracedDictionaryBase, typedefed SelftType Created 6 years, 5 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
« no previous file with comments | « base/base.gypi ('k') | base/debug/trace_event_argument.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 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 #ifndef BASE_DEBUG_TRACE_EVENT_ARGUMENT_H_
6 #define BASE_DEBUG_TRACE_EVENT_ARGUMENT_H_
7
8 #include <string>
9 #include <vector>
10
11 #include "base/debug/trace_event.h"
12 #include "base/memory/scoped_ptr.h"
13
14 namespace base {
15
16 class DictionaryValue;
17 class ListValue;
18 class StringValue;
19 class TracedArrayBase;
20 class Value;
21
22 template<class T> class TracedArray;
23 template<class T> class TracedDictionary;
24
25 class BASE_EXPORT TracedValueBase {
26 protected:
27 TracedValueBase();
28 ~TracedValueBase();
29
30 void EndCurrentDictionary();
31 void EndCurrentArray();
32
33 void SetInteger(const char* name, int value);
34 void SetDouble(const char* name, double);
35 void SetBoolean(const char* name, bool value);
36 void SetString(const char* name, const std::string& value);
37 void BeginDictionaryNamed(const char* name);
38 void BeginArrayNamed(const char* name);
39
40 void PushInteger(int);
41 void PushDouble(double);
42 void PushBoolean(bool);
43 void PushString(const std::string&);
44 void PushArray();
45 void PushDictionary();
46
47 DictionaryValue* GetCurrentDictionary() const;
48 ListValue* GetCurrentArray() const;
49
50 std::vector<Value*> m_stack;
willchan no longer on Chromium 2014/07/14 15:21:46 Should be private and named stack_ instead of m_st
yurys 2014/07/14 16:16:30 It is used in the descendants. I can make it priva
willchan no longer on Chromium 2014/07/14 16:49:22 https://engdoc.corp.google.com/eng/doc/devguide/cp
willchan no longer on Chromium 2014/07/14 16:50:39 Oops, meant to use the public link :) http://goog
51
52 private:
53 DISALLOW_COPY_AND_ASSIGN(TracedValueBase);
54 };
55
56 class BASE_EXPORT TracedDictionaryBase : public TracedValueBase {
57 private:
58 typedef TracedDictionaryBase SelfType;
59 public:
60 void EndDictionary()
61 {
62 EndCurrentDictionary();
63 }
64
65 TracedDictionary<SelfType>& BeginDictionary(const char* name)
66 {
67 BeginDictionaryNamed(name);
68 return *reinterpret_cast<TracedDictionary<SelfType>*>(this);
69 }
70 TracedArray<SelfType>& BeginArray(const char* name)
71 {
72 BeginArrayNamed(name);
73 return *reinterpret_cast<TracedArray<SelfType>*>(this);
74 }
75 SelfType& SetInteger(const char* name, int value)
76 {
77 TracedValueBase::SetInteger(name, value);
78 return *this;
79 }
80 SelfType& SetDouble(const char* name, double value)
81 {
82 TracedValueBase::SetDouble(name, value);
83 return *this;
84 }
85 SelfType& SetBoolean(const char* name, bool value)
86 {
87 TracedValueBase::SetBoolean(name, value);
88 return *this;
89 }
90 SelfType& SetString(const char* name, const std::string& value)
91 {
92 TracedValueBase::SetString(name, value);
93 return *this;
94 }
95 private:
96 TracedDictionaryBase();
97 ~TracedDictionaryBase();
98 DISALLOW_COPY_AND_ASSIGN(TracedDictionaryBase);
99 };
100
101 template <class OwnerType>
102 class TracedDictionary : public TracedDictionaryBase {
103 private:
104 typedef TracedDictionary<OwnerType> SelfType;
105 public:
106 OwnerType& EndDictionary() {
107 DCHECK(m_stack.size() == nestingLevel);
108 TracedDictionaryBase::EndDictionary();
109 return *reinterpret_cast<OwnerType*>(this);
110 }
111
112 TracedDictionary<SelfType >& BeginDictionary(
113 const char* name) {
114 TracedDictionaryBase::BeginDictionary(name);
115 return *reinterpret_cast<TracedDictionary<SelfType>*>(this);
116 }
117 TracedArray<SelfType >& BeginArray(const char* name) {
118 TracedDictionaryBase::BeginArray(name);
119 return *reinterpret_cast<TracedArray<SelfType>*>(this);
120 }
121 SelfType& SetInteger(const char* name, int value) {
122 TracedDictionaryBase::SetInteger(name, value);
123 return *this;
124 }
125 SelfType& SetDouble(const char* name, double value) {
126 TracedDictionaryBase::SetDouble(name, value);
127 return *this;
128 }
129 SelfType& SetBoolean(const char* name, bool value) {
130 TracedDictionaryBase::SetBoolean(name, value);
131 return *this;
132 }
133 SelfType& SetString(const char* name, const std::string& value) {
134 TracedDictionaryBase::SetString(name, value);
135 return *this;
136 }
137
138 static const size_t nestingLevel = OwnerType::nestingLevel + 1;
willchan no longer on Chromium 2014/07/14 15:21:46 kNestingLevel
yurys 2014/07/14 16:16:30 Done.
139
140 private:
141 TracedDictionary();
142 ~TracedDictionary();
143 DISALLOW_COPY_AND_ASSIGN(TracedDictionary);
144 };
145
146 class BASE_EXPORT TracedArrayBase : public TracedValueBase {
147 private:
148 typedef TracedArrayBase SelfType;
149 public:
150 void EndArray()
151 {
152 EndCurrentArray();
153 }
154
155 TracedDictionary<SelfType>& BeginDictionary()
156 {
157 PushDictionary();
158 return *reinterpret_cast<TracedDictionary<SelfType>*>(this);
159 }
160 TracedArray<SelfType>& BeginArray()
161 {
162 PushArray();
163 return *reinterpret_cast<TracedArray<SelfType>*>(this);
164 }
165
166 SelfType& PushInteger(int value)
167 {
168 TracedValueBase::PushInteger(value);
169 return *this;
170 }
171 SelfType& PushDouble(double value)
172 {
173 TracedValueBase::PushDouble(value);
174 return *this;
175 }
176 SelfType& PushBoolean(bool value)
177 {
178 TracedValueBase::PushBoolean(value);
179 return *this;
180 }
181 SelfType& PushString(const std::string& value)
182 {
183 TracedValueBase::PushString(value);
184 return *this;
185 }
186
187 private:
188 TracedArrayBase();
189 ~TracedArrayBase();
190 DISALLOW_COPY_AND_ASSIGN(TracedArrayBase);
191 };
192
193 template <class OwnerType>
194 class TracedArray : public TracedArrayBase {
195 private:
196 typedef TracedArray<OwnerType> SelfType;
197 public:
198 OwnerType& EndArray() {
199 DCHECK(m_stack.size() == nestingLevel);
200 TracedArrayBase::EndArray();
201 return *reinterpret_cast<OwnerType*>(this);
202 }
203 TracedDictionary<SelfType>& BeginDictionary() {
204 TracedArrayBase::BeginDictionary();
205 return *reinterpret_cast<TracedDictionary<SelfType>*>(this);
206 }
207 TracedArray<SelfType>& BeginArray() {
208 TracedArrayBase::BeginArray();
209 return *reinterpret_cast<TracedArray<SelfType>*>(this);
210 }
211
212 SelfType& PushInteger(int value) {
213 TracedArrayBase::PushInteger(value);
214 return *this;
215 }
216 SelfType& PushDouble(double value) {
217 TracedArrayBase::PushDouble(value);
218 return *this;
219 }
220 SelfType& PushBoolean(bool value) {
221 TracedArrayBase::PushBoolean(value);
222 return *this;
223 }
224 SelfType& PushString(const std::string& value) {
225 TracedArrayBase::PushString(value);
226 return *this;
227 }
228
229 static const size_t nestingLevel = OwnerType::nestingLevel + 1;
230
231 private:
232 TracedArray();
233 ~TracedArray();
234 DISALLOW_COPY_AND_ASSIGN(TracedArray);
235 };
236
237 class BASE_EXPORT TracedValue : public TracedValueBase {
238 private:
239 typedef TracedValue SelfType;
240 public:
241 TracedValue();
242 ~TracedValue();
243
244 TracedDictionary<SelfType>& BeginDictionary(const char* name);
245 TracedArray<SelfType>& BeginArray(const char* name);
246 SelfType& SetInteger(const char* name, int value) {
247 TracedValueBase::SetInteger(name, value);
248 return *this;
249 }
250 SelfType& SetDouble(const char* name, double value) {
251 TracedValueBase::SetDouble(name, value);
252 return *this;
253 }
254 SelfType& SetBoolean(const char* name, bool value) {
255 TracedValueBase::SetBoolean(name, value);
256 return *this;
257 }
258 SelfType& SetString(const char* name, const std::string& value) {
259 TracedValueBase::SetString(name, value);
260 return *this;
261 }
262 scoped_refptr<base::debug::ConvertableToTraceFormat> finish();
willchan no longer on Chromium 2014/07/14 15:21:46 Finish()
yurys 2014/07/14 16:16:30 Done.
263
264 static const size_t nestingLevel = 1;
265
266 private:
267 DISALLOW_COPY_AND_ASSIGN(TracedValue);
268 };
269
270 } // namespace base
271
272 #endif // BASE_DEBUG_TRACE_EVENT_ARGUMENT_H_
OLDNEW
« no previous file with comments | « base/base.gypi ('k') | base/debug/trace_event_argument.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698