Reduce memory footprint of LogEvent

This reduces the memory footprint by 16 bytes per LogEvent.

Test: atest statsd_test
Test: atest CtsStatsdHostTestCases
Bug: 154857643
Change-Id: I1e541816377ae8b14d789dc4d1f0a4ec91eef998
diff --git a/cmds/statsd/src/logd/LogEvent.cpp b/cmds/statsd/src/logd/LogEvent.cpp
index 10b1059..8ec0173 100644
--- a/cmds/statsd/src/logd/LogEvent.cpp
+++ b/cmds/statsd/src/logd/LogEvent.cpp
@@ -227,8 +227,8 @@
     }
     // Check if at least one node was successfully parsed.
     if (mValues.size() - 1 > firstUidInChainIndex) {
-        mAttributionChainStartIndex = firstUidInChainIndex;
-        mAttributionChainEndIndex = mValues.size() - 1;
+        mAttributionChainStartIndex = static_cast<int8_t>(firstUidInChainIndex);
+        mAttributionChainEndIndex = static_cast<int8_t>(mValues.size() - 1);
     }
 
     parseAnnotations(numAnnotations, firstUidInChainIndex);
@@ -249,7 +249,7 @@
     }
 
     bool isUid = readNextValue<uint8_t>();
-    if (isUid) mUidFieldIndex = mValues.size() - 1;
+    if (isUid) mUidFieldIndex = static_cast<int8_t>(mValues.size() - 1);
     mValues[mValues.size() - 1].mAnnotations.setUidField(isUid);
 }
 
@@ -290,7 +290,7 @@
     }
 
     const bool exclusiveState = readNextValue<uint8_t>();
-    mExclusiveStateFieldIndex = mValues.size() - 1;
+    mExclusiveStateFieldIndex = static_cast<int8_t>(mValues.size() - 1);
     mValues[getExclusiveStateFieldIndex()].mAnnotations.setExclusiveState(exclusiveState);
 }
 
@@ -408,7 +408,7 @@
                 parseAttributionChain(pos, /*depth=*/0, last, getNumAnnotations(typeInfo));
                 break;
             case ERROR_TYPE:
-                mErrorBitmask = readNextValue<int32_t>();
+                /* mErrorBitmask =*/ readNextValue<int32_t>();
                 mValid = false;
                 break;
             default:
@@ -577,8 +577,8 @@
     }
 
     if (nullptr != indexRange) {
-        indexRange->first = mAttributionChainStartIndex;
-        indexRange->second = mAttributionChainEndIndex;
+        indexRange->first = static_cast<int>(mAttributionChainStartIndex);
+        indexRange->second = static_cast<int>(mAttributionChainEndIndex);
     }
 
     return true;
diff --git a/cmds/statsd/src/logd/LogEvent.h b/cmds/statsd/src/logd/LogEvent.h
index 731b966..53fb5d9 100644
--- a/cmds/statsd/src/logd/LogEvent.h
+++ b/cmds/statsd/src/logd/LogEvent.h
@@ -160,7 +160,7 @@
     //    }
     // Note that atomIndex is 1-indexed.
     inline int getUidFieldIndex() {
-        return mUidFieldIndex;
+        return static_cast<int>(mUidFieldIndex);
     }
 
     // Returns whether this LogEvent has an AttributionChain.
@@ -179,7 +179,7 @@
     //    }
     // Note that atomIndex is 1-indexed.
     inline int getExclusiveStateFieldIndex() const {
-        return mExclusiveStateFieldIndex;
+        return static_cast<int>(mExclusiveStateFieldIndex);
     }
 
     // If a reset state is not sent in the StatsEvent, returns -1. Note that a
@@ -212,10 +212,6 @@
         return mValid;
     }
 
-    int32_t getErrorBitmask() const {
-        return mErrorBitmask;
-    }
-
 private:
     /**
      * Only use this if copy is absolutely needed.
@@ -316,16 +312,16 @@
     // The pid of the logging client (defaults to -1).
     int32_t mLogPid = -1;
 
-    // Bitmask of errors sent by StatsEvent/AStatsEvent.
-    int32_t mErrorBitmask = 0;
-
     // Annotations
     bool mTruncateTimestamp = false;
-    int mUidFieldIndex = -1;
-    int mAttributionChainStartIndex = -1;
-    int mAttributionChainEndIndex = -1;
-    int mExclusiveStateFieldIndex = -1;
     int mResetState = -1;
+
+    // Indexes within the FieldValue vector can be stored in 7 bits because
+    // that's the assumption enforced by the encoding used in FieldValue.
+    int8_t mUidFieldIndex = -1;
+    int8_t mAttributionChainStartIndex = -1;
+    int8_t mAttributionChainEndIndex = -1;
+    int8_t mExclusiveStateFieldIndex = -1;
 };
 
 void writeExperimentIdsToProto(const std::vector<int64_t>& experimentIds, std::vector<uint8_t>* protoOut);