Index: base/trace_event/trace_event_argument.h |
diff --git a/base/trace_event/trace_event_argument.h b/base/trace_event/trace_event_argument.h |
index 56f7c617f9e8ea0a6bb83071766a3e73f3e06a62..aab58bc5ba75b1c8933c794502ac9c148af95973 100644 |
--- a/base/trace_event/trace_event_argument.h |
+++ b/base/trace_event/trace_event_argument.h |
@@ -9,11 +9,11 @@ |
#include <vector> |
#include "base/memory/scoped_ptr.h" |
+#include "base/pickle.h" |
#include "base/trace_event/trace_event.h" |
namespace base { |
-class DictionaryValue; |
-class ListValue; |
+ |
class Value; |
namespace trace_event { |
@@ -21,18 +21,31 @@ namespace trace_event { |
class BASE_EXPORT TracedValue : public ConvertableToTraceFormat { |
public: |
TracedValue(); |
+ explicit TracedValue(size_t capacity); |
void EndDictionary(); |
void EndArray(); |
+ // These methods assume that |name| is a long lived "quoted" string. |
void SetInteger(const char* name, int value); |
void SetDouble(const char* name, double value); |
void SetBoolean(const char* name, bool value); |
void SetString(const char* name, const std::string& value); |
- void SetValue(const char* name, scoped_ptr<Value> value); |
+ void SetValue(const char* name, const TracedValue& value); |
void BeginDictionary(const char* name); |
void BeginArray(const char* name); |
+ // These, instead, can be safely passed a temporary string. |
+ void SetIntegerWithCopiedName(const std::string& name, int value); |
+ void SetDoubleWithCopiedName(const std::string& name, double value); |
+ void SetBooleanWithCopiedName(const std::string& name, bool value); |
+ void SetStringWithCopiedName(const std::string& name, |
+ const std::string& value); |
+ void SetValueWithCopiedName(const std::string& name, |
+ const TracedValue& value); |
+ void BeginDictionaryWithCopiedName(const std::string& name); |
+ void BeginArrayWithCopiedName(const std::string& name); |
+ |
void AppendInteger(int); |
void AppendDouble(double); |
void AppendBoolean(bool); |
@@ -40,16 +53,33 @@ class BASE_EXPORT TracedValue : public ConvertableToTraceFormat { |
void BeginArray(); |
void BeginDictionary(); |
+ // ConvertableToTraceFormat implementation. |
void AppendAsTraceFormat(std::string* out) const override; |
+ void EstimateTraceMemoryOverhead(TraceEventMemoryOverhead* overhead) override; |
+ |
+ // DEPRECATED: do not use, here only for legacy reasons. These methods causes |
+ // a copy-and-translation of the base::Value into the equivalent TracedValue. |
+ // TODO(primiano): migrate the (three) existing clients to the cheaper |
+ // SetValue(TracedValue) API. crbug.com/495628. |
+ void SetValue(const char* name, scoped_ptr<base::Value> value); |
+ void SetBaseValueWithCopiedName(const std::string& name, |
+ const base::Value& value); |
+ void AppendBaseValue(const base::Value& value); |
+ |
+ // Public for tests only. |
+ scoped_ptr<base::Value> ToBaseValue() const; |
+ |
private: |
~TracedValue() override; |
- DictionaryValue* GetCurrentDictionary(); |
- ListValue* GetCurrentArray(); |
+ Pickle pickle_; |
+ |
+#ifndef NDEBUG |
+ // In debug builds checks the pairings of {Start,End}{Dictionary,Array} |
+ std::vector<bool> nesting_stack_; |
+#endif |
- scoped_ptr<base::Value> root_; |
- std::vector<Value*> stack_; // Weak references. |
DISALLOW_COPY_AND_ASSIGN(TracedValue); |
}; |