diff --git a/libs/protoutil/src/EncodedBuffer.cpp b/libs/protoutil/src/EncodedBuffer.cpp index 96b54c63a836b..afb54a6c49b62 100644 --- a/libs/protoutil/src/EncodedBuffer.cpp +++ b/libs/protoutil/src/EncodedBuffer.cpp @@ -17,6 +17,7 @@ #include #include +#include #include #include @@ -25,7 +26,8 @@ namespace android { namespace util { -const size_t BUFFER_SIZE = 8 * 1024; // 8 KB +constexpr size_t BUFFER_SIZE = 8 * 1024; // 8 KB +const size_t kPageSize = getpagesize(); EncodedBuffer::Pointer::Pointer() : Pointer(BUFFER_SIZE) { @@ -92,7 +94,7 @@ EncodedBuffer::EncodedBuffer(size_t chunkSize) { // Align chunkSize to memory page size chunkSize = chunkSize == 0 ? BUFFER_SIZE : chunkSize; - mChunkSize = (chunkSize / PAGE_SIZE + ((chunkSize % PAGE_SIZE == 0) ? 0 : 1)) * PAGE_SIZE; + mChunkSize = (chunkSize + (kPageSize - 1)) & ~(kPageSize - 1); mWp = Pointer(mChunkSize); mEp = Pointer(mChunkSize); } diff --git a/libs/protoutil/tests/EncodedBuffer_test.cpp b/libs/protoutil/tests/EncodedBuffer_test.cpp index 8a7becf68d693..a09558544c268 100644 --- a/libs/protoutil/tests/EncodedBuffer_test.cpp +++ b/libs/protoutil/tests/EncodedBuffer_test.cpp @@ -15,13 +15,16 @@ #include #include +#include + using namespace android::util; using android::sp; constexpr size_t __TEST_CHUNK_SIZE = 16UL; -constexpr size_t TEST_CHUNK_SIZE = (__TEST_CHUNK_SIZE + (PAGE_SIZE - 1)) & ~(PAGE_SIZE - 1); -constexpr size_t TEST_CHUNK_HALF_SIZE = TEST_CHUNK_SIZE / 2; -constexpr size_t TEST_CHUNK_3X_SIZE = 3 * TEST_CHUNK_SIZE; +const size_t kPageSize = getpagesize(); +const size_t TEST_CHUNK_SIZE = (__TEST_CHUNK_SIZE + (kPageSize - 1)) & ~(kPageSize - 1); +const size_t TEST_CHUNK_HALF_SIZE = TEST_CHUNK_SIZE / 2; +const size_t TEST_CHUNK_3X_SIZE = 3 * TEST_CHUNK_SIZE; static void expectPointer(EncodedBuffer::Pointer* p, size_t pos) { EXPECT_EQ(p->pos(), pos);