1 // Copyright 2016 the V8 project 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 V8_TRACING_TRACED_VALUE_H_
6 #define V8_TRACING_TRACED_VALUE_H_
7 
8 #include <stddef.h>
9 #include <memory>
10 #include <string>
11 #include <vector>
12 
13 #include "include/v8-platform.h"
14 #include "src/base/macros.h"
15 
16 namespace v8 {
17 namespace tracing {
18 
19 class TracedValue : public ConvertableToTraceFormat {
20  public:
21   ~TracedValue() override;
22 
23   static std::unique_ptr<TracedValue> Create();
24 
25   void EndDictionary();
26   void EndArray();
27 
28   // These methods assume that |name| is a long lived "quoted" string.
29   void SetInteger(const char* name, int value);
30   void SetDouble(const char* name, double value);
31   void SetBoolean(const char* name, bool value);
32   void SetString(const char* name, const std::string& value);
33   void BeginDictionary(const char* name);
34   void BeginArray(const char* name);
35 
36   void AppendInteger(int);
37   void AppendLongInteger(int64_t);
38   void AppendDouble(double);
39   void AppendBoolean(bool);
40   void AppendString(const std::string&);
41   void BeginArray();
42   void BeginDictionary();
43 
44   // ConvertableToTraceFormat implementation.
45   void AppendAsTraceFormat(std::string* out) const override;
46 
47  private:
48   TracedValue();
49 
50   void WriteComma();
51   void WriteName(const char* name);
52 
53 #ifdef DEBUG
54   // In debug builds checks the pairings of {Begin,End}{Dictionary,Array}
55   std::vector<bool> nesting_stack_;
56 #endif
57 
58   std::string data_;
59   bool first_item_;
60 
61   DISALLOW_COPY_AND_ASSIGN(TracedValue);
62 };
63 
64 }  // namespace tracing
65 }  // namespace v8
66 
67 #endif  // V8_TRACING_TRACED_VALUE_H_
68