diff options
Diffstat (limited to 'base/trace_event/trace_event_argument.h')
-rw-r--r-- | base/trace_event/trace_event_argument.h | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/base/trace_event/trace_event_argument.h b/base/trace_event/trace_event_argument.h new file mode 100644 index 0000000000..81d8c0172a --- /dev/null +++ b/base/trace_event/trace_event_argument.h @@ -0,0 +1,92 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef BASE_TRACE_EVENT_TRACE_EVENT_ARGUMENT_H_ +#define BASE_TRACE_EVENT_TRACE_EVENT_ARGUMENT_H_ + +#include <stddef.h> + +#include <memory> +#include <string> +#include <vector> + +#include "base/macros.h" +#include "base/pickle.h" +#include "base/strings/string_piece.h" +#include "base/trace_event/trace_event_impl.h" + +namespace base { + +class Value; + +namespace trace_event { + +class BASE_EXPORT TracedValue : public ConvertableToTraceFormat { + public: + TracedValue(); + explicit TracedValue(size_t capacity); + ~TracedValue() override; + + 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, base::StringPiece 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(base::StringPiece name, int value); + void SetDoubleWithCopiedName(base::StringPiece name, double value); + void SetBooleanWithCopiedName(base::StringPiece name, bool value); + void SetStringWithCopiedName(base::StringPiece name, + base::StringPiece value); + void SetValueWithCopiedName(base::StringPiece name, + const TracedValue& value); + void BeginDictionaryWithCopiedName(base::StringPiece name); + void BeginArrayWithCopiedName(base::StringPiece name); + + void AppendInteger(int); + void AppendDouble(double); + void AppendBoolean(bool); + void AppendString(base::StringPiece); + 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, std::unique_ptr<base::Value> value); + void SetBaseValueWithCopiedName(base::StringPiece name, + const base::Value& value); + void AppendBaseValue(const base::Value& value); + + // Public for tests only. + std::unique_ptr<base::Value> ToBaseValue() const; + + private: + Pickle pickle_; + +#ifndef NDEBUG + // In debug builds checks the pairings of {Start,End}{Dictionary,Array} + std::vector<bool> nesting_stack_; +#endif + + DISALLOW_COPY_AND_ASSIGN(TracedValue); +}; + +} // namespace trace_event +} // namespace base + +#endif // BASE_TRACE_EVENT_TRACE_EVENT_ARGUMENT_H_ |