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

Unified 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/base.gypi ('k') | base/debug/trace_event_argument.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/debug/trace_event_argument.h
diff --git a/base/debug/trace_event_argument.h b/base/debug/trace_event_argument.h
new file mode 100644
index 0000000000000000000000000000000000000000..eee2dccdf3b47c61729e7d751a3ab6a2f9a50203
--- /dev/null
+++ b/base/debug/trace_event_argument.h
@@ -0,0 +1,272 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef BASE_DEBUG_TRACE_EVENT_ARGUMENT_H_
+#define BASE_DEBUG_TRACE_EVENT_ARGUMENT_H_
+
+#include <string>
+#include <vector>
+
+#include "base/debug/trace_event.h"
+#include "base/memory/scoped_ptr.h"
+
+namespace base {
+
+class DictionaryValue;
+class ListValue;
+class StringValue;
+class TracedArrayBase;
+class Value;
+
+template<class T> class TracedArray;
+template<class T> class TracedDictionary;
+
+class BASE_EXPORT TracedValueBase {
+ protected:
+ TracedValueBase();
+ ~TracedValueBase();
+
+ void EndCurrentDictionary();
+ void EndCurrentArray();
+
+ void SetInteger(const char* name, int value);
+ void SetDouble(const char* name, double);
+ void SetBoolean(const char* name, bool value);
+ void SetString(const char* name, const std::string& value);
+ void BeginDictionaryNamed(const char* name);
+ void BeginArrayNamed(const char* name);
+
+ void PushInteger(int);
+ void PushDouble(double);
+ void PushBoolean(bool);
+ void PushString(const std::string&);
+ void PushArray();
+ void PushDictionary();
+
+ DictionaryValue* GetCurrentDictionary() const;
+ ListValue* GetCurrentArray() const;
+
+ 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
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(TracedValueBase);
+};
+
+class BASE_EXPORT TracedDictionaryBase : public TracedValueBase {
+private:
+ typedef TracedDictionaryBase SelfType;
+public:
+ void EndDictionary()
+ {
+ EndCurrentDictionary();
+ }
+
+ TracedDictionary<SelfType>& BeginDictionary(const char* name)
+ {
+ BeginDictionaryNamed(name);
+ return *reinterpret_cast<TracedDictionary<SelfType>*>(this);
+ }
+ TracedArray<SelfType>& BeginArray(const char* name)
+ {
+ BeginArrayNamed(name);
+ return *reinterpret_cast<TracedArray<SelfType>*>(this);
+ }
+ SelfType& SetInteger(const char* name, int value)
+ {
+ TracedValueBase::SetInteger(name, value);
+ return *this;
+ }
+ SelfType& SetDouble(const char* name, double value)
+ {
+ TracedValueBase::SetDouble(name, value);
+ return *this;
+ }
+ SelfType& SetBoolean(const char* name, bool value)
+ {
+ TracedValueBase::SetBoolean(name, value);
+ return *this;
+ }
+ SelfType& SetString(const char* name, const std::string& value)
+ {
+ TracedValueBase::SetString(name, value);
+ return *this;
+ }
+private:
+ TracedDictionaryBase();
+ ~TracedDictionaryBase();
+ DISALLOW_COPY_AND_ASSIGN(TracedDictionaryBase);
+};
+
+template <class OwnerType>
+class TracedDictionary : public TracedDictionaryBase {
+ private:
+ typedef TracedDictionary<OwnerType> SelfType;
+ public:
+ OwnerType& EndDictionary() {
+ DCHECK(m_stack.size() == nestingLevel);
+ TracedDictionaryBase::EndDictionary();
+ return *reinterpret_cast<OwnerType*>(this);
+ }
+
+ TracedDictionary<SelfType >& BeginDictionary(
+ const char* name) {
+ TracedDictionaryBase::BeginDictionary(name);
+ return *reinterpret_cast<TracedDictionary<SelfType>*>(this);
+ }
+ TracedArray<SelfType >& BeginArray(const char* name) {
+ TracedDictionaryBase::BeginArray(name);
+ return *reinterpret_cast<TracedArray<SelfType>*>(this);
+ }
+ SelfType& SetInteger(const char* name, int value) {
+ TracedDictionaryBase::SetInteger(name, value);
+ return *this;
+ }
+ SelfType& SetDouble(const char* name, double value) {
+ TracedDictionaryBase::SetDouble(name, value);
+ return *this;
+ }
+ SelfType& SetBoolean(const char* name, bool value) {
+ TracedDictionaryBase::SetBoolean(name, value);
+ return *this;
+ }
+ SelfType& SetString(const char* name, const std::string& value) {
+ TracedDictionaryBase::SetString(name, value);
+ return *this;
+ }
+
+ 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.
+
+ private:
+ TracedDictionary();
+ ~TracedDictionary();
+ DISALLOW_COPY_AND_ASSIGN(TracedDictionary);
+};
+
+class BASE_EXPORT TracedArrayBase : public TracedValueBase {
+private:
+ typedef TracedArrayBase SelfType;
+public:
+ void EndArray()
+ {
+ EndCurrentArray();
+ }
+
+ TracedDictionary<SelfType>& BeginDictionary()
+ {
+ PushDictionary();
+ return *reinterpret_cast<TracedDictionary<SelfType>*>(this);
+ }
+ TracedArray<SelfType>& BeginArray()
+ {
+ PushArray();
+ return *reinterpret_cast<TracedArray<SelfType>*>(this);
+ }
+
+ SelfType& PushInteger(int value)
+ {
+ TracedValueBase::PushInteger(value);
+ return *this;
+ }
+ SelfType& PushDouble(double value)
+ {
+ TracedValueBase::PushDouble(value);
+ return *this;
+ }
+ SelfType& PushBoolean(bool value)
+ {
+ TracedValueBase::PushBoolean(value);
+ return *this;
+ }
+ SelfType& PushString(const std::string& value)
+ {
+ TracedValueBase::PushString(value);
+ return *this;
+ }
+
+private:
+ TracedArrayBase();
+ ~TracedArrayBase();
+ DISALLOW_COPY_AND_ASSIGN(TracedArrayBase);
+};
+
+template <class OwnerType>
+class TracedArray : public TracedArrayBase {
+ private:
+ typedef TracedArray<OwnerType> SelfType;
+ public:
+ OwnerType& EndArray() {
+ DCHECK(m_stack.size() == nestingLevel);
+ TracedArrayBase::EndArray();
+ return *reinterpret_cast<OwnerType*>(this);
+ }
+ TracedDictionary<SelfType>& BeginDictionary() {
+ TracedArrayBase::BeginDictionary();
+ return *reinterpret_cast<TracedDictionary<SelfType>*>(this);
+ }
+ TracedArray<SelfType>& BeginArray() {
+ TracedArrayBase::BeginArray();
+ return *reinterpret_cast<TracedArray<SelfType>*>(this);
+ }
+
+ SelfType& PushInteger(int value) {
+ TracedArrayBase::PushInteger(value);
+ return *this;
+ }
+ SelfType& PushDouble(double value) {
+ TracedArrayBase::PushDouble(value);
+ return *this;
+ }
+ SelfType& PushBoolean(bool value) {
+ TracedArrayBase::PushBoolean(value);
+ return *this;
+ }
+ SelfType& PushString(const std::string& value) {
+ TracedArrayBase::PushString(value);
+ return *this;
+ }
+
+ static const size_t nestingLevel = OwnerType::nestingLevel + 1;
+
+ private:
+ TracedArray();
+ ~TracedArray();
+ DISALLOW_COPY_AND_ASSIGN(TracedArray);
+};
+
+class BASE_EXPORT TracedValue : public TracedValueBase {
+ private:
+ typedef TracedValue SelfType;
+ public:
+ TracedValue();
+ ~TracedValue();
+
+ TracedDictionary<SelfType>& BeginDictionary(const char* name);
+ TracedArray<SelfType>& BeginArray(const char* name);
+ SelfType& SetInteger(const char* name, int value) {
+ TracedValueBase::SetInteger(name, value);
+ return *this;
+ }
+ SelfType& SetDouble(const char* name, double value) {
+ TracedValueBase::SetDouble(name, value);
+ return *this;
+ }
+ SelfType& SetBoolean(const char* name, bool value) {
+ TracedValueBase::SetBoolean(name, value);
+ return *this;
+ }
+ SelfType& SetString(const char* name, const std::string& value) {
+ TracedValueBase::SetString(name, value);
+ return *this;
+ }
+ 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.
+
+ static const size_t nestingLevel = 1;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(TracedValue);
+};
+
+} // namespace base
+
+#endif // BASE_DEBUG_TRACE_EVENT_ARGUMENT_H_
« 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