diff options
| author | 2020-01-29 11:09:43 -0800 | |
|---|---|---|
| committer | 2020-01-29 14:27:04 -0800 | |
| commit | bb699b68c00e6cfdf82b0c01b54f41575f587324 (patch) | |
| tree | 8107e032fee6654e21fe8d304cc2abebd2f4ca43 | |
| parent | b11e00d655e0c855b09ac66fe3d0f4b36c806d7d (diff) | |
Generate compile-time Q-compatible StatsLog
Bug: 148388745
Test: m NetworkStack
Test: m NetworkStackNext
Change-Id: Ic37bb67ce625d0a583c424d4775e9f0fa132c418
| -rw-r--r-- | tools/stats_log_api_gen/java_writer_q.cpp | 86 | ||||
| -rw-r--r-- | tools/stats_log_api_gen/java_writer_q.h | 8 | ||||
| -rw-r--r-- | tools/stats_log_api_gen/main.cpp | 27 |
3 files changed, 70 insertions, 51 deletions
diff --git a/tools/stats_log_api_gen/java_writer_q.cpp b/tools/stats_log_api_gen/java_writer_q.cpp index f8661294821e..db766b2ade71 100644 --- a/tools/stats_log_api_gen/java_writer_q.cpp +++ b/tools/stats_log_api_gen/java_writer_q.cpp @@ -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 diff --git a/tools/stats_log_api_gen/java_writer_q.h b/tools/stats_log_api_gen/java_writer_q.h index 36df1d8edbee..7d734df1e118 100644 --- a/tools/stats_log_api_gen/java_writer_q.h +++ b/tools/stats_log_api_gen/java_writer_q.h @@ -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 diff --git a/tools/stats_log_api_gen/main.cpp b/tools/stats_log_api_gen/main.cpp index 6089532e1ca4..ddbf22c7f12a 100644 --- a/tools/stats_log_api_gen/main.cpp +++ b/tools/stats_log_api_gen/main.cpp @@ -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"; } - errorCount = android::stats_log_api_gen::write_stats_log_java( - out, atoms, attributionDecl, moduleName, javaClass, javaPackage, supportQ, - supportWorkSource); + 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); |