Elliott Hughes
2c96639eb2
Optimize the mbs fast path slightly.
...
From a logcat profile:
```
|--95.06%-- convertPrintable(char*, char const*, unsigned long)
| |--13.95%-- [hit in function]
| |
| |--35.96%-- mbrtoc32
| | |--82.72%-- [hit in function]
| | |
| | |--11.07%-- mbsinit
| | |
| | |--5.96%-- @plt
```
I think we'd assumed that mbsinit() would be inlined, but since these
functions aren't all in wchar.cpp it wasn't being. This change moves the
implementation into a (more clearly named) inline function so we can
trivially reclaim that 11%+6%.
Benchmarks before:
```
-------------------------------------------------------------------
Benchmark Time CPU Iterations
-------------------------------------------------------------------
BM_stdlib_mbrtowc_1 8.03 ns 7.95 ns 87144997
BM_stdlib_mbrtowc_2 22.0 ns 21.8 ns 32002437
BM_stdlib_mbrtowc_3 30.0 ns 29.7 ns 23517699
BM_stdlib_mbrtowc_4 37.4 ns 37.1 ns 18895204
BM_stdlib_mbstowcs_ascii 792373 ns 782484 ns 890 bytes_per_second=609.389M/s
BM_stdlib_mbstowcs_wide 15836785 ns 15678316 ns 44 bytes_per_second=30.4138M/s
```
Benchmarks after:
```
-------------------------------------------------------------------
Benchmark Time CPU Iterations
-------------------------------------------------------------------
BM_stdlib_mbrtowc_1 5.76 ns 5.72 ns 121863813
BM_stdlib_mbrtowc_2 17.1 ns 16.9 ns 41487260
BM_stdlib_mbrtowc_3 24.2 ns 24.0 ns 29141629
BM_stdlib_mbrtowc_4 30.3 ns 30.1 ns 23229291
BM_stdlib_mbstowcs_ascii 783506 ns 775389 ns 903 bytes_per_second=614.965M/s
BM_stdlib_mbstowcs_wide 12787003 ns 12672642 ns 55 bytes_per_second=37.6273M/s
```
Bug: http://b/206523398
Test: treehugger
Change-Id: If8c6c39880096ddd2cbd323c68dca82e9849ace6
2021-11-16 11:03:19 -08:00
Yi Kong
32bc0fcf69
Modernize codebase by replacing NULL with nullptr
...
Fixes -Wzero-as-null-pointer-constant warning.
Test: m
Bug: 68236239
Change-Id: I5b4123bc6709641315120a191e36cc57541349b2
2018-08-02 18:09:44 -07:00
Elliott Hughes
697f42afdb
Hide various mbstate implementation details.
...
...by inlining them.
Also fix a couple of harmless bugs in passing. I've added tests, but in
both cases I don't think it was actually possible to hit the bad behavior:
we'd hit another test and fail immediately after in an externally
indistinguishable way.
Bug: N/A
Test: readelf
Change-Id: I8466050b0bfe2b7b94c76b383cf10c1d9d28debd
2017-07-14 17:00:05 -07:00
Dan Albert
7a7f9952c1
Adds functionality specified by uchar.h
...
mbrtoc32 and c32rtomb get their implementations from mbrtowc and wcrtomb. The
wc functions now simply call the c32 functions.
Bug: 14646575
Change-Id: I49d4b95fed0f9d790260c996c4d0f8bfd1686324
2014-06-04 08:39:24 -07:00