diff options
author | Yi Jin <jinyithu@google.com> | 2018-02-02 16:25:11 -0800 |
---|---|---|
committer | Yi Jin <jinyithu@google.com> | 2018-02-09 14:20:48 -0800 |
commit | 7f9e63b63269baa41a36fc31acd6fc071309c26c (patch) | |
tree | 783f5e5b55341f7dad48db2fba706295f9b25ca8 /libs/protoutil | |
parent | 421822ce0f3bb581d36cdc5273d4c345c634f9c0 (diff) |
Add clear method to ProtoOutputStream so it is reusable by just
rewinding its internal pointer.
Bug: 72319159
Test: atest incidentd_test and atest statsd_test
Change-Id: Id046b987a7460d68300e5d4d46ae56aec1eba2d0
Diffstat (limited to 'libs/protoutil')
-rw-r--r-- | libs/protoutil/include/android/util/EncodedBuffer.h | 5 | ||||
-rw-r--r-- | libs/protoutil/include/android/util/ProtoOutputStream.h | 5 | ||||
-rw-r--r-- | libs/protoutil/src/EncodedBuffer.cpp | 7 | ||||
-rw-r--r-- | libs/protoutil/src/ProtoOutputStream.cpp | 12 |
4 files changed, 29 insertions, 0 deletions
diff --git a/libs/protoutil/include/android/util/EncodedBuffer.h b/libs/protoutil/include/android/util/EncodedBuffer.h index e568e4cf02fc..0a8a5aa347ba 100644 --- a/libs/protoutil/include/android/util/EncodedBuffer.h +++ b/libs/protoutil/include/android/util/EncodedBuffer.h @@ -64,6 +64,11 @@ public: size_t mOffset; }; + /** + * Clears the buffer by rewinding its write pointer to avoid de/allocate buffers in heap. + */ + void clear(); + /******************************** Write APIs ************************************************/ /** diff --git a/libs/protoutil/include/android/util/ProtoOutputStream.h b/libs/protoutil/include/android/util/ProtoOutputStream.h index faea9b21311d..52830d397772 100644 --- a/libs/protoutil/include/android/util/ProtoOutputStream.h +++ b/libs/protoutil/include/android/util/ProtoOutputStream.h @@ -123,6 +123,11 @@ public: EncodedBuffer::iterator data(); // Get the reader apis of the data. bool flush(int fd); // Flush data directly to a file descriptor. + /** + * Clears the ProtoOutputStream so the buffer can be reused instead of deallocation/allocation again. + */ + void clear(); + // Please don't use the following functions to dump protos unless you are familiar with protobuf encoding. void writeRawVarint(uint64_t varint); void writeLengthDelimitedHeader(uint32_t id, size_t size); diff --git a/libs/protoutil/src/EncodedBuffer.cpp b/libs/protoutil/src/EncodedBuffer.cpp index 435ae8836217..3a5e2e9ef5d0 100644 --- a/libs/protoutil/src/EncodedBuffer.cpp +++ b/libs/protoutil/src/EncodedBuffer.cpp @@ -106,6 +106,13 @@ EncodedBuffer::at(const Pointer& p) const return mBuffers[p.index()] + p.offset(); } +void +EncodedBuffer::clear() +{ + mWp.rewind(); + mEp.rewind(); +} + /******************************** Write APIs ************************************************/ size_t EncodedBuffer::size() const diff --git a/libs/protoutil/src/ProtoOutputStream.cpp b/libs/protoutil/src/ProtoOutputStream.cpp index f24abaed2dce..9d9ffec4c588 100644 --- a/libs/protoutil/src/ProtoOutputStream.cpp +++ b/libs/protoutil/src/ProtoOutputStream.cpp @@ -36,6 +36,18 @@ ProtoOutputStream::~ProtoOutputStream() { } + +void +ProtoOutputStream::clear() +{ + mBuffer.clear(); + mCopyBegin = 0; + mCompact = false; + mDepth = 0; + mObjectId = 0; + mExpectedObjectToken = 0LL; +} + bool ProtoOutputStream::write(uint64_t fieldId, double val) { |