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

Commit d8a5039d authored by Muhammad Qureshi's avatar Muhammad Qureshi Committed by Gerrit Code Review
Browse files

Merge "Generate compile-time Q-compatible StatsLog"

parents 5fcfe7cc bb699b68
Loading
Loading
Loading
Loading
+44 −42
Original line number Diff line number Diff line
@@ -361,6 +361,50 @@ void write_java_helpers_for_q_schema_methods(
    }
}

// This method is called in main.cpp to generate StatsLog for modules that's compatible with
// Q at compile-time.
int write_stats_log_java_q_for_module(FILE* out, const Atoms& atoms,
                                      const AtomDecl &attributionDecl, const string& moduleName,
                                      const string& javaClass, const string& javaPackage,
                                      const bool supportWorkSource) {
    // Print prelude
    fprintf(out, "// This file is autogenerated\n");
    fprintf(out, "\n");
    fprintf(out, "package %s;\n", javaPackage.c_str());
    fprintf(out, "\n");
    fprintf(out, "import static java.nio.charset.StandardCharsets.UTF_8;\n");
    fprintf(out, "\n");
    fprintf(out, "import android.util.StatsLog;\n");
    fprintf(out, "import android.os.SystemClock;\n");
    fprintf(out, "\n");
    fprintf(out, "\n");
    fprintf(out, "/**\n");
    fprintf(out, " * Utility class for logging statistics events.\n");
    fprintf(out, " */\n");
    fprintf(out, "public class %s {\n", javaClass.c_str());

    write_java_q_logging_constants(out, "    ");

    write_java_atom_codes(out, atoms, moduleName);

    write_java_enum_values(out, atoms, moduleName);

    int errors = 0;
    // Print write methods
    fprintf(out, "    // Write methods\n");
    errors += write_java_methods_q_schema(out, atoms.signatures_to_modules, attributionDecl,
            moduleName, "    ");
    errors += write_java_non_chained_methods(out, atoms.non_chained_signatures_to_modules,
            moduleName);
    if (supportWorkSource) {
        errors += write_java_work_source_methods(out, atoms.signatures_to_modules, moduleName);
    }

    fprintf(out, "}\n");

    return errors;
}

#if defined(STATS_SCHEMA_LEGACY)
static void write_java_method(
        FILE* out,
@@ -423,48 +467,6 @@ int write_stats_log_java_q(FILE* out, const Atoms& atoms, const AtomDecl &attrib

    return 0;
}

int write_stats_log_java_q_for_module(FILE* out, const Atoms& atoms,
                                      const AtomDecl &attributionDecl, const string& moduleName,
                                      const string& javaClass, const string& javaPackage,
                                      const bool supportWorkSource) {
    // Print prelude
    fprintf(out, "// This file is autogenerated\n");
    fprintf(out, "\n");
    fprintf(out, "package %s;\n", javaPackage.c_str());
    fprintf(out, "\n");
    fprintf(out, "import static java.nio.charset.StandardCharsets.UTF_8;\n");
    fprintf(out, "\n");
    fprintf(out, "import android.util.StatsLog;\n");
    fprintf(out, "import android.os.SystemClock;\n");
    fprintf(out, "\n");
    fprintf(out, "\n");
    fprintf(out, "/**\n");
    fprintf(out, " * Utility class for logging statistics events.\n");
    fprintf(out, " */\n");
    fprintf(out, "public class %s {\n", javaClass.c_str());

    write_java_q_logging_constants(out, "    ");

    write_java_atom_codes(out, atoms, moduleName);

    write_java_enum_values(out, atoms, moduleName);

    int errors = 0;
    // Print write methods
    fprintf(out, "    // Write methods\n");
    errors += write_java_methods_q_schema(out, atoms.signatures_to_modules, attributionDecl,
            moduleName, "    ");
    errors += write_java_non_chained_methods(out, atoms.non_chained_signatures_to_modules,
            moduleName);
    if (supportWorkSource) {
        errors += write_java_work_source_methods(out, atoms.signatures_to_modules, moduleName);
    }

    fprintf(out, "}\n");

    return errors;
}
#endif

}  // namespace stats_log_api_gen
+4 −4
Original line number Diff line number Diff line
@@ -45,13 +45,13 @@ void write_java_helpers_for_q_schema_methods(
        const int requiredHelpers,
        const string& indent);

#if defined(STATS_SCHEMA_LEGACY)
int write_stats_log_java_q(FILE* out, const Atoms& atoms, const AtomDecl &attributionDecl,
                           const bool supportWorkSource);

int write_stats_log_java_q_for_module(FILE* out, const Atoms& atoms,
        const AtomDecl &attributionDecl, const string& moduleName, const string& javaClass,
        const string& javaPackage, const bool supportWorkSource);

#if defined(STATS_SCHEMA_LEGACY)
int write_stats_log_java_q(FILE* out, const Atoms& atoms, const AtomDecl &attributionDecl,
                           const bool supportWorkSource);
#endif
}  // namespace stats_log_api_gen
}  // namespace android
+22 −5
Original line number Diff line number Diff line
@@ -511,8 +511,10 @@ print_usage()
    fprintf(stderr, "  --javaClass CLASS    the class name of the java class.\n");
    fprintf(stderr, "                       Optional for Java with module.\n");
    fprintf(stderr, "                       Default is \"StatsLogInternal\"\n");
    fprintf(stderr, "  --supportQ           Include support for Android Q.\n");
    fprintf(stderr, "  --supportQ           Include runtime support for Android Q.\n");
    fprintf(stderr, "  --worksource         Include support for logging WorkSource objects.\n");
    fprintf(stderr, "  --compileQ           Include compile-time support for Android Q "
            "(Java only).\n");
}

/**
@@ -536,6 +538,7 @@ run(int argc, char const*const* argv)
    string javaClass = DEFAULT_JAVA_CLASS;
    bool supportQ = false;
    bool supportWorkSource = false;
    bool compileQ = false;

    int index = 1;
    while (index < argc) {
@@ -630,6 +633,8 @@ run(int argc, char const*const* argv)
            supportQ = true;
        } else if (0 == strcmp("--worksource", argv[index])) {
            supportWorkSource = true;
        } else if (0 == strcmp("--compileQ", argv[index])) {
            compileQ = true;
        }

        index++;
@@ -645,12 +650,18 @@ run(int argc, char const*const* argv)
        return 1;
    }

    if (DEFAULT_MODULE_NAME == moduleName && supportQ) {
    if (DEFAULT_MODULE_NAME == moduleName && (supportQ || compileQ)) {
        // Support for Q schema is not needed for default module.
        fprintf(stderr, "%s cannot support Q schema\n", moduleName.c_str());
        return 1;
    }

    if (supportQ && compileQ) {
        // Runtime Q support is redundant if compile-time Q support is required.
        fprintf(stderr, "Cannot specify compileQ and supportQ simultaneously.\n");
        return 1;
    }

    // Collate the parameters
    Atoms atoms;
    int errorCount = collate_atoms(Atom::descriptor(), &atoms);
@@ -748,9 +759,15 @@ run(int argc, char const*const* argv)
            javaClass = "StatsLogInternal";
            javaPackage = "android.util";
        }
        if (compileQ) {
            errorCount = android::stats_log_api_gen::write_stats_log_java_q_for_module(
                    out, atoms, attributionDecl, moduleName, javaClass, javaPackage,
                    supportWorkSource);
        } else {
            errorCount = android::stats_log_api_gen::write_stats_log_java(
                    out, atoms, attributionDecl, moduleName, javaClass, javaPackage, supportQ,
                    supportWorkSource);
        }
#endif

        fclose(out);