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_TRACE_EVENT_TRACE_EVENT_ARGUMENT_H_ 6 #define BASE_TRACE_EVENT_TRACE_EVENT_ARGUMENT_H_ 7 8 #include <stddef.h> 9 10 #include <memory> 11 #include <string> 12 #include <vector> 13 14 #include "base/macros.h" 15 #include "base/pickle.h" 16 #include "base/strings/string_piece.h" 17 #include "base/trace_event/trace_event_impl.h" 18 19 namespace base { 20 21 class Value; 22 23 namespace trace_event { 24 25 class BASE_EXPORT TracedValue : public ConvertableToTraceFormat { 26 public: 27 TracedValue(); 28 explicit TracedValue(size_t capacity); 29 ~TracedValue() override; 30 31 void EndDictionary(); 32 void EndArray(); 33 34 // These methods assume that |name| is a long lived "quoted" string. 35 void SetInteger(const char* name, int value); 36 void SetDouble(const char* name, double value); 37 void SetBoolean(const char* name, bool value); 38 void SetString(const char* name, base::StringPiece value); 39 void SetValue(const char* name, const TracedValue& value); 40 void BeginDictionary(const char* name); 41 void BeginArray(const char* name); 42 43 // These, instead, can be safely passed a temporary string. 44 void SetIntegerWithCopiedName(base::StringPiece name, int value); 45 void SetDoubleWithCopiedName(base::StringPiece name, double value); 46 void SetBooleanWithCopiedName(base::StringPiece name, bool value); 47 void SetStringWithCopiedName(base::StringPiece name, 48 base::StringPiece value); 49 void SetValueWithCopiedName(base::StringPiece name, 50 const TracedValue& value); 51 void BeginDictionaryWithCopiedName(base::StringPiece name); 52 void BeginArrayWithCopiedName(base::StringPiece name); 53 54 void AppendInteger(int); 55 void AppendDouble(double); 56 void AppendBoolean(bool); 57 void AppendString(base::StringPiece); 58 void BeginArray(); 59 void BeginDictionary(); 60 61 // ConvertableToTraceFormat implementation. 62 void AppendAsTraceFormat(std::string* out) const override; 63 64 void EstimateTraceMemoryOverhead(TraceEventMemoryOverhead* overhead) override; 65 66 // DEPRECATED: do not use, here only for legacy reasons. These methods causes 67 // a copy-and-translation of the base::Value into the equivalent TracedValue. 68 // TODO(primiano): migrate the (three) existing clients to the cheaper 69 // SetValue(TracedValue) API. crbug.com/495628. 70 void SetValue(const char* name, std::unique_ptr<base::Value> value); 71 void SetBaseValueWithCopiedName(base::StringPiece name, 72 const base::Value& value); 73 void AppendBaseValue(const base::Value& value); 74 75 // Public for tests only. 76 std::unique_ptr<base::Value> ToBaseValue() const; 77 78 private: 79 Pickle pickle_; 80 81 #ifndef NDEBUG 82 // In debug builds checks the pairings of {Start,End}{Dictionary,Array} 83 std::vector<bool> nesting_stack_; 84 #endif 85 86 DISALLOW_COPY_AND_ASSIGN(TracedValue); 87 }; 88 89 } // namespace trace_event 90 } // namespace base 91 92 #endif // BASE_TRACE_EVENT_TRACE_EVENT_ARGUMENT_H_ 93