summaryrefslogtreecommitdiff
path: root/tools/stats_log_api_gen/java_writer.cpp
diff options
context:
space:
mode:
authorMuhammad Qureshi <muhammadq@google.com>2020-03-25 17:45:01 -0700
committerMuhammad Qureshi <muhammadq@google.com>2020-03-26 14:51:28 -0700
commitc6c38632af73e28ad955e1b49101fadab12c9fc8 (patch)
treef2ca331e97750d978a99597743cda3f5e2e2a988 /tools/stats_log_api_gen/java_writer.cpp
parent52f4d8d9f22cd61cd0459a44b9a87359a81616c6 (diff)
Group annotations for the same atom id
Group annotations for the same atom id inside one if-block in generated code. Use shared_ptr to store AtomDecls in multiple data structures. Store a mapping of field numbers to atoms that have annotations at corresponding field numbers in Collation.h Bug: 151744250 Test: stats-log-api-gen-test Test: m stats-log-api-gen Test: m libstatsmetadata Test: m statslog-framework-java-gen Test: m libstatslog Change-Id: I874696cfb5c27141017b4293bec809ab510ceb98
Diffstat (limited to 'tools/stats_log_api_gen/java_writer.cpp')
-rw-r--r--tools/stats_log_api_gen/java_writer.cpp66
1 files changed, 34 insertions, 32 deletions
diff --git a/tools/stats_log_api_gen/java_writer.cpp b/tools/stats_log_api_gen/java_writer.cpp
index 5a22b5c4cd6b..bcdabeb6745f 100644
--- a/tools/stats_log_api_gen/java_writer.cpp
+++ b/tools/stats_log_api_gen/java_writer.cpp
@@ -22,9 +22,8 @@
namespace android {
namespace stats_log_api_gen {
-static int write_java_q_logger_class(
- FILE* out, const map<vector<java_type_t>, FieldNumberToAnnotations>& signatureInfoMap,
- const AtomDecl& attributionDecl) {
+static int write_java_q_logger_class(FILE* out, const SignatureInfoMap& signatureInfoMap,
+ const AtomDecl& attributionDecl) {
fprintf(out, "\n");
fprintf(out, " // Write logging helper methods for statsd in Q and earlier.\n");
fprintf(out, " private static class QLogger {\n");
@@ -41,47 +40,50 @@ static int write_java_q_logger_class(
}
static void write_annotations(FILE* out, int argIndex,
- const FieldNumberToAnnotations& fieldNumberToAnnotations) {
- auto it = fieldNumberToAnnotations.find(argIndex);
- if (it == fieldNumberToAnnotations.end()) {
+ const FieldNumberToAtomDeclSet& fieldNumberToAtomDeclSet) {
+ FieldNumberToAtomDeclSet::const_iterator fieldNumberToAtomDeclSetIt =
+ fieldNumberToAtomDeclSet.find(argIndex);
+ if (fieldNumberToAtomDeclSet.end() == fieldNumberToAtomDeclSetIt) {
return;
}
- const set<shared_ptr<Annotation>>& annotations = it->second;
- for (auto& annotation : annotations) {
- // TODO(b/151744250): Group annotations for same atoms.
- // TODO(b/151786433): Write atom constant name instead of atom id literal.
- fprintf(out, " if (code == %d) {\n", annotation->atomId);
- switch (annotation->type) {
- case ANNOTATION_TYPE_INT:
+ const AtomDeclSet& atomDeclSet = fieldNumberToAtomDeclSetIt->second;
+ for (const shared_ptr<AtomDecl>& atomDecl : atomDeclSet) {
+ fprintf(out, " if (code == %d) {\n", atomDecl->code);
+ const AnnotationSet& annotations = atomDecl->fieldNumberToAnnotations.at(argIndex);
+ for (const shared_ptr<Annotation>& annotation : annotations) {
+ // TODO(b/151786433): Write atom constant name instead of atom id literal.
+ switch (annotation->type) {
// TODO(b/151776731): Check for reset state annotation and only include
// reset state when field value == default state annotation value.
- // TODO(b/151786433): Write annotation constant name instead of
- // annotation id literal.
- fprintf(out, " builder.addIntAnnotation((byte) %d, %d);\n",
- annotation->annotationId, annotation->value.intValue);
- break;
- case ANNOTATION_TYPE_BOOL:
- // TODO(b/151786433): Write annotation constant name instead of
- // annotation id literal.
- fprintf(out, " builder.addBooleanAnnotation((byte) %d, %s);\n",
- annotation->annotationId, annotation->value.boolValue ? "true" : "false");
- break;
- default:
- break;
+ case ANNOTATION_TYPE_INT:
+ // TODO(b/151786433): Write annotation constant name instead of
+ // annotation id literal.
+ fprintf(out, " builder.addIntAnnotation((byte) %d, %d);\n",
+ annotation->annotationId, annotation->value.intValue);
+ break;
+ case ANNOTATION_TYPE_BOOL:
+ // TODO(b/151786433): Write annotation constant name instead of
+ // annotation id literal.
+ fprintf(out, " builder.addBooleanAnnotation((byte) %d, %s);\n",
+ annotation->annotationId,
+ annotation->value.boolValue ? "true" : "false");
+ break;
+ default:
+ break;
+ }
}
fprintf(out, " }\n");
}
}
-static int write_java_methods(
- FILE* out, const map<vector<java_type_t>, FieldNumberToAnnotations>& signatureInfoMap,
- const AtomDecl& attributionDecl, const bool supportQ) {
+static int write_java_methods(FILE* out, const SignatureInfoMap& signatureInfoMap,
+ const AtomDecl& attributionDecl, const bool supportQ) {
for (auto signatureInfoMapIt = signatureInfoMap.begin();
signatureInfoMapIt != signatureInfoMap.end(); signatureInfoMapIt++) {
// Print method signature.
fprintf(out, " public static void write(int code");
const vector<java_type_t>& signature = signatureInfoMapIt->first;
- const FieldNumberToAnnotations& fieldNumberToAnnotations = signatureInfoMapIt->second;
+ const FieldNumberToAtomDeclSet& fieldNumberToAtomDeclSet = signatureInfoMapIt->second;
int argIndex = 1;
for (vector<java_type_t>::const_iterator arg = signature.begin(); arg != signature.end();
arg++) {
@@ -120,7 +122,7 @@ static int write_java_methods(
// Write atom code.
fprintf(out, "%s builder.setAtomId(code);\n", indent.c_str());
- write_annotations(out, ATOM_ID_FIELD_NUMBER, fieldNumberToAnnotations);
+ write_annotations(out, ATOM_ID_FIELD_NUMBER, fieldNumberToAtomDeclSet);
// Write the args.
argIndex = 1;
@@ -231,7 +233,7 @@ static int write_java_methods(
fprintf(stderr, "Encountered unsupported type.");
return 1;
}
- write_annotations(out, argIndex, fieldNumberToAnnotations);
+ write_annotations(out, argIndex, fieldNumberToAtomDeclSet);
argIndex++;
}