summaryrefslogtreecommitdiff
path: root/libs/protoutil
diff options
context:
space:
mode:
authorYi Jin <jinyithu@google.com>2018-02-02 16:25:11 -0800
committerYi Jin <jinyithu@google.com>2018-02-09 14:20:48 -0800
commit7f9e63b63269baa41a36fc31acd6fc071309c26c (patch)
tree783f5e5b55341f7dad48db2fba706295f9b25ca8 /libs/protoutil
parent421822ce0f3bb581d36cdc5273d4c345c634f9c0 (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.h5
-rw-r--r--libs/protoutil/include/android/util/ProtoOutputStream.h5
-rw-r--r--libs/protoutil/src/EncodedBuffer.cpp7
-rw-r--r--libs/protoutil/src/ProtoOutputStream.cpp12
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)
{