summaryrefslogtreecommitdiff
path: root/tools/stats_log_api_gen/native_writer.cpp
diff options
context:
space:
mode:
authorMuhammad Qureshi <muhammadq@google.com>2020-03-16 00:53:13 -0700
committerMuhammad Qureshi <muhammadq@google.com>2020-03-17 21:57:35 -0700
commita31a6229dd330427366702c16c1b35b93818d835 (patch)
treec15f2570ba6c94a8a3ed2ce2d1d6c61f8f161b32 /tools/stats_log_api_gen/native_writer.cpp
parentb13a3214a141d11ed8acda522a2382f090407000 (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.cpp48
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");