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 BASE_DEBUG_TRACE_EVENT_ARGUMENT_H_
6#define BASE_DEBUG_TRACE_EVENT_ARGUMENT_H_
7
8#include <string>
9#include <vector>
10
11#include "base/debug/trace_event.h"
12#include "base/memory/scoped_ptr.h"
13
14namespace base {
15class DictionaryValue;
16class ListValue;
17class Value;
18
19namespace debug {
20
21class BASE_EXPORT TracedValue : public ConvertableToTraceFormat {
22 public:
23  TracedValue();
24
25  void EndDictionary();
26  void EndArray();
27
28  void SetInteger(const char* name, int value);
29  void SetDouble(const char* name, double);
30  void SetBoolean(const char* name, bool value);
31  void SetString(const char* name, const std::string& value);
32  void SetValue(const char* name, Value* value);
33  void BeginDictionary(const char* name);
34  void BeginArray(const char* name);
35
36  void AppendInteger(int);
37  void AppendDouble(double);
38  void AppendBoolean(bool);
39  void AppendString(const std::string&);
40  void BeginArray();
41  void BeginDictionary();
42
43  virtual void AppendAsTraceFormat(std::string* out) const OVERRIDE;
44
45 private:
46  virtual ~TracedValue();
47
48  DictionaryValue* GetCurrentDictionary();
49  ListValue* GetCurrentArray();
50
51  scoped_ptr<base::Value> root_;
52  std::vector<Value*> stack_;
53  DISALLOW_COPY_AND_ASSIGN(TracedValue);
54};
55
56}  // namespace debug
57}  // namespace base
58
59#endif  // BASE_DEBUG_TRACE_EVENT_ARGUMENT_H_
60