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

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: 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
Index: Source/platform/TracedValue.h
diff --git a/Source/platform/TracedValue.h b/Source/platform/TracedValue.h
index 10bb732fe023e8a6f4c0c08d6cdb833899924934..5cb1ba6b82434fd5f1762ba84fd1320b563f6144 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);
caseq 2014/06/25 14:27:25 Can we put these methods on TracedDictionary...
yurys 2014/06/25 14:57:40 TracedDictionary is a template which means that th
+ 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);
caseq 2014/06/25 14:27:25 ... and these to TracedArray instead?
yurys 2014/06/25 14:57:40 I'd like to avoid this for the same reason as abov
+ 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 PLATFORM_EXPORT 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 PLATFORM_EXPORT 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 {
caseq 2014/06/25 14:27:25 Can we inherit from TracedDictionary instead?
yurys 2014/06/25 14:57:40 I don't think so it has different implementation o
+ 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

Powered by Google App Engine
This is Rietveld 408576698