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

Unified Diff: Source/platform/TracedValue.h

Issue 357703002: Introduce builders for tracing event arguments (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Removed PLATFORM_EXPORT from template classes Created 6 years, 6 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 | « Source/core/rendering/RenderObject.cpp ('k') | Source/platform/TracedValue.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/platform/TracedValue.h
diff --git a/Source/platform/TracedValue.h b/Source/platform/TracedValue.h
index 10bb732fe023e8a6f4c0c08d6cdb833899924934..23f3ae5f81be8e323ad688f505a6b345026eda9c 100644
--- a/Source/platform/TracedValue.h
+++ b/Source/platform/TracedValue.h
@@ -11,23 +11,160 @@
#include "wtf/text/WTFString.h"
namespace WebCore {
+class JSONArray;
+class JSONObject;
class JSONValue;
+template<class T> class TracedArray;
-class PLATFORM_EXPORT TracedValue : public TraceEvent::ConvertableToTraceFormat {
- WTF_MAKE_NONCOPYABLE(TracedValue);
+class PLATFORM_EXPORT TracedValueBase {
+ WTF_MAKE_NONCOPYABLE(TracedValueBase);
+protected:
+ TracedValueBase();
+ ~TracedValueBase();
+
+ 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 String& value);
+ void beginDictionaryNamed(const char* name);
+ void beginArrayNamed(const char* name);
+ void endCurrentDictionary();
+
+ void pushInteger(int);
+ void pushDouble(double);
+ void pushBoolean(bool);
+ void pushString(const String&);
+ void pushArray();
+ void pushDictionary();
+ void endCurrentArray();
+
+ JSONObject* currentDictionary() const;
+ JSONArray* currentArray() const;
+
+ Vector<RefPtr<JSONValue> > m_stack;
+};
+
+template <class OwnerType>
+class TracedDictionary : public TracedValueBase {
+ WTF_MAKE_NONCOPYABLE(TracedDictionary);
public:
- static PassRefPtr<TraceEvent::ConvertableToTraceFormat> fromJSONValue(PassRefPtr<JSONValue> value)
+ OwnerType& endDictionary()
{
- return adoptRef(new TracedValue(value));
+ endCurrentDictionary();
+ return *reinterpret_cast<OwnerType*>(this);
}
- String asTraceFormat() const OVERRIDE;
+ TracedDictionary<TracedDictionary<OwnerType> >& beginDictionary(const char* name)
+ {
+ beginDictionaryNamed(name);
+ return *reinterpret_cast<TracedDictionary<TracedDictionary<OwnerType> >* >(this);
+ }
+ TracedArray<TracedDictionary<OwnerType> >& beginArray(const char* name)
+ {
+ beginArrayNamed(name);
+ return *reinterpret_cast<TracedArray<TracedDictionary<OwnerType> >* >(this);
+ }
+ TracedDictionary<OwnerType>& setInteger(const char* name, int value)
+ {
+ TracedValueBase::setInteger(name, value);
+ return *this;
+ }
+ TracedDictionary<OwnerType>& setDouble(const char* name, double value)
+ {
+ TracedValueBase::setDouble(name, value);
+ return *this;
+ }
+ TracedDictionary<OwnerType>& setBoolean(const char* name, bool value)
+ {
+ TracedValueBase::setBoolean(name, value);
+ return *this;
+ }
+ TracedDictionary<OwnerType>& setString(const char* name, const String& value)
+ {
+ TracedValueBase::setString(name, value);
+ return *this;
+ }
private:
- explicit TracedValue(PassRefPtr<JSONValue>);
- virtual ~TracedValue();
+ TracedDictionary();
+ ~TracedDictionary();
+};
- RefPtr<JSONValue> m_value;
+template <class OwnerType>
+class TracedArray : public TracedValueBase {
+ WTF_MAKE_NONCOPYABLE(TracedArray);
+public:
+ TracedDictionary<TracedArray<OwnerType> >& beginDictionary()
+ {
+ pushDictionary();
+ return *reinterpret_cast<TracedDictionary<TracedArray<OwnerType> >* >(this);
+ }
+ TracedDictionary<TracedArray<OwnerType> >& beginArray()
+ {
+ pushArray();
+ return *reinterpret_cast<TracedDictionary<TracedArray<OwnerType> >* >(this);
+ }
+ OwnerType& endArray()
+ {
+ endCurrentArray();
+ return *reinterpret_cast<OwnerType*>(this);
+ }
+
+ TracedArray<OwnerType>& pushInteger(int value)
+ {
+ TracedValueBase::pushInteger(value);
+ return *this;
+ }
+ TracedArray<OwnerType>& pushDouble(double value)
+ {
+ TracedValueBase::pushDouble(value);
+ return *this;
+ }
+ TracedArray<OwnerType>& pushBoolean(bool value)
+ {
+ TracedValueBase::pushBoolean(value);
+ return *this;
+ }
+ TracedArray<OwnerType>& pushString(const String& value)
+ {
+ TracedValueBase::pushString(value);
+ return *this;
+ }
+
+private:
+ TracedArray();
+ ~TracedArray();
+};
+
+class PLATFORM_EXPORT TracedValue : public TracedValueBase {
+ WTF_MAKE_NONCOPYABLE(TracedValue);
+public:
+ TracedValue();
+ ~TracedValue();
+
+ TracedDictionary<TracedValue>& beginDictionary(const char* name);
+ TracedArray<TracedValue>& beginArray(const char* name);
+ TracedValue& setInteger(const char* name, int value)
+ {
+ TracedValueBase::setInteger(name, value);
+ return *this;
+ }
+ TracedValue& setDouble(const char* name, double value)
+ {
+ TracedValueBase::setDouble(name, value);
+ return *this;
+ }
+ TracedValue& setBoolean(const char* name, bool value)
+ {
+ TracedValueBase::setBoolean(name, value);
+ return *this;
+ }
+ TracedValue& setString(const char* name, const String& value)
+ {
+ TracedValueBase::setString(name, value);
+ return *this;
+ }
+ PassRefPtr<TraceEvent::ConvertableToTraceFormat> finish();
};
} // namespace WebCore
« no previous file with comments | « Source/core/rendering/RenderObject.cpp ('k') | Source/platform/TracedValue.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698