Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 179ed2b7 authored by Jeff Sharkey's avatar Jeff Sharkey
Browse files

Fix FastDataOutput performance bug.

The underlying CharsetUtils methods accept the total length of the
underlying byte[] array; the bug in the existing logic was attempting
to pass the remaining length, which caused much more aggressive
one-off buffer allocation when not needed.

Bug: 171832118
Test: atest FrameworksCoreTests:com.android.internal.util.FastDataTest
Test: atest FrameworksCoreTests:android.util.CharsetUtilsTest
Test: atest FrameworksCoreTests:android.util.XmlTest
Test: atest FrameworksCoreTests:android.util.BinaryXmlTest
Change-Id: If257f75446d2f99313eecc3c11822d770f920687
parent b4766c20
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -115,8 +115,7 @@ public class FastDataOutput implements DataOutput, Flushable, Closeable {

        // Magnitude of this returned value indicates the number of bytes
        // required to encode the string; sign indicates success/failure
        int len = CharsetUtils.toModifiedUtf8Bytes(s, mBufferPtr, mBufferPos + 2,
                mBufferCap - mBufferPos - 2);
        int len = CharsetUtils.toModifiedUtf8Bytes(s, mBufferPtr, mBufferPos + 2, mBufferCap);
        if (Math.abs(len) > MAX_UNSIGNED_SHORT) {
            throw new IOException("Modified UTF-8 length too large: " + len);
        }