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

Commit 1e8c57f3 authored by Ruchir Rastogi's avatar Ruchir Rastogi
Browse files

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
parent 7fc97ad1
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -227,8 +227,8 @@ void LogEvent::parseAttributionChain(int32_t* pos, int32_t depth, bool* last,
    }
    // 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 @@ void LogEvent::parseIsUidAnnotation(uint8_t annotationType) {
    }

    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 @@ void LogEvent::parseExclusiveStateAnnotation(uint8_t annotationType) {
    }

    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 @@ bool LogEvent::parseBuffer(uint8_t* buf, size_t len) {
                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 @@ bool LogEvent::hasAttributionChain(std::pair<int, int>* indexRange) const {
    }

    if (nullptr != indexRange) {
        indexRange->first = mAttributionChainStartIndex;
        indexRange->second = mAttributionChainEndIndex;
        indexRange->first = static_cast<int>(mAttributionChainStartIndex);
        indexRange->second = static_cast<int>(mAttributionChainEndIndex);
    }

    return true;
+9 −13
Original line number Diff line number Diff line
@@ -160,7 +160,7 @@ public:
    //    }
    // 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 @@ public:
    //    }
    // 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 @@ public:
        return mValid;
    }

    int32_t getErrorBitmask() const {
        return mErrorBitmask;
    }

private:
    /**
     * Only use this if copy is absolutely needed.
@@ -316,16 +312,16 @@ private:
    // 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);