Skip to content

Conversation

@raphlinus
Copy link
Contributor

@raphlinus raphlinus commented May 4, 2016

This patch escapes ASCII control characters in the range 0x00...0x1f, in accordance with the JSON spec.

Fixes #51

@raphlinus
Copy link
Contributor Author

Sorry, I wrote the issue # wrong when I uploaded.

This patch escapes ASCII control characters in the range 0x00...0x1f, in accordance with the JSON spec.

Fixes serde-rs#51
@oli-obk
Copy link
Member

oli-obk commented May 4, 2016

Since you are concerned about execution speed, could you post some benchmarks before and after?

@PaulGrandperrin
Copy link

PaulGrandperrin commented May 5, 2016

test bench_log::bench_copy                                      ... bench:          35 ns/iter (+/- 2) = 17285 MB/s
test bench_log::bench_decoder                                   ... bench:      18,073 ns/iter (+/- 1,326) = 33 MB/s
test bench_log::bench_deserializer                              ... bench:       5,493 ns/iter (+/- 137) = 110 MB/s
test bench_log::bench_encoder                                   ... bench:       3,336 ns/iter (+/- 56) = 181 MB/s
test bench_log::bench_manual_serialize_my_mem_writer0_escape    ... bench:       3,252 ns/iter (+/- 399) = 186 MB/s
test bench_log::bench_manual_serialize_my_mem_writer0_no_escape ... bench:       2,003 ns/iter (+/- 50) = 302 MB/s
test bench_log::bench_manual_serialize_my_mem_writer1_escape    ... bench:       1,934 ns/iter (+/- 78) = 312 MB/s
test bench_log::bench_manual_serialize_my_mem_writer1_no_escape ... bench:       1,124 ns/iter (+/- 163) = 538 MB/s
test bench_log::bench_manual_serialize_vec_escape               ... bench:       2,052 ns/iter (+/- 163) = 294 MB/s
test bench_log::bench_manual_serialize_vec_no_escape            ... bench:       1,315 ns/iter (+/- 36) = 460 MB/s
test bench_log::bench_serializer                                ... bench:       2,605 ns/iter (+/- 112) = 232 MB/s
test bench_log::bench_serializer_my_mem_writer0                 ... bench:       3,613 ns/iter (+/- 689) = 167 MB/s
test bench_log::bench_serializer_my_mem_writer1                 ... bench:       2,190 ns/iter (+/- 35) = 276 MB/s
test bench_log::bench_serializer_slice                          ... bench:       3,069 ns/iter (+/- 1,791) = 197 MB/s
test bench_log::bench_serializer_vec                            ... bench:       2,369 ns/iter (+/- 352) = 255 MB/s
test bench_log::bench_copy                                      ... bench:          35 ns/iter (+/- 2) = 17285 MB/s
test bench_log::bench_decoder                                   ... bench:      18,576 ns/iter (+/- 170) = 32 MB/s
test bench_log::bench_deserializer                              ... bench:       5,594 ns/iter (+/- 905) = 108 MB/s
test bench_log::bench_encoder                                   ... bench:       3,214 ns/iter (+/- 174) = 188 MB/s
test bench_log::bench_manual_serialize_my_mem_writer0_escape    ... bench:       3,692 ns/iter (+/- 310) = 163 MB/s
test bench_log::bench_manual_serialize_my_mem_writer0_no_escape ... bench:       1,998 ns/iter (+/- 196) = 302 MB/s
test bench_log::bench_manual_serialize_my_mem_writer1_escape    ... bench:       2,580 ns/iter (+/- 37) = 234 MB/s
test bench_log::bench_manual_serialize_my_mem_writer1_no_escape ... bench:       1,103 ns/iter (+/- 39) = 548 MB/s
test bench_log::bench_manual_serialize_vec_escape               ... bench:       2,698 ns/iter (+/- 199) = 224 MB/s
test bench_log::bench_manual_serialize_vec_no_escape            ... bench:       1,286 ns/iter (+/- 117) = 470 MB/s
test bench_log::bench_serializer                                ... bench:       3,188 ns/iter (+/- 67) = 189 MB/s
test bench_log::bench_serializer_my_mem_writer0                 ... bench:       4,138 ns/iter (+/- 330) = 146 MB/s
test bench_log::bench_serializer_my_mem_writer1                 ... bench:       2,707 ns/iter (+/- 55) = 223 MB/s
test bench_log::bench_serializer_slice                          ... bench:       3,786 ns/iter (+/- 2,035) = 159 MB/s
test bench_log::bench_serializer_vec                            ... bench:       2,914 ns/iter (+/- 74) = 207 MB/s
test bench_log::bench_copy                                      ... bench:          35 ns/iter (+/- 3) = 17285 MB/s
test bench_log::bench_decoder                                   ... bench:      18,109 ns/iter (+/- 1,484) = 33 MB/s
test bench_log::bench_deserializer                              ... bench:       5,599 ns/iter (+/- 315) = 108 MB/s
test bench_log::bench_encoder                                   ... bench:       3,346 ns/iter (+/- 263) = 180 MB/s
test bench_log::bench_manual_serialize_my_mem_writer0_escape    ... bench:       3,279 ns/iter (+/- 72) = 184 MB/s
test bench_log::bench_manual_serialize_my_mem_writer0_no_escape ... bench:       1,958 ns/iter (+/- 272) = 308 MB/s
test bench_log::bench_manual_serialize_my_mem_writer1_escape    ... bench:       2,122 ns/iter (+/- 164) = 285 MB/s
test bench_log::bench_manual_serialize_my_mem_writer1_no_escape ... bench:       1,089 ns/iter (+/- 101) = 555 MB/s
test bench_log::bench_manual_serialize_vec_escape               ... bench:       2,267 ns/iter (+/- 186) = 266 MB/s
test bench_log::bench_manual_serialize_vec_no_escape            ... bench:       1,315 ns/iter (+/- 125) = 460 MB/s
test bench_log::bench_serializer                                ... bench:       2,672 ns/iter (+/- 74) = 226 MB/s
test bench_log::bench_serializer_my_mem_writer0                 ... bench:       3,840 ns/iter (+/- 178) = 157 MB/s
test bench_log::bench_serializer_my_mem_writer1                 ... bench:       2,373 ns/iter (+/- 491) = 254 MB/s
test bench_log::bench_serializer_slice                          ... bench:       3,230 ns/iter (+/- 1,879) = 187 MB/s
test bench_log::bench_serializer_vec                            ... bench:       2,477 ns/iter (+/- 198) = 244 MB/s

Here are the most noticeable between the last common commit and #58
manual_serialize_my_mem_writer1_escape : 75% of original speed
manual_serialize_vec_escape: 76% of original speed
serializer: 81% of original speed
serializer_my_mem_writer1: 81% of original speed
serializer_slice: 81% of original speed
serializer_vec: 81% of original speed

Here are the most noticeable between the last common commit and #65
manual_serialize_my_mem_writer1_escape : 91% of original speed
manual_serialize_vec_escape: 91% of original speed
serializer: 97% of original speed
serializer_my_mem_writer1: 92% of original speed
serializer_slice: 95% of original speed
serializer_vec: 96% of original speed

Conclusion:
This code is significantly faster than #58, I'll try to investigate if this comes from the different logic used or the fact that it escapes fewer characters.

@PaulGrandperrin
Copy link

PaulGrandperrin commented May 5, 2016

After some tests, the difference really comes from the fact that fewer characters are escaped than #58 .

@raphlinus
Copy link
Contributor Author

Thanks @PaulGrandperrin for the benchmarks! I was planning to do them but didn't get around to it.

@raphlinus
Copy link
Contributor Author

Yay!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

3 participants