From cc98ea1956d02c660227594327982fbb2cc42075 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Wed, 4 Sep 2019 14:39:08 +0200 Subject: [PATCH] Json: Add serializer fast-path for string values Passing these through the generic JsonValue path was causing us to instantiate temporary JsonValues that incurred a heap allocation. This avoids that by adding specialized overloads for string types. --- AK/JsonArraySerializer.h | 24 ++++++++++++++++++++++++ AK/JsonObjectSerializer.h | 24 ++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/AK/JsonArraySerializer.h b/AK/JsonArraySerializer.h index 46bbd14ac5..3205ba2a73 100644 --- a/AK/JsonArraySerializer.h +++ b/AK/JsonArraySerializer.h @@ -31,6 +31,30 @@ public: value.serialize(m_builder); } + void add(const StringView& value) + { + begin_item(); + m_builder.append('"'); + m_builder.append(value); + m_builder.append('"'); + } + + void add(const String& value) + { + begin_item(); + m_builder.append('"'); + m_builder.append(value); + m_builder.append('"'); + } + + void add(const char* value) + { + begin_item(); + m_builder.append('"'); + m_builder.append(value); + m_builder.append('"'); + } + JsonArraySerializer add_array() { begin_item(); diff --git a/AK/JsonObjectSerializer.h b/AK/JsonObjectSerializer.h index 1cdb7743fe..daf8e64c8a 100644 --- a/AK/JsonObjectSerializer.h +++ b/AK/JsonObjectSerializer.h @@ -29,6 +29,30 @@ public: value.serialize(m_builder); } + void add(const StringView& key, const StringView& value) + { + begin_item(key); + m_builder.append('"'); + m_builder.append(value); + m_builder.append('"'); + } + + void add(const StringView& key, const String& value) + { + begin_item(key); + m_builder.append('"'); + m_builder.append(value); + m_builder.append('"'); + } + + void add(const StringView& key, const char* value) + { + begin_item(key); + m_builder.append('"'); + m_builder.append(value); + m_builder.append('"'); + } + JsonArraySerializer add_array(const StringView& key) { begin_item(key);