Skip to content

Commit 3378453

Browse files
committed
Update JSON parser benchmarks
1 parent 5c835c4 commit 3378453

File tree

2 files changed

+21
-23
lines changed

2 files changed

+21
-23
lines changed

bench/json/README.md

+19-22
Original file line numberDiff line numberDiff line change
@@ -15,25 +15,25 @@ could use some work :)
1515

1616
| Parser | Duration (ms) | Speed (MB/s) |
1717
| :-- | --: | --: |
18-
| libfly | 286.788 | 25.668 |
19-
| boost | 72.839 | 101.063 |
20-
| nlohmann | 199.067 | 36.979 |
18+
| libfly | 236.902 | 31.073 |
19+
| boost | 67.010 | 109.854 |
20+
| nlohmann | 197.665 | 37.242 |
2121

2222
### [canada.json](/bench/json/data/canada.json)
2323

2424
| Parser | Duration (ms) | Speed (MB/s) |
2525
| :-- | --: | --: |
26-
| libfly | 105.899 | 20.272 |
27-
| boost | 12.037 | 178.353 |
28-
| nlohmann | 54.929 | 39.082 |
26+
| libfly | 93.639 | 22.926 |
27+
| boost | 11.822 | 181.592 |
28+
| nlohmann | 54.645 | 39.285 |
2929

3030
### [gsoc-2018.json](/bench/json/data/gsoc-2018.json)
3131

3232
| Parser | Duration (ms) | Speed (MB/s) |
3333
| :-- | --: | --: |
34-
| libfly | 63.754 | 49.780 |
35-
| boost | 14.083 | 225.350 |
36-
| nlohmann | 32.914 | 96.423 |
34+
| libfly | 42.389 | 74.869 |
35+
| boost | 14.014 | 226.463 |
36+
| nlohmann | 33.634 | 94.359 |
3737

3838
## Profile
3939

@@ -44,19 +44,16 @@ constructor.
4444
Each sample counts as 0.01 seconds.
4545
% cumulative self self total
4646
time seconds seconds calls ms/call ms/call name
47-
46.43 0.13 0.13 3209219 0.00 0.00 fly::Json::Json(fly::Json&&)
48-
10.71 0.16 0.03 1112064 0.00 0.00 fly::JsonParser::parse_quoted_string[abi:cxx11]()
49-
7.14 0.18 0.02 4321284 0.00 0.00 fly::Json::~Json()
50-
7.14 0.20 0.02 1112064 0.00 0.00 fly::Json::push_back(fly::Json&&)
51-
7.14 0.22 0.02 1112064 0.00 0.00 fly::Json::Json<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, false>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&)
52-
3.57 0.23 0.01 4382781 0.00 0.00 std::_Function_handler<unsigned int (), fly::detail::BasicStringUnicode<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::decode_codepoint<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >(__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >&, __gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&)::{lambda()#1}>::_M_invoke(std::_Any_data const&)
53-
3.57 0.24 0.01 3336194 0.00 0.00 fly::JsonParser::consume_whitespace_and_comments()
54-
3.57 0.25 0.01 2224127 0.00 0.00 fly::JsonParser::consume_token(fly::JsonParser::Token)
55-
3.57 0.26 0.01 1112065 0.00 0.00 fly::Json::is_object() const
56-
3.57 0.27 0.01 1112064 0.00 0.00 fly::Json::validate_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&)
57-
3.57 0.28 0.01 1 10.00 201.67 fly::JsonParser::parse_array()
58-
0.00 0.28 0.00 5560322 0.00 0.00 fly::JsonParser::is_whitespace(fly::JsonParser::Token) const
59-
0.00 0.28 0.00 5560321 0.00 0.00 fly::JsonParser::consume_whitespace()
47+
27.59 0.08 0.08 3209218 0.00 0.00 fly::Json::Json(fly::Json&&)
48+
13.79 0.12 0.04 1112064 0.00 0.00 fly::JsonParser::parse_quoted_string[abi:cxx11]()
49+
13.79 0.16 0.04 1112064 0.00 0.00 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > fly::Json::convert_to_string<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, false>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)
50+
10.34 0.19 0.03 4321279 0.00 0.00 std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<void (*)(std::__detail::__variant::_Variant_storage<false, decltype(nullptr), std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, fly::Json, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, fly::Json> > >, std::vector<fly::Json, std::allocator<fly::Json> >, bool, long, unsigned long, long double>::_M_reset()::{lambda(auto:1&&)#1}&&, std::variant<decltype(nullptr), std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, fly::Json, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, fly::Json> > >, std::vector<fly::Json, std::allocator<fly::Json> >, bool, long, unsigned long, long double>&)>, std::integer_sequence<unsigned long, 1ul> >::__visit_invoke(std::__detail::__variant::_Variant_storage<false, decltype(nullptr), std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, fly::Json, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, fly::Json> > >, std::vector<fly::Json, std::allocator<fly::Json> >, bool, long, unsigned long, long double>::_M_reset()::{lambda(auto:1&&)#1}, std::variant<decltype(nullptr), std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, fly::Json, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, fly::Json> > >, std::vector<fly::Json, std::allocator<fly::Json> >, bool, long, unsigned long, long double>)
51+
6.90 0.21 0.02 5560321 0.00 0.00 fly::JsonParser::consume_whitespace()
52+
6.90 0.23 0.02 1112092 0.00 0.00 fly::Json::push_back(fly::Json&&)
53+
6.90 0.25 0.02 1112064 0.00 0.00 fly::Json::validate_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&)
54+
3.45 0.26 0.01 4321284 0.00 0.00 std::__detail::__variant::__gen_vtable_impl<std::__detail::__variant::_Multi_array<void (*)(std::__detail::__variant::_Variant_storage<false, decltype(nullptr), std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, fly::Json, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, fly::Json> > >, std::vector<fly::Json, std::allocator<fly::Json> >, bool, long, unsigned long, long double>::_M_reset()::{lambda(auto:1&&)#1}&&, std::variant<decltype(nullptr), std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, fly::Json, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, fly::Json> > >, std::vector<fly::Json, std::allocator<fly::Json> >, bool, long, unsigned long, long double>&)>, std::integer_sequence<unsigned long, 0ul> >::__visit_invoke(std::__detail::__variant::_Variant_storage<false, decltype(nullptr), std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, fly::Json, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, fly::Json> > >, std::vector<fly::Json, std::allocator<fly::Json> >, bool, long, unsigned long, long double>::_M_reset()::{lambda(auto:1&&)#1}, std::variant<decltype(nullptr), std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, fly::Json, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, fly::Json> > >, std::vector<fly::Json, std::allocator<fly::Json> >, bool, long, unsigned long, long double>)
55+
3.45 0.27 0.01 3336194 0.00 0.00 fly::JsonParser::consume_whitespace_and_comments()
56+
3.45 0.28 0.01 1112065 0.00 0.00 fly::JsonParser::parse_json()
6057
```
6158

6259
The move constructor is about as simple as it gets:

bench/json/benchmark_json.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ CATCH_TEST_CASE("JSON", "[bench]")
8181
static std::vector<std::filesystem::path> s_test_files {
8282
root / "test" / "parser" / "json" / "unicode" / "all_unicode.json",
8383
here / "data" / "canada.json",
84-
here / "data" / "gsoc-2018.json"};
84+
here / "data" / "gsoc-2018.json",
85+
};
8586

8687
std::map<std::string, std::unique_ptr<JsonParserBase>> parsers;
8788
parsers.emplace("boost", std::make_unique<BoostJsonParser>());

0 commit comments

Comments
 (0)