Loading cmds/dumpstate/dumpstate.cpp +98 −35 Original line number Diff line number Diff line Loading @@ -135,6 +135,11 @@ typedef Dumpstate::ConsentCallback::ConsentResult UserConsentResult; static char cmdline_buf[16384] = "(unknown)"; static const char *dump_traces_path = nullptr; static const uint64_t USER_CONSENT_TIMEOUT_MS = 30 * 1000; // Because telephony reports are significantly faster to collect (< 10 seconds vs. > 2 minutes), // it's often the case that they time out far too quickly for consent with such a hefty dialog for // the user to read. For telephony reports only, we increase the default timeout to 2 minutes to // roughly match full reports' durations. static const uint64_t TELEPHONY_REPORT_USER_CONSENT_TIMEOUT_MS = 2 * 60 * 1000; // TODO: variables and functions below should be part of dumpstate object Loading Loading @@ -879,6 +884,14 @@ static void DoSystemLogcat(time_t since) { CommandOptions::WithTimeoutInMs(timeout_ms).Build()); } static void DoRadioLogcat() { unsigned long timeout_ms = logcat_timeout({"radio"}); RunCommand( "RADIO LOG", {"logcat", "-b", "radio", "-v", "threadtime", "-v", "printable", "-v", "uid", "-d", "*:v"}, CommandOptions::WithTimeoutInMs(timeout_ms).Build(), true /* verbose_duration */); } static void DoLogcat() { unsigned long timeout_ms; // DumpFile("EVENT LOG TAGS", "/etc/event-log-tags"); Loading @@ -897,11 +910,7 @@ static void DoLogcat() { "STATS LOG", {"logcat", "-b", "stats", "-v", "threadtime", "-v", "printable", "-v", "uid", "-d", "*:v"}, CommandOptions::WithTimeoutInMs(timeout_ms).Build(), true /* verbose_duration */); timeout_ms = logcat_timeout({"radio"}); RunCommand( "RADIO LOG", {"logcat", "-b", "radio", "-v", "threadtime", "-v", "printable", "-v", "uid", "-d", "*:v"}, CommandOptions::WithTimeoutInMs(timeout_ms).Build(), true /* verbose_duration */); DoRadioLogcat(); RunCommand("LOG STATISTICS", {"logcat", "-b", "all", "-S"}); Loading Loading @@ -1429,11 +1438,14 @@ static Dumpstate::RunStatus dumpstate() { RunCommand("FILESYSTEMS & FREE SPACE", {"df"}); /* Binder state is expensive to look at as it uses a lot of memory. */ DumpFile("BINDER FAILED TRANSACTION LOG", "/sys/kernel/debug/binder/failed_transaction_log"); DumpFile("BINDER TRANSACTION LOG", "/sys/kernel/debug/binder/transaction_log"); DumpFile("BINDER TRANSACTIONS", "/sys/kernel/debug/binder/transactions"); DumpFile("BINDER STATS", "/sys/kernel/debug/binder/stats"); DumpFile("BINDER STATE", "/sys/kernel/debug/binder/state"); std::string binder_logs_dir = access("/dev/binderfs/binder_logs", R_OK) ? "/sys/kernel/debug/binder" : "/dev/binderfs/binder_logs"; DumpFile("BINDER FAILED TRANSACTION LOG", binder_logs_dir + "/failed_transaction_log"); DumpFile("BINDER TRANSACTION LOG", binder_logs_dir + "/transaction_log"); DumpFile("BINDER TRANSACTIONS", binder_logs_dir + "/transactions"); DumpFile("BINDER STATS", binder_logs_dir + "/stats"); DumpFile("BINDER STATE", binder_logs_dir + "/state"); /* Add window and surface trace files. */ if (!PropertiesHelper::IsUserBuild()) { Loading Loading @@ -1611,8 +1623,10 @@ Dumpstate::RunStatus Dumpstate::DumpstateDefaultAfterCritical() { return status; } // This method collects common dumpsys for telephony and wifi static void DumpstateRadioCommon() { // This method collects common dumpsys for telephony and wifi. Typically, wifi // reports are fine to include all information, but telephony reports on user // builds need to strip some content (see DumpstateTelephonyOnly). static void DumpstateRadioCommon(bool include_sensitive_info = true) { DumpIpTablesAsRoot(); ds.AddDir(LOGPERSIST_DATA_DIR, false); Loading @@ -1621,27 +1635,51 @@ static void DumpstateRadioCommon() { return; } // We need to be picky about some stuff for telephony reports on user builds. if (!include_sensitive_info) { // Only dump the radio log buffer (other buffers and dumps contain too much unrelated info). DoRadioLogcat(); } else { // Contains various system properties and process startup info. do_dmesg(); // Logs other than the radio buffer may contain package/component names and potential PII. DoLogcat(); DumpPacketStats(); // Too broad for connectivity problems. DoKmsg(); DumpIpAddrAndRules(); dump_route_tables(); // Contains unrelated hardware info (camera, NFC, biometrics, ...). DumpHals(); } DumpPacketStats(); DumpIpAddrAndRules(); dump_route_tables(); RunDumpsys("NETWORK DIAGNOSTICS", {"connectivity", "--diag"}, CommandOptions::WithTimeout(10).Build()); } // This method collects dumpsys for telephony debugging only // We use "telephony" here for legacy reasons, though this now really means "connectivity" (cellular // + wifi + networking). This method collects dumpsys for connectivity debugging only. General rules // for what can be included on user builds: all reported information MUST directly relate to // connectivity debugging or customer support and MUST NOT contain unrelated personally identifiable // information. This information MUST NOT identify user-installed packages (UIDs are OK, package // names are not), and MUST NOT contain logs of user application traffic. // TODO(b/148168577) rename this and other related fields/methods to "connectivity" instead. static void DumpstateTelephonyOnly() { DurationReporter duration_reporter("DUMPSTATE"); const CommandOptions DUMPSYS_COMPONENTS_OPTIONS = CommandOptions::WithTimeout(60).Build(); DumpstateRadioCommon(); const bool include_sensitive_info = !PropertiesHelper::IsUserBuild(); DumpstateRadioCommon(include_sensitive_info); if (include_sensitive_info) { // Contains too much unrelated PII, and given the unstructured nature of sysprops, we can't // really cherrypick all of the connectivity-related ones. Apps generally have no business // reading these anyway, and there should be APIs to supply the info in a more app-friendly // way. RunCommand("SYSTEM PROPERTIES", {"getprop"}); } printf("========================================================\n"); printf("== Android Framework Services\n"); Loading @@ -1649,15 +1687,28 @@ static void DumpstateTelephonyOnly() { RunDumpsys("DUMPSYS", {"connectivity"}, CommandOptions::WithTimeout(90).Build(), SEC_TO_MSEC(10)); RunDumpsys("DUMPSYS", {"connmetrics"}, CommandOptions::WithTimeout(90).Build(), SEC_TO_MSEC(10)); RunDumpsys("DUMPSYS", {"netd"}, CommandOptions::WithTimeout(90).Build(), SEC_TO_MSEC(10)); // TODO(b/146521742) build out an argument to include bound services here for user builds RunDumpsys("DUMPSYS", {"carrier_config"}, CommandOptions::WithTimeout(90).Build(), SEC_TO_MSEC(10)); RunDumpsys("DUMPSYS", {"wifi"}, CommandOptions::WithTimeout(90).Build(), SEC_TO_MSEC(10)); RunDumpsys("DUMPSYS", {"netpolicy"}, CommandOptions::WithTimeout(90).Build(), SEC_TO_MSEC(10)); RunDumpsys("DUMPSYS", {"network_management"}, CommandOptions::WithTimeout(90).Build(), SEC_TO_MSEC(10)); if (include_sensitive_info) { // Contains raw IP addresses, omit from reports on user builds. RunDumpsys("DUMPSYS", {"netd"}, CommandOptions::WithTimeout(90).Build(), SEC_TO_MSEC(10)); // Contains raw destination IP/MAC addresses, omit from reports on user builds. RunDumpsys("DUMPSYS", {"connmetrics"}, CommandOptions::WithTimeout(90).Build(), SEC_TO_MSEC(10)); // Contains package/component names, omit from reports on user builds. RunDumpsys("BATTERYSTATS", {"batterystats"}, CommandOptions::WithTimeout(90).Build(), SEC_TO_MSEC(10)); // Contains package names, but should be relatively simple to remove them (also contains // UIDs already), omit from reports on user builds. RunDumpsys("BATTERYSTATS", {"deviceidle"}, CommandOptions::WithTimeout(90).Build(), SEC_TO_MSEC(10)); } printf("========================================================\n"); printf("== Running Application Services\n"); Loading @@ -1665,10 +1716,14 @@ static void DumpstateTelephonyOnly() { RunDumpsys("TELEPHONY SERVICES", {"activity", "service", "TelephonyDebugService"}); if (include_sensitive_info) { printf("========================================================\n"); printf("== Running Application Services (non-platform)\n"); printf("========================================================\n"); // Contains package/component names and potential PII, omit from reports on user builds. // To get dumps of the active CarrierService(s) on user builds, we supply an argument to the // carrier_config dumpsys instead. RunDumpsys("APP SERVICES NON-PLATFORM", {"activity", "service", "all-non-platform"}, DUMPSYS_COMPONENTS_OPTIONS); Loading @@ -1676,7 +1731,9 @@ static void DumpstateTelephonyOnly() { printf("== Checkins\n"); printf("========================================================\n"); // Contains package/component names, omit from reports on user builds. RunDumpsys("CHECKIN BATTERYSTATS", {"batterystats", "-c"}); } printf("========================================================\n"); printf("== dumpstate: done (id %d)\n", ds.id_); Loading Loading @@ -2157,6 +2214,7 @@ static void SetOptionsFromMode(Dumpstate::BugreportMode mode, Dumpstate::DumpOpt break; case Dumpstate::BugreportMode::BUGREPORT_TELEPHONY: options->telephony_only = true; options->do_progress_updates = true; options->do_fb = false; break; case Dumpstate::BugreportMode::BUGREPORT_WIFI: Loading Loading @@ -2641,8 +2699,13 @@ Dumpstate::RunStatus Dumpstate::CopyBugreportIfUserConsented(int32_t calling_uid if (consent_result == UserConsentResult::UNAVAILABLE) { // User has not responded yet. uint64_t elapsed_ms = consent_callback_->getElapsedTimeMs(); if (elapsed_ms < USER_CONSENT_TIMEOUT_MS) { uint delay_seconds = (USER_CONSENT_TIMEOUT_MS - elapsed_ms) / 1000; // Telephony is a fast report type, particularly on user builds where information may be // more aggressively limited. To give the user time to read the consent dialog, increase the // timeout. uint64_t timeout_ms = options_->telephony_only ? TELEPHONY_REPORT_USER_CONSENT_TIMEOUT_MS : USER_CONSENT_TIMEOUT_MS; if (elapsed_ms < timeout_ms) { uint delay_seconds = (timeout_ms - elapsed_ms) / 1000; MYLOGD("Did not receive user consent yet; going to wait for %d seconds", delay_seconds); sleep(delay_seconds); } Loading cmds/dumpstate/tests/dumpstate_test.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -295,12 +295,12 @@ TEST_F(DumpOptionsTest, InitializeTelephonyBugReport) { EXPECT_FALSE(options_.do_fb); EXPECT_TRUE(options_.do_zip_file); EXPECT_TRUE(options_.telephony_only); EXPECT_TRUE(options_.do_progress_updates); // Other options retain default values EXPECT_TRUE(options_.do_vibrate); EXPECT_FALSE(options_.use_control_socket); EXPECT_FALSE(options_.show_header_only); EXPECT_FALSE(options_.do_progress_updates); EXPECT_FALSE(options_.is_remote_mode); EXPECT_FALSE(options_.use_socket); } Loading cmds/installd/dexopt.cpp +16 −9 Original line number Diff line number Diff line Loading @@ -299,9 +299,10 @@ const char* select_execution_binary( // Namespace for Android Runtime flags applied during boot time. static const char* RUNTIME_NATIVE_BOOT_NAMESPACE = "runtime_native_boot"; // Feature flag name for running the JIT in Zygote experiment, b/119800099. static const char* ENABLE_APEX_IMAGE = "enable_apex_image"; // Location of the apex image. static const char* kApexImage = "/system/framework/apex.art"; static const char* ENABLE_JITZYGOTE_IMAGE = "enable_apex_image"; // Location of the JIT Zygote image. static const char* kJitZygoteImage = "boot.art:/nonx/boot-framework.art!/system/etc/boot-image.prof"; // Phenotype property name for enabling profiling the boot class path. static const char* PROFILE_BOOT_CLASS_PATH = "profilebootclasspath"; Loading Loading @@ -405,9 +406,9 @@ class RunDex2Oat : public ExecVHelper { GetBoolProperty(kMinidebugInfoSystemProperty, kMinidebugInfoSystemPropertyDefault); std::string boot_image; std::string use_apex_image = std::string use_jitzygote_image = server_configurable_flags::GetServerConfigurableFlag(RUNTIME_NATIVE_BOOT_NAMESPACE, ENABLE_APEX_IMAGE, ENABLE_JITZYGOTE_IMAGE, /*default_value=*/ ""); std::string profile_boot_class_path = GetProperty("dalvik.vm.profilebootclasspath", ""); Loading @@ -417,10 +418,10 @@ class RunDex2Oat : public ExecVHelper { PROFILE_BOOT_CLASS_PATH, /*default_value=*/ profile_boot_class_path); if (use_apex_image == "true" || profile_boot_class_path == "true") { boot_image = StringPrintf("-Ximage:%s", kApexImage); if (use_jitzygote_image == "true" || profile_boot_class_path == "true") { boot_image = StringPrintf("--boot-image=%s", kJitZygoteImage); } else { boot_image = MapPropertyToArg("dalvik.vm.boot-image", "-Ximage:%s"); boot_image = MapPropertyToArg("dalvik.vm.boot-image", "--boot-image=%s"); } // clang FORTIFY doesn't let us use strlen in constant array bounds, so we Loading Loading @@ -513,7 +514,8 @@ class RunDex2Oat : public ExecVHelper { AddArg(instruction_set_variant_arg); AddArg(instruction_set_features_arg); AddRuntimeArg(boot_image); AddArg(boot_image); AddRuntimeArg(bootclasspath); AddRuntimeArg(dex2oat_Xms_arg); AddRuntimeArg(dex2oat_Xmx_arg); Loading Loading @@ -1271,6 +1273,11 @@ class Dex2oatFileWrapper { Dex2oatFileWrapper maybe_open_app_image(const char* out_oat_path, bool generate_app_image, bool is_public, int uid, bool is_secondary_dex) { // We don't create an image for secondary dex files. if (is_secondary_dex) { return Dex2oatFileWrapper(); } const std::string image_path = create_image_filename(out_oat_path); if (image_path.empty()) { // Happens when the out_oat_path has an unknown extension. Loading libs/binder/Android.bp +0 −1 Original line number Diff line number Diff line Loading @@ -170,7 +170,6 @@ aidl_interface { name: "libbinder_aidl_test_stub", local_include_dir: "aidl", srcs: [":libbinder_aidl"], visibility: [":__subpackages__"], vendor_available: true, backend: { java: { Loading libs/binder/fuzzer/Android.bp +0 −1 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ cc_fuzz { ], static_libs: [ "libbase", "libbinderthreadstate", "libcgrouprc", "libcgrouprc_format", "libcutils", Loading Loading
cmds/dumpstate/dumpstate.cpp +98 −35 Original line number Diff line number Diff line Loading @@ -135,6 +135,11 @@ typedef Dumpstate::ConsentCallback::ConsentResult UserConsentResult; static char cmdline_buf[16384] = "(unknown)"; static const char *dump_traces_path = nullptr; static const uint64_t USER_CONSENT_TIMEOUT_MS = 30 * 1000; // Because telephony reports are significantly faster to collect (< 10 seconds vs. > 2 minutes), // it's often the case that they time out far too quickly for consent with such a hefty dialog for // the user to read. For telephony reports only, we increase the default timeout to 2 minutes to // roughly match full reports' durations. static const uint64_t TELEPHONY_REPORT_USER_CONSENT_TIMEOUT_MS = 2 * 60 * 1000; // TODO: variables and functions below should be part of dumpstate object Loading Loading @@ -879,6 +884,14 @@ static void DoSystemLogcat(time_t since) { CommandOptions::WithTimeoutInMs(timeout_ms).Build()); } static void DoRadioLogcat() { unsigned long timeout_ms = logcat_timeout({"radio"}); RunCommand( "RADIO LOG", {"logcat", "-b", "radio", "-v", "threadtime", "-v", "printable", "-v", "uid", "-d", "*:v"}, CommandOptions::WithTimeoutInMs(timeout_ms).Build(), true /* verbose_duration */); } static void DoLogcat() { unsigned long timeout_ms; // DumpFile("EVENT LOG TAGS", "/etc/event-log-tags"); Loading @@ -897,11 +910,7 @@ static void DoLogcat() { "STATS LOG", {"logcat", "-b", "stats", "-v", "threadtime", "-v", "printable", "-v", "uid", "-d", "*:v"}, CommandOptions::WithTimeoutInMs(timeout_ms).Build(), true /* verbose_duration */); timeout_ms = logcat_timeout({"radio"}); RunCommand( "RADIO LOG", {"logcat", "-b", "radio", "-v", "threadtime", "-v", "printable", "-v", "uid", "-d", "*:v"}, CommandOptions::WithTimeoutInMs(timeout_ms).Build(), true /* verbose_duration */); DoRadioLogcat(); RunCommand("LOG STATISTICS", {"logcat", "-b", "all", "-S"}); Loading Loading @@ -1429,11 +1438,14 @@ static Dumpstate::RunStatus dumpstate() { RunCommand("FILESYSTEMS & FREE SPACE", {"df"}); /* Binder state is expensive to look at as it uses a lot of memory. */ DumpFile("BINDER FAILED TRANSACTION LOG", "/sys/kernel/debug/binder/failed_transaction_log"); DumpFile("BINDER TRANSACTION LOG", "/sys/kernel/debug/binder/transaction_log"); DumpFile("BINDER TRANSACTIONS", "/sys/kernel/debug/binder/transactions"); DumpFile("BINDER STATS", "/sys/kernel/debug/binder/stats"); DumpFile("BINDER STATE", "/sys/kernel/debug/binder/state"); std::string binder_logs_dir = access("/dev/binderfs/binder_logs", R_OK) ? "/sys/kernel/debug/binder" : "/dev/binderfs/binder_logs"; DumpFile("BINDER FAILED TRANSACTION LOG", binder_logs_dir + "/failed_transaction_log"); DumpFile("BINDER TRANSACTION LOG", binder_logs_dir + "/transaction_log"); DumpFile("BINDER TRANSACTIONS", binder_logs_dir + "/transactions"); DumpFile("BINDER STATS", binder_logs_dir + "/stats"); DumpFile("BINDER STATE", binder_logs_dir + "/state"); /* Add window and surface trace files. */ if (!PropertiesHelper::IsUserBuild()) { Loading Loading @@ -1611,8 +1623,10 @@ Dumpstate::RunStatus Dumpstate::DumpstateDefaultAfterCritical() { return status; } // This method collects common dumpsys for telephony and wifi static void DumpstateRadioCommon() { // This method collects common dumpsys for telephony and wifi. Typically, wifi // reports are fine to include all information, but telephony reports on user // builds need to strip some content (see DumpstateTelephonyOnly). static void DumpstateRadioCommon(bool include_sensitive_info = true) { DumpIpTablesAsRoot(); ds.AddDir(LOGPERSIST_DATA_DIR, false); Loading @@ -1621,27 +1635,51 @@ static void DumpstateRadioCommon() { return; } // We need to be picky about some stuff for telephony reports on user builds. if (!include_sensitive_info) { // Only dump the radio log buffer (other buffers and dumps contain too much unrelated info). DoRadioLogcat(); } else { // Contains various system properties and process startup info. do_dmesg(); // Logs other than the radio buffer may contain package/component names and potential PII. DoLogcat(); DumpPacketStats(); // Too broad for connectivity problems. DoKmsg(); DumpIpAddrAndRules(); dump_route_tables(); // Contains unrelated hardware info (camera, NFC, biometrics, ...). DumpHals(); } DumpPacketStats(); DumpIpAddrAndRules(); dump_route_tables(); RunDumpsys("NETWORK DIAGNOSTICS", {"connectivity", "--diag"}, CommandOptions::WithTimeout(10).Build()); } // This method collects dumpsys for telephony debugging only // We use "telephony" here for legacy reasons, though this now really means "connectivity" (cellular // + wifi + networking). This method collects dumpsys for connectivity debugging only. General rules // for what can be included on user builds: all reported information MUST directly relate to // connectivity debugging or customer support and MUST NOT contain unrelated personally identifiable // information. This information MUST NOT identify user-installed packages (UIDs are OK, package // names are not), and MUST NOT contain logs of user application traffic. // TODO(b/148168577) rename this and other related fields/methods to "connectivity" instead. static void DumpstateTelephonyOnly() { DurationReporter duration_reporter("DUMPSTATE"); const CommandOptions DUMPSYS_COMPONENTS_OPTIONS = CommandOptions::WithTimeout(60).Build(); DumpstateRadioCommon(); const bool include_sensitive_info = !PropertiesHelper::IsUserBuild(); DumpstateRadioCommon(include_sensitive_info); if (include_sensitive_info) { // Contains too much unrelated PII, and given the unstructured nature of sysprops, we can't // really cherrypick all of the connectivity-related ones. Apps generally have no business // reading these anyway, and there should be APIs to supply the info in a more app-friendly // way. RunCommand("SYSTEM PROPERTIES", {"getprop"}); } printf("========================================================\n"); printf("== Android Framework Services\n"); Loading @@ -1649,15 +1687,28 @@ static void DumpstateTelephonyOnly() { RunDumpsys("DUMPSYS", {"connectivity"}, CommandOptions::WithTimeout(90).Build(), SEC_TO_MSEC(10)); RunDumpsys("DUMPSYS", {"connmetrics"}, CommandOptions::WithTimeout(90).Build(), SEC_TO_MSEC(10)); RunDumpsys("DUMPSYS", {"netd"}, CommandOptions::WithTimeout(90).Build(), SEC_TO_MSEC(10)); // TODO(b/146521742) build out an argument to include bound services here for user builds RunDumpsys("DUMPSYS", {"carrier_config"}, CommandOptions::WithTimeout(90).Build(), SEC_TO_MSEC(10)); RunDumpsys("DUMPSYS", {"wifi"}, CommandOptions::WithTimeout(90).Build(), SEC_TO_MSEC(10)); RunDumpsys("DUMPSYS", {"netpolicy"}, CommandOptions::WithTimeout(90).Build(), SEC_TO_MSEC(10)); RunDumpsys("DUMPSYS", {"network_management"}, CommandOptions::WithTimeout(90).Build(), SEC_TO_MSEC(10)); if (include_sensitive_info) { // Contains raw IP addresses, omit from reports on user builds. RunDumpsys("DUMPSYS", {"netd"}, CommandOptions::WithTimeout(90).Build(), SEC_TO_MSEC(10)); // Contains raw destination IP/MAC addresses, omit from reports on user builds. RunDumpsys("DUMPSYS", {"connmetrics"}, CommandOptions::WithTimeout(90).Build(), SEC_TO_MSEC(10)); // Contains package/component names, omit from reports on user builds. RunDumpsys("BATTERYSTATS", {"batterystats"}, CommandOptions::WithTimeout(90).Build(), SEC_TO_MSEC(10)); // Contains package names, but should be relatively simple to remove them (also contains // UIDs already), omit from reports on user builds. RunDumpsys("BATTERYSTATS", {"deviceidle"}, CommandOptions::WithTimeout(90).Build(), SEC_TO_MSEC(10)); } printf("========================================================\n"); printf("== Running Application Services\n"); Loading @@ -1665,10 +1716,14 @@ static void DumpstateTelephonyOnly() { RunDumpsys("TELEPHONY SERVICES", {"activity", "service", "TelephonyDebugService"}); if (include_sensitive_info) { printf("========================================================\n"); printf("== Running Application Services (non-platform)\n"); printf("========================================================\n"); // Contains package/component names and potential PII, omit from reports on user builds. // To get dumps of the active CarrierService(s) on user builds, we supply an argument to the // carrier_config dumpsys instead. RunDumpsys("APP SERVICES NON-PLATFORM", {"activity", "service", "all-non-platform"}, DUMPSYS_COMPONENTS_OPTIONS); Loading @@ -1676,7 +1731,9 @@ static void DumpstateTelephonyOnly() { printf("== Checkins\n"); printf("========================================================\n"); // Contains package/component names, omit from reports on user builds. RunDumpsys("CHECKIN BATTERYSTATS", {"batterystats", "-c"}); } printf("========================================================\n"); printf("== dumpstate: done (id %d)\n", ds.id_); Loading Loading @@ -2157,6 +2214,7 @@ static void SetOptionsFromMode(Dumpstate::BugreportMode mode, Dumpstate::DumpOpt break; case Dumpstate::BugreportMode::BUGREPORT_TELEPHONY: options->telephony_only = true; options->do_progress_updates = true; options->do_fb = false; break; case Dumpstate::BugreportMode::BUGREPORT_WIFI: Loading Loading @@ -2641,8 +2699,13 @@ Dumpstate::RunStatus Dumpstate::CopyBugreportIfUserConsented(int32_t calling_uid if (consent_result == UserConsentResult::UNAVAILABLE) { // User has not responded yet. uint64_t elapsed_ms = consent_callback_->getElapsedTimeMs(); if (elapsed_ms < USER_CONSENT_TIMEOUT_MS) { uint delay_seconds = (USER_CONSENT_TIMEOUT_MS - elapsed_ms) / 1000; // Telephony is a fast report type, particularly on user builds where information may be // more aggressively limited. To give the user time to read the consent dialog, increase the // timeout. uint64_t timeout_ms = options_->telephony_only ? TELEPHONY_REPORT_USER_CONSENT_TIMEOUT_MS : USER_CONSENT_TIMEOUT_MS; if (elapsed_ms < timeout_ms) { uint delay_seconds = (timeout_ms - elapsed_ms) / 1000; MYLOGD("Did not receive user consent yet; going to wait for %d seconds", delay_seconds); sleep(delay_seconds); } Loading
cmds/dumpstate/tests/dumpstate_test.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -295,12 +295,12 @@ TEST_F(DumpOptionsTest, InitializeTelephonyBugReport) { EXPECT_FALSE(options_.do_fb); EXPECT_TRUE(options_.do_zip_file); EXPECT_TRUE(options_.telephony_only); EXPECT_TRUE(options_.do_progress_updates); // Other options retain default values EXPECT_TRUE(options_.do_vibrate); EXPECT_FALSE(options_.use_control_socket); EXPECT_FALSE(options_.show_header_only); EXPECT_FALSE(options_.do_progress_updates); EXPECT_FALSE(options_.is_remote_mode); EXPECT_FALSE(options_.use_socket); } Loading
cmds/installd/dexopt.cpp +16 −9 Original line number Diff line number Diff line Loading @@ -299,9 +299,10 @@ const char* select_execution_binary( // Namespace for Android Runtime flags applied during boot time. static const char* RUNTIME_NATIVE_BOOT_NAMESPACE = "runtime_native_boot"; // Feature flag name for running the JIT in Zygote experiment, b/119800099. static const char* ENABLE_APEX_IMAGE = "enable_apex_image"; // Location of the apex image. static const char* kApexImage = "/system/framework/apex.art"; static const char* ENABLE_JITZYGOTE_IMAGE = "enable_apex_image"; // Location of the JIT Zygote image. static const char* kJitZygoteImage = "boot.art:/nonx/boot-framework.art!/system/etc/boot-image.prof"; // Phenotype property name for enabling profiling the boot class path. static const char* PROFILE_BOOT_CLASS_PATH = "profilebootclasspath"; Loading Loading @@ -405,9 +406,9 @@ class RunDex2Oat : public ExecVHelper { GetBoolProperty(kMinidebugInfoSystemProperty, kMinidebugInfoSystemPropertyDefault); std::string boot_image; std::string use_apex_image = std::string use_jitzygote_image = server_configurable_flags::GetServerConfigurableFlag(RUNTIME_NATIVE_BOOT_NAMESPACE, ENABLE_APEX_IMAGE, ENABLE_JITZYGOTE_IMAGE, /*default_value=*/ ""); std::string profile_boot_class_path = GetProperty("dalvik.vm.profilebootclasspath", ""); Loading @@ -417,10 +418,10 @@ class RunDex2Oat : public ExecVHelper { PROFILE_BOOT_CLASS_PATH, /*default_value=*/ profile_boot_class_path); if (use_apex_image == "true" || profile_boot_class_path == "true") { boot_image = StringPrintf("-Ximage:%s", kApexImage); if (use_jitzygote_image == "true" || profile_boot_class_path == "true") { boot_image = StringPrintf("--boot-image=%s", kJitZygoteImage); } else { boot_image = MapPropertyToArg("dalvik.vm.boot-image", "-Ximage:%s"); boot_image = MapPropertyToArg("dalvik.vm.boot-image", "--boot-image=%s"); } // clang FORTIFY doesn't let us use strlen in constant array bounds, so we Loading Loading @@ -513,7 +514,8 @@ class RunDex2Oat : public ExecVHelper { AddArg(instruction_set_variant_arg); AddArg(instruction_set_features_arg); AddRuntimeArg(boot_image); AddArg(boot_image); AddRuntimeArg(bootclasspath); AddRuntimeArg(dex2oat_Xms_arg); AddRuntimeArg(dex2oat_Xmx_arg); Loading Loading @@ -1271,6 +1273,11 @@ class Dex2oatFileWrapper { Dex2oatFileWrapper maybe_open_app_image(const char* out_oat_path, bool generate_app_image, bool is_public, int uid, bool is_secondary_dex) { // We don't create an image for secondary dex files. if (is_secondary_dex) { return Dex2oatFileWrapper(); } const std::string image_path = create_image_filename(out_oat_path); if (image_path.empty()) { // Happens when the out_oat_path has an unknown extension. Loading
libs/binder/Android.bp +0 −1 Original line number Diff line number Diff line Loading @@ -170,7 +170,6 @@ aidl_interface { name: "libbinder_aidl_test_stub", local_include_dir: "aidl", srcs: [":libbinder_aidl"], visibility: [":__subpackages__"], vendor_available: true, backend: { java: { Loading
libs/binder/fuzzer/Android.bp +0 −1 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ cc_fuzz { ], static_libs: [ "libbase", "libbinderthreadstate", "libcgrouprc", "libcgrouprc_format", "libcutils", Loading