Loading tools/stats_log_api_gen/Collation.cpp +6 −8 Original line number Diff line number Diff line Loading @@ -72,7 +72,7 @@ static void print_error(const FieldDescriptor* field, const char* format, ...) { SourceLocation loc; if (field->GetSourceLocation(&loc)) { // TODO: this will work if we can figure out how to pass // TODO(b/162454173): this will work if we can figure out how to pass // --include_source_info to protoc fprintf(stderr, "%s:%d: ", file->name().c_str(), loc.start_line); } else { Loading Loading @@ -111,7 +111,6 @@ static java_type_t java_type(const FieldDescriptor* field) { case FieldDescriptor::TYPE_GROUP: return JAVA_TYPE_UNKNOWN; case FieldDescriptor::TYPE_MESSAGE: // TODO: not the final package name if (field->message_type()->full_name() == "android.os.statsd.AttributionNode") { return JAVA_TYPE_ATTRIBUTION_CHAIN; } else if (field->message_type()->full_name() == "android.os.statsd.KeyValuePair") { Loading Loading @@ -147,7 +146,7 @@ static java_type_t java_type(const FieldDescriptor* field) { void collate_enums(const EnumDescriptor& enumDescriptor, AtomField* atomField) { for (int i = 0; i < enumDescriptor.value_count(); i++) { atomField->enumValues[enumDescriptor.value(i)->number()] = enumDescriptor.value(i)->name().c_str(); enumDescriptor.value(i)->name(); } } Loading Loading @@ -528,7 +527,7 @@ int collate_atoms(const Descriptor* descriptor, const string& moduleName, Atoms* vector<java_type_t> signature; errorCount += collate_atom(atom, atomDecl.get(), &signature); if (atomDecl->primaryFields.size() != 0 && atomDecl->exclusiveField == 0) { if (!atomDecl->primaryFields.empty() && atomDecl->exclusiveField == 0) { print_error(atomField, "Cannot have a primary field without an exclusive field: %s\n", atomField->name().c_str()); errorCount++; Loading @@ -541,8 +540,7 @@ int collate_atoms(const Descriptor* descriptor, const string& moduleName, Atoms* atomField->name().c_str()); errorCount++; continue; } else if ((oneofAtom->name() != ONEOF_PUSHED_ATOM_NAME) && } else if ((oneofAtom->name() != ONEOF_PUSHED_ATOM_NAME) && (oneofAtom->name() != ONEOF_PULLED_ATOM_NAME)) { print_error(atomField, "Atom is neither a pushed nor pulled atom: %s\n", atomField->name().c_str()); Loading Loading @@ -578,7 +576,7 @@ int collate_atoms(const Descriptor* descriptor, const string& moduleName, Atoms* printf(" "); for (vector<java_type_t>::const_iterator jt = it->first.begin(); jt != it->first.end(); jt++) { printf(" %d", (int)*jt); printf(" %d", static_cast<int>(*jt)); } printf("\n"); } Loading @@ -589,7 +587,7 @@ int collate_atoms(const Descriptor* descriptor, const string& moduleName, Atoms* printf(" "); for (vector<java_type_t>::const_iterator jt = it->first.begin(); jt != it->first.end(); jt++) { printf(" %d", (int)*jt); printf(" %d", static_cast<int>(*jt)); } printf("\n"); } Loading tools/stats_log_api_gen/Collation.h +5 −5 Original line number Diff line number Diff line Loading @@ -47,8 +47,8 @@ const int FIRST_UID_IN_CHAIN_ID = 0; * * `OneofDescriptor::name()` returns the name of the oneof. */ const string ONEOF_PUSHED_ATOM_NAME = "pushed"; const string ONEOF_PULLED_ATOM_NAME = "pulled"; const char ONEOF_PUSHED_ATOM_NAME[] = "pushed"; const char ONEOF_PULLED_ATOM_NAME[] = "pulled"; enum AnnotationId : uint8_t { ANNOTATION_ID_IS_UID = 1, Loading @@ -63,7 +63,7 @@ enum AnnotationId : uint8_t { const int ATOM_ID_FIELD_NUMBER = -1; const string DEFAULT_MODULE_NAME = "DEFAULT"; const char DEFAULT_MODULE_NAME[] = "DEFAULT"; /** * The types for atom parameters. Loading Loading @@ -95,9 +95,9 @@ union AnnotationValue { int intValue; bool boolValue; AnnotationValue(const int value) : intValue(value) { explicit AnnotationValue(const int value) : intValue(value) { } AnnotationValue(const bool value) : boolValue(value) { explicit AnnotationValue(const bool value) : boolValue(value) { } }; Loading tools/stats_log_api_gen/java_writer.cpp +17 −11 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ static int write_java_q_logger_class(FILE* out, const SignatureInfoMap& signatur static void write_java_annotation_constants(FILE* out) { fprintf(out, " // Annotation constants.\n"); const map<AnnotationId, string>& ANNOTATION_ID_CONSTANTS = get_annotation_id_constants(); for (const auto& [id, name] : ANNOTATION_ID_CONSTANTS) { fprintf(out, " public static final byte %s = %hhu;\n", name.c_str(), id); } Loading @@ -56,6 +57,7 @@ static void write_annotations(FILE* out, int argIndex, return; } const AtomDeclSet& atomDeclSet = fieldNumberToAtomDeclSetIt->second; const map<AnnotationId, string>& ANNOTATION_ID_CONSTANTS = get_annotation_id_constants(); for (const shared_ptr<AtomDecl>& atomDecl : atomDeclSet) { const string atomConstant = make_constant_name(atomDecl->name); fprintf(out, " if (%s == code) {\n", atomConstant.c_str()); Loading Loading @@ -102,7 +104,7 @@ static void write_method_signature(FILE* out, const vector<java_type_t>& signatu for (vector<java_type_t>::const_iterator arg = signature.begin(); arg != signature.end(); arg++) { if (*arg == JAVA_TYPE_ATTRIBUTION_CHAIN) { for (auto chainField : attributionDecl.fields) { for (const auto& chainField : attributionDecl.fields) { fprintf(out, ", %s[] %s", java_type_name(chainField.javaType), chainField.name.c_str()); } Loading Loading @@ -243,13 +245,15 @@ static int write_method_body(FILE* out, const vector<java_type_t>& signature, return 0; } static int write_java_methods(FILE* out, const SignatureInfoMap& signatureInfoMap, static int write_java_pushed_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"); write_method_signature(out, signatureInfoMapIt->first, attributionDecl); const vector<java_type_t>& signature = signatureInfoMapIt->first; const FieldNumberToAtomDeclSet& fieldNumberToAtomDeclSet = signatureInfoMapIt->second; write_method_signature(out, signature, attributionDecl); fprintf(out, ") {\n"); // Print method body. Loading @@ -259,7 +263,7 @@ static int write_java_methods(FILE* out, const SignatureInfoMap& signatureInfoMa indent = " "; } int ret = write_method_body(out, signatureInfoMapIt->first, signatureInfoMapIt->second, int ret = write_method_body(out, signature, fieldNumberToAtomDeclSet, attributionDecl, indent); if (ret != 0) { return ret; Loading @@ -274,8 +278,8 @@ static int write_java_methods(FILE* out, const SignatureInfoMap& signatureInfoMa fprintf(out, " } else {\n"); fprintf(out, " QLogger.write(code"); int argIndex = 1; for (vector<java_type_t>::const_iterator arg = signatureInfoMapIt->first.begin(); arg != signatureInfoMapIt->first.end(); arg++) { for (vector<java_type_t>::const_iterator arg = signature.begin(); arg != signature.end(); arg++) { if (*arg == JAVA_TYPE_ATTRIBUTION_CHAIN) { const char* uidName = attributionDecl.fields.front().name.c_str(); const char* tagName = attributionDecl.fields.back().name.c_str(); Loading @@ -299,18 +303,20 @@ static int write_java_methods(FILE* out, const SignatureInfoMap& signatureInfoMa return 0; } static int write_java_build_stats_event_methods(FILE* out, const SignatureInfoMap& signatureInfoMap, static int write_java_pulled_methods(FILE* out, const SignatureInfoMap& signatureInfoMap, const AtomDecl& attributionDecl) { for (auto signatureInfoMapIt = signatureInfoMap.begin(); signatureInfoMapIt != signatureInfoMap.end(); signatureInfoMapIt++) { // Print method signature. fprintf(out, " public static StatsEvent buildStatsEvent(int code"); write_method_signature(out, signatureInfoMapIt->first, attributionDecl); const vector<java_type_t>& signature = signatureInfoMapIt->first; const FieldNumberToAtomDeclSet& fieldNumberToAtomDeclSet = signatureInfoMapIt->second; write_method_signature(out, signature, attributionDecl); fprintf(out, ") {\n"); // Print method body. string indent(""); int ret = write_method_body(out, signatureInfoMapIt->first, signatureInfoMapIt->second, int ret = write_method_body(out, signature, fieldNumberToAtomDeclSet, attributionDecl, indent); if (ret != 0) { return ret; Loading Loading @@ -357,9 +363,9 @@ int write_stats_log_java(FILE* out, const Atoms& atoms, const AtomDecl& attribut // Print write methods. fprintf(out, " // Write methods\n"); errors += write_java_methods(out, atoms.signatureInfoMap, attributionDecl, supportQ); errors += write_java_pushed_methods(out, atoms.signatureInfoMap, attributionDecl, supportQ); errors += write_java_non_chained_methods(out, atoms.nonChainedSignatureInfoMap); errors += write_java_build_stats_event_methods(out, atoms.pulledAtomsSignatureInfoMap, errors += write_java_pulled_methods(out, atoms.pulledAtomsSignatureInfoMap, attributionDecl); if (supportWorkSource) { errors += write_java_work_source_methods(out, atoms.signatureInfoMap); Loading tools/stats_log_api_gen/java_writer.h +4 −3 Original line number Diff line number Diff line Loading @@ -14,7 +14,8 @@ * limitations under the License. */ #pragma once #ifndef ANDROID_STATS_LOG_API_GEN_JAVA_WRITER_H #define ANDROID_STATS_LOG_API_GEN_JAVA_WRITER_H #include <stdio.h> #include <string.h> Loading @@ -28,11 +29,11 @@ namespace android { namespace stats_log_api_gen { using namespace std; int write_stats_log_java(FILE* out, const Atoms& atoms, const AtomDecl& attributionDecl, const string& javaClass, const string& javaPackage, const bool supportQ, const bool supportWorkSource); } // namespace stats_log_api_gen } // namespace android #endif // ANDROID_STATS_LOG_API_GEN_JAVA_WRITER_H tools/stats_log_api_gen/java_writer_q.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -65,7 +65,7 @@ int write_java_methods_q_schema(FILE* out, const SignatureInfoMap& signatureInfo for (vector<java_type_t>::const_iterator arg = signature.begin(); arg != signature.end(); arg++) { if (*arg == JAVA_TYPE_ATTRIBUTION_CHAIN) { for (auto chainField : attributionDecl.fields) { for (const auto& chainField : attributionDecl.fields) { fprintf(out, ", %s[] %s", java_type_name(chainField.javaType), chainField.name.c_str()); } Loading Loading @@ -407,7 +407,7 @@ void write_java_helpers_for_q_schema_methods(FILE* out, const AtomDecl& attribut if (requiredHelpers & JAVA_MODULE_REQUIRES_ATTRIBUTION) { fprintf(out, "%sprivate static void writeAttributionChain(byte[] buff, int pos", indent.c_str()); for (auto chainField : attributionDecl.fields) { for (const auto& chainField : attributionDecl.fields) { fprintf(out, ", %s[] %s", java_type_name(chainField.javaType), chainField.name.c_str()); } fprintf(out, ") {\n"); Loading Loading
tools/stats_log_api_gen/Collation.cpp +6 −8 Original line number Diff line number Diff line Loading @@ -72,7 +72,7 @@ static void print_error(const FieldDescriptor* field, const char* format, ...) { SourceLocation loc; if (field->GetSourceLocation(&loc)) { // TODO: this will work if we can figure out how to pass // TODO(b/162454173): this will work if we can figure out how to pass // --include_source_info to protoc fprintf(stderr, "%s:%d: ", file->name().c_str(), loc.start_line); } else { Loading Loading @@ -111,7 +111,6 @@ static java_type_t java_type(const FieldDescriptor* field) { case FieldDescriptor::TYPE_GROUP: return JAVA_TYPE_UNKNOWN; case FieldDescriptor::TYPE_MESSAGE: // TODO: not the final package name if (field->message_type()->full_name() == "android.os.statsd.AttributionNode") { return JAVA_TYPE_ATTRIBUTION_CHAIN; } else if (field->message_type()->full_name() == "android.os.statsd.KeyValuePair") { Loading Loading @@ -147,7 +146,7 @@ static java_type_t java_type(const FieldDescriptor* field) { void collate_enums(const EnumDescriptor& enumDescriptor, AtomField* atomField) { for (int i = 0; i < enumDescriptor.value_count(); i++) { atomField->enumValues[enumDescriptor.value(i)->number()] = enumDescriptor.value(i)->name().c_str(); enumDescriptor.value(i)->name(); } } Loading Loading @@ -528,7 +527,7 @@ int collate_atoms(const Descriptor* descriptor, const string& moduleName, Atoms* vector<java_type_t> signature; errorCount += collate_atom(atom, atomDecl.get(), &signature); if (atomDecl->primaryFields.size() != 0 && atomDecl->exclusiveField == 0) { if (!atomDecl->primaryFields.empty() && atomDecl->exclusiveField == 0) { print_error(atomField, "Cannot have a primary field without an exclusive field: %s\n", atomField->name().c_str()); errorCount++; Loading @@ -541,8 +540,7 @@ int collate_atoms(const Descriptor* descriptor, const string& moduleName, Atoms* atomField->name().c_str()); errorCount++; continue; } else if ((oneofAtom->name() != ONEOF_PUSHED_ATOM_NAME) && } else if ((oneofAtom->name() != ONEOF_PUSHED_ATOM_NAME) && (oneofAtom->name() != ONEOF_PULLED_ATOM_NAME)) { print_error(atomField, "Atom is neither a pushed nor pulled atom: %s\n", atomField->name().c_str()); Loading Loading @@ -578,7 +576,7 @@ int collate_atoms(const Descriptor* descriptor, const string& moduleName, Atoms* printf(" "); for (vector<java_type_t>::const_iterator jt = it->first.begin(); jt != it->first.end(); jt++) { printf(" %d", (int)*jt); printf(" %d", static_cast<int>(*jt)); } printf("\n"); } Loading @@ -589,7 +587,7 @@ int collate_atoms(const Descriptor* descriptor, const string& moduleName, Atoms* printf(" "); for (vector<java_type_t>::const_iterator jt = it->first.begin(); jt != it->first.end(); jt++) { printf(" %d", (int)*jt); printf(" %d", static_cast<int>(*jt)); } printf("\n"); } Loading
tools/stats_log_api_gen/Collation.h +5 −5 Original line number Diff line number Diff line Loading @@ -47,8 +47,8 @@ const int FIRST_UID_IN_CHAIN_ID = 0; * * `OneofDescriptor::name()` returns the name of the oneof. */ const string ONEOF_PUSHED_ATOM_NAME = "pushed"; const string ONEOF_PULLED_ATOM_NAME = "pulled"; const char ONEOF_PUSHED_ATOM_NAME[] = "pushed"; const char ONEOF_PULLED_ATOM_NAME[] = "pulled"; enum AnnotationId : uint8_t { ANNOTATION_ID_IS_UID = 1, Loading @@ -63,7 +63,7 @@ enum AnnotationId : uint8_t { const int ATOM_ID_FIELD_NUMBER = -1; const string DEFAULT_MODULE_NAME = "DEFAULT"; const char DEFAULT_MODULE_NAME[] = "DEFAULT"; /** * The types for atom parameters. Loading Loading @@ -95,9 +95,9 @@ union AnnotationValue { int intValue; bool boolValue; AnnotationValue(const int value) : intValue(value) { explicit AnnotationValue(const int value) : intValue(value) { } AnnotationValue(const bool value) : boolValue(value) { explicit AnnotationValue(const bool value) : boolValue(value) { } }; Loading
tools/stats_log_api_gen/java_writer.cpp +17 −11 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ static int write_java_q_logger_class(FILE* out, const SignatureInfoMap& signatur static void write_java_annotation_constants(FILE* out) { fprintf(out, " // Annotation constants.\n"); const map<AnnotationId, string>& ANNOTATION_ID_CONSTANTS = get_annotation_id_constants(); for (const auto& [id, name] : ANNOTATION_ID_CONSTANTS) { fprintf(out, " public static final byte %s = %hhu;\n", name.c_str(), id); } Loading @@ -56,6 +57,7 @@ static void write_annotations(FILE* out, int argIndex, return; } const AtomDeclSet& atomDeclSet = fieldNumberToAtomDeclSetIt->second; const map<AnnotationId, string>& ANNOTATION_ID_CONSTANTS = get_annotation_id_constants(); for (const shared_ptr<AtomDecl>& atomDecl : atomDeclSet) { const string atomConstant = make_constant_name(atomDecl->name); fprintf(out, " if (%s == code) {\n", atomConstant.c_str()); Loading Loading @@ -102,7 +104,7 @@ static void write_method_signature(FILE* out, const vector<java_type_t>& signatu for (vector<java_type_t>::const_iterator arg = signature.begin(); arg != signature.end(); arg++) { if (*arg == JAVA_TYPE_ATTRIBUTION_CHAIN) { for (auto chainField : attributionDecl.fields) { for (const auto& chainField : attributionDecl.fields) { fprintf(out, ", %s[] %s", java_type_name(chainField.javaType), chainField.name.c_str()); } Loading Loading @@ -243,13 +245,15 @@ static int write_method_body(FILE* out, const vector<java_type_t>& signature, return 0; } static int write_java_methods(FILE* out, const SignatureInfoMap& signatureInfoMap, static int write_java_pushed_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"); write_method_signature(out, signatureInfoMapIt->first, attributionDecl); const vector<java_type_t>& signature = signatureInfoMapIt->first; const FieldNumberToAtomDeclSet& fieldNumberToAtomDeclSet = signatureInfoMapIt->second; write_method_signature(out, signature, attributionDecl); fprintf(out, ") {\n"); // Print method body. Loading @@ -259,7 +263,7 @@ static int write_java_methods(FILE* out, const SignatureInfoMap& signatureInfoMa indent = " "; } int ret = write_method_body(out, signatureInfoMapIt->first, signatureInfoMapIt->second, int ret = write_method_body(out, signature, fieldNumberToAtomDeclSet, attributionDecl, indent); if (ret != 0) { return ret; Loading @@ -274,8 +278,8 @@ static int write_java_methods(FILE* out, const SignatureInfoMap& signatureInfoMa fprintf(out, " } else {\n"); fprintf(out, " QLogger.write(code"); int argIndex = 1; for (vector<java_type_t>::const_iterator arg = signatureInfoMapIt->first.begin(); arg != signatureInfoMapIt->first.end(); arg++) { for (vector<java_type_t>::const_iterator arg = signature.begin(); arg != signature.end(); arg++) { if (*arg == JAVA_TYPE_ATTRIBUTION_CHAIN) { const char* uidName = attributionDecl.fields.front().name.c_str(); const char* tagName = attributionDecl.fields.back().name.c_str(); Loading @@ -299,18 +303,20 @@ static int write_java_methods(FILE* out, const SignatureInfoMap& signatureInfoMa return 0; } static int write_java_build_stats_event_methods(FILE* out, const SignatureInfoMap& signatureInfoMap, static int write_java_pulled_methods(FILE* out, const SignatureInfoMap& signatureInfoMap, const AtomDecl& attributionDecl) { for (auto signatureInfoMapIt = signatureInfoMap.begin(); signatureInfoMapIt != signatureInfoMap.end(); signatureInfoMapIt++) { // Print method signature. fprintf(out, " public static StatsEvent buildStatsEvent(int code"); write_method_signature(out, signatureInfoMapIt->first, attributionDecl); const vector<java_type_t>& signature = signatureInfoMapIt->first; const FieldNumberToAtomDeclSet& fieldNumberToAtomDeclSet = signatureInfoMapIt->second; write_method_signature(out, signature, attributionDecl); fprintf(out, ") {\n"); // Print method body. string indent(""); int ret = write_method_body(out, signatureInfoMapIt->first, signatureInfoMapIt->second, int ret = write_method_body(out, signature, fieldNumberToAtomDeclSet, attributionDecl, indent); if (ret != 0) { return ret; Loading Loading @@ -357,9 +363,9 @@ int write_stats_log_java(FILE* out, const Atoms& atoms, const AtomDecl& attribut // Print write methods. fprintf(out, " // Write methods\n"); errors += write_java_methods(out, atoms.signatureInfoMap, attributionDecl, supportQ); errors += write_java_pushed_methods(out, atoms.signatureInfoMap, attributionDecl, supportQ); errors += write_java_non_chained_methods(out, atoms.nonChainedSignatureInfoMap); errors += write_java_build_stats_event_methods(out, atoms.pulledAtomsSignatureInfoMap, errors += write_java_pulled_methods(out, atoms.pulledAtomsSignatureInfoMap, attributionDecl); if (supportWorkSource) { errors += write_java_work_source_methods(out, atoms.signatureInfoMap); Loading
tools/stats_log_api_gen/java_writer.h +4 −3 Original line number Diff line number Diff line Loading @@ -14,7 +14,8 @@ * limitations under the License. */ #pragma once #ifndef ANDROID_STATS_LOG_API_GEN_JAVA_WRITER_H #define ANDROID_STATS_LOG_API_GEN_JAVA_WRITER_H #include <stdio.h> #include <string.h> Loading @@ -28,11 +29,11 @@ namespace android { namespace stats_log_api_gen { using namespace std; int write_stats_log_java(FILE* out, const Atoms& atoms, const AtomDecl& attributionDecl, const string& javaClass, const string& javaPackage, const bool supportQ, const bool supportWorkSource); } // namespace stats_log_api_gen } // namespace android #endif // ANDROID_STATS_LOG_API_GEN_JAVA_WRITER_H
tools/stats_log_api_gen/java_writer_q.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -65,7 +65,7 @@ int write_java_methods_q_schema(FILE* out, const SignatureInfoMap& signatureInfo for (vector<java_type_t>::const_iterator arg = signature.begin(); arg != signature.end(); arg++) { if (*arg == JAVA_TYPE_ATTRIBUTION_CHAIN) { for (auto chainField : attributionDecl.fields) { for (const auto& chainField : attributionDecl.fields) { fprintf(out, ", %s[] %s", java_type_name(chainField.javaType), chainField.name.c_str()); } Loading Loading @@ -407,7 +407,7 @@ void write_java_helpers_for_q_schema_methods(FILE* out, const AtomDecl& attribut if (requiredHelpers & JAVA_MODULE_REQUIRES_ATTRIBUTION) { fprintf(out, "%sprivate static void writeAttributionChain(byte[] buff, int pos", indent.c_str()); for (auto chainField : attributionDecl.fields) { for (const auto& chainField : attributionDecl.fields) { fprintf(out, ", %s[] %s", java_type_name(chainField.javaType), chainField.name.c_str()); } fprintf(out, ") {\n"); Loading