Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3284a210 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Revert "Add pulled atoms support for native clients in stats-log...""

parents 36b0f9d4 8b84a38e
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -30,7 +30,6 @@ aidl_interface {
        "android/os/StatsDimensionsValueParcel.aidl",
        "android/util/StatsEventParcel.aidl",
    ],
    host_supported: true,
    backend: {
        java: {
            enabled: false, // framework-statsd and service-statsd use framework-statsd-aidl-sources
+2 −7
Original line number Diff line number Diff line
@@ -171,8 +171,7 @@ cc_library_static {
    export_generated_headers: ["statslog_statsdtest.h"],
    shared_libs: [
        "libstatssocket",
        "libstatspull",
    ],
    ]
}

cc_library_static {
@@ -186,11 +185,7 @@ cc_library_static {
    ],
    shared_libs: [
        "libstatssocket",
        "libstatspull",
    ],
    export_shared_lib_headers: [
        "libstatspull",
    ],
    ]
}

// =========
+2 −18
Original line number Diff line number Diff line
@@ -121,26 +121,10 @@ cc_library {
    ],
    target: {
        android: {
            shared_libs: [
                "libstatssocket",
                "libstatspull",
            ],
            export_shared_lib_headers: [
                 "libstatssocket",
                 "libstatspull",
            ],
            shared_libs: ["libstatssocket"],
        },
        host: {
            static_libs: [
                "libstatssocket",
                "libstatspull",
                "statsd-aidl-ndk_platform",
            ],
            shared_libs: ["libbinder_ndk"],
            export_static_lib_headers: [
                "libstatssocket",
                "libstatspull",
            ],
            static_libs: ["libstatssocket"],
        },
    },
}
+63 −127
Original line number Diff line number Diff line
@@ -82,148 +82,134 @@ static void write_annotations(FILE* out, int argIndex,
    }
}

static int write_native_method_body(FILE* out, vector<java_type_t>& signature,
                                    const FieldNumberToAtomDeclSet& fieldNumberToAtomDeclSet,
                                    const AtomDecl& attributionDecl) {
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 FieldNumberToAtomDeclSet& fieldNumberToAtomDeclSet = signatureInfoMapIt->second;
        // Key value pairs not supported in native.
        if (find(signature.begin(), signature.end(), JAVA_TYPE_KEY_VALUE_PAIR) != signature.end()) {
            continue;
        }
        write_native_method_signature(out, "int stats_write", signature, attributionDecl, " {");

        int argIndex = 1;
    fprintf(out, "    AStatsEvent_setAtomId(event, code);\n");
    write_annotations(out, ATOM_ID_FIELD_NUMBER, fieldNumberToAtomDeclSet, "AStatsEvent_",
                      "event, ");
        if (supportQ) {
            fprintf(out, "    StatsEventCompat event;\n");
            fprintf(out, "    event.setAtomId(code);\n");
            write_annotations(out, ATOM_ID_FIELD_NUMBER, fieldNumberToAtomDeclSet, "event.", "");
            for (vector<java_type_t>::const_iterator arg = signature.begin();
                 arg != signature.end(); arg++) {
                switch (*arg) {
                    case JAVA_TYPE_ATTRIBUTION_CHAIN: {
                        const char* uidName = attributionDecl.fields.front().name.c_str();
                        const char* tagName = attributionDecl.fields.back().name.c_str();
                fprintf(out,
                        "    AStatsEvent_writeAttributionChain(event, "
                        "reinterpret_cast<const uint32_t*>(%s), %s.data(), "
                        "static_cast<uint8_t>(%s_length));\n",
                        uidName, tagName, uidName);
                        fprintf(out, "    event.writeAttributionChain(%s, %s_length, %s);\n",
                                uidName, uidName, tagName);
                        break;
                    }
                    case JAVA_TYPE_BYTE_ARRAY:
                fprintf(out,
                        "    AStatsEvent_writeByteArray(event, "
                        "reinterpret_cast<const uint8_t*>(arg%d.arg), "
                        "arg%d.arg_length);\n",
                        fprintf(out, "    event.writeByteArray(arg%d.arg, arg%d.arg_length);\n",
                                argIndex, argIndex);
                        break;
                    case JAVA_TYPE_BOOLEAN:
                fprintf(out, "    AStatsEvent_writeBool(event, arg%d);\n", argIndex);
                        fprintf(out, "    event.writeBool(arg%d);\n", argIndex);
                        break;
                    case JAVA_TYPE_INT:  // Fall through.
                    case JAVA_TYPE_ENUM:
                fprintf(out, "    AStatsEvent_writeInt32(event, arg%d);\n", argIndex);
                        fprintf(out, "    event.writeInt32(arg%d);\n", argIndex);
                        break;
                    case JAVA_TYPE_FLOAT:
                fprintf(out, "    AStatsEvent_writeFloat(event, arg%d);\n", argIndex);
                        fprintf(out, "    event.writeFloat(arg%d);\n", argIndex);
                        break;
                    case JAVA_TYPE_LONG:
                fprintf(out, "    AStatsEvent_writeInt64(event, arg%d);\n", argIndex);
                        fprintf(out, "    event.writeInt64(arg%d);\n", argIndex);
                        break;
                    case JAVA_TYPE_STRING:
                fprintf(out, "    AStatsEvent_writeString(event, arg%d);\n", argIndex);
                        fprintf(out, "    event.writeString(arg%d);\n", argIndex);
                        break;
                    default:
                // Unsupported types: OBJECT, DOUBLE, KEY_VALUE_PAIRS
                        // Unsupported types: OBJECT, DOUBLE, KEY_VALUE_PAIRS.
                        fprintf(stderr, "Encountered unsupported type.");
                        return 1;
                }
        write_annotations(out, argIndex, fieldNumberToAtomDeclSet, "AStatsEvent_",
                          "event, ");
                write_annotations(out, argIndex, fieldNumberToAtomDeclSet, "event.", "");
                argIndex++;
            }
    return 0;
}

static int write_native_stats_write_methods(FILE* out, const SignatureInfoMap& signatureInfoMap,
                                            const AtomDecl& attributionDecl, const bool supportQ) {
    fprintf(out, "\n");
    for (auto signatureInfoMapIt = signatureInfoMap.begin();
         signatureInfoMapIt != signatureInfoMap.end(); signatureInfoMapIt++) {
        vector<java_type_t> signature = signatureInfoMapIt->first;
        const FieldNumberToAtomDeclSet& fieldNumberToAtomDeclSet = signatureInfoMapIt->second;
        // Key value pairs not supported in native.
        if (find(signature.begin(), signature.end(), JAVA_TYPE_KEY_VALUE_PAIR) != signature.end()) {
            continue;
        }
        write_native_method_signature(out, "int stats_write(", signature, attributionDecl, " {");

        // Write method body.
        if (supportQ) {
            int argIndex = 1;
            fprintf(out, "    StatsEventCompat event;\n");
            fprintf(out, "    event.setAtomId(code);\n");
            write_annotations(out, ATOM_ID_FIELD_NUMBER, fieldNumberToAtomDeclSet, "event.", "");
            fprintf(out, "    return event.writeToSocket();\n");
        } else {
            fprintf(out, "    AStatsEvent* event = AStatsEvent_obtain();\n");
            fprintf(out, "    AStatsEvent_setAtomId(event, code);\n");
            write_annotations(out, ATOM_ID_FIELD_NUMBER, fieldNumberToAtomDeclSet, "AStatsEvent_",
                              "event, ");
            for (vector<java_type_t>::const_iterator arg = signature.begin();
                 arg != signature.end(); arg++) {
                switch (*arg) {
                    case JAVA_TYPE_ATTRIBUTION_CHAIN: {
                        const char* uidName = attributionDecl.fields.front().name.c_str();
                        const char* tagName = attributionDecl.fields.back().name.c_str();
                        fprintf(out, "    event.writeAttributionChain(%s, %s_length, %s);\n",
                                uidName, uidName, tagName);
                        fprintf(out,
                                "    AStatsEvent_writeAttributionChain(event, "
                                "reinterpret_cast<const uint32_t*>(%s), %s.data(), "
                                "static_cast<uint8_t>(%s_length));\n",
                                uidName, tagName, uidName);
                        break;
                    }
                    case JAVA_TYPE_BYTE_ARRAY:
                        fprintf(out, "    event.writeByteArray(arg%d.arg, arg%d.arg_length);\n",
                        fprintf(out,
                                "    AStatsEvent_writeByteArray(event, "
                                "reinterpret_cast<const uint8_t*>(arg%d.arg), "
                                "arg%d.arg_length);\n",
                                argIndex, argIndex);
                        break;
                    case JAVA_TYPE_BOOLEAN:
                        fprintf(out, "    event.writeBool(arg%d);\n", argIndex);
                        fprintf(out, "    AStatsEvent_writeBool(event, arg%d);\n", argIndex);
                        break;
                    case JAVA_TYPE_INT:  // Fall through.
                    case JAVA_TYPE_ENUM:
                        fprintf(out, "    event.writeInt32(arg%d);\n", argIndex);
                        fprintf(out, "    AStatsEvent_writeInt32(event, arg%d);\n", argIndex);
                        break;
                    case JAVA_TYPE_FLOAT:
                        fprintf(out, "    event.writeFloat(arg%d);\n", argIndex);
                        fprintf(out, "    AStatsEvent_writeFloat(event, arg%d);\n", argIndex);
                        break;
                    case JAVA_TYPE_LONG:
                        fprintf(out, "    event.writeInt64(arg%d);\n", argIndex);
                        fprintf(out, "    AStatsEvent_writeInt64(event, arg%d);\n", argIndex);
                        break;
                    case JAVA_TYPE_STRING:
                        fprintf(out, "    event.writeString(arg%d);\n", argIndex);
                        fprintf(out, "    AStatsEvent_writeString(event, arg%d);\n", argIndex);
                        break;
                    default:
                        // Unsupported types: OBJECT, DOUBLE, KEY_VALUE_PAIRS.
                        // Unsupported types: OBJECT, DOUBLE, KEY_VALUE_PAIRS
                        fprintf(stderr, "Encountered unsupported type.");
                        return 1;
                }
                write_annotations(out, argIndex, fieldNumberToAtomDeclSet, "event.", "");
                write_annotations(out, argIndex, fieldNumberToAtomDeclSet, "AStatsEvent_",
                                  "event, ");
                argIndex++;
            }
            fprintf(out, "    return event.writeToSocket();\n"); // end method body.
        } else {
            fprintf(out, "    AStatsEvent* event = AStatsEvent_obtain();\n");
            int ret = write_native_method_body(out, signature, fieldNumberToAtomDeclSet,
                                               attributionDecl);
            if (ret != 0) {
                return ret;
            }
            fprintf(out, "    const int ret = AStatsEvent_write(event);\n");
            fprintf(out, "    AStatsEvent_release(event);\n");
            fprintf(out, "    return ret;\n"); // end method body.
            fprintf(out, "    return ret;\n");
        }
        fprintf(out, "}\n\n"); // end method.
        fprintf(out, "}\n\n");
    }
    return 0;
}

static void write_native_stats_write_non_chained_methods(FILE* out,
                                                         const SignatureInfoMap& signatureInfoMap,
static void write_native_stats_write_non_chained_methods(FILE* out, const Atoms& atoms,
                                                         const AtomDecl& attributionDecl) {
    fprintf(out, "\n");
    for (auto signature_it = signatureInfoMap.begin();
         signature_it != signatureInfoMap.end(); signature_it++) {
    for (auto signature_it = atoms.nonChainedSignatureInfoMap.begin();
         signature_it != atoms.nonChainedSignatureInfoMap.end(); signature_it++) {
        vector<java_type_t> signature = signature_it->first;
        // Key value pairs not supported in native.
        if (find(signature.begin(), signature.end(), JAVA_TYPE_KEY_VALUE_PAIR) != signature.end()) {
            continue;
        }

        write_native_method_signature(out, "int stats_write_non_chained(", signature,
        write_native_method_signature(out, "int stats_write_non_chained", signature,
                                      attributionDecl, " {");

        vector<java_type_t> newSignature;
@@ -249,34 +235,6 @@ static void write_native_stats_write_non_chained_methods(FILE* out,
    }
}

static int write_native_build_stats_event_methods(FILE* out,
                                                  const SignatureInfoMap& signatureInfoMap,
                                                  const AtomDecl& attributionDecl) {
    fprintf(out, "\n");
    for (auto signatureInfoMapIt = signatureInfoMap.begin();
         signatureInfoMapIt != signatureInfoMap.end(); signatureInfoMapIt++) {
        vector<java_type_t> signature = signatureInfoMapIt->first;
        const FieldNumberToAtomDeclSet& fieldNumberToAtomDeclSet = signatureInfoMapIt->second;
        // Key value pairs not supported in native.
        if (find(signature.begin(), signature.end(), JAVA_TYPE_KEY_VALUE_PAIR) != signature.end()) {
            continue;
        }
        write_native_method_signature(out, "void addAStatsEvent(AStatsEventList* pulled_data, ",
                                      signature, attributionDecl, " {");

        fprintf(out, "    AStatsEvent* event = AStatsEventList_addStatsEvent(pulled_data);\n");
        int ret = write_native_method_body(out, signature, fieldNumberToAtomDeclSet,
                                           attributionDecl);
        if (ret != 0) {
            return ret;
        }
        fprintf(out, "    AStatsEvent_build(event);\n"); // end method body.

        fprintf(out, "}\n\n"); // end method.
    }
    return 0;
}

static void write_native_method_header(FILE* out, const string& methodName,
                                       const SignatureInfoMap& signatureInfoMap,
                                       const AtomDecl& attributionDecl) {
@@ -304,22 +262,13 @@ int write_stats_log_cpp(FILE* out, const Atoms& atoms, const AtomDecl& attributi
        fprintf(out, "#include <StatsEventCompat.h>\n");
    } else {
        fprintf(out, "#include <stats_event.h>\n");

        if (!atoms.pulledAtomsSignatureInfoMap.empty()) {
            fprintf(out, "#include <stats_pull_atom_callback.h>\n");
    }
    }



    fprintf(out, "\n");
    write_namespace(out, cppNamespace);

    write_native_stats_write_methods(out, atoms.signatureInfoMap, attributionDecl, supportQ);
    write_native_stats_write_non_chained_methods(out, atoms.nonChainedSignatureInfoMap,
                                                 attributionDecl);
    write_native_build_stats_event_methods(out, atoms.pulledAtomsSignatureInfoMap,
                                           attributionDecl);
    write_native_stats_write_methods(out, atoms, attributionDecl, supportQ);
    write_native_stats_write_non_chained_methods(out, atoms, attributionDecl);

    // Print footer
    fprintf(out, "\n");
@@ -339,9 +288,6 @@ int write_stats_log_header(FILE* out, const Atoms& atoms, const AtomDecl& attrib
    fprintf(out, "#include <vector>\n");
    fprintf(out, "#include <map>\n");
    fprintf(out, "#include <set>\n");
    if (!atoms.pulledAtomsSignatureInfoMap.empty()) {
        fprintf(out, "#include <stats_pull_atom_callback.h>\n");
    }
    fprintf(out, "\n");

    write_namespace(out, cppNamespace);
@@ -391,22 +337,12 @@ int write_stats_log_header(FILE* out, const Atoms& atoms, const AtomDecl& attrib
    fprintf(out, "//\n");
    fprintf(out, "// Write methods\n");
    fprintf(out, "//\n");
    write_native_method_header(out, "int stats_write(", atoms.signatureInfoMap, attributionDecl);
    fprintf(out, "\n");
    write_native_method_header(out, "int stats_write", atoms.signatureInfoMap, attributionDecl);

    fprintf(out, "//\n");
    fprintf(out, "// Write flattened methods\n");
    fprintf(out, "//\n");
    write_native_method_header(out, "int stats_write_non_chained(", atoms.nonChainedSignatureInfoMap,
                               attributionDecl);
    fprintf(out, "\n");

    // Print pulled atoms methods.
    fprintf(out, "//\n");
    fprintf(out, "// Add AStatsEvent methods\n");
    fprintf(out, "//\n");
    write_native_method_header(out, "void addAStatsEvent(AStatsEventList* pulled_data, ",
                               atoms.pulledAtomsSignatureInfoMap,
    write_native_method_header(out, "int stats_write_non_chained", atoms.nonChainedSignatureInfoMap,
                               attributionDecl);

    fprintf(out, "\n");
+2 −2
Original line number Diff line number Diff line
@@ -182,10 +182,10 @@ void write_native_atom_constants(FILE* out, const Atoms& atoms, const AtomDecl&
    fprintf(out, "\n");
}

void write_native_method_signature(FILE* out, const string& signaturePrefix,
void write_native_method_signature(FILE* out, const string& methodName,
                                   const vector<java_type_t>& signature,
                                   const AtomDecl& attributionDecl, const string& closer) {
    fprintf(out, "%sint32_t code", signaturePrefix.c_str());
    fprintf(out, "%s(int32_t code", methodName.c_str());
    int argIndex = 1;
    for (vector<java_type_t>::const_iterator arg = signature.begin(); arg != signature.end();
         arg++) {
Loading