diff options
author | Muhammad Qureshi <muhammadq@google.com> | 2020-03-16 00:53:13 -0700 |
---|---|---|
committer | Muhammad Qureshi <muhammadq@google.com> | 2020-03-17 21:57:35 -0700 |
commit | a31a6229dd330427366702c16c1b35b93818d835 (patch) | |
tree | c15f2570ba6c94a8a3ed2ce2d1d6c61f8f161b32 /tools/stats_log_api_gen/native_writer.cpp | |
parent | b13a3214a141d11ed8acda522a2382f090407000 (diff) |
Write annotations in native generated code.
Generated statslog.cpp: https://paste.googleplex.com/6345695252447232
Bug: 151101995
Test: m stats-log-api-gen
Test: m libstatslog
Change-Id: I745a9beb7be07a1890f811256c51627e6c5976dc
Diffstat (limited to 'tools/stats_log_api_gen/native_writer.cpp')
-rw-r--r-- | tools/stats_log_api_gen/native_writer.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/tools/stats_log_api_gen/native_writer.cpp b/tools/stats_log_api_gen/native_writer.cpp index c06356abec1c..90dcae4197a2 100644 --- a/tools/stats_log_api_gen/native_writer.cpp +++ b/tools/stats_log_api_gen/native_writer.cpp @@ -20,12 +20,57 @@ namespace android { namespace stats_log_api_gen { +static void write_annotations( + FILE* out, int argIndex, + const FieldNumberToAnnotations& fieldNumberToAnnotations, + const string& methodPrefix, + const string& methodSuffix) { + auto fieldNumberToAnnotationsIt = fieldNumberToAnnotations.find(argIndex); + if (fieldNumberToAnnotationsIt == fieldNumberToAnnotations.end()) { + return; + } + const set<shared_ptr<Annotation>>& annotations = + fieldNumberToAnnotationsIt->second; + for (const shared_ptr<Annotation>& 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) { + // TODO(b/151776731): Check for reset state annotation and only include reset state + // when field value == default state annotation value. + case ANNOTATION_TYPE_INT: + // TODO(b/151786433): Write annotation constant name instead of + // annotation id literal. + fprintf(out, " %saddInt32Annotation(%s%d, %d);\n", + methodPrefix.c_str(), + methodSuffix.c_str(), + annotation->annotationId, + annotation->value.intValue); + break; + case ANNOTATION_TYPE_BOOL: + // TODO(b/151786433): Write annotation constant name instead of + // annotation id literal. + fprintf(out, " %saddBoolAnnotation(%s%d, %s);\n", + methodPrefix.c_str(), + methodSuffix.c_str(), + annotation->annotationId, + annotation->value.boolValue ? "true" : "false"); + break; + default: + break; + } + fprintf(out, " }\n"); + } + +} + static int write_native_stats_write_methods(FILE* out, const Atoms& atoms, const AtomDecl& attributionDecl, const bool supportQ) { fprintf(out, "\n"); for (auto signatureInfoMapIt = atoms.signatureInfoMap.begin(); signatureInfoMapIt != atoms.signatureInfoMap.end(); signatureInfoMapIt++) { vector<java_type_t> signature = signatureInfoMapIt->first; + const FieldNumberToAnnotations& fieldNumberToAnnotations = signatureInfoMapIt->second; // Key value pairs not supported in native. if (find(signature.begin(), signature.end(), JAVA_TYPE_KEY_VALUE_PAIR) != signature.end()) { continue; @@ -72,6 +117,7 @@ static int write_native_stats_write_methods(FILE* out, const Atoms& atoms, fprintf(stderr, "Encountered unsupported type."); return 1; } + write_annotations(out, argIndex, fieldNumberToAnnotations, "event.", ""); argIndex++; } fprintf(out, " return event.writeToSocket();\n"); @@ -118,6 +164,8 @@ static int write_native_stats_write_methods(FILE* out, const Atoms& atoms, fprintf(stderr, "Encountered unsupported type."); return 1; } + write_annotations(out, argIndex, fieldNumberToAnnotations, "AStatsEvent_", + "event, "); argIndex++; } fprintf(out, " const int ret = AStatsEvent_write(event);\n"); |