summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryawanng <yawanng@google.com>2021-03-19 18:39:26 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-03-19 18:39:26 +0000
commit49f11515ba866e8106d982cc29798a78d3c2f3d1 (patch)
treef91e7a3df158c8e1ae1f55264aadb2f76de42b29
parent4c7ca03614bd51999e29c20186f2e3819f8e7356 (diff)
parentc9576dd9d4ebbc1b1faac9155eb6b36f1d097964 (diff)
downloadiorap-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.h4
-rw-r--r--src/compiler/main.cc7
-rw-r--r--src/maintenance/controller.cc5
-rw-r--r--src/maintenance/controller.h7
-rw-r--r--src/maintenance/main.cc14
-rw-r--r--src/manager/event_manager.cc17
-rw-r--r--tests/src/compiler/compiler_test.cc2
-rw-r--r--tests/src/maintenance/controller_test.cc52
-rw-r--r--tests/src/maintenance/testdata/test_sqlite.dbbin32768 -> 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
index 8e823f2..001bfad 100644
--- a/tests/src/maintenance/testdata/test_sqlite.db
+++ b/tests/src/maintenance/testdata/test_sqlite.db
Binary files differ