Skip to content

Commit 3d5624a

Browse files
authored
Add inline tags to UninitSlice methods (#443)
This appears to be the primary cause of significant performance regressions in the `prost` test suite in the 0.5 to 0.6 transition. See danburkert/prost#381.
1 parent 2428c15 commit 3d5624a

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

src/buf/uninit_slice.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ impl UninitSlice {
4040
///
4141
/// let slice = unsafe { UninitSlice::from_raw_parts_mut(ptr, len) };
4242
/// ```
43+
#[inline]
4344
pub unsafe fn from_raw_parts_mut<'a>(ptr: *mut u8, len: usize) -> &'a mut UninitSlice {
4445
let maybe_init: &mut [MaybeUninit<u8>] =
4546
core::slice::from_raw_parts_mut(ptr as *mut _, len);
@@ -64,6 +65,7 @@ impl UninitSlice {
6465
///
6566
/// assert_eq!(b"boo", &data[..]);
6667
/// ```
68+
#[inline]
6769
pub fn write_byte(&mut self, index: usize, byte: u8) {
6870
assert!(index < self.len());
6971

@@ -90,6 +92,7 @@ impl UninitSlice {
9092
///
9193
/// assert_eq!(b"bar", &data[..]);
9294
/// ```
95+
#[inline]
9396
pub fn copy_from_slice(&mut self, src: &[u8]) {
9497
use core::ptr;
9598

@@ -116,6 +119,7 @@ impl UninitSlice {
116119
/// let mut slice = &mut data[..];
117120
/// let ptr = BufMut::chunk_mut(&mut slice).as_mut_ptr();
118121
/// ```
122+
#[inline]
119123
pub fn as_mut_ptr(&mut self) -> *mut u8 {
120124
self.0.as_mut_ptr() as *mut _
121125
}
@@ -133,6 +137,7 @@ impl UninitSlice {
133137
///
134138
/// assert_eq!(len, 3);
135139
/// ```
140+
#[inline]
136141
pub fn len(&self) -> usize {
137142
self.0.len()
138143
}
@@ -150,13 +155,15 @@ macro_rules! impl_index {
150155
impl Index<$t> for UninitSlice {
151156
type Output = UninitSlice;
152157

158+
#[inline]
153159
fn index(&self, index: $t) -> &UninitSlice {
154160
let maybe_uninit: &[MaybeUninit<u8>] = &self.0[index];
155161
unsafe { &*(maybe_uninit as *const [MaybeUninit<u8>] as *const UninitSlice) }
156162
}
157163
}
158164

159165
impl IndexMut<$t> for UninitSlice {
166+
#[inline]
160167
fn index_mut(&mut self, index: $t) -> &mut UninitSlice {
161168
let maybe_uninit: &mut [MaybeUninit<u8>] = &mut self.0[index];
162169
unsafe { &mut *(maybe_uninit as *mut [MaybeUninit<u8>] as *mut UninitSlice) }

0 commit comments

Comments
 (0)