mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00

The comment sounds like it is worried the next header won't fit after `limit` and before the end of `data`, but the code was previously only checking the space between `position` and `limit`. This led to some unnecessary copies. Running the Robolectric `FlacExtractorTest.sample()` test in only the 'partial reads' and I/O errors case (worst case for this bug) results in 57271 copies without this fix, and 19 copies with it. Sample of the first 10 copies before this fix, showing a copy is made for every byte read from the input: ``` W/ibaker: Making a copy. input.position=8881, data.length=32768, pos=1, lim=1 W/ibaker: Making a copy. input.position=8882, data.length=32768, pos=1, lim=1 W/ibaker: Making a copy. input.position=8883, data.length=32768, pos=1, lim=1 W/ibaker: Making a copy. input.position=8884, data.length=32768, pos=1, lim=1 W/ibaker: Making a copy. input.position=8885, data.length=32768, pos=1, lim=1 W/ibaker: Making a copy. input.position=8886, data.length=32768, pos=1, lim=1 W/ibaker: Making a copy. input.position=8887, data.length=32768, pos=1, lim=1 W/ibaker: Making a copy. input.position=8888, data.length=32768, pos=1, lim=1 W/ibaker: Making a copy. input.position=8889, data.length=32768, pos=1, lim=1 W/ibaker: Making a copy. input.position=8890, data.length=32768, pos=1, lim=1 ``` And the first 10 copies after the fix: ``` W/ibaker: Making a copy. input.position=41648, data.length=32768, pos=32753, lim=32768 W/ibaker: Making a copy. input.position=74401, data.length=32768, pos=32753, lim=32768 W/ibaker: Making a copy. input.position=107154, data.length=32768, pos=32753, lim=32768 W/ibaker: Making a copy. input.position=139907, data.length=32768, pos=32753, lim=32768 W/ibaker: Making a copy. input.position=172660, data.length=32768, pos=32753, lim=32768 W/ibaker: Making a copy. input.position=41648, data.length=32768, pos=32753, lim=32768 W/ibaker: Making a copy. input.position=74401, data.length=32768, pos=32753, lim=32768 W/ibaker: Making a copy. input.position=107154, data.length=32768, pos=32753, lim=32768 W/ibaker: Making a copy. input.position=139907, data.length=32768, pos=32753, lim=32768 W/ibaker: Making a copy. input.position=172660, data.length=32768, pos=32753, lim=32768 ``` PiperOrigin-RevId: 738341007