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

Commit 2822b4f4 authored by Yao Chen's avatar Yao Chen Committed by Jack He
Browse files

Skip writing message field in an atom if it's empty

Test: unit test added
Bug: 120635548
Change-Id: I825b1ce526944a20fe65705508ad180ece37492c
Merged-In: I825b1ce526944a20fe65705508ad180ece37492c
(cherry picked from commit 8e6f9983)
parent 046b5129
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -379,7 +379,7 @@ float LogEvent::GetFloat(size_t key, status_t* err) const {

string LogEvent::ToString() const {
    string result;
    result += StringPrintf("{ %lld %lld (%d)", (long long)mLogdTimestampNs,
    result += StringPrintf("{ uid(%d) %lld %lld (%d)", mLogUid, (long long)mLogdTimestampNs,
                           (long long)mElapsedTimestampNs, mTagId);
    for (const auto& value : mValues) {
        result +=
+5 −3
Original line number Diff line number Diff line
@@ -338,9 +338,11 @@ void writeFieldValueTreeToStreamHelper(int tagId, const std::vector<FieldValue>&
                        }
                    }
                    if (isBytesField) {
                        if (dim.mValue.str_value.length() > 0) {
                            protoOutput->write(FIELD_TYPE_MESSAGE | fieldNum,
                                               (const char*)dim.mValue.str_value.c_str(),
                                               dim.mValue.str_value.length());
                        }
                    } else {
                        protoOutput->write(FIELD_TYPE_STRING | fieldNum, dim.mValue.str_value);
                    }
+37 −0
Original line number Diff line number Diff line
@@ -213,7 +213,44 @@ TEST(LogEventTest, TestBinaryFieldAtom) {
    EXPECT_EQ(orig_str, result_str);
}

TEST(LogEventTest, TestBinaryFieldAtom_empty) {
    Atom launcherAtom;
    auto launcher_event = launcherAtom.mutable_launcher_event();
    launcher_event->set_action(stats::launcher::LauncherAction::LONGPRESS);
    launcher_event->set_src_state(stats::launcher::LauncherState::OVERVIEW);
    launcher_event->set_dst_state(stats::launcher::LauncherState::ALLAPPS);

    // empty string.
    string extension_str;

    LogEvent event1(Atom::kLauncherEventFieldNumber, 1000);

    event1.write((int32_t)stats::launcher::LauncherAction::LONGPRESS);
    event1.write((int32_t)stats::launcher::LauncherState::OVERVIEW);
    event1.write((int64_t)stats::launcher::LauncherState::ALLAPPS);
    event1.write(extension_str);
    event1.init();

    ProtoOutputStream proto;
    event1.ToProto(proto);

    std::vector<uint8_t> outData;
    outData.resize(proto.size());
    size_t pos = 0;
    auto iter = proto.data();
    while (iter.readBuffer() != NULL) {
        size_t toRead = iter.currentToRead();
        std::memcpy(&(outData[pos]), iter.readBuffer(), toRead);
        pos += toRead;
        iter.rp()->move(toRead);
    }

    std::string result_str(outData.begin(), outData.end());
    std::string orig_str;
    launcherAtom.SerializeToString(&orig_str);

    EXPECT_EQ(orig_str, result_str);
}

}  // namespace statsd
}  // namespace os
+4 −1
Original line number Diff line number Diff line
@@ -1007,7 +1007,10 @@ write_stats_log_jni(FILE* out, const string& java_method_name, const string& cpp
                hadStringOrChain = true;
                fprintf(out, "    jbyte* jbyte_array%d;\n", argIndex);
                fprintf(out, "    const char* str%d;\n", argIndex);
                fprintf(out, "    if (arg%d != NULL) {\n", argIndex);
                fprintf(out,
                        "    if (arg%d != NULL && env->GetArrayLength(arg%d) > "
                        "0) {\n",
                        argIndex, argIndex);
                fprintf(out,
                        "        jbyte_array%d = "
                        "env->GetByteArrayElements(arg%d, NULL);\n",