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

Commit 2b924017 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Remove the IncidentHeaderProto dependency from statsd."

parents d7fb7d59 df6255a0
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -94,8 +94,10 @@ cc_test {

    data: ["testdata/**/*"],

    static_libs: ["libgmock"],

    static_libs: [
        "libgmock",
        "libplatformprotos",
    ],
    shared_libs: [
        "libbase",
        "libbinder",
+20 −3
Original line number Diff line number Diff line
@@ -35,6 +35,16 @@ using namespace std;
using ::testing::StrEq;
using ::testing::Test;

namespace {
void getHeaderData(const IncidentHeaderProto& headerProto, vector<uint8_t>* out) {
    out->clear();
    auto serialized = headerProto.SerializeAsString();
    if (serialized.empty()) return;
    out->resize(serialized.length());
    std::copy(serialized.begin(), serialized.end(), out->begin());
}
}

class TestListener : public IIncidentReportStatusListener {
public:
    int startInvoked;
@@ -143,7 +153,10 @@ TEST_F(ReporterTest, RunReportWithHeaders) {
    args2.addSection(2);
    IncidentHeaderProto header;
    header.set_alert_id(12);
    args2.addHeader(header);

    vector<uint8_t> out;
    getHeaderData(header, &out);
    args2.addHeader(out);
    sp<ReportRequest> r1 = new ReportRequest(args1, l, tf.fd);
    sp<ReportRequest> r2 = new ReportRequest(args2, l, tf.fd);

@@ -169,8 +182,12 @@ TEST_F(ReporterTest, RunReportToGivenDirectory) {
    IncidentHeaderProto header1, header2;
    header1.set_alert_id(12);
    header2.set_reason("abcd");
    args.addHeader(header1);
    args.addHeader(header2);

    vector<uint8_t> out;
    getHeaderData(header1, &out);
    args.addHeader(out);
    getHeaderData(header2, &out);
    args.addHeader(out);
    sp<ReportRequest> r = new ReportRequest(args, l, -1);
    reporter->batch.add(r);

+19 −3
Original line number Diff line number Diff line
@@ -82,6 +82,16 @@ protected:
    virtual IBinder* onAsBinder() override { return nullptr; };
};

namespace {
void getHeaderData(const IncidentHeaderProto& headerProto, vector<uint8_t>* out) {
    out->clear();
    auto serialized = headerProto.SerializeAsString();
    if (serialized.empty()) return;
    out->resize(serialized.length());
    std::copy(serialized.begin(), serialized.end(), out->begin());
}
}

TEST_F(SectionTest, HeaderSection) {
    HeaderSection hs;

@@ -94,9 +104,15 @@ TEST_F(SectionTest, HeaderSection) {
    head1.set_reason("axe");
    head2.set_reason("pup");

    args1.addHeader(head1);
    args1.addHeader(head2);
    args2.addHeader(head2);
    vector<uint8_t> out;
    getHeaderData(head1, &out);
    args1.addHeader(out);

    getHeaderData(head2, &out);
    args1.addHeader(out);

    getHeaderData(head2, &out);
    args2.addHeader(out);

    requests.add(new ReportRequest(args1, new SimpleListener(), -1));
    requests.add(new ReportRequest(args2, new SimpleListener(), tf.fd));
+42 −7
Original line number Diff line number Diff line
@@ -17,17 +17,54 @@
#include "Log.h"

#include "IncidentdReporter.h"
#include "frameworks/base/libs/incident/proto/android/os/header.pb.h"

#include <android/os/IIncidentManager.h>
#include <android/os/IncidentReportArgs.h>
#include <android/util/ProtoOutputStream.h>
#include <binder/IBinder.h>
#include <binder/IServiceManager.h>

#include <vector>

namespace android {
namespace os {
namespace statsd {

using android::util::ProtoOutputStream;
using std::vector;

using util::FIELD_TYPE_MESSAGE;
using util::FIELD_TYPE_INT32;
using util::FIELD_TYPE_INT64;

// field ids in IncidentHeaderProto
const int FIELD_ID_ALERT_ID = 1;
const int FIELD_ID_CONFIG_KEY = 3;
const int FIELD_ID_CONFIG_KEY_UID = 1;
const int FIELD_ID_CONFIG_KEY_ID = 2;

namespace {
void getProtoData(const int64_t& rule_id, const ConfigKey& configKey, vector<uint8_t>* protoData) {
    ProtoOutputStream headerProto;
    headerProto.write(FIELD_TYPE_INT64 | FIELD_ID_ALERT_ID, (long long)rule_id);
    uint64_t token =
            headerProto.start(FIELD_TYPE_MESSAGE | FIELD_ID_CONFIG_KEY);
    headerProto.write(FIELD_TYPE_INT32 | FIELD_ID_CONFIG_KEY_UID, configKey.GetUid());
    headerProto.write(FIELD_TYPE_INT64 | FIELD_ID_CONFIG_KEY_ID, (long long)configKey.GetId());
    headerProto.end(token);

    protoData->resize(headerProto.size());
    size_t pos = 0;
    auto iter = headerProto.data();
    while (iter.readBuffer() != NULL) {
        size_t toRead = iter.currentToRead();
        std::memcpy(&((*protoData)[pos]), iter.readBuffer(), toRead);
        pos += toRead;
        iter.rp()->move(toRead);
    }
}
}  // namespace

bool GenerateIncidentReport(const IncidentdDetails& config, const int64_t& rule_id,
                            const ConfigKey& configKey) {
    if (config.section_size() == 0) {
@@ -38,11 +75,9 @@ bool GenerateIncidentReport(const IncidentdDetails& config, const int64_t& rule_

    IncidentReportArgs incidentReport;

    android::os::IncidentHeaderProto header;
    header.set_alert_id(rule_id);
    header.mutable_config_key()->set_uid(configKey.GetUid());
    header.mutable_config_key()->set_id(configKey.GetId());
    incidentReport.addHeader(header);
    vector<uint8_t> protoData;
    getProtoData(rule_id, configKey, &protoData);
    incidentReport.addHeader(protoData);

    for (int i = 0; i < config.section_size(); i++) {
        incidentReport.addSection(config.section(i));
+1 −2
Original line number Diff line number Diff line
@@ -36,7 +36,6 @@ cc_library_shared {

    srcs: [
        ":libincident_aidl",
        "proto/android/os/header.proto",
        "proto/android/os/metadata.proto",
        "src/IncidentReportArgs.cpp",
    ],
Loading