diff options
author | yawanng <yawanng@google.com> | 2021-03-19 18:39:26 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-03-19 18:39:26 +0000 |
commit | 49f11515ba866e8106d982cc29798a78d3c2f3d1 (patch) | |
tree | f91e7a3df158c8e1ae1f55264aadb2f76de42b29 | |
parent | 4c7ca03614bd51999e29c20186f2e3819f8e7356 (diff) | |
parent | c9576dd9d4ebbc1b1faac9155eb6b36f1d097964 (diff) | |
download | iorap-49f11515ba866e8106d982cc29798a78d3c2f3d1.tar.gz |
iorap: Toggle dex related file in iorap prefetching. am: deff0e26ce am: aa4d3b6af1 am: 0d11906dba am: c9576dd9d4
Original change: https://android-review.googlesource.com/c/platform/system/iorap/+/1645911
Change-Id: I473308f01c57861c7c2556396967463a38836b09
-rw-r--r-- | src/common/property.h | 4 | ||||
-rw-r--r-- | src/compiler/main.cc | 7 | ||||
-rw-r--r-- | src/maintenance/controller.cc | 5 | ||||
-rw-r--r-- | src/maintenance/controller.h | 7 | ||||
-rw-r--r-- | src/maintenance/main.cc | 14 | ||||
-rw-r--r-- | src/manager/event_manager.cc | 17 | ||||
-rw-r--r-- | tests/src/compiler/compiler_test.cc | 2 | ||||
-rw-r--r-- | tests/src/maintenance/controller_test.cc | 52 | ||||
-rw-r--r-- | tests/src/maintenance/testdata/test_sqlite.db | bin | 32768 -> 32768 bytes |
9 files changed, 92 insertions, 16 deletions
diff --git a/src/common/property.h b/src/common/property.h index 214ba3c..d910193 100644 --- a/src/common/property.h +++ b/src/common/property.h @@ -38,6 +38,10 @@ inline bool IsReadAheadEnabled(const std::string& default_value) { ::android::base::GetProperty("iorapd.readahead.enable", default_value)) == "true"; } +inline bool ExcludeDexFiles(bool default_value) { + return ::android::base::GetBoolProperty("iorapd.exclude_dex_files", default_value); +} + } // namespace iorap::common #endif // IORAP_UTILS_PROPERTY_H_ diff --git a/src/compiler/main.cc b/src/compiler/main.cc index 56c3e5c..3036936 100644 --- a/src/compiler/main.cc +++ b/src/compiler/main.cc @@ -68,7 +68,8 @@ void Usage(char** argv) { std::cerr << "" << std::endl; std::cerr << " Optional flags:" << std::endl; std::cerr << " --help,-h Print this Usage." << std::endl; - std::cerr << " --blacklist-filter,-bf Specify regex acting as a blacklist filter." << std::endl; + std::cerr << " --denylist-filter,-df Specify regex acting as a denylist filter." + << std::endl; std::cerr << " Filepaths matching this regex are removed from the output file." << std::endl; std::cerr << " --output-text,-ot Output ascii text instead of protobuf (default off)." << std::endl; std::cerr << " --output-proto $,-op $ TraceFile tracebuffer output file (default stdout)." << std::endl; @@ -128,9 +129,9 @@ int Main(int argc, char** argv) { } arg_inode_textcache = arg_next; ++arg; - } else if (argstr == "--blacklist-filter" || argstr == "-bf") { + } else if (argstr == "--denylist-filter" || argstr == "-df") { if (!has_arg_next) { - std::cerr << "Missing --blacklist-filter <value>" << std::endl; + std::cerr << "Missing --denylist-filter <value>" << std::endl; return 1; } arg_blacklist_filter = arg_next; diff --git a/src/maintenance/controller.cc b/src/maintenance/controller.cc index 3bf0d6a..8929057 100644 --- a/src/maintenance/controller.cc +++ b/src/maintenance/controller.cc @@ -44,6 +44,7 @@ namespace iorap::maintenance { const constexpr int64_t kCompilerCheckIntervalMs = 10; static constexpr size_t kMinTracesForCompilation = 1; +const constexpr char* kDenyListFilterDexFiles = "[.](art|oat|odex|vdex|dex)$"; struct LastJobInfo { time_t last_run_ns_{0}; @@ -126,6 +127,10 @@ std::vector<std::string> MakeCompilerParams(const CompilerForkParameters& params argv.push_back("--verbose"); } + if (controller_params.exclude_dex_files) { + common::AppendArgs(argv, "--denylist-filter", kDenyListFilterDexFiles); + } + return argv; } diff --git a/src/maintenance/controller.h b/src/maintenance/controller.h index dbe6df9..750d0b4 100644 --- a/src/maintenance/controller.h +++ b/src/maintenance/controller.h @@ -54,19 +54,22 @@ struct ControllerParameters { bool recompile; uint64_t min_traces; std::shared_ptr<IExec> exec; + bool exclude_dex_files; ControllerParameters(bool output_text, std::optional<std::string> inode_textcache, bool verbose, bool recompile, uint64_t min_traces, - std::shared_ptr<IExec> exec) : + std::shared_ptr<IExec> exec, + bool exclude_dex_files) : output_text(output_text), inode_textcache(inode_textcache), verbose(verbose), recompile(recompile), min_traces(min_traces), - exec(exec) { + exec(exec), + exclude_dex_files(exclude_dex_files) { } }; diff --git a/src/maintenance/main.cc b/src/maintenance/main.cc index 16b2a35..8b66069 100644 --- a/src/maintenance/main.cc +++ b/src/maintenance/main.cc @@ -44,8 +44,9 @@ void Usage(char** argv) { std::cerr << " --purge-package,-pp Purge all files associated with a package." << std::endl; std::cerr << " --verbose,-v Set verbosity (default off)." << std::endl; std::cerr << " --output-text,-ot Output ascii text instead of protobuf (default off)." << std::endl; - std::cerr << " --min_traces,-mt The min number of perfetto traces needed for compilation (default 1)." - << std::endl; + std::cerr << " --min_traces,-mt The min number of perfetto traces needed " + << "for compilation (default 1)." << std::endl; + std::cerr << " --exclude-dex-files,-edf Set of exclude dex files" << std::endl; exit(1); } @@ -69,6 +70,7 @@ int Main(int argc, char** argv){ bool enable_verbose = false; bool arg_output_text = false; uint64_t arg_min_traces = 1; + bool exclude_dex_files = false; for (int arg = 1; arg < argc; ++arg) { std::string argstr = argv[arg]; @@ -117,8 +119,7 @@ int Main(int argc, char** argv){ } arg_purge_package = arg_next; ++arg; - } - else if (argstr == "--verbose" || argstr == "-v") { + } else if (argstr == "--verbose" || argstr == "-v") { enable_verbose = true; } else if (argstr == "--recompile" || argstr == "-r") { recompile = true; @@ -131,6 +132,8 @@ int Main(int argc, char** argv){ } arg_min_traces = std::stoul(arg_next); ++arg; + } else if (argstr == "--exclude-dex-files" || argstr == "-edf") { + exclude_dex_files = true; } else { arg_input_filenames.push_back(argstr); } @@ -167,7 +170,8 @@ int Main(int argc, char** argv){ enable_verbose, recompile, arg_min_traces, - std::make_shared<Exec>()}; + std::make_shared<Exec>(), + exclude_dex_files}; int ret_code = 0; if (arg_package && arg_activity) { diff --git a/src/manager/event_manager.cc b/src/manager/event_manager.cc index 9233a90..ebf1e7a 100644 --- a/src/manager/event_manager.cc +++ b/src/manager/event_manager.cc @@ -63,6 +63,8 @@ using perfetto::PerfettoTraceProto; using db::AppComponentName; +const constexpr bool kExcludeDexFilesDefault = true; + static std::atomic<bool> s_tracing_allowed{false}; static std::atomic<bool> s_readahead_allowed{false}; static std::atomic<uint64_t> s_min_traces{3}; @@ -999,7 +1001,11 @@ class EventManager::Impl { << event.package_name << ")"; - return PurgePackage(event.package_name); + if (common::ExcludeDexFiles(kExcludeDexFilesDefault)) { + return PurgePackage(event.package_name); + } + + return true; } bool OnJobScheduledEvent(RequestId request_id, @@ -1116,7 +1122,8 @@ class EventManager::Impl { verbose, recompile, min_traces, - std::make_shared<maintenance::Exec>()}; + std::make_shared<maintenance::Exec>(), + common::ExcludeDexFiles(kExcludeDexFilesDefault)}; LOG(DEBUG) << "StartMaintenance: min_traces=" << min_traces; maintenance::CompileSingleAppOnDevice(db, params, package_name); @@ -1233,6 +1240,9 @@ class EventManager::Impl { uint64_t min_traces = s_min_traces; printer.printFormatLine("iorapd.maintenance.min_traces = %" PRIu64, min_traces); + printer.printFormatLine("iorapd.exclude_dex_files = %s", + common::ExcludeDexFiles(kExcludeDexFilesDefault) ? "true" : "false"); + package_blacklister_ = PackageBlacklister{ /* Colon-separated string list of blacklisted packages, e.g. * "foo.bar.baz;com.fake.name" would blacklist {"foo.bar.baz", "com.fake.name"} packages. @@ -1273,7 +1283,8 @@ class EventManager::Impl { WOULD_LOG(VERBOSE), /*recompile*/false, s_min_traces, - std::make_shared<maintenance::Exec>()}; + std::make_shared<maintenance::Exec>(), + common::ExcludeDexFiles(kExcludeDexFilesDefault)}; db::DbHandle db{db::SchemaModel::GetSingleton()}; bool res = maintenance::CompileSingleAppOnDevice(db, std::move(params), package_name); diff --git a/tests/src/compiler/compiler_test.cc b/tests/src/compiler/compiler_test.cc index 26b56ec..f584378 100644 --- a/tests/src/compiler/compiler_test.cc +++ b/tests/src/compiler/compiler_test.cc @@ -142,7 +142,7 @@ TEST_F(CompilerTest, BlacklistFilterArtFiles) { std::string blacklist_filter = "[.](art|oat|odex|vdex|dex)$"; // iorap.cmd.compiler -op output.pb -it common_textcache -ot - // --blacklist-filter "[.](art|oat|odex|vdex|dex)$" common_perfetto_trace.pb + // --denylist-filter "[.](art|oat|odex|vdex|dex)$" common_perfetto_trace.pb std::vector<CompilationInput> perfetto_traces = MakeCompilationInputs(input_file_names, /* timestamp_limit_ns= */{}, /*pids=*/{}); diff --git a/tests/src/maintenance/controller_test.cc b/tests/src/maintenance/controller_test.cc index d2ce19f..4b92cf7 100644 --- a/tests/src/maintenance/controller_test.cc +++ b/tests/src/maintenance/controller_test.cc @@ -102,12 +102,40 @@ MATCHER_P(AreArgsExpected, compiled_trace_path, "") { "--timestamp_limit_ns", "2", "--timestamp_limit_ns", "18446744073709551615", "--timestamp_limit_ns", "8", + "--pid", + "1", + "--pid", + "3", + "--pid", + "4", "--output-text", "--output-proto", compiled_trace_path, "--verbose" }; return arg == expect; } +MATCHER_P(AreArgsExpectedNoDex, compiled_trace_path, "") { + std::vector<std::string> expect = + { "1.txt", + "3.txt", + "4.txt", + "--timestamp_limit_ns", "2", + "--timestamp_limit_ns", "18446744073709551615", + "--timestamp_limit_ns", "8", + "--pid", + "1", + "--pid", + "3", + "--pid", + "4", + "--output-text", + "--output-proto", compiled_trace_path, + "--verbose", + "--denylist-filter", + "[.](art|oat|odex|vdex|dex)$"}; + return arg == expect; +} + TEST_F(ControllerTest, CompilationController) { auto mock_exec = std::make_shared<MockExec>(); iorap::db::SchemaModel db_schema = db::SchemaModel::GetOrCreate(db_path); @@ -124,7 +152,8 @@ TEST_F(ControllerTest, CompilationController) { /*verbose=*/true, /*recompile=*/false, /*min_traces=*/3, - mock_exec}; + mock_exec, + /*exclude_dex_files=*/false}; ON_CALL(*mock_exec, Fork()) .WillByDefault(Return(-2)); @@ -144,7 +173,8 @@ TEST_F(ControllerTest, CompilationController) { /*verbose=*/true, /*recompile=*/true, /*min_traces=*/3, - mock_exec}; + mock_exec, + /*exclude_dex_files=*/false}; // Create a fake compiled trace file to test recompile. std::ofstream tmp_file; @@ -152,6 +182,24 @@ TEST_F(ControllerTest, CompilationController) { tmp_file.close(); CompileAppsOnDevice(db, params2); + + // Recompile + ControllerParameters params3{ + /*output_text=*/true, + /*inode_textcache=*/std::nullopt, + /*verbose=*/true, + /*recompile=*/true, + /*min_traces=*/3, + mock_exec, + /*exclude_dex_files=*/true}; + + EXPECT_CALL(*mock_exec, + Execve("/system/bin/iorap.cmd.compiler", + AreArgsExpectedNoDex(compiled_trace_path), + nullptr)) + .Times(1); + + CompileAppsOnDevice(db, params3); } } // namespace iorap::maintenance diff --git a/tests/src/maintenance/testdata/test_sqlite.db b/tests/src/maintenance/testdata/test_sqlite.db Binary files differindex 8e823f2..001bfad 100644 --- a/tests/src/maintenance/testdata/test_sqlite.db +++ b/tests/src/maintenance/testdata/test_sqlite.db |