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 TracedValue_h
6#define TracedValue_h
7
8#include "platform/EventTracer.h"
9
10#include "wtf/PassRefPtr.h"
11#include "wtf/text/WTFString.h"
12
13namespace blink {
14class JSONArray;
15class JSONObject;
16class JSONValue;
17
18class PLATFORM_EXPORT TracedValue : public TraceEvent::ConvertableToTraceFormat {
19    WTF_MAKE_NONCOPYABLE(TracedValue);
20
21public:
22    static PassRefPtr<TracedValue> create();
23
24    void endDictionary();
25    void endArray();
26
27    void setInteger(const char* name, int value);
28    void setDouble(const char* name, double);
29    void setBoolean(const char* name, bool value);
30    void setString(const char* name, const String& value);
31    void beginArray(const char* name);
32    void beginDictionary(const char* name);
33
34    void pushInteger(int);
35    void pushDouble(double);
36    void pushBoolean(bool);
37    void pushString(const String&);
38    void beginArray();
39    void beginDictionary();
40
41    virtual String asTraceFormat() const OVERRIDE;
42
43private:
44    TracedValue();
45    virtual ~TracedValue();
46
47    JSONObject* currentDictionary() const;
48    JSONArray* currentArray() const;
49
50    Vector<RefPtr<JSONValue> > m_stack;
51};
52
53} // namespace blink
54
55#endif // TracedValue_h
56