Remove the IncidentHeaderProto dependency from statsd.
+ IncidentReportArgs takes the bytes instead of IncidentHeaderProto object This cl is the ag/6287053 + build fix. Test: incidentd_test && statsd_test Change-Id: I86bcb48f4ab212b36ca4611a1fa05faace9c3702
This commit is contained in:
@@ -94,8 +94,10 @@ cc_test {
|
||||
|
||||
data: ["testdata/**/*"],
|
||||
|
||||
static_libs: ["libgmock"],
|
||||
|
||||
static_libs: [
|
||||
"libgmock",
|
||||
"libplatformprotos",
|
||||
],
|
||||
shared_libs: [
|
||||
"libbase",
|
||||
"libbinder",
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
|
||||
#include "external/Perfetto.h"
|
||||
#include "external/Perfprofd.h"
|
||||
#include "frameworks/base/libs/incident/proto/android/os/header.pb.h"
|
||||
#include "subscriber/IncidentdReporter.h"
|
||||
#include "subscriber/SubscriberReporter.h"
|
||||
|
||||
|
||||
@@ -17,32 +17,67 @@
|
||||
#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) {
|
||||
VLOG("The alert %lld contains zero section in config(%d,%lld)", (unsigned long long)rule_id,
|
||||
configKey.GetUid(), (long long) configKey.GetId());
|
||||
configKey.GetUid(), (long long)configKey.GetId());
|
||||
return false;
|
||||
}
|
||||
|
||||
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));
|
||||
|
||||
@@ -36,7 +36,6 @@ cc_library_shared {
|
||||
|
||||
srcs: [
|
||||
":libincident_aidl",
|
||||
"proto/android/os/header.proto",
|
||||
"proto/android/os/metadata.proto",
|
||||
"src/IncidentReportArgs.cpp",
|
||||
],
|
||||
@@ -47,4 +46,4 @@ cc_library_shared {
|
||||
},
|
||||
|
||||
export_include_dirs: ["include"],
|
||||
}
|
||||
}
|
||||
@@ -24,8 +24,6 @@
|
||||
#include <set>
|
||||
#include <vector>
|
||||
|
||||
#include "frameworks/base/libs/incident/proto/android/os/header.pb.h"
|
||||
|
||||
namespace android {
|
||||
namespace os {
|
||||
|
||||
@@ -49,7 +47,7 @@ public:
|
||||
void setAll(bool all);
|
||||
void setDest(int dest);
|
||||
void addSection(int section);
|
||||
void addHeader(const IncidentHeaderProto& headerProto);
|
||||
void addHeader(const vector<uint8_t>& headerProto);
|
||||
|
||||
inline bool all() const { return mAll; }
|
||||
bool containsSection(int section) const;
|
||||
|
||||
@@ -161,15 +161,9 @@ IncidentReportArgs::addSection(int section)
|
||||
}
|
||||
|
||||
void
|
||||
IncidentReportArgs::addHeader(const IncidentHeaderProto& headerProto)
|
||||
IncidentReportArgs::addHeader(const vector<uint8_t>& headerProto)
|
||||
{
|
||||
vector<uint8_t> header;
|
||||
auto serialized = headerProto.SerializeAsString();
|
||||
if (serialized.empty()) return;
|
||||
for (auto it = serialized.begin(); it != serialized.end(); it++) {
|
||||
header.push_back((uint8_t)*it);
|
||||
}
|
||||
mHeaders.push_back(header);
|
||||
mHeaders.push_back(headerProto);
|
||||
}
|
||||
|
||||
bool
|
||||
|
||||
Reference in New Issue
Block a user