Merge "BBQ: add a counter for pending buffers" into sc-dev
diff --git a/cmds/installd/InstalldNativeService.cpp b/cmds/installd/InstalldNativeService.cpp
index 818804a..59311a0 100644
--- a/cmds/installd/InstalldNativeService.cpp
+++ b/cmds/installd/InstalldNativeService.cpp
@@ -342,7 +342,8 @@
// If the initial top-level restorecon above changed the label, then go
// back and restorecon everything recursively
- if (strcmp(before, after)) {
+ // TODO(b/190567190, b/188141923) Remove recursive fixup of com.google.android.gsf.
+ if (strcmp(before, after) || (path.find("com.google.android.gsf") != std::string::npos)) {
if (existing) {
LOG(DEBUG) << "Detected label change from " << before << " to " << after << " at "
<< path << "; running recursive restorecon";
@@ -2356,7 +2357,7 @@
// TODO: Consider returning error codes.
binder::Status InstalldNativeService::mergeProfiles(int32_t uid, const std::string& packageName,
- const std::string& profileName, bool* _aidl_return) {
+ const std::string& profileName, int* _aidl_return) {
ENFORCE_UID(AID_SYSTEM);
CHECK_ARGUMENT_PACKAGE_NAME(packageName);
std::lock_guard<std::recursive_mutex> lock(mLock);
@@ -2656,7 +2657,8 @@
}
binder::Status InstalldNativeService::deleteOdex(const std::string& apkPath,
- const std::string& instructionSet, const std::optional<std::string>& outputPath) {
+ const std::string& instructionSet, const std::optional<std::string>& outputPath,
+ int64_t* _aidl_return) {
ENFORCE_UID(AID_SYSTEM);
CHECK_ARGUMENT_PATH(apkPath);
CHECK_ARGUMENT_PATH(outputPath);
@@ -2666,8 +2668,8 @@
const char* instruction_set = instructionSet.c_str();
const char* oat_dir = outputPath ? outputPath->c_str() : nullptr;
- bool res = delete_odex(apk_path, instruction_set, oat_dir);
- return res ? ok() : error();
+ *_aidl_return = delete_odex(apk_path, instruction_set, oat_dir);
+ return *_aidl_return == -1 ? error() : ok();
}
// This kernel feature is experimental.
diff --git a/cmds/installd/InstalldNativeService.h b/cmds/installd/InstalldNativeService.h
index 4966b96..ea0c945 100644
--- a/cmds/installd/InstalldNativeService.h
+++ b/cmds/installd/InstalldNativeService.h
@@ -125,7 +125,7 @@
binder::Status rmdex(const std::string& codePath, const std::string& instructionSet);
binder::Status mergeProfiles(int32_t uid, const std::string& packageName,
- const std::string& profileName, bool* _aidl_return);
+ const std::string& profileName, int* _aidl_return);
binder::Status dumpProfiles(int32_t uid, const std::string& packageName,
const std::string& profileName, const std::string& codePath, bool* _aidl_return);
binder::Status copySystemProfile(const std::string& systemProfile,
@@ -150,7 +150,7 @@
binder::Status moveAb(const std::string& apkPath, const std::string& instructionSet,
const std::string& outputPath);
binder::Status deleteOdex(const std::string& apkPath, const std::string& instructionSet,
- const std::optional<std::string>& outputPath);
+ const std::optional<std::string>& outputPath, int64_t* _aidl_return);
binder::Status installApkVerity(const std::string& filePath,
android::base::unique_fd verityInput, int32_t contentSize);
binder::Status assertFsverityRootHashMatches(const std::string& filePath,
diff --git a/cmds/installd/binder/android/os/IInstalld.aidl b/cmds/installd/binder/android/os/IInstalld.aidl
index 2538e22..3d32f61 100644
--- a/cmds/installd/binder/android/os/IInstalld.aidl
+++ b/cmds/installd/binder/android/os/IInstalld.aidl
@@ -69,7 +69,7 @@
void rmdex(@utf8InCpp String codePath, @utf8InCpp String instructionSet);
- boolean mergeProfiles(int uid, @utf8InCpp String packageName, @utf8InCpp String profileName);
+ int mergeProfiles(int uid, @utf8InCpp String packageName, @utf8InCpp String profileName);
boolean dumpProfiles(int uid, @utf8InCpp String packageName, @utf8InCpp String profileName,
@utf8InCpp String codePath);
boolean copySystemProfile(@utf8InCpp String systemProfile, int uid,
@@ -91,7 +91,7 @@
@utf8InCpp String toBase);
void moveAb(@utf8InCpp String apkPath, @utf8InCpp String instructionSet,
@utf8InCpp String outputPath);
- void deleteOdex(@utf8InCpp String apkPath, @utf8InCpp String instructionSet,
+ long deleteOdex(@utf8InCpp String apkPath, @utf8InCpp String instructionSet,
@nullable @utf8InCpp String outputPath);
void installApkVerity(@utf8InCpp String filePath, in FileDescriptor verityInput,
int contentSize);
diff --git a/cmds/installd/dexopt.cpp b/cmds/installd/dexopt.cpp
index 204953c..15f0c5b 100644
--- a/cmds/installd/dexopt.cpp
+++ b/cmds/installd/dexopt.cpp
@@ -53,6 +53,7 @@
#include "execv_helper.h"
#include "globals.h"
#include "installd_deps.h"
+#include "installd_constants.h"
#include "otapreopt_utils.h"
#include "run_dex2oat.h"
#include "unique_file.h"
@@ -292,8 +293,8 @@
}
}
-static unique_fd create_profile(uid_t uid, const std::string& profile, int32_t flags) {
- unique_fd fd(TEMP_FAILURE_RETRY(open(profile.c_str(), flags, 0600)));
+static unique_fd create_profile(uid_t uid, const std::string& profile, int32_t flags, mode_t mode) {
+ unique_fd fd(TEMP_FAILURE_RETRY(open(profile.c_str(), flags, mode)));
if (fd.get() < 0) {
if (errno != EEXIST) {
PLOG(ERROR) << "Failed to create profile " << profile;
@@ -310,7 +311,7 @@
return fd;
}
-static unique_fd open_profile(uid_t uid, const std::string& profile, int32_t flags) {
+static unique_fd open_profile(uid_t uid, const std::string& profile, int32_t flags, mode_t mode) {
// Do not follow symlinks when opening a profile:
// - primary profiles should not contain symlinks in their paths
// - secondary dex paths should have been already resolved and validated
@@ -320,7 +321,7 @@
// Reference profiles and snapshots are created on the fly; so they might not exist beforehand.
unique_fd fd;
if ((flags & O_CREAT) != 0) {
- fd = create_profile(uid, profile, flags);
+ fd = create_profile(uid, profile, flags, mode);
} else {
fd.reset(TEMP_FAILURE_RETRY(open(profile.c_str(), flags)));
}
@@ -336,6 +337,16 @@
PLOG(ERROR) << "Failed to open profile " << profile;
}
return invalid_unique_fd();
+ } else {
+ // If we just create the file we need to set its mode because on Android
+ // open has a mask that only allows owner access.
+ if ((flags & O_CREAT) != 0) {
+ if (fchmod(fd.get(), mode) != 0) {
+ PLOG(ERROR) << "Could not set mode " << std::hex << mode << std::dec
+ << " on profile" << profile;
+ // Not a terminal failure.
+ }
+ }
}
return fd;
@@ -345,20 +356,29 @@
const std::string& location, bool is_secondary_dex) {
std::string profile = create_current_profile_path(user, package_name, location,
is_secondary_dex);
- return open_profile(uid, profile, O_RDONLY);
+ return open_profile(uid, profile, O_RDONLY, /*mode=*/ 0);
}
static unique_fd open_reference_profile(uid_t uid, const std::string& package_name,
const std::string& location, bool read_write, bool is_secondary_dex) {
std::string profile = create_reference_profile_path(package_name, location, is_secondary_dex);
- return open_profile(uid, profile, read_write ? (O_CREAT | O_RDWR) : O_RDONLY);
+ return open_profile(
+ uid,
+ profile,
+ read_write ? (O_CREAT | O_RDWR) : O_RDONLY,
+ S_IRUSR | S_IWUSR | S_IRGRP); // so that ART can also read it when apps run.
}
static UniqueFile open_reference_profile_as_unique_file(uid_t uid, const std::string& package_name,
const std::string& location, bool read_write, bool is_secondary_dex) {
std::string profile_path = create_reference_profile_path(package_name, location,
is_secondary_dex);
- unique_fd ufd = open_profile(uid, profile_path, read_write ? (O_CREAT | O_RDWR) : O_RDONLY);
+ unique_fd ufd = open_profile(
+ uid,
+ profile_path,
+ read_write ? (O_CREAT | O_RDWR) : O_RDONLY,
+ S_IRUSR | S_IWUSR | S_IRGRP); // so that ART can also read it when apps run.
+
return UniqueFile(ufd.release(), profile_path, [](const std::string& path) {
clear_profile(path);
});
@@ -367,7 +387,7 @@
static unique_fd open_spnashot_profile(uid_t uid, const std::string& package_name,
const std::string& location) {
std::string profile = create_snapshot_profile_path(package_name, location);
- return open_profile(uid, profile, O_CREAT | O_RDWR | O_TRUNC);
+ return open_profile(uid, profile, O_CREAT | O_RDWR | O_TRUNC, S_IRUSR | S_IWUSR);
}
static void open_profile_files(uid_t uid, const std::string& package_name,
@@ -397,11 +417,12 @@
static constexpr int PROFMAN_BIN_RETURN_CODE_SUCCESS = 0;
static constexpr int PROFMAN_BIN_RETURN_CODE_COMPILE = 1;
-static constexpr int PROFMAN_BIN_RETURN_CODE_SKIP_COMPILATION = 2;
+static constexpr int PROFMAN_BIN_RETURN_CODE_SKIP_COMPILATION_NOT_ENOUGH_DELTA = 2;
static constexpr int PROFMAN_BIN_RETURN_CODE_BAD_PROFILES = 3;
static constexpr int PROFMAN_BIN_RETURN_CODE_ERROR_IO = 4;
static constexpr int PROFMAN_BIN_RETURN_CODE_ERROR_LOCKING = 5;
static constexpr int PROFMAN_BIN_RETURN_CODE_ERROR_DIFFERENT_VERSIONS = 6;
+static constexpr int PROFMAN_BIN_RETURN_CODE_SKIP_COMPILATION_EMPTY_PROFILES = 7;
class RunProfman : public ExecVHelper {
public:
@@ -536,15 +557,7 @@
std::vector<unique_fd> apk_fds_;
};
-
-
-// Decides if profile guided compilation is needed or not based on existing profiles.
-// The location is the package name for primary apks or the dex path for secondary dex files.
-// Returns true if there is enough information in the current profiles that makes it
-// worth to recompile the given location.
-// If the return value is true all the current profiles would have been merged into
-// the reference profiles accessible with open_reference_profile().
-static bool analyze_profiles(uid_t uid, const std::string& package_name,
+static int analyze_profiles(uid_t uid, const std::string& package_name,
const std::string& location, bool is_secondary_dex) {
std::vector<unique_fd> profiles_fd;
unique_fd reference_profile_fd;
@@ -553,7 +566,7 @@
if (profiles_fd.empty() || (reference_profile_fd.get() < 0)) {
// Skip profile guided compilation because no profiles were found.
// Or if the reference profile info couldn't be opened.
- return false;
+ return PROFILES_ANALYSIS_DONT_OPTIMIZE_EMPTY_PROFILES;
}
RunProfman profman_merge;
@@ -575,6 +588,7 @@
/* parent */
int return_code = wait_child(pid);
bool need_to_compile = false;
+ bool empty_profiles = false;
bool should_clear_current_profiles = false;
bool should_clear_reference_profile = false;
if (!WIFEXITED(return_code)) {
@@ -587,11 +601,17 @@
should_clear_current_profiles = true;
should_clear_reference_profile = false;
break;
- case PROFMAN_BIN_RETURN_CODE_SKIP_COMPILATION:
+ case PROFMAN_BIN_RETURN_CODE_SKIP_COMPILATION_NOT_ENOUGH_DELTA:
need_to_compile = false;
should_clear_current_profiles = false;
should_clear_reference_profile = false;
break;
+ case PROFMAN_BIN_RETURN_CODE_SKIP_COMPILATION_EMPTY_PROFILES:
+ need_to_compile = false;
+ empty_profiles = true;
+ should_clear_current_profiles = false;
+ should_clear_reference_profile = false;
+ break;
case PROFMAN_BIN_RETURN_CODE_BAD_PROFILES:
LOG(WARNING) << "Bad profiles for location " << location;
need_to_compile = false;
@@ -634,16 +654,29 @@
if (should_clear_reference_profile) {
clear_reference_profile(package_name, location, is_secondary_dex);
}
- return need_to_compile;
+ int result = 0;
+ if (need_to_compile) {
+ result = PROFILES_ANALYSIS_OPTIMIZE;
+ } else if (empty_profiles) {
+ result = PROFILES_ANALYSIS_DONT_OPTIMIZE_EMPTY_PROFILES;
+ } else {
+ result = PROFILES_ANALYSIS_DONT_OPTIMIZE_SMALL_DELTA;
+ }
+ return result;
}
// Decides if profile guided compilation is needed or not based on existing profiles.
-// The analysis is done for the primary apks of the given package.
-// Returns true if there is enough information in the current profiles that makes it
-// worth to recompile the package.
-// If the return value is true all the current profiles would have been merged into
-// the reference profiles accessible with open_reference_profile().
-bool analyze_primary_profiles(uid_t uid, const std::string& package_name,
+// The analysis is done for a single profile name (which corresponds to a single code path).
+//
+// Returns PROFILES_ANALYSIS_OPTIMIZE if there is enough information in the current profiles
+// that makes it worth to recompile the package.
+// If the return value is PROFILES_ANALYSIS_OPTIMIZE all the current profiles would have been
+// merged into the reference profiles accessible with open_reference_profile().
+//
+// Return PROFILES_ANALYSIS_DONT_OPTIMIZE_SMALL_DELTA if the package should not optimize.
+// As a special case returns PROFILES_ANALYSIS_DONT_OPTIMIZE_EMPTY_PROFILES if all profiles are
+// empty.
+int analyze_primary_profiles(uid_t uid, const std::string& package_name,
const std::string& profile_name) {
return analyze_profiles(uid, package_name, profile_name, /*is_secondary_dex*/false);
}
@@ -1147,7 +1180,7 @@
int zip_fd,
const std::string& instruction_set,
const std::string& compiler_filter,
- bool profile_was_updated,
+ int profile_analysis_result,
bool downgrade,
const char* class_loader_context,
const std::string& class_loader_context_fds) {
@@ -1163,7 +1196,8 @@
std::string zip_fd_arg = "--zip-fd=" + std::to_string(zip_fd);
std::string isa_arg = "--isa=" + instruction_set;
std::string compiler_filter_arg = "--compiler-filter=" + compiler_filter;
- const char* assume_profile_changed = "--assume-profile-changed";
+ std::string profile_analysis_arg = "--profile-analysis-result="
+ + std::to_string(profile_analysis_result);
const char* downgrade_flag = "--downgrade";
std::string class_loader_context_arg = "--class-loader-context=";
if (class_loader_context != nullptr) {
@@ -1185,9 +1219,8 @@
AddArg(vdex_fd_arg);
}
AddArg(zip_fd_arg);
- if (profile_was_updated) {
- AddArg(assume_profile_changed);
- }
+ AddArg(profile_analysis_arg);
+
if (downgrade) {
AddArg(downgrade_flag);
}
@@ -1559,7 +1592,7 @@
}
// Analyze profiles.
- bool profile_was_updated = analyze_profiles(uid, pkgname, dex_path,
+ int profile_analysis_result = analyze_profiles(uid, pkgname, dex_path,
/*is_secondary_dex*/true);
// Run dexoptanalyzer to get dexopt_needed code. This is not expected to return.
@@ -1570,7 +1603,8 @@
oat_file_fd.get(),
zip_fd.get(),
instruction_set,
- compiler_filter, profile_was_updated,
+ compiler_filter,
+ profile_analysis_result,
downgrade,
class_loader_context,
join_fds(context_zip_fds));
@@ -2218,38 +2252,52 @@
return success;
}
-bool delete_odex(const char* apk_path, const char* instruction_set, const char* oat_dir) {
+int64_t delete_odex(const char* apk_path, const char* instruction_set, const char* oat_dir) {
// Delete the oat/odex file.
char out_path[PKG_PATH_MAX];
if (!create_oat_out_path(apk_path, instruction_set, oat_dir,
/*is_secondary_dex*/false, out_path)) {
- return false;
+ LOG(ERROR) << "Cannot create apk path for " << apk_path;
+ return -1;
}
// In case of a permission failure report the issue. Otherwise just print a warning.
- auto unlink_and_check = [](const char* path) -> bool {
- int result = unlink(path);
- if (result != 0) {
- if (errno == EACCES || errno == EPERM) {
- PLOG(ERROR) << "Could not unlink " << path;
- return false;
+ auto unlink_and_check = [](const char* path) -> int64_t {
+ struct stat file_stat;
+ if (stat(path, &file_stat) != 0) {
+ if (errno != ENOENT) {
+ PLOG(ERROR) << "Could not stat " << path;
+ return -1;
}
- PLOG(WARNING) << "Could not unlink " << path;
+ return 0;
}
- return true;
+
+ if (unlink(path) != 0) {
+ if (errno != ENOENT) {
+ PLOG(ERROR) << "Could not unlink " << path;
+ return -1;
+ }
+ }
+ return static_cast<int64_t>(file_stat.st_size);
};
// Delete the oat/odex file.
- bool return_value_oat = unlink_and_check(out_path);
+ int64_t return_value_oat = unlink_and_check(out_path);
// Derive and delete the app image.
- bool return_value_art = unlink_and_check(create_image_filename(out_path).c_str());
+ int64_t return_value_art = unlink_and_check(create_image_filename(out_path).c_str());
// Derive and delete the vdex file.
- bool return_value_vdex = unlink_and_check(create_vdex_filename(out_path).c_str());
+ int64_t return_value_vdex = unlink_and_check(create_vdex_filename(out_path).c_str());
- // Report success.
- return return_value_oat && return_value_art && return_value_vdex;
+ // Report result
+ if (return_value_oat == -1
+ || return_value_art == -1
+ || return_value_vdex == -1) {
+ return -1;
+ }
+
+ return return_value_oat + return_value_art + return_value_vdex;
}
static bool is_absolute_path(const std::string& path) {
@@ -2484,7 +2532,7 @@
for (size_t i = 0; i < profiles.size(); ) {
std::vector<unique_fd> profiles_fd;
for (size_t k = 0; k < kAggregationBatchSize && i < profiles.size(); k++, i++) {
- unique_fd fd = open_profile(AID_SYSTEM, profiles[i], O_RDONLY);
+ unique_fd fd = open_profile(AID_SYSTEM, profiles[i], O_RDONLY, /*mode=*/ 0);
if (fd.get() >= 0) {
profiles_fd.push_back(std::move(fd));
}
diff --git a/cmds/installd/dexopt.h b/cmds/installd/dexopt.h
index d35953c..5a637b1 100644
--- a/cmds/installd/dexopt.h
+++ b/cmds/installd/dexopt.h
@@ -54,15 +54,20 @@
// Clear all current profiles identified by the given profile name (all users).
bool clear_primary_current_profiles(const std::string& pkgname, const std::string& profile_name);
-// Decide if profile guided compilation is needed or not based on existing profiles.
+// Decides if profile guided compilation is needed or not based on existing profiles.
// The analysis is done for a single profile name (which corresponds to a single code path).
-// Returns true if there is enough information in the current profiles that makes it
-// worth to recompile the package.
-// If the return value is true all the current profiles would have been merged into
-// the reference profiles accessible with open_reference_profile().
-bool analyze_primary_profiles(uid_t uid,
- const std::string& pkgname,
- const std::string& profile_name);
+//
+// Returns PROFILES_ANALYSIS_OPTIMIZE if there is enough information in the current profiles
+// that makes it worth to recompile the package.
+// If the return value is PROFILES_ANALYSIS_OPTIMIZE all the current profiles would have been
+// merged into the reference profiles accessible with open_reference_profile().
+//
+// Return PROFILES_ANALYSIS_DONT_OPTIMIZE_SMALL_DELTA if the package should not optimize.
+// As a special case returns PROFILES_ANALYSIS_DONT_OPTIMIZE_EMPTY_PROFILES if all profiles are
+// empty.
+int analyze_primary_profiles(uid_t uid,
+ const std::string& pkgname,
+ const std::string& profile_name);
// Create a snapshot of the profile information for the given package profile.
// If appId is -1, the method creates the profile snapshot for the boot image.
@@ -104,7 +109,8 @@
const std::string& code_path,
const std::optional<std::string>& dex_metadata);
-bool delete_odex(const char* apk_path, const char* instruction_set, const char* output_path);
+// Returns the total bytes that were freed, or -1 in case of errors.
+int64_t delete_odex(const char* apk_path, const char* instruction_set, const char* output_path);
bool reconcile_secondary_dex_file(const std::string& dex_path,
const std::string& pkgname, int uid, const std::vector<std::string>& isas,
diff --git a/cmds/installd/installd_constants.h b/cmds/installd/installd_constants.h
index b5ee481..00d8441 100644
--- a/cmds/installd/installd_constants.h
+++ b/cmds/installd/installd_constants.h
@@ -77,6 +77,12 @@
constexpr int FLAG_STORAGE_DE = 1 << 0;
constexpr int FLAG_STORAGE_CE = 1 << 1;
+// TODO: import them from dexoptanalyzer.h
+// NOTE: keep in sync with Installer.java
+constexpr int PROFILES_ANALYSIS_OPTIMIZE = 1;
+constexpr int PROFILES_ANALYSIS_DONT_OPTIMIZE_SMALL_DELTA = 2;
+constexpr int PROFILES_ANALYSIS_DONT_OPTIMIZE_EMPTY_PROFILES = 3;
+
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(*(a)))
} // namespace installd
diff --git a/cmds/installd/run_dex2oat.cpp b/cmds/installd/run_dex2oat.cpp
index a27fd10..e847626 100644
--- a/cmds/installd/run_dex2oat.cpp
+++ b/cmds/installd/run_dex2oat.cpp
@@ -324,6 +324,12 @@
AddRuntimeArg(MapPropertyToArg("dalvik.vm.dex2oat-Xms", "-Xms%s"));
AddRuntimeArg(MapPropertyToArg("dalvik.vm.dex2oat-Xmx", "-Xmx%s"));
+
+ // Enable compiling dex files in isolation on low ram devices.
+ // It takes longer but reduces the memory footprint.
+ if (GetBoolProperty("ro.config.low_ram", false)) {
+ AddArg("--compile-individually");
+ }
}
void RunDex2Oat::Exec(int exit_code) {
diff --git a/cmds/installd/tests/installd_dexopt_test.cpp b/cmds/installd/tests/installd_dexopt_test.cpp
index e272025..7e7e513 100644
--- a/cmds/installd/tests/installd_dexopt_test.cpp
+++ b/cmds/installd/tests/installd_dexopt_test.cpp
@@ -38,6 +38,7 @@
#include "binder_test_utils.h"
#include "dexopt.h"
#include "InstalldNativeService.h"
+#include "installd_constants.h"
#include "globals.h"
#include "tests/test_utils.h"
#include "utils.h"
@@ -517,7 +518,8 @@
// Check the access to the compiler output.
// - speed-profile artifacts are not world-wide readable.
// - files are owned by the system uid.
- std::string odex = GetPrimaryDexArtifact(oat_dir, apk_path_, "odex");
+ std::string odex = GetPrimaryDexArtifact(oat_dir, apk_path_,
+ oat_dir == nullptr ? "dex" : "odex");
std::string vdex = GetPrimaryDexArtifact(oat_dir, apk_path_, "vdex");
std::string art = GetPrimaryDexArtifact(oat_dir, apk_path_, "art");
@@ -545,7 +547,7 @@
}
}
return android_data_dir + DALVIK_CACHE + '/' + kRuntimeIsa + "/" + path
- + "@classes.dex";
+ + "@classes." + type;
} else {
std::string::size_type name_end = dex_path.rfind('.');
std::string::size_type name_start = dex_path.rfind('/');
@@ -553,6 +555,53 @@
dex_path.substr(name_start + 1, name_end - name_start) + type;
}
}
+
+ int64_t GetSize(const std::string& path) {
+ struct stat file_stat;
+ if (stat(path.c_str(), &file_stat) == 0) {
+ return static_cast<int64_t>(file_stat.st_size);
+ }
+ PLOG(ERROR) << "Cannot stat path: " << path;
+ return -1;
+ }
+
+ void TestDeleteOdex(bool in_dalvik_cache) {
+ const char* oat_dir = in_dalvik_cache ? nullptr : app_oat_dir_.c_str();
+ CompilePrimaryDexOk(
+ "speed-profile",
+ DEXOPT_BOOTCOMPLETE | DEXOPT_PROFILE_GUIDED | DEXOPT_PUBLIC
+ | DEXOPT_GENERATE_APP_IMAGE,
+ oat_dir,
+ kTestAppGid,
+ DEX2OAT_FROM_SCRATCH,
+ /*binder_result=*/nullptr,
+ empty_dm_file_.c_str());
+
+
+ int64_t odex_size = GetSize(GetPrimaryDexArtifact(oat_dir, apk_path_,
+ in_dalvik_cache ? "dex" : "odex"));
+ int64_t vdex_size = GetSize(GetPrimaryDexArtifact(oat_dir, apk_path_, "vdex"));
+ int64_t art_size = GetSize(GetPrimaryDexArtifact(oat_dir, apk_path_, "art"));
+
+ LOG(ERROR) << "test odex " << odex_size;
+ LOG(ERROR) << "test vdex_size " << vdex_size;
+ LOG(ERROR) << "test art_size " << art_size;
+ int64_t expected_bytes_freed = odex_size + vdex_size + art_size;
+
+ int64_t bytes_freed;
+ binder::Status result = service_->deleteOdex(
+ apk_path_,
+ kRuntimeIsa,
+ in_dalvik_cache ? std::nullopt : std::make_optional<std::string>(app_oat_dir_.c_str()),
+ &bytes_freed);
+ ASSERT_TRUE(result.isOk()) << result.toString8().c_str();
+
+ ASSERT_GE(odex_size, 0);
+ ASSERT_GE(vdex_size, 0);
+ ASSERT_GE(art_size, 0);
+
+ ASSERT_EQ(expected_bytes_freed, bytes_freed);
+ }
};
@@ -701,6 +750,16 @@
empty_dm_file_.c_str());
}
+TEST_F(DexoptTest, DeleteDexoptArtifactsData) {
+ LOG(INFO) << "DeleteDexoptArtifactsData";
+ TestDeleteOdex(/*in_dalvik_cache=*/ false);
+}
+
+TEST_F(DexoptTest, DeleteDexoptArtifactsDalvikCache) {
+ LOG(INFO) << "DeleteDexoptArtifactsDalvikCache";
+ TestDeleteOdex(/*in_dalvik_cache=*/ true);
+}
+
TEST_F(DexoptTest, ResolveStartupConstStrings) {
LOG(INFO) << "DexoptDex2oatResolveStartupStrings";
const std::string property = "persist.device_config.runtime.dex2oat_resolve_startup_strings";
@@ -919,7 +978,7 @@
return;
}
- // Check that the snapshot was created witht he expected acess flags.
+ // Check that the snapshot was created with the expected access flags.
CheckFileAccess(snap_profile_, kSystemUid, kSystemGid, 0600 | S_IFREG);
// The snapshot should be equivalent to the merge of profiles.
@@ -951,19 +1010,19 @@
void mergePackageProfiles(const std::string& package_name,
const std::string& code_path,
- bool expected_result) {
- bool result;
+ int expected_result) {
+ int result;
ASSERT_BINDER_SUCCESS(service_->mergeProfiles(
kTestAppUid, package_name, code_path, &result));
ASSERT_EQ(expected_result, result);
- if (!expected_result) {
- // Do not check the files if we expect to fail.
+ // There's nothing to check if the files are empty.
+ if (result == PROFILES_ANALYSIS_DONT_OPTIMIZE_EMPTY_PROFILES) {
return;
}
- // Check that the snapshot was created witht he expected acess flags.
- CheckFileAccess(ref_profile_, kTestAppUid, kTestAppUid, 0600 | S_IFREG);
+ // Check that the snapshot was created with the expected access flags.
+ CheckFileAccess(ref_profile_, kTestAppUid, kTestAppUid, 0640 | S_IFREG);
// The snapshot should be equivalent to the merge of profiles.
std::string ref_profile_content = ref_profile_ + ".expected";
@@ -1077,7 +1136,7 @@
LOG(INFO) << "ProfileMergeOk";
SetupProfiles(/*setup_ref*/ true);
- mergePackageProfiles(package_name_, "primary.prof", /*expected_result*/ true);
+ mergePackageProfiles(package_name_, "primary.prof", PROFILES_ANALYSIS_OPTIMIZE);
}
// The reference profile is created on the fly. We need to be able to
@@ -1086,14 +1145,15 @@
LOG(INFO) << "ProfileMergeOkNoReference";
SetupProfiles(/*setup_ref*/ false);
- mergePackageProfiles(package_name_, "primary.prof", /*expected_result*/ true);
+ mergePackageProfiles(package_name_, "primary.prof", PROFILES_ANALYSIS_OPTIMIZE);
}
TEST_F(ProfileTest, ProfileMergeFailWrongPackage) {
LOG(INFO) << "ProfileMergeFailWrongPackage";
SetupProfiles(/*setup_ref*/ true);
- mergePackageProfiles("not.there", "primary.prof", /*expected_result*/ false);
+ mergePackageProfiles("not.there", "primary.prof",
+ PROFILES_ANALYSIS_DONT_OPTIMIZE_EMPTY_PROFILES);
}
TEST_F(ProfileTest, ProfileDirOk) {
diff --git a/data/etc/car_core_hardware.xml b/data/etc/car_core_hardware.xml
index adfd6e2..cc0ee82 100644
--- a/data/etc/car_core_hardware.xml
+++ b/data/etc/car_core_hardware.xml
@@ -47,12 +47,6 @@
<feature name="android.software.secure_lock_screen" />
<feature name="android.software.input_methods" />
-
- <!-- Feature to support device admins -->
- <!-- TODO(b/178412797): not fully supported yet, CTS tests are still
- failing. -->
- <feature name="android.software.device_admin" />
-
<!-- devices with GPS must include android.hardware.location.gps.xml -->
<!-- devices with an autofocus camera and/or flash must include either
android.hardware.camera.autofocus.xml or
diff --git a/include/input/Input.h b/include/input/Input.h
index d4defa8..e8678d2 100644
--- a/include/input/Input.h
+++ b/include/input/Input.h
@@ -24,6 +24,9 @@
*/
#include <android/input.h>
+#ifdef __linux__
+#include <android/os/IInputConstants.h>
+#endif
#include <math.h>
#include <stdint.h>
#include <ui/Transform.h>
@@ -219,7 +222,16 @@
POLICY_FLAG_GESTURE = 0x00000008,
POLICY_FLAG_RAW_MASK = 0x0000ffff,
+#ifdef __linux__
+ POLICY_FLAG_INPUTFILTER_TRUSTED = android::os::IInputConstants::POLICY_FLAG_INPUTFILTER_TRUSTED,
+ POLICY_FLAG_INJECTED_FROM_ACCESSIBILITY =
+ android::os::IInputConstants::POLICY_FLAG_INJECTED_FROM_ACCESSIBILITY,
+#else
+ POLICY_FLAG_INPUTFILTER_TRUSTED = 0x10000,
+
+ POLICY_FLAG_INJECTED_FROM_ACCESSIBILITY = 0x20000,
+#endif
/* These flags are set by the input dispatcher. */
// Indicates that the input event was injected.
diff --git a/include/input/InputDevice.h b/include/input/InputDevice.h
index 1fec080..1955104 100644
--- a/include/input/InputDevice.h
+++ b/include/input/InputDevice.h
@@ -257,13 +257,9 @@
return mMotionRanges;
}
- const InputDeviceSensorInfo* getSensorInfo(InputDeviceSensorType type);
+ std::vector<InputDeviceSensorInfo> getSensors();
- const std::vector<InputDeviceSensorType> getSensorTypes();
-
- const std::vector<int32_t> getLightIds();
-
- const InputDeviceLightInfo* getLightInfo(int32_t id);
+ std::vector<InputDeviceLightInfo> getLights();
private:
int32_t mId;
@@ -322,6 +318,8 @@
const std::string& name, InputDeviceConfigurationFileType type);
enum ReservedInputDeviceId : int32_t {
+ // Device id assigned to input events generated inside accessibility service
+ ACCESSIBILITY_DEVICE_ID = -2,
// Device id of a special "virtual" keyboard that is always present.
VIRTUAL_KEYBOARD_ID = -1,
// Device id of the "built-in" keyboard if there is one.
diff --git a/libs/binder/Android.bp b/libs/binder/Android.bp
index 91cd90d..ec697a0 100644
--- a/libs/binder/Android.bp
+++ b/libs/binder/Android.bp
@@ -68,8 +68,6 @@
cc_library {
name: "libbinder",
- version_script: "libbinder.map",
-
// for vndbinder
vendor_available: true,
vndk: {
@@ -135,6 +133,34 @@
enabled: false,
},
},
+ android_arm64: {
+ // b/189438896 Sampling PGO restricted to arm64, arm32 in sc-dev
+ pgo: {
+ sampling: true,
+ profile_file: "libbinder/libbinder.profdata",
+ },
+ // b/189438896 Add exported symbols in a map file for ABI stability
+ version_script: "libbinder.arm64.map",
+ target: {
+ vendor: {
+ version_script: "libbinder.arm64.vendor.map",
+ },
+ },
+ },
+ android_arm: {
+ // b/189438896 Sampling PGO restricted to arm64, arm32 in sc-dev
+ pgo: {
+ sampling: true,
+ profile_file: "libbinder/libbinder.profdata",
+ },
+ // b/189438896 Add exported symbols in a map file for ABI stability
+ version_script: "libbinder.arm32.map",
+ target: {
+ vendor: {
+ version_script: "libbinder.arm32.vendor.map",
+ },
+ },
+ },
vendor: {
exclude_srcs: libbinder_device_interface_sources,
},
@@ -206,11 +232,6 @@
"performance*",
"portability*",
],
-
- pgo: {
- sampling: true,
- profile_file: "libbinder/libbinder.profdata",
- },
}
// AIDL interface between libbinder and framework.jar
diff --git a/libs/binder/libbinder.arm32.map b/libs/binder/libbinder.arm32.map
new file mode 100644
index 0000000..64fdd91
--- /dev/null
+++ b/libs/binder/libbinder.arm32.map
@@ -0,0 +1,1615 @@
+LIBBINDER {
+ global:
+ getBinderKernelReferences;
+ kDefaultDriver;
+ _ZN7android10AllocationC1ERKNS_2spINS_12MemoryDealerEEERKNS1_INS_11IMemoryHeapEEEij;
+ _ZN7android10AllocationC2ERKNS_2spINS_12MemoryDealerEEERKNS1_INS_11IMemoryHeapEEEij;
+ _ZN7android10AllocationD0Ev;
+ _ZN7android10AllocationD1Ev;
+ _ZN7android10AllocationD2Ev;
+ _ZN7android10IInterface8asBinderEPKS0_;
+ _ZN7android10IInterface8asBinderERKNS_2spIS0_EE;
+ _ZN7android10IInterfaceC2Ev;
+ _ZN7android10IInterfaceD0Ev;
+ _ZN7android10IInterfaceD1Ev;
+ _ZN7android10IInterfaceD2Ev;
+ _ZN7android10MemoryBaseC1ERKNS_2spINS_11IMemoryHeapEEEij;
+ _ZN7android10MemoryBaseC2ERKNS_2spINS_11IMemoryHeapEEEij;
+ _ZN7android10MemoryBaseD0Ev;
+ _ZN7android10MemoryBaseD1Ev;
+ _ZN7android10MemoryBaseD2Ev;
+ _ZN7android10RpcAddress14readFromParcelERKNS_6ParcelE;
+ _ZN7android10RpcAddress15fromRawEmbeddedEPKNS_14RpcWireAddressE;
+ _ZN7android10RpcAddress4zeroEv;
+ _ZN7android10RpcAddress6uniqueEv;
+ _ZN7android10RpcAddressC1Ev;
+ _ZN7android10RpcAddressC2Ev;
+ _ZN7android10RpcAddressD1Ev;
+ _ZN7android10RpcAddressD2Ev;
+ _ZN7android10RpcSession12setForServerERKNS_2wpINS_9RpcServerEEEi;
+ _ZN7android10RpcSession13getRootObjectEv;
+ _ZN7android10RpcSession13sendDecStrongERKNS_10RpcAddressE;
+ _ZN7android10RpcSession15setupInetClientEPKcj;
+ _ZN7android10RpcSession15terminateLockedEv;
+ _ZN7android10RpcSession16setupVsockClientEjj;
+ _ZN7android10RpcSession17setupSocketClientERKNS_16RpcSocketAddressE;
+ _ZN7android10RpcSession19addClientConnectionENS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZN7android10RpcSession19ExclusiveConnection14findConnectionEiPNS_2spINS0_13RpcConnectionEEES5_RNSt3__16vectorIS4_NS6_9allocatorIS4_EEEEj;
+ _ZN7android10RpcSession19ExclusiveConnectionC1ERKNS_2spIS0_EENS0_13ConnectionUseE;
+ _ZN7android10RpcSession19ExclusiveConnectionC2ERKNS_2spIS0_EENS0_13ConnectionUseE;
+ _ZN7android10RpcSession19ExclusiveConnectionD1Ev;
+ _ZN7android10RpcSession19ExclusiveConnectionD2Ev;
+ _ZN7android10RpcSession19getRemoteMaxThreadsEPj;
+ _ZN7android10RpcSession20setupOneSocketClientERKNS_16RpcSocketAddressEi;
+ _ZN7android10RpcSession21setupUnixDomainClientEPKc;
+ _ZN7android10RpcSession22addNullDebuggingClientEv;
+ _ZN7android10RpcSession22removeServerConnectionERKNS_2spINS0_13RpcConnectionEEE;
+ _ZN7android10RpcSession24assignServerToThisThreadENS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZN7android10RpcSession4joinENS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZN7android10RpcSession4makeEv;
+ _ZN7android10RpcSession6readIdEv;
+ _ZN7android10RpcSession6serverEv;
+ _ZN7android10RpcSession7preJoinENSt3__16threadE;
+ _ZN7android10RpcSession8transactERKNS_10RpcAddressEjRKNS_6ParcelEPS4_j;
+ _ZN7android10RpcSessionC1Ev;
+ _ZN7android10RpcSessionC2Ev;
+ _ZN7android10RpcSessionD0Ev;
+ _ZN7android10RpcSessionD1Ev;
+ _ZN7android10RpcSessionD2Ev;
+ _ZN7android10TextOutputC2Ev;
+ _ZN7android10TextOutputD0Ev;
+ _ZN7android10TextOutputD1Ev;
+ _ZN7android10TextOutputD2Ev;
+ _ZN7android10zeroMemoryEPhj;
+ _ZN7android11BnInterfaceINS_11IMemoryHeapEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_14IShellCallbackEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_15IResultReceiverEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_21IPermissionControllerEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_2os15IClientCallbackEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_2os15IServiceManagerEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_2os16IServiceCallbackEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_7content2pm21IPackageManagerNativeEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_7content2pm22IPackageChangeObserverEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_7IMemoryEE10onAsBinderEv;
+ _ZN7android11IMemoryHeap10descriptorE;
+ _ZN7android11IMemoryHeap11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android11IMemoryHeap12default_implE;
+ _ZN7android11IMemoryHeap14getDefaultImplEv;
+ _ZN7android11IMemoryHeap14setDefaultImplENSt3__110unique_ptrIS0_NS1_14default_deleteIS0_EEEE;
+ _ZN7android11IMemoryHeapC2Ev;
+ _ZN7android11IMemoryHeapD0Ev;
+ _ZN7android11IMemoryHeapD1Ev;
+ _ZN7android11IMemoryHeapD2Ev;
+ _ZN7android12BnMemoryHeap10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZN7android12BnMemoryHeapC2Ev;
+ _ZN7android12BnMemoryHeapD0Ev;
+ _ZN7android12BnMemoryHeapD1Ev;
+ _ZN7android12BnMemoryHeapD2Ev;
+ _ZN7android12BpMemoryHeapC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android12BpMemoryHeapC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android12BpMemoryHeapD0Ev;
+ _ZN7android12BpMemoryHeapD1Ev;
+ _ZN7android12BpMemoryHeapD2Ev;
+ _ZN7android12gTextBuffersE;
+ _ZN7android12MemoryDealer10deallocateEj;
+ _ZN7android12MemoryDealer22getAllocationAlignmentEv;
+ _ZN7android12MemoryDealer8allocateEj;
+ _ZN7android12MemoryDealerC1EjPKcj;
+ _ZN7android12MemoryDealerC2EjPKcj;
+ _ZN7android12MemoryDealerD0Ev;
+ _ZN7android12MemoryDealerD1Ev;
+ _ZN7android12MemoryDealerD2Ev;
+ _ZN7android12printHexDataEiPKvjjijbPFvPvPKcES2_;
+ _ZN7android12ProcessState10selfOrNullEv;
+ _ZN7android12ProcessState13expungeHandleEiPNS_7IBinderE;
+ _ZN7android12ProcessState13getDriverNameEv;
+ _ZN7android12ProcessState14initWithDriverEPKc;
+ _ZN7android12ProcessState15startThreadPoolEv;
+ _ZN7android12ProcessState16getContextObjectERKNS_2spINS_7IBinderEEE;
+ _ZN7android12ProcessState17spawnPooledThreadEb;
+ _ZN7android12ProcessState18giveThreadPoolNameEv;
+ _ZN7android12ProcessState18lookupHandleLockedEi;
+ _ZN7android12ProcessState18setCallRestrictionENS0_15CallRestrictionE;
+ _ZN7android12ProcessState19getKernelReferencesEjPj;
+ _ZN7android12ProcessState20becomeContextManagerEv;
+ _ZN7android12ProcessState20makeBinderThreadNameEv;
+ _ZN7android12ProcessState23getStrongProxyForHandleEi;
+ _ZN7android12ProcessState24getStrongRefCountForNodeERKNS_2spINS_8BpBinderEEE;
+ _ZN7android12ProcessState25enableOnewaySpamDetectionEb;
+ _ZN7android12ProcessState27setThreadPoolMaxThreadCountEj;
+ _ZN7android12ProcessState4initEPKcb;
+ _ZN7android12ProcessState4selfEv;
+ _ZN7android12ProcessStateC1EPKc;
+ _ZN7android12ProcessStateC2EPKc;
+ _ZN7android12ProcessStateD0Ev;
+ _ZN7android12ProcessStateD1Ev;
+ _ZN7android12ProcessStateD2Ev;
+ _ZN7android13printTypeCodeEjPFvPvPKcES0_;
+ _ZN7android14IPCThreadState10freeBufferEPNS_6ParcelEPKhjPKyj;
+ _ZN7android14IPCThreadState10selfOrNullEv;
+ _ZN7android14IPCThreadState11clearCallerEv;
+ _ZN7android14IPCThreadState11stopProcessEb;
+ _ZN7android14IPCThreadState12setupPollingEPi;
+ _ZN7android14IPCThreadState13decWeakHandleEi;
+ _ZN7android14IPCThreadState13expungeHandleEiPNS_7IBinderE;
+ _ZN7android14IPCThreadState13flushCommandsEv;
+ _ZN7android14IPCThreadState13flushIfNeededEv;
+ _ZN7android14IPCThreadState13incWeakHandleEiPNS_8BpBinderE;
+ _ZN7android14IPCThreadState14clearLastErrorEv;
+ _ZN7android14IPCThreadState14executeCommandEi;
+ _ZN7android14IPCThreadState14joinThreadPoolEb;
+ _ZN7android14IPCThreadState14talkWithDriverEb;
+ _ZN7android14IPCThreadState15decStrongHandleEi;
+ _ZN7android14IPCThreadState15incStrongHandleEiPNS_8BpBinderE;
+ _ZN7android14IPCThreadState15waitForResponseEPNS_6ParcelEPi;
+ _ZN7android14IPCThreadState16threadDestructorEPv;
+ _ZN7android14IPCThreadState18setCallRestrictionENS_12ProcessState15CallRestrictionE;
+ _ZN7android14IPCThreadState19setStrictModePolicyEi;
+ _ZN7android14IPCThreadState19setTheContextObjectERKNS_2spINS_7BBinderEEE;
+ _ZN7android14IPCThreadState20clearCallingIdentityEv;
+ _ZN7android14IPCThreadState20getAndExecuteCommandEv;
+ _ZN7android14IPCThreadState20getProcessFreezeInfoEiPbS1_;
+ _ZN7android14IPCThreadState20handlePolledCommandsEv;
+ _ZN7android14IPCThreadState20processPendingDerefsEv;
+ _ZN7android14IPCThreadState20writeTransactionDataEijijRKNS_6ParcelEPi;
+ _ZN7android14IPCThreadState22attemptIncStrongHandleEi;
+ _ZN7android14IPCThreadState22clearCallingWorkSourceEv;
+ _ZN7android14IPCThreadState22clearDeathNotificationEiPNS_8BpBinderE;
+ _ZN7android14IPCThreadState22processPostWriteDerefsEv;
+ _ZN7android14IPCThreadState22restoreCallingIdentityEx;
+ _ZN7android14IPCThreadState23setCallingWorkSourceUidEj;
+ _ZN7android14IPCThreadState24clearPropagateWorkSourceEv;
+ _ZN7android14IPCThreadState24requestDeathNotificationEiPNS_8BpBinderE;
+ _ZN7android14IPCThreadState24restoreCallingWorkSourceEx;
+ _ZN7android14IPCThreadState25blockUntilThreadAvailableEv;
+ _ZN7android14IPCThreadState27disableBackgroundSchedulingEb;
+ _ZN7android14IPCThreadState28backgroundSchedulingDisabledEv;
+ _ZN7android14IPCThreadState29setLastTransactionBinderFlagsEi;
+ _ZN7android14IPCThreadState41setCallingWorkSourceUidWithoutPropagationEj;
+ _ZN7android14IPCThreadState4selfEv;
+ _ZN7android14IPCThreadState6freezeEibj;
+ _ZN7android14IPCThreadState7processEv;
+ _ZN7android14IPCThreadState8shutdownEv;
+ _ZN7android14IPCThreadState8transactEijRKNS_6ParcelEPS1_j;
+ _ZN7android14IPCThreadState9sendReplyERKNS_6ParcelEj;
+ _ZN7android14IPCThreadStateC1Ev;
+ _ZN7android14IPCThreadStateC2Ev;
+ _ZN7android14IPCThreadStateD1Ev;
+ _ZN7android14IPCThreadStateD2Ev;
+ _ZN7android14IShellCallback10descriptorE;
+ _ZN7android14IShellCallback11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android14IShellCallback12default_implE;
+ _ZN7android14IShellCallback14getDefaultImplEv;
+ _ZN7android14IShellCallback14setDefaultImplENSt3__110unique_ptrIS0_NS1_14default_deleteIS0_EEEE;
+ _ZN7android14IShellCallbackC2Ev;
+ _ZN7android14IShellCallbackD0Ev;
+ _ZN7android14IShellCallbackD1Ev;
+ _ZN7android14IShellCallbackD2Ev;
+ _ZN7android14MemoryHeapBase4initEiPvjiPKc;
+ _ZN7android14MemoryHeapBase5mapfdEibjl;
+ _ZN7android14MemoryHeapBase7disposeEv;
+ _ZN7android14MemoryHeapBaseC1Eijjl;
+ _ZN7android14MemoryHeapBaseC1EjjPKc;
+ _ZN7android14MemoryHeapBaseC1EPKcjj;
+ _ZN7android14MemoryHeapBaseC1Ev;
+ _ZN7android14MemoryHeapBaseC2Eijjl;
+ _ZN7android14MemoryHeapBaseC2EjjPKc;
+ _ZN7android14MemoryHeapBaseC2EPKcjj;
+ _ZN7android14MemoryHeapBaseC2Ev;
+ _ZN7android14MemoryHeapBaseD0Ev;
+ _ZN7android14MemoryHeapBaseD1Ev;
+ _ZN7android14MemoryHeapBaseD2Ev;
+ _ZN7android15BnShellCallback10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZN7android15checkPermissionERKNS_8String16Eij;
+ _ZN7android15IResultReceiver10descriptorE;
+ _ZN7android15IResultReceiver11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android15IResultReceiver12default_implE;
+ _ZN7android15IResultReceiver14getDefaultImplEv;
+ _ZN7android15IResultReceiver14setDefaultImplENSt3__110unique_ptrIS0_NS1_14default_deleteIS0_EEEE;
+ _ZN7android15IResultReceiverC2Ev;
+ _ZN7android15IResultReceiverD0Ev;
+ _ZN7android15IResultReceiverD1Ev;
+ _ZN7android15IResultReceiverD2Ev;
+ _ZN7android15IServiceManagerC2Ev;
+ _ZN7android15IServiceManagerD0Ev;
+ _ZN7android15IServiceManagerD1Ev;
+ _ZN7android15IServiceManagerD2Ev;
+ _ZN7android15PermissionCache10purgeCacheEv;
+ _ZN7android15PermissionCache15checkPermissionERKNS_8String16Eij;
+ _ZN7android15PermissionCache22checkCallingPermissionERKNS_8String16E;
+ _ZN7android15PermissionCache22checkCallingPermissionERKNS_8String16EPiS4_;
+ _ZN7android15PermissionCache5cacheERKNS_8String16Ejb;
+ _ZN7android15PermissionCache5purgeEv;
+ _ZN7android15PermissionCacheC1Ev;
+ _ZN7android15PermissionCacheC2Ev;
+ _ZN7android15stringForIndentEi;
+ _ZN7android16BnResultReceiver10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZN7android18BufferedTextOutput10moveIndentEi;
+ _ZN7android18BufferedTextOutput10pushBundleEv;
+ _ZN7android18BufferedTextOutput5printEPKcj;
+ _ZN7android18BufferedTextOutput9popBundleEv;
+ _ZN7android18BufferedTextOutputC2Ej;
+ _ZN7android18BufferedTextOutputD0Ev;
+ _ZN7android18BufferedTextOutputD1Ev;
+ _ZN7android18BufferedTextOutputD2Ev;
+ _ZN7android18ServiceManagerShim10addServiceERKNS_8String16ERKNS_2spINS_7IBinderEEEbi;
+ _ZN7android18ServiceManagerShim10isDeclaredERKNS_8String16E;
+ _ZN7android18ServiceManagerShim12listServicesEi;
+ _ZN7android18ServiceManagerShim14waitForServiceERKNS_8String16E;
+ _ZN7android18ServiceManagerShim16updatableViaApexERKNS_8String16E;
+ _ZN7android18ServiceManagerShim20getDeclaredInstancesERKNS_8String16E;
+ _ZN7android18ServiceManagerShimC1ERKNS_2spINS_2os15IServiceManagerEEE;
+ _ZN7android18ServiceManagerShimC2ERKNS_2spINS_2os15IServiceManagerEEE;
+ _ZN7android18the_context_objectE;
+ _ZN7android20PermissionController10getServiceEv;
+ _ZN7android20PermissionController13getPackageUidERKNS_8String16Ei;
+ _ZN7android20PermissionController15checkPermissionERKNS_8String16Eii;
+ _ZN7android20PermissionController17getPackagesForUidEjRNS_6VectorINS_8String16EEE;
+ _ZN7android20PermissionController19isRuntimePermissionERKNS_8String16E;
+ _ZN7android20PermissionController6noteOpERKNS_8String16EiS3_;
+ _ZN7android20PermissionControllerC1Ev;
+ _ZN7android20PermissionControllerC2Ev;
+ _ZN7android21defaultServiceManagerEv;
+ _ZN7android21IPermissionController10descriptorE;
+ _ZN7android21IPermissionController11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android21IPermissionController12default_implE;
+ _ZN7android21IPermissionController14getDefaultImplEv;
+ _ZN7android21IPermissionController14setDefaultImplENSt3__110unique_ptrIS0_NS1_14default_deleteIS0_EEEE;
+ _ZN7android21IPermissionControllerC2Ev;
+ _ZN7android21IPermissionControllerD0Ev;
+ _ZN7android21IPermissionControllerD1Ev;
+ _ZN7android21IPermissionControllerD2Ev;
+ _ZN7android22BnPermissionController10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZN7android22checkCallingPermissionERKNS_8String16E;
+ _ZN7android22checkCallingPermissionERKNS_8String16EPiS3_;
+ _ZN7android22SimpleBestFitAllocator10deallocateEj;
+ _ZN7android22SimpleBestFitAllocator12kMemoryAlignE;
+ _ZN7android22SimpleBestFitAllocator5allocEjj;
+ _ZN7android22SimpleBestFitAllocator7deallocEj;
+ _ZN7android22SimpleBestFitAllocator8allocateEjj;
+ _ZN7android22SimpleBestFitAllocatorC1Ej;
+ _ZN7android22SimpleBestFitAllocatorC2Ej;
+ _ZN7android22SimpleBestFitAllocatorD1Ev;
+ _ZN7android22SimpleBestFitAllocatorD2Ev;
+ _ZN7android24setDefaultServiceManagerERKNS_2spINS_15IServiceManagerEEE;
+ _ZN7android2os15IClientCallback10descriptorE;
+ _ZN7android2os15IClientCallback11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os15IClientCallback12default_implE;
+ _ZN7android2os15IClientCallback14getDefaultImplEv;
+ _ZN7android2os15IClientCallback14setDefaultImplENSt3__110unique_ptrIS1_NS2_14default_deleteIS1_EEEE;
+ _ZN7android2os15IClientCallbackC2Ev;
+ _ZN7android2os15IClientCallbackD0Ev;
+ _ZN7android2os15IClientCallbackD1Ev;
+ _ZN7android2os15IClientCallbackD2Ev;
+ _ZN7android2os15IServiceManager10descriptorE;
+ _ZN7android2os15IServiceManager11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os15IServiceManager12default_implE;
+ _ZN7android2os15IServiceManager14getDefaultImplEv;
+ _ZN7android2os15IServiceManager14setDefaultImplENSt3__110unique_ptrIS1_NS2_14default_deleteIS1_EEEE;
+ _ZN7android2os15IServiceManagerC2Ev;
+ _ZN7android2os15IServiceManagerD0Ev;
+ _ZN7android2os15IServiceManagerD1Ev;
+ _ZN7android2os15IServiceManagerD2Ev;
+ _ZN7android2os16BnClientCallback10onTransactEjRKNS_6ParcelEPS2_j;
+ _ZN7android2os16BnClientCallbackC2Ev;
+ _ZN7android2os16BnServiceManager10onTransactEjRKNS_6ParcelEPS2_j;
+ _ZN7android2os16BnServiceManagerC2Ev;
+ _ZN7android2os16BpClientCallback9onClientsERKNS_2spINS_7IBinderEEEb;
+ _ZN7android2os16BpClientCallbackC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os16BpClientCallbackC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os16BpServiceManager10addServiceERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS_7IBinderEEEbi;
+ _ZN7android2os16BpServiceManager10getServiceERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPNS_2spINS_7IBinderEEE;
+ _ZN7android2os16BpServiceManager10isDeclaredERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPb;
+ _ZN7android2os16BpServiceManager12checkServiceERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPNS_2spINS_7IBinderEEE;
+ _ZN7android2os16BpServiceManager12listServicesEiPNSt3__16vectorINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS7_IS9_EEEE;
+ _ZN7android2os16BpServiceManager16updatableViaApexERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPNS2_8optionalIS8_EE;
+ _ZN7android2os16BpServiceManager19getServiceDebugInfoEPNSt3__16vectorINS0_16ServiceDebugInfoENS2_9allocatorIS4_EEEE;
+ _ZN7android2os16BpServiceManager20getDeclaredInstancesERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPNS2_6vectorIS8_NS6_IS8_EEEE;
+ _ZN7android2os16BpServiceManager20tryUnregisterServiceERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os16BpServiceManager22registerClientCallbackERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS_7IBinderEEERKNSB_INS0_15IClientCallbackEEE;
+ _ZN7android2os16BpServiceManager24registerForNotificationsERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS0_16IServiceCallbackEEE;
+ _ZN7android2os16BpServiceManager26unregisterForNotificationsERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS0_16IServiceCallbackEEE;
+ _ZN7android2os16BpServiceManagerC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os16BpServiceManagerC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os16IServiceCallback10descriptorE;
+ _ZN7android2os16IServiceCallback11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os16IServiceCallback12default_implE;
+ _ZN7android2os16IServiceCallback14getDefaultImplEv;
+ _ZN7android2os16IServiceCallback14setDefaultImplENSt3__110unique_ptrIS1_NS2_14default_deleteIS1_EEEE;
+ _ZN7android2os16IServiceCallbackC2Ev;
+ _ZN7android2os16IServiceCallbackD0Ev;
+ _ZN7android2os16IServiceCallbackD1Ev;
+ _ZN7android2os16IServiceCallbackD2Ev;
+ _ZN7android2os16ParcelableHolder14readFromParcelEPKNS_6ParcelE;
+ _ZN7android2os16ServiceDebugInfo14readFromParcelEPKNS_6ParcelE;
+ _ZN7android2os17BnServiceCallback10onTransactEjRKNS_6ParcelEPS2_j;
+ _ZN7android2os17BnServiceCallbackC2Ev;
+ _ZN7android2os17BpServiceCallback14onRegistrationERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os17BpServiceCallbackC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os17BpServiceCallbackC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os17PersistableBundle10putBooleanERKNS_8String16Eb;
+ _ZN7android2os17PersistableBundle12putIntVectorERKNS_8String16ERKNSt3__16vectorIiNS5_9allocatorIiEEEE;
+ _ZN7android2os17PersistableBundle13putLongVectorERKNS_8String16ERKNSt3__16vectorIxNS5_9allocatorIxEEEE;
+ _ZN7android2os17PersistableBundle14readFromParcelEPKNS_6ParcelE;
+ _ZN7android2os17PersistableBundle15putDoubleVectorERKNS_8String16ERKNSt3__16vectorIdNS5_9allocatorIdEEEE;
+ _ZN7android2os17PersistableBundle15putStringVectorERKNS_8String16ERKNSt3__16vectorIS2_NS5_9allocatorIS2_EEEE;
+ _ZN7android2os17PersistableBundle16putBooleanVectorERKNS_8String16ERKNSt3__16vectorIbNS5_9allocatorIbEEEE;
+ _ZN7android2os17PersistableBundle19readFromParcelInnerEPKNS_6ParcelEj;
+ _ZN7android2os17PersistableBundle20putPersistableBundleERKNS_8String16ERKS1_;
+ _ZN7android2os17PersistableBundle5eraseERKNS_8String16E;
+ _ZN7android2os17PersistableBundle6putIntERKNS_8String16Ei;
+ _ZN7android2os17PersistableBundle7putLongERKNS_8String16Ex;
+ _ZN7android2os17PersistableBundle9putDoubleERKNS_8String16Ed;
+ _ZN7android2os17PersistableBundle9putStringERKNS_8String16ES4_;
+ _ZN7android2os20ParcelFileDescriptor14readFromParcelEPKNS_6ParcelE;
+ _ZN7android2os20ParcelFileDescriptorC1ENS_4base14unique_fd_implINS2_13DefaultCloserEEE;
+ _ZN7android2os20ParcelFileDescriptorC1Ev;
+ _ZN7android2os20ParcelFileDescriptorC2ENS_4base14unique_fd_implINS2_13DefaultCloserEEE;
+ _ZN7android2os20ParcelFileDescriptorC2Ev;
+ _ZN7android2os20ParcelFileDescriptorD0Ev;
+ _ZN7android2os20ParcelFileDescriptorD1Ev;
+ _ZN7android2os20ParcelFileDescriptorD2Ev;
+ _ZN7android2spINS_21IPermissionControllerEED2Ev;
+ _ZN7android2spINS_7BBinderEED2Ev;
+ _ZN7android2spINS_7IBinderEEaSEOS2_;
+ _ZN7android2spINS_7IBinderEEaSERKS2_;
+ _ZN7android2spINS_9HeapCacheEED2Ev;
+ _ZN7android4aerrE;
+ _ZN7android4alogE;
+ _ZN7android4aoutE;
+ _ZN7android6binder20LazyServiceRegistrar10reRegisterEv;
+ _ZN7android6binder20LazyServiceRegistrar11getInstanceEv;
+ _ZN7android6binder20LazyServiceRegistrar12forcePersistEb;
+ _ZN7android6binder20LazyServiceRegistrar13tryUnregisterEv;
+ _ZN7android6binder20LazyServiceRegistrar15registerServiceERKNS_2spINS_7IBinderEEERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEEbi;
+ _ZN7android6binder20LazyServiceRegistrar25setActiveServicesCallbackERKNSt3__18functionIFbbEEE;
+ _ZN7android6binder20LazyServiceRegistrarC1Ev;
+ _ZN7android6binder20LazyServiceRegistrarC2Ev;
+ _ZN7android6binder6Status11fromStatusTEi;
+ _ZN7android6binder6Status12setExceptionEiRKNS_7String8E;
+ _ZN7android6binder6Status14readFromParcelERKNS_6ParcelE;
+ _ZN7android6binder6Status14setFromStatusTEi;
+ _ZN7android6binder6Status17exceptionToStringEi;
+ _ZN7android6binder6Status17fromExceptionCodeEi;
+ _ZN7android6binder6Status17fromExceptionCodeEiPKc;
+ _ZN7android6binder6Status17fromExceptionCodeEiRKNS_7String8E;
+ _ZN7android6binder6Status23setServiceSpecificErrorEiRKNS_7String8E;
+ _ZN7android6binder6Status24fromServiceSpecificErrorEi;
+ _ZN7android6binder6Status24fromServiceSpecificErrorEiPKc;
+ _ZN7android6binder6Status24fromServiceSpecificErrorEiRKNS_7String8E;
+ _ZN7android6binder6Status2okEv;
+ _ZN7android6binder6StatusC1Eii;
+ _ZN7android6binder6StatusC1EiiRKNS_7String8E;
+ _ZN7android6binder6StatusC2Eii;
+ _ZN7android6binder6StatusC2EiiRKNS_7String8E;
+ _ZN7android6binder8internal21ClientCounterCallback10reRegisterEv;
+ _ZN7android6binder8internal21ClientCounterCallback12forcePersistEb;
+ _ZN7android6binder8internal21ClientCounterCallback13tryUnregisterEv;
+ _ZN7android6binder8internal21ClientCounterCallback15registerServiceERKNS_2spINS_7IBinderEEERKNSt3__112basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEEbi;
+ _ZN7android6binder8internal21ClientCounterCallback25setActiveServicesCallbackERKNSt3__18functionIFbbEEE;
+ _ZN7android6binder8internal21ClientCounterCallbackC1Ev;
+ _ZN7android6binder8internal21ClientCounterCallbackC2Ev;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl10reRegisterEv;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl11tryShutdownEv;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl12forcePersistEb;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl13tryUnregisterEv;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl15registerServiceERKNS_2spINS_7IBinderEEERKNSt3__112basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEEbi;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl16maybeTryShutdownEv;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl23assertRegisteredServiceERKNS_2spINS_7IBinderEEE;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl25setActiveServicesCallbackERKNSt3__18functionIFbbEEE;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl9onClientsERKNS_2spINS_7IBinderEEEb;
+ _ZN7android6Parcel10appendFromEPKS0_jj;
+ _ZN7android6Parcel10markForRpcERKNS_2spINS_10RpcSessionEEE;
+ _ZN7android6Parcel10writeFloatEf;
+ _ZN7android6Parcel10writeInt32Ei;
+ _ZN7android6Parcel10writeInt64Ex;
+ _ZN7android6Parcel11compareDataERKS0_;
+ _ZN7android6Parcel11finishWriteEj;
+ _ZN7android6Parcel11setDataSizeEj;
+ _ZN7android6Parcel11writeDoubleEd;
+ _ZN7android6Parcel11writeObjectERK18flat_binder_objectb;
+ _ZN7android6Parcel11writeUint32Ej;
+ _ZN7android6Parcel11writeUint64Ey;
+ _ZN7android6Parcel12pushAllowFdsEb;
+ _ZN7android6Parcel12restartWriteEj;
+ _ZN7android6Parcel12writeCStringEPKc;
+ _ZN7android6Parcel12writeInplaceEj;
+ _ZN7android6Parcel12writePointerEj;
+ _ZN7android6Parcel12writeString8EPKcj;
+ _ZN7android6Parcel12writeString8ERKNS_7String8E;
+ _ZN7android6Parcel13continueWriteEj;
+ _ZN7android6Parcel13flattenBinderERKNS_2spINS_7IBinderEEE;
+ _ZN7android6Parcel13markForBinderERKNS_2spINS_7IBinderEEE;
+ _ZN7android6Parcel13writeString16EPKDsj;
+ _ZN7android6Parcel13writeString16ERKNS_8String16E;
+ _ZN7android6Parcel13writeString16ERKNSt3__110unique_ptrINS_8String16ENS1_14default_deleteIS3_EEEE;
+ _ZN7android6Parcel13writeString16ERKNSt3__18optionalINS_8String16EEE;
+ _ZN7android6Parcel13writeUnpaddedEPKvj;
+ _ZN7android6Parcel14acquireObjectsEv;
+ _ZN7android6Parcel14freeDataNoInitEv;
+ _ZN7android6Parcel14releaseObjectsEv;
+ _ZN7android6Parcel14writeByteArrayEjPKh;
+ _ZN7android6Parcel15restoreAllowFdsEb;
+ _ZN7android6Parcel15setDataCapacityEj;
+ _ZN7android6Parcel15writeBoolVectorERKNSt3__110unique_ptrINS1_6vectorIbNS1_9allocatorIbEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel15writeBoolVectorERKNSt3__16vectorIbNS1_9allocatorIbEEEE;
+ _ZN7android6Parcel15writeBoolVectorERKNSt3__18optionalINS1_6vectorIbNS1_9allocatorIbEEEEEE;
+ _ZN7android6Parcel15writeByteVectorERKNSt3__110unique_ptrINS1_6vectorIaNS1_9allocatorIaEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel15writeByteVectorERKNSt3__110unique_ptrINS1_6vectorIhNS1_9allocatorIhEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel15writeByteVectorERKNSt3__16vectorIaNS1_9allocatorIaEEEE;
+ _ZN7android6Parcel15writeByteVectorERKNSt3__16vectorIhNS1_9allocatorIhEEEE;
+ _ZN7android6Parcel15writeByteVectorERKNSt3__18optionalINS1_6vectorIaNS1_9allocatorIaEEEEEE;
+ _ZN7android6Parcel15writeByteVectorERKNSt3__18optionalINS1_6vectorIhNS1_9allocatorIhEEEEEE;
+ _ZN7android6Parcel15writeCharVectorERKNSt3__110unique_ptrINS1_6vectorIDsNS1_9allocatorIDsEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel15writeCharVectorERKNSt3__16vectorIDsNS1_9allocatorIDsEEEE;
+ _ZN7android6Parcel15writeCharVectorERKNSt3__18optionalINS1_6vectorIDsNS1_9allocatorIDsEEEEEE;
+ _ZN7android6Parcel15writeInt32ArrayEjPKi;
+ _ZN7android6Parcel15writeParcelableERKNS_10ParcelableE;
+ _ZN7android6Parcel16writeFloatVectorERKNSt3__110unique_ptrINS1_6vectorIfNS1_9allocatorIfEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel16writeFloatVectorERKNSt3__16vectorIfNS1_9allocatorIfEEEE;
+ _ZN7android6Parcel16writeFloatVectorERKNSt3__18optionalINS1_6vectorIfNS1_9allocatorIfEEEEEE;
+ _ZN7android6Parcel16writeInt32VectorERKNSt3__110unique_ptrINS1_6vectorIiNS1_9allocatorIiEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel16writeInt32VectorERKNSt3__16vectorIiNS1_9allocatorIiEEEE;
+ _ZN7android6Parcel16writeInt32VectorERKNSt3__18optionalINS1_6vectorIiNS1_9allocatorIiEEEEEE;
+ _ZN7android6Parcel16writeInt64VectorERKNSt3__110unique_ptrINS1_6vectorIxNS1_9allocatorIxEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel16writeInt64VectorERKNSt3__16vectorIxNS1_9allocatorIxEEEE;
+ _ZN7android6Parcel16writeInt64VectorERKNSt3__18optionalINS1_6vectorIxNS1_9allocatorIxEEEEEE;
+ _ZN7android6Parcel16writeNoExceptionEv;
+ _ZN7android6Parcel16writeUtf8AsUtf16ERKNSt3__110unique_ptrINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS1_14default_deleteIS8_EEEE;
+ _ZN7android6Parcel16writeUtf8AsUtf16ERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE;
+ _ZN7android6Parcel16writeUtf8AsUtf16ERKNSt3__18optionalINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEE;
+ _ZN7android6Parcel17writeDoubleVectorERKNSt3__110unique_ptrINS1_6vectorIdNS1_9allocatorIdEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel17writeDoubleVectorERKNSt3__16vectorIdNS1_9allocatorIdEEEE;
+ _ZN7android6Parcel17writeDoubleVectorERKNSt3__18optionalINS1_6vectorIdNS1_9allocatorIdEEEEEE;
+ _ZN7android6Parcel17writeNativeHandleEPK13native_handle;
+ _ZN7android6Parcel17writeStrongBinderERKNS_2spINS_7IBinderEEE;
+ _ZN7android6Parcel17writeUint64VectorERKNSt3__110unique_ptrINS1_6vectorIyNS1_9allocatorIyEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel17writeUint64VectorERKNSt3__16vectorIyNS1_9allocatorIyEEEE;
+ _ZN7android6Parcel17writeUint64VectorERKNSt3__18optionalINS1_6vectorIyNS1_9allocatorIyEEEEEE;
+ _ZN7android6Parcel18getGlobalAllocSizeEv;
+ _ZN7android6Parcel19finishFlattenBinderERKNS_2spINS_7IBinderEEE;
+ _ZN7android6Parcel19getGlobalAllocCountEv;
+ _ZN7android6Parcel19ipcSetDataReferenceEPKhjPKyjPFvPS0_S2_jS4_jE;
+ _ZN7android6Parcel19writeFileDescriptorEib;
+ _ZN7android6Parcel19writeInterfaceTokenEPKDsj;
+ _ZN7android6Parcel19writeInterfaceTokenERKNS_8String16E;
+ _ZN7android6Parcel19writeString16VectorERKNSt3__110unique_ptrINS1_6vectorINS2_INS_8String16ENS1_14default_deleteIS4_EEEENS1_9allocatorIS7_EEEENS5_ISA_EEEE;
+ _ZN7android6Parcel19writeString16VectorERKNSt3__16vectorINS_8String16ENS1_9allocatorIS3_EEEE;
+ _ZN7android6Parcel19writeString16VectorERKNSt3__18optionalINS1_6vectorINS2_INS_8String16EEENS1_9allocatorIS5_EEEEEE;
+ _ZN7android6Parcel20closeFileDescriptorsEv;
+ _ZN7android6Parcel22writeDupFileDescriptorEi;
+ _ZN7android6Parcel23writeStrongBinderVectorERKNSt3__110unique_ptrINS1_6vectorINS_2spINS_7IBinderEEENS1_9allocatorIS6_EEEENS1_14default_deleteIS9_EEEE;
+ _ZN7android6Parcel23writeStrongBinderVectorERKNSt3__16vectorINS_2spINS_7IBinderEEENS1_9allocatorIS5_EEEE;
+ _ZN7android6Parcel23writeStrongBinderVectorERKNSt3__18optionalINS1_6vectorINS_2spINS_7IBinderEEENS1_9allocatorIS6_EEEEEE;
+ _ZN7android6Parcel25writeParcelFileDescriptorEib;
+ _ZN7android6Parcel25writeUniqueFileDescriptorERKNS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZN7android6Parcel26writeRawNullableParcelableEPKNS_10ParcelableE;
+ _ZN7android6Parcel27replaceCallingWorkSourceUidEj;
+ _ZN7android6Parcel28writeDupParcelFileDescriptorEi;
+ _ZN7android6Parcel28writeUtf8VectorAsUtf16VectorERKNSt3__110unique_ptrINS1_6vectorINS2_INS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS1_14default_deleteIS9_EEEENS7_ISC_EEEENSA_ISE_EEEE;
+ _ZN7android6Parcel28writeUtf8VectorAsUtf16VectorERKNSt3__16vectorINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS6_IS8_EEEE;
+ _ZN7android6Parcel28writeUtf8VectorAsUtf16VectorERKNSt3__18optionalINS1_6vectorINS2_INS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEENS7_ISA_EEEEEE;
+ _ZN7android6Parcel31writeUniqueFileDescriptorVectorERKNSt3__110unique_ptrINS1_6vectorINS_4base14unique_fd_implINS4_13DefaultCloserEEENS1_9allocatorIS7_EEEENS1_14default_deleteISA_EEEE;
+ _ZN7android6Parcel31writeUniqueFileDescriptorVectorERKNSt3__16vectorINS_4base14unique_fd_implINS3_13DefaultCloserEEENS1_9allocatorIS6_EEEE;
+ _ZN7android6Parcel31writeUniqueFileDescriptorVectorERKNSt3__18optionalINS1_6vectorINS_4base14unique_fd_implINS4_13DefaultCloserEEENS1_9allocatorIS7_EEEEEE;
+ _ZN7android6Parcel35writeDupImmutableBlobFileDescriptorEi;
+ _ZN7android6Parcel4Blob4initEiPvjb;
+ _ZN7android6Parcel4Blob5clearEv;
+ _ZN7android6Parcel4Blob7releaseEv;
+ _ZN7android6Parcel4BlobC1Ev;
+ _ZN7android6Parcel4BlobC2Ev;
+ _ZN7android6Parcel4BlobD1Ev;
+ _ZN7android6Parcel4BlobD2Ev;
+ _ZN7android6Parcel5writeEPKvj;
+ _ZN7android6Parcel5writeERKNS0_26FlattenableHelperInterfaceE;
+ _ZN7android6Parcel7setDataEPKhj;
+ _ZN7android6Parcel8freeDataEv;
+ _ZN7android6Parcel8growDataEj;
+ _ZN7android6Parcel8setErrorEi;
+ _ZN7android6Parcel9initStateEv;
+ _ZN7android6Parcel9writeBlobEjbPNS0_12WritableBlobE;
+ _ZN7android6Parcel9writeBoolEb;
+ _ZN7android6Parcel9writeByteEa;
+ _ZN7android6Parcel9writeCharEDs;
+ _ZN7android6ParcelC1Ev;
+ _ZN7android6ParcelC2Ev;
+ _ZN7android6ParcelD1Ev;
+ _ZN7android6ParcelD2Ev;
+ _ZN7android7BBinder10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZN7android7BBinder10pingBinderEv;
+ _ZN7android7BBinder11getDebugPidEv;
+ _ZN7android7BBinder11isInheritRtEv;
+ _ZN7android7BBinder11linkToDeathERKNS_2spINS_7IBinder14DeathRecipientEEEPvj;
+ _ZN7android7BBinder11localBinderEv;
+ _ZN7android7BBinder12attachObjectEPKvPvS3_PFvS2_S3_S3_E;
+ _ZN7android7BBinder12detachObjectEPKv;
+ _ZN7android7BBinder12getExtensionEv;
+ _ZN7android7BBinder12setExtensionERKNS_2spINS_7IBinderEEE;
+ _ZN7android7BBinder12setInheritRtEb;
+ _ZN7android7BBinder13unlinkToDeathERKNS_2wpINS_7IBinder14DeathRecipientEEEPvjPS4_;
+ _ZN7android7BBinder15isRequestingSidEv;
+ _ZN7android7BBinder16setRequestingSidEb;
+ _ZN7android7BBinder17getOrCreateExtrasEv;
+ _ZN7android7BBinder21getMinSchedulerPolicyEv;
+ _ZN7android7BBinder21setMinSchedulerPolicyEii;
+ _ZN7android7BBinder23getMinSchedulerPriorityEv;
+ _ZN7android7BBinder4dumpEiRKNS_6VectorINS_8String16EEE;
+ _ZN7android7BBinder8transactEjRKNS_6ParcelEPS1_j;
+ _ZN7android7BBinderC1Ev;
+ _ZN7android7BBinderC2Ev;
+ _ZN7android7BBinderD0Ev;
+ _ZN7android7BBinderD1Ev;
+ _ZN7android7BBinderD2Ev;
+ _ZN7android7content2pm18PackageChangeEvent14readFromParcelEPKNS_6ParcelE;
+ _ZN7android7content2pm21IPackageManagerNative10descriptorE;
+ _ZN7android7content2pm21IPackageManagerNative11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android7content2pm21IPackageManagerNative12default_implE;
+ _ZN7android7content2pm21IPackageManagerNative14getDefaultImplEv;
+ _ZN7android7content2pm21IPackageManagerNative14setDefaultImplENSt3__110unique_ptrIS2_NS3_14default_deleteIS2_EEEE;
+ _ZN7android7content2pm21IPackageManagerNativeC2Ev;
+ _ZN7android7content2pm21IPackageManagerNativeD0Ev;
+ _ZN7android7content2pm21IPackageManagerNativeD1Ev;
+ _ZN7android7content2pm21IPackageManagerNativeD2Ev;
+ _ZN7android7content2pm22BnPackageManagerNative10onTransactEjRKNS_6ParcelEPS3_j;
+ _ZN7android7content2pm22BnPackageManagerNativeC2Ev;
+ _ZN7android7content2pm22BpPackageManagerNative14getAllPackagesEPNSt3__16vectorINS3_12basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS8_ISA_EEEE;
+ _ZN7android7content2pm22BpPackageManagerNative15getNamesForUidsERKNSt3__16vectorIiNS3_9allocatorIiEEEEPNS4_INS3_12basic_stringIcNS3_11char_traitsIcEENS5_IcEEEENS5_ISE_EEEE;
+ _ZN7android7content2pm22BpPackageManagerNative16getLocationFlagsERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEPi;
+ _ZN7android7content2pm22BpPackageManagerNative16hasSystemFeatureERKNS_8String16EiPb;
+ _ZN7android7content2pm22BpPackageManagerNative19isPackageDebuggableERKNS_8String16EPb;
+ _ZN7android7content2pm22BpPackageManagerNative22getInstallerForPackageERKNS_8String16EPNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEE;
+ _ZN7android7content2pm22BpPackageManagerNative24getVersionCodeForPackageERKNS_8String16EPx;
+ _ZN7android7content2pm22BpPackageManagerNative27hasSha256SigningCertificateERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKNS3_6vectorIhNS7_IhEEEEPb;
+ _ZN7android7content2pm22BpPackageManagerNative28getModuleMetadataPackageNameEPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE;
+ _ZN7android7content2pm22BpPackageManagerNative29getTargetSdkVersionForPackageERKNS_8String16EPi;
+ _ZN7android7content2pm22BpPackageManagerNative29isAudioPlaybackCaptureAllowedERKNSt3__16vectorINS3_12basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS8_ISA_EEEEPNS4_IbNS8_IbEEEE;
+ _ZN7android7content2pm22BpPackageManagerNative29registerPackageChangeObserverERKNS_2spINS1_22IPackageChangeObserverEEE;
+ _ZN7android7content2pm22BpPackageManagerNative31unregisterPackageChangeObserverERKNS_2spINS1_22IPackageChangeObserverEEE;
+ _ZN7android7content2pm22BpPackageManagerNativeC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android7content2pm22BpPackageManagerNativeC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android7content2pm22IPackageChangeObserver10descriptorE;
+ _ZN7android7content2pm22IPackageChangeObserver11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android7content2pm22IPackageChangeObserver12default_implE;
+ _ZN7android7content2pm22IPackageChangeObserver14getDefaultImplEv;
+ _ZN7android7content2pm22IPackageChangeObserver14setDefaultImplENSt3__110unique_ptrIS2_NS3_14default_deleteIS2_EEEE;
+ _ZN7android7content2pm22IPackageChangeObserverC2Ev;
+ _ZN7android7content2pm22IPackageChangeObserverD0Ev;
+ _ZN7android7content2pm22IPackageChangeObserverD1Ev;
+ _ZN7android7content2pm22IPackageChangeObserverD2Ev;
+ _ZN7android7content2pm23BnPackageChangeObserver10onTransactEjRKNS_6ParcelEPS3_j;
+ _ZN7android7content2pm23BnPackageChangeObserverC2Ev;
+ _ZN7android7content2pm23BpPackageChangeObserver16onPackageChangedERKNS1_18PackageChangeEventE;
+ _ZN7android7content2pm23BpPackageChangeObserverC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android7content2pm23BpPackageChangeObserverC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android7HexDumpC1EPKvjj;
+ _ZN7android7HexDumpC2EPKvjj;
+ _ZN7android7IBinder11getDebugPidEPi;
+ _ZN7android7IBinder11localBinderEv;
+ _ZN7android7IBinder12getExtensionEPNS_2spIS0_EE;
+ _ZN7android7IBinder12remoteBinderEv;
+ _ZN7android7IBinder12shellCommandERKNS_2spIS0_EEiiiRNS_6VectorINS_8String16EEERKNS1_INS_14IShellCallbackEEERKNS1_INS_15IResultReceiverEEE;
+ _ZN7android7IBinder19queryLocalInterfaceERKNS_8String16E;
+ _ZN7android7IBinderC2Ev;
+ _ZN7android7IBinderD0Ev;
+ _ZN7android7IBinderD1Ev;
+ _ZN7android7IBinderD2Ev;
+ _ZN7android7IMemory10descriptorE;
+ _ZN7android7IMemory11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android7IMemory12default_implE;
+ _ZN7android7IMemory14getDefaultImplEv;
+ _ZN7android7IMemory14setDefaultImplENSt3__110unique_ptrIS0_NS1_14default_deleteIS0_EEEE;
+ _ZN7android7IMemoryC2Ev;
+ _ZN7android7IMemoryD0Ev;
+ _ZN7android7IMemoryD1Ev;
+ _ZN7android7IMemoryD2Ev;
+ _ZN7android8BnMemory10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZN7android8BnMemoryC2Ev;
+ _ZN7android8BnMemoryD0Ev;
+ _ZN7android8BnMemoryD1Ev;
+ _ZN7android8BnMemoryD2Ev;
+ _ZN7android8BpBinder10onFirstRefEv;
+ _ZN7android8BpBinder10pingBinderEv;
+ _ZN7android8BpBinder11linkToDeathERKNS_2spINS_7IBinder14DeathRecipientEEEPvj;
+ _ZN7android8BpBinder12attachObjectEPKvPvS3_PFvS2_S3_S3_E;
+ _ZN7android8BpBinder12detachObjectEPKv;
+ _ZN7android8BpBinder12remoteBinderEv;
+ _ZN7android8BpBinder12sendObituaryEv;
+ _ZN7android8BpBinder12sTrackingMapE;
+ _ZN7android8BpBinder13getCountByUidERNS_6VectorIjEES3_;
+ _ZN7android8BpBinder13ObjectManager4killEv;
+ _ZN7android8BpBinder13ObjectManager6attachEPKvPvS4_PFvS3_S4_S4_E;
+ _ZN7android8BpBinder13ObjectManager6detachEPKv;
+ _ZN7android8BpBinder13ObjectManagerC1Ev;
+ _ZN7android8BpBinder13ObjectManagerC2Ev;
+ _ZN7android8BpBinder13ObjectManagerD1Ev;
+ _ZN7android8BpBinder13ObjectManagerD2Ev;
+ _ZN7android8BpBinder13sTrackingLockE;
+ _ZN7android8BpBinder13unlinkToDeathERKNS_2wpINS_7IBinder14DeathRecipientEEEPvjPS4_;
+ _ZN7android8BpBinder14reportOneDeathERKNS0_8ObituaryE;
+ _ZN7android8BpBinder14sLimitCallbackE;
+ _ZN7android8BpBinder15onLastStrongRefEPKv;
+ _ZN7android8BpBinder15sNumTrackedUidsE;
+ _ZN7android8BpBinder16enableCountByUidEv;
+ _ZN7android8BpBinder16setLimitCallbackEPFviE;
+ _ZN7android8BpBinder17disableCountByUidEv;
+ _ZN7android8BpBinder18sCountByUidEnabledE;
+ _ZN7android8BpBinder19getBinderProxyCountEj;
+ _ZN7android8BpBinder20onIncStrongAttemptedEjPKv;
+ _ZN7android8BpBinder20setCountByUidEnabledEb;
+ _ZN7android8BpBinder26sBinderProxyThrottleCreateE;
+ _ZN7android8BpBinder29sBinderProxyCountLowWatermarkE;
+ _ZN7android8BpBinder29setBinderProxyCountWatermarksEii;
+ _ZN7android8BpBinder30sBinderProxyCountHighWatermarkE;
+ _ZN7android8BpBinder4dumpEiRKNS_6VectorINS_8String16EEE;
+ _ZN7android8BpBinder6createEi;
+ _ZN7android8BpBinder6createERKNS_2spINS_10RpcSessionEEERKNS_10RpcAddressE;
+ _ZN7android8BpBinder8transactEjRKNS_6ParcelEPS1_j;
+ _ZN7android8BpBinderC1EONS0_12BinderHandleEi;
+ _ZN7android8BpBinderC1EONS0_9RpcHandleE;
+ _ZN7android8BpBinderC1EONSt3__17variantIJNS0_12BinderHandleENS0_9RpcHandleEEEE;
+ _ZN7android8BpBinderC2EONS0_12BinderHandleEi;
+ _ZN7android8BpBinderC2EONS0_9RpcHandleE;
+ _ZN7android8BpBinderC2EONSt3__17variantIJNS0_12BinderHandleENS0_9RpcHandleEEEE;
+ _ZN7android8BpBinderD0Ev;
+ _ZN7android8BpBinderD1Ev;
+ _ZN7android8BpBinderD2Ev;
+ _ZN7android8BpMemoryC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android8BpMemoryC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android8BpMemoryD0Ev;
+ _ZN7android8BpMemoryD1Ev;
+ _ZN7android8BpMemoryD2Ev;
+ _ZN7android8internal9Stability11getCategoryEPNS_7IBinderE;
+ _ZN7android8internal9Stability11levelStringENS1_5LevelE;
+ _ZN7android8internal9Stability13getLocalLevelEv;
+ _ZN7android8internal9Stability15isDeclaredLevelENS1_5LevelE;
+ _ZN7android8internal9Stability17debugLogStabilityERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS_7IBinderEEE;
+ _ZN7android8internal9Stability19markCompilationUnitEPNS_7IBinderE;
+ _ZN7android8internal9Stability22tryMarkCompilationUnitEPNS_7IBinderE;
+ _ZN7android8internal9Stability24requiresVintfDeclarationERKNS_2spINS_7IBinderEEE;
+ _ZN7android8internal9Stability25forceDowngradeToStabilityERKNS_2spINS_7IBinderEEENS1_5LevelE;
+ _ZN7android8internal9Stability30forceDowngradeToLocalStabilityERKNS_2spINS_7IBinderEEE;
+ _ZN7android8internal9Stability31forceDowngradeToSystemStabilityERKNS_2spINS_7IBinderEEE;
+ _ZN7android8internal9Stability31forceDowngradeToVendorStabilityERKNS_2spINS_7IBinderEEE;
+ _ZN7android8internal9Stability5checkENS1_8CategoryENS1_5LevelE;
+ _ZN7android8internal9Stability7setReprEPNS_7IBinderEij;
+ _ZN7android8internal9Stability8Category11debugStringEv;
+ _ZN7android8internal9Stability8markVndkEPNS_7IBinderE;
+ _ZN7android8internal9Stability9markVintfEPNS_7IBinderE;
+ _ZN7android8RpcState11CommandDataC1Ej;
+ _ZN7android8RpcState11CommandDataC2Ej;
+ _ZN7android8RpcState12countBindersEv;
+ _ZN7android8RpcState12getSessionIdERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEEPi;
+ _ZN7android8RpcState12waitForReplyERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEEPNS_6ParcelE;
+ _ZN7android8RpcState13getMaxThreadsERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEEPj;
+ _ZN7android8RpcState13getRootObjectERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEE;
+ _ZN7android8RpcState13sendDecStrongERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_10RpcAddressE;
+ _ZN7android8RpcState15onBinderLeavingERKNS_2spINS_10RpcSessionEEERKNS1_INS_7IBinderEEEPNS_10RpcAddressE;
+ _ZN7android8RpcState15processTransactERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEERKNS_13RpcWireHeaderE;
+ _ZN7android8RpcState16onBinderEnteringERKNS_2spINS_10RpcSessionEEERKNS_10RpcAddressE;
+ _ZN7android8RpcState16processDecStrongERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_13RpcWireHeaderE;
+ _ZN7android8RpcState20getAndExecuteCommandERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEE;
+ _ZN7android8RpcState20processServerCommandERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEERKNS_13RpcWireHeaderE;
+ _ZN7android8RpcState23processTransactInternalERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEENS0_11CommandDataE;
+ _ZN7android8RpcState4dumpEv;
+ _ZN7android8RpcState6rpcRecERKNS_4base14unique_fd_implINS1_13DefaultCloserEEEPKcPvj;
+ _ZN7android8RpcState7rpcSendERKNS_4base14unique_fd_implINS1_13DefaultCloserEEEPKcPKvj;
+ _ZN7android8RpcState8transactERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_10RpcAddressEjRKNS_6ParcelERKNS_2spINS_10RpcSessionEEEPSA_j;
+ _ZN7android8RpcState9terminateEv;
+ _ZN7android8RpcStateC1Ev;
+ _ZN7android8RpcStateC2Ev;
+ _ZN7android8RpcStateD1Ev;
+ _ZN7android8RpcStateD2Ev;
+ _ZN7android9BpRefBase10onFirstRefEv;
+ _ZN7android9BpRefBase15onLastStrongRefEPKv;
+ _ZN7android9BpRefBase20onIncStrongAttemptedEjPKv;
+ _ZN7android9BpRefBaseC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android9BpRefBaseC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android9BpRefBaseD0Ev;
+ _ZN7android9BpRefBaseD1Ev;
+ _ZN7android9BpRefBaseD2Ev;
+ _ZN7android9HeapCache10binderDiedERKNS_2wpINS_7IBinderEEE;
+ _ZN7android9HeapCache10dump_heapsEv;
+ _ZN7android9HeapCache8get_heapERKNS_2spINS_7IBinderEEE;
+ _ZN7android9HeapCache9find_heapERKNS_2spINS_7IBinderEEE;
+ _ZN7android9HeapCache9free_heapERKNS_2spINS_7IBinderEEE;
+ _ZN7android9HeapCache9free_heapERKNS_2wpINS_7IBinderEEE;
+ _ZN7android9HeapCacheC1Ev;
+ _ZN7android9HeapCacheC2Ev;
+ _ZN7android9HeapCacheD0Ev;
+ _ZN7android9HeapCacheD1Ev;
+ _ZN7android9HeapCacheD2Ev;
+ _ZN7android9hexStringEPKvj;
+ _ZN7android9RpcServer12listSessionsEv;
+ _ZN7android9RpcServer13getMaxThreadsEv;
+ _ZN7android9RpcServer13getRootObjectEv;
+ _ZN7android9RpcServer13releaseServerEv;
+ _ZN7android9RpcServer13setMaxThreadsEj;
+ _ZN7android9RpcServer13setRootObjectERKNS_2spINS_7IBinderEEE;
+ _ZN7android9RpcServer15setupInetServerEjPj;
+ _ZN7android9RpcServer16setupVsockServerEj;
+ _ZN7android9RpcServer17setRootObjectWeakERKNS_2wpINS_7IBinderEEE;
+ _ZN7android9RpcServer17setupSocketServerERKNS_16RpcSocketAddressE;
+ _ZN7android9RpcServer19establishConnectionEONS_2spIS0_EENS_4base14unique_fd_implINS4_13DefaultCloserEEE;
+ _ZN7android9RpcServer19setupExternalServerENS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZN7android9RpcServer20onSessionTerminatingERKNS_2spINS_10RpcSessionEEE;
+ _ZN7android9RpcServer21setupUnixDomainServerEPKc;
+ _ZN7android9RpcServer24numUninitializedSessionsEv;
+ _ZN7android9RpcServer4joinEv;
+ _ZN7android9RpcServer4makeEv;
+ _ZN7android9RpcServer61iUnderstandThisCodeIsExperimentalAndIWillNotUseItInProductionEv;
+ _ZN7android9RpcServer9acceptOneEv;
+ _ZN7android9RpcServer9hasServerEv;
+ _ZN7android9RpcServerC1Ev;
+ _ZN7android9RpcServerC2Ev;
+ _ZN7android9RpcServerD0Ev;
+ _ZN7android9RpcServerD1Ev;
+ _ZN7android9RpcServerD2Ev;
+ _ZN7android9SingletonINS_15PermissionCacheEE11getInstanceEv;
+ _ZN7android9SingletonINS_15PermissionCacheEE11hasInstanceEv;
+ _ZN7android9SingletonINS_15PermissionCacheEE5sLockE;
+ _ZN7android9SingletonINS_15PermissionCacheEE9sInstanceE;
+ _ZN7android9SingletonINS_15PermissionCacheEEC1Ev;
+ _ZN7android9SingletonINS_15PermissionCacheEEC2Ev;
+ _ZN7android9SingletonINS_15PermissionCacheEED1Ev;
+ _ZN7android9SingletonINS_15PermissionCacheEED2Ev;
+ _ZN7androidlsERNS_10TextOutputERKNS_7HexDumpE;
+ _ZN7androidlsERNS_10TextOutputERKNS_8TypeCodeE;
+ _ZN7androidlsIA15_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA24_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA2_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA34_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA3_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA43_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA4_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA5_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA8_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA9_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIjEERNS_10TextOutputES2_RKT_;
+ _ZN7androidlsINSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEERNS_10TextOutputES9_RKT_;
+ _ZN7androidlsIPcEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIPvEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIyEERNS_10TextOutputES2_RKT_;
+ _ZNK7android10MemoryBase9getMemoryEPiPj;
+ _ZNK7android10RpcAddress13writeToParcelEPNS_6ParcelE;
+ _ZNK7android10RpcAddress15viewRawEmbeddedEv;
+ _ZNK7android10RpcAddress6isZeroEv;
+ _ZNK7android10RpcAddress8toStringEv;
+ _ZNK7android10RpcAddressltERKS0_;
+ _ZNK7android11IMemoryHeap22getInterfaceDescriptorEv;
+ _ZNK7android12BpMemoryHeap12assertMappedEv;
+ _ZNK7android12BpMemoryHeap18assertReallyMappedEv;
+ _ZNK7android12BpMemoryHeap7getBaseEv;
+ _ZNK7android12BpMemoryHeap7getSizeEv;
+ _ZNK7android12BpMemoryHeap8getFlagsEv;
+ _ZNK7android12BpMemoryHeap9getHeapIDEv;
+ _ZNK7android12BpMemoryHeap9getOffsetEv;
+ _ZNK7android12MemoryDealer4dumpEPKc;
+ _ZNK7android12MemoryDealer4heapEv;
+ _ZNK7android12MemoryDealer9allocatorEv;
+ _ZNK7android12SortedVectorINS_15PermissionCache5EntryEE10do_compareEPKvS5_;
+ _ZNK7android12SortedVectorINS_15PermissionCache5EntryEE10do_destroyEPvj;
+ _ZNK7android12SortedVectorINS_15PermissionCache5EntryEE12do_constructEPvj;
+ _ZNK7android12SortedVectorINS_15PermissionCache5EntryEE15do_move_forwardEPvPKvj;
+ _ZNK7android12SortedVectorINS_15PermissionCache5EntryEE16do_move_backwardEPvPKvj;
+ _ZNK7android12SortedVectorINS_15PermissionCache5EntryEE7do_copyEPvPKvj;
+ _ZNK7android12SortedVectorINS_15PermissionCache5EntryEE8do_splatEPvPKvj;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE10do_compareEPKvSA_;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE10do_destroyEPvj;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE12do_constructEPvj;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE15do_move_forwardEPvPKvj;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE16do_move_backwardEPvPKvj;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE7do_copyEPvPKvj;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE8do_splatEPvPKvj;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE10do_compareES3_S3_;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE10do_destroyEPvj;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE12do_constructEPvj;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE15do_move_forwardEPvS3_j;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE16do_move_backwardEPvS3_j;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE7do_copyEPvS3_j;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE8do_splatEPvS3_j;
+ _ZNK7android12SortedVectorINS_8String16EE10do_compareEPKvS4_;
+ _ZNK7android12SortedVectorINS_8String16EE10do_destroyEPvj;
+ _ZNK7android12SortedVectorINS_8String16EE12do_constructEPvj;
+ _ZNK7android12SortedVectorINS_8String16EE15do_move_forwardEPvPKvj;
+ _ZNK7android12SortedVectorINS_8String16EE16do_move_backwardEPvPKvj;
+ _ZNK7android12SortedVectorINS_8String16EE7do_copyEPvPKvj;
+ _ZNK7android12SortedVectorINS_8String16EE8do_splatEPvPKvj;
+ _ZNK7android14IPCThreadState13getCallingPidEv;
+ _ZNK7android14IPCThreadState13getCallingSidEv;
+ _ZNK7android14IPCThreadState13getCallingUidEv;
+ _ZNK7android14IPCThreadState18getCallRestrictionEv;
+ _ZNK7android14IPCThreadState19getStrictModePolicyEv;
+ _ZNK7android14IPCThreadState22getServingStackPointerEv;
+ _ZNK7android14IPCThreadState23getCallingWorkSourceUidEv;
+ _ZNK7android14IPCThreadState25shouldPropagateWorkSourceEv;
+ _ZNK7android14IPCThreadState29getLastTransactionBinderFlagsEv;
+ _ZNK7android14IShellCallback22getInterfaceDescriptorEv;
+ _ZNK7android14MemoryHeapBase7getBaseEv;
+ _ZNK7android14MemoryHeapBase7getSizeEv;
+ _ZNK7android14MemoryHeapBase8getFlagsEv;
+ _ZNK7android14MemoryHeapBase9getDeviceEv;
+ _ZNK7android14MemoryHeapBase9getHeapIDEv;
+ _ZNK7android14MemoryHeapBase9getOffsetEv;
+ _ZNK7android15IResultReceiver22getInterfaceDescriptorEv;
+ _ZNK7android15IServiceManager22getInterfaceDescriptorEv;
+ _ZNK7android15PermissionCache5checkEPbRKNS_8String16Ej;
+ _ZNK7android18BufferedTextOutput9getBufferEv;
+ _ZNK7android18ServiceManagerShim10getServiceERKNS_8String16E;
+ _ZNK7android18ServiceManagerShim12checkServiceERKNS_8String16E;
+ _ZNK7android21IPermissionController22getInterfaceDescriptorEv;
+ _ZNK7android22SimpleBestFitAllocator4dumpEPKc;
+ _ZNK7android22SimpleBestFitAllocator4dumpERNS_7String8EPKc;
+ _ZNK7android22SimpleBestFitAllocator4sizeEv;
+ _ZNK7android22SimpleBestFitAllocator6dump_lEPKc;
+ _ZNK7android22SimpleBestFitAllocator6dump_lERNS_7String8EPKc;
+ _ZNK7android2os15IClientCallback22getInterfaceDescriptorEv;
+ _ZNK7android2os15IServiceManager22getInterfaceDescriptorEv;
+ _ZNK7android2os16IServiceCallback22getInterfaceDescriptorEv;
+ _ZNK7android2os16ParcelableHolder13writeToParcelEPNS_6ParcelE;
+ _ZNK7android2os16ServiceDebugInfo13writeToParcelEPNS_6ParcelE;
+ _ZNK7android2os17PersistableBundle10getBooleanERKNS_8String16EPb;
+ _ZNK7android2os17PersistableBundle10getIntKeysEv;
+ _ZNK7android2os17PersistableBundle11getLongKeysEv;
+ _ZNK7android2os17PersistableBundle12getIntVectorERKNS_8String16EPNSt3__16vectorIiNS5_9allocatorIiEEEE;
+ _ZNK7android2os17PersistableBundle13getDoubleKeysEv;
+ _ZNK7android2os17PersistableBundle13getLongVectorERKNS_8String16EPNSt3__16vectorIxNS5_9allocatorIxEEEE;
+ _ZNK7android2os17PersistableBundle13getStringKeysEv;
+ _ZNK7android2os17PersistableBundle13writeToParcelEPNS_6ParcelE;
+ _ZNK7android2os17PersistableBundle14getBooleanKeysEv;
+ _ZNK7android2os17PersistableBundle15getDoubleVectorERKNS_8String16EPNSt3__16vectorIdNS5_9allocatorIdEEEE;
+ _ZNK7android2os17PersistableBundle15getStringVectorERKNS_8String16EPNSt3__16vectorIS2_NS5_9allocatorIS2_EEEE;
+ _ZNK7android2os17PersistableBundle16getBooleanVectorERKNS_8String16EPNSt3__16vectorIbNS5_9allocatorIbEEEE;
+ _ZNK7android2os17PersistableBundle16getIntVectorKeysEv;
+ _ZNK7android2os17PersistableBundle17getLongVectorKeysEv;
+ _ZNK7android2os17PersistableBundle18writeToParcelInnerEPNS_6ParcelE;
+ _ZNK7android2os17PersistableBundle19getDoubleVectorKeysEv;
+ _ZNK7android2os17PersistableBundle19getStringVectorKeysEv;
+ _ZNK7android2os17PersistableBundle20getBooleanVectorKeysEv;
+ _ZNK7android2os17PersistableBundle20getPersistableBundleERKNS_8String16EPS1_;
+ _ZNK7android2os17PersistableBundle24getPersistableBundleKeysEv;
+ _ZNK7android2os17PersistableBundle4sizeEv;
+ _ZNK7android2os17PersistableBundle5emptyEv;
+ _ZNK7android2os17PersistableBundle6getIntERKNS_8String16EPi;
+ _ZNK7android2os17PersistableBundle7getLongERKNS_8String16EPx;
+ _ZNK7android2os17PersistableBundle9getDoubleERKNS_8String16EPd;
+ _ZNK7android2os17PersistableBundle9getStringERKNS_8String16EPS2_;
+ _ZNK7android2os20ParcelFileDescriptor13writeToParcelEPNS_6ParcelE;
+ _ZNK7android6binder6Status13writeToParcelEPNS_6ParcelE;
+ _ZNK7android6binder6Status9toString8Ev;
+ _ZNK7android6Parcel10errorCheckEv;
+ _ZNK7android6Parcel10ipcObjectsEv;
+ _ZNK7android6Parcel10readDoubleEPd;
+ _ZNK7android6Parcel10readDoubleEv;
+ _ZNK7android6Parcel10readObjectEb;
+ _ZNK7android6Parcel10readUint32EPj;
+ _ZNK7android6Parcel10readUint32Ev;
+ _ZNK7android6Parcel10readUint64EPy;
+ _ZNK7android6Parcel10readUint64Ev;
+ _ZNK7android6Parcel10scanForFdsEv;
+ _ZNK7android6Parcel11ipcDataSizeEv;
+ _ZNK7android6Parcel11readCStringEv;
+ _ZNK7android6Parcel11readInplaceEj;
+ _ZNK7android6Parcel11readPointerEPj;
+ _ZNK7android6Parcel11readPointerEv;
+ _ZNK7android6Parcel11readString8EPNS_7String8E;
+ _ZNK7android6Parcel11readString8Ev;
+ _ZNK7android6Parcel12dataCapacityEv;
+ _ZNK7android6Parcel12dataPositionEv;
+ _ZNK7android6Parcel12objectsCountEv;
+ _ZNK7android6Parcel12readString16EPNS_8String16E;
+ _ZNK7android6Parcel12readString16EPNSt3__110unique_ptrINS_8String16ENS1_14default_deleteIS3_EEEE;
+ _ZNK7android6Parcel12readString16EPNSt3__18optionalINS_8String16EEE;
+ _ZNK7android6Parcel12readString16Ev;
+ _ZNK7android6Parcel13markSensitiveEv;
+ _ZNK7android6Parcel14checkInterfaceEPNS_7IBinderE;
+ _ZNK7android6Parcel14readBoolVectorEPNSt3__110unique_ptrINS1_6vectorIbNS1_9allocatorIbEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel14readBoolVectorEPNSt3__16vectorIbNS1_9allocatorIbEEEE;
+ _ZNK7android6Parcel14readBoolVectorEPNSt3__18optionalINS1_6vectorIbNS1_9allocatorIbEEEEEE;
+ _ZNK7android6Parcel14readByteVectorEPNSt3__110unique_ptrINS1_6vectorIaNS1_9allocatorIaEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel14readByteVectorEPNSt3__110unique_ptrINS1_6vectorIhNS1_9allocatorIhEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel14readByteVectorEPNSt3__16vectorIaNS1_9allocatorIaEEEE;
+ _ZNK7android6Parcel14readByteVectorEPNSt3__16vectorIhNS1_9allocatorIhEEEE;
+ _ZNK7android6Parcel14readByteVectorEPNSt3__18optionalINS1_6vectorIaNS1_9allocatorIaEEEEEE;
+ _ZNK7android6Parcel14readByteVectorEPNSt3__18optionalINS1_6vectorIhNS1_9allocatorIhEEEEEE;
+ _ZNK7android6Parcel14readCharVectorEPNSt3__110unique_ptrINS1_6vectorIDsNS1_9allocatorIDsEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel14readCharVectorEPNSt3__16vectorIDsNS1_9allocatorIDsEEEE;
+ _ZNK7android6Parcel14readCharVectorEPNSt3__18optionalINS1_6vectorIDsNS1_9allocatorIDsEEEEEE;
+ _ZNK7android6Parcel14readParcelableEPNS_10ParcelableE;
+ _ZNK7android6Parcel15ipcObjectsCountEv;
+ _ZNK7android6Parcel15readFloatVectorEPNSt3__110unique_ptrINS1_6vectorIfNS1_9allocatorIfEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel15readFloatVectorEPNSt3__16vectorIfNS1_9allocatorIfEEEE;
+ _ZNK7android6Parcel15readFloatVectorEPNSt3__18optionalINS1_6vectorIfNS1_9allocatorIfEEEEEE;
+ _ZNK7android6Parcel15readInt32VectorEPNSt3__110unique_ptrINS1_6vectorIiNS1_9allocatorIiEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel15readInt32VectorEPNSt3__16vectorIiNS1_9allocatorIiEEEE;
+ _ZNK7android6Parcel15readInt32VectorEPNSt3__18optionalINS1_6vectorIiNS1_9allocatorIiEEEEEE;
+ _ZNK7android6Parcel15readInt64VectorEPNSt3__110unique_ptrINS1_6vectorIxNS1_9allocatorIxEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel15readInt64VectorEPNSt3__16vectorIxNS1_9allocatorIxEEEE;
+ _ZNK7android6Parcel15readInt64VectorEPNSt3__18optionalINS1_6vectorIxNS1_9allocatorIxEEEEEE;
+ _ZNK7android6Parcel15setDataPositionEj;
+ _ZNK7android6Parcel15unflattenBinderEPNS_2spINS_7IBinderEEE;
+ _ZNK7android6Parcel16enforceInterfaceEPKDsjPNS_14IPCThreadStateE;
+ _ZNK7android6Parcel16enforceInterfaceERKNS_8String16EPNS_14IPCThreadStateE;
+ _ZNK7android6Parcel16readDoubleVectorEPNSt3__110unique_ptrINS1_6vectorIdNS1_9allocatorIdEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel16readDoubleVectorEPNSt3__16vectorIdNS1_9allocatorIdEEEE;
+ _ZNK7android6Parcel16readDoubleVectorEPNSt3__18optionalINS1_6vectorIdNS1_9allocatorIdEEEEEE;
+ _ZNK7android6Parcel16readNativeHandleEv;
+ _ZNK7android6Parcel16readStrongBinderEPNS_2spINS_7IBinderEEE;
+ _ZNK7android6Parcel16readStrongBinderEv;
+ _ZNK7android6Parcel16readStrongBinderINS_2os15IClientCallbackEEEiPNS_2spIT_EE;
+ _ZNK7android6Parcel16readStrongBinderINS_2os16IServiceCallbackEEEiPNS_2spIT_EE;
+ _ZNK7android6Parcel16readStrongBinderINS_7content2pm22IPackageChangeObserverEEEiPNS_2spIT_EE;
+ _ZNK7android6Parcel16readUint64VectorEPNSt3__110unique_ptrINS1_6vectorIyNS1_9allocatorIyEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel16readUint64VectorEPNSt3__16vectorIyNS1_9allocatorIyEEEE;
+ _ZNK7android6Parcel16readUint64VectorEPNSt3__18optionalINS1_6vectorIyNS1_9allocatorIyEEEEEE;
+ _ZNK7android6Parcel16validateReadDataEj;
+ _ZNK7android6Parcel17getBlobAshmemSizeEv;
+ _ZNK7android6Parcel17getOpenAshmemSizeEv;
+ _ZNK7android6Parcel17readExceptionCodeEv;
+ _ZNK7android6Parcel17readUtf8FromUtf16EPNSt3__110unique_ptrINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS1_14default_deleteIS8_EEEE;
+ _ZNK7android6Parcel17readUtf8FromUtf16EPNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE;
+ _ZNK7android6Parcel17readUtf8FromUtf16EPNSt3__18optionalINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEE;
+ _ZNK7android6Parcel18hasFileDescriptorsEv;
+ _ZNK7android6Parcel18readFileDescriptorEv;
+ _ZNK7android6Parcel18readString16VectorEPNSt3__110unique_ptrINS1_6vectorINS2_INS_8String16ENS1_14default_deleteIS4_EEEENS1_9allocatorIS7_EEEENS5_ISA_EEEE;
+ _ZNK7android6Parcel18readString16VectorEPNSt3__16vectorINS_8String16ENS1_9allocatorIS3_EEEE;
+ _ZNK7android6Parcel18readString16VectorEPNSt3__18optionalINS1_6vectorINS2_INS_8String16EEENS1_9allocatorIS5_EEEEEE;
+ _ZNK7android6Parcel18readString8InplaceEPj;
+ _ZNK7android6Parcel19readString16InplaceEPj;
+ _ZNK7android6Parcel21finishUnflattenBinderERKNS_2spINS_7IBinderEEEPS3_;
+ _ZNK7android6Parcel22readStrongBinderVectorEPNSt3__110unique_ptrINS1_6vectorINS_2spINS_7IBinderEEENS1_9allocatorIS6_EEEENS1_14default_deleteIS9_EEEE;
+ _ZNK7android6Parcel22readStrongBinderVectorEPNSt3__16vectorINS_2spINS_7IBinderEEENS1_9allocatorIS5_EEEE;
+ _ZNK7android6Parcel22readStrongBinderVectorEPNSt3__18optionalINS1_6vectorINS_2spINS_7IBinderEEENS1_9allocatorIS6_EEEEEE;
+ _ZNK7android6Parcel24readCallingWorkSourceUidEv;
+ _ZNK7android6Parcel24readNullableStrongBinderEPNS_2spINS_7IBinderEEE;
+ _ZNK7android6Parcel24readParcelFileDescriptorEv;
+ _ZNK7android6Parcel24readUniqueFileDescriptorEPNS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZNK7android6Parcel29readUtf8VectorFromUtf16VectorEPNSt3__110unique_ptrINS1_6vectorINS2_INS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS1_14default_deleteIS9_EEEENS7_ISC_EEEENSA_ISE_EEEE;
+ _ZNK7android6Parcel29readUtf8VectorFromUtf16VectorEPNSt3__16vectorINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS6_IS8_EEEE;
+ _ZNK7android6Parcel29readUtf8VectorFromUtf16VectorEPNSt3__18optionalINS1_6vectorINS2_INS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEENS7_ISA_EEEEEE;
+ _ZNK7android6Parcel30readUniqueFileDescriptorVectorEPNSt3__110unique_ptrINS1_6vectorINS_4base14unique_fd_implINS4_13DefaultCloserEEENS1_9allocatorIS7_EEEENS1_14default_deleteISA_EEEE;
+ _ZNK7android6Parcel30readUniqueFileDescriptorVectorEPNSt3__16vectorINS_4base14unique_fd_implINS3_13DefaultCloserEEENS1_9allocatorIS6_EEEE;
+ _ZNK7android6Parcel30readUniqueFileDescriptorVectorEPNSt3__18optionalINS1_6vectorINS_4base14unique_fd_implINS4_13DefaultCloserEEENS1_9allocatorIS7_EEEEEE;
+ _ZNK7android6Parcel30readUniqueParcelFileDescriptorEPNS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZNK7android6Parcel37updateWorkSourceRequestHeaderPositionEv;
+ _ZNK7android6Parcel4dataEv;
+ _ZNK7android6Parcel4readEPvj;
+ _ZNK7android6Parcel4readERNS0_26FlattenableHelperInterfaceE;
+ _ZNK7android6Parcel5printERNS_10TextOutputEj;
+ _ZNK7android6Parcel7ipcDataEv;
+ _ZNK7android6Parcel8allowFdsEv;
+ _ZNK7android6Parcel8dataSizeEv;
+ _ZNK7android6Parcel8isForRpcEv;
+ _ZNK7android6Parcel8readBlobEjPNS0_12ReadableBlobE;
+ _ZNK7android6Parcel8readBoolEPb;
+ _ZNK7android6Parcel8readBoolEv;
+ _ZNK7android6Parcel8readByteEPa;
+ _ZNK7android6Parcel8readByteEv;
+ _ZNK7android6Parcel8readCharEPDs;
+ _ZNK7android6Parcel8readCharEv;
+ _ZNK7android6Parcel9dataAvailEv;
+ _ZNK7android6Parcel9readFloatEPf;
+ _ZNK7android6Parcel9readFloatEv;
+ _ZNK7android6Parcel9readInt32EPi;
+ _ZNK7android6Parcel9readInt32Ev;
+ _ZNK7android6Parcel9readInt64EPx;
+ _ZNK7android6Parcel9readInt64Ev;
+ _ZNK7android6VectorIiE10do_destroyEPvj;
+ _ZNK7android6VectorIiE12do_constructEPvj;
+ _ZNK7android6VectorIiE15do_move_forwardEPvPKvj;
+ _ZNK7android6VectorIiE16do_move_backwardEPvPKvj;
+ _ZNK7android6VectorIiE7do_copyEPvPKvj;
+ _ZNK7android6VectorIiE8do_splatEPvPKvj;
+ _ZNK7android6VectorINS_12ProcessState12handle_entryEE10do_destroyEPvj;
+ _ZNK7android6VectorINS_12ProcessState12handle_entryEE12do_constructEPvj;
+ _ZNK7android6VectorINS_12ProcessState12handle_entryEE15do_move_forwardEPvPKvj;
+ _ZNK7android6VectorINS_12ProcessState12handle_entryEE16do_move_backwardEPvPKvj;
+ _ZNK7android6VectorINS_12ProcessState12handle_entryEE7do_copyEPvPKvj;
+ _ZNK7android6VectorINS_12ProcessState12handle_entryEE8do_splatEPvPKvj;
+ _ZNK7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEE10do_destroyEPvj;
+ _ZNK7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEE12do_constructEPvj;
+ _ZNK7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEE15do_move_forwardEPvPKvj;
+ _ZNK7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEE16do_move_backwardEPvPKvj;
+ _ZNK7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEE7do_copyEPvPKvj;
+ _ZNK7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEE8do_splatEPvPKvj;
+ _ZNK7android6VectorINS_8BpBinder8ObituaryEE10do_destroyEPvj;
+ _ZNK7android6VectorINS_8BpBinder8ObituaryEE12do_constructEPvj;
+ _ZNK7android6VectorINS_8BpBinder8ObituaryEE15do_move_forwardEPvPKvj;
+ _ZNK7android6VectorINS_8BpBinder8ObituaryEE16do_move_backwardEPvPKvj;
+ _ZNK7android6VectorINS_8BpBinder8ObituaryEE7do_copyEPvPKvj;
+ _ZNK7android6VectorINS_8BpBinder8ObituaryEE8do_splatEPvPKvj;
+ _ZNK7android6VectorINS_8String16EE10do_destroyEPvj;
+ _ZNK7android6VectorINS_8String16EE12do_constructEPvj;
+ _ZNK7android6VectorINS_8String16EE15do_move_forwardEPvPKvj;
+ _ZNK7android6VectorINS_8String16EE16do_move_backwardEPvPKvj;
+ _ZNK7android6VectorINS_8String16EE7do_copyEPvPKvj;
+ _ZNK7android6VectorINS_8String16EE8do_splatEPvPKvj;
+ _ZNK7android6VectorIPNS_7BBinderEE10do_destroyEPvj;
+ _ZNK7android6VectorIPNS_7BBinderEE12do_constructEPvj;
+ _ZNK7android6VectorIPNS_7BBinderEE15do_move_forwardEPvPKvj;
+ _ZNK7android6VectorIPNS_7BBinderEE16do_move_backwardEPvPKvj;
+ _ZNK7android6VectorIPNS_7BBinderEE7do_copyEPvPKvj;
+ _ZNK7android6VectorIPNS_7BBinderEE8do_splatEPvPKvj;
+ _ZNK7android6VectorIPNS_7RefBase12weakref_typeEE10do_destroyEPvj;
+ _ZNK7android6VectorIPNS_7RefBase12weakref_typeEE12do_constructEPvj;
+ _ZNK7android6VectorIPNS_7RefBase12weakref_typeEE15do_move_forwardEPvPKvj;
+ _ZNK7android6VectorIPNS_7RefBase12weakref_typeEE16do_move_backwardEPvPKvj;
+ _ZNK7android6VectorIPNS_7RefBase12weakref_typeEE7do_copyEPvPKvj;
+ _ZNK7android6VectorIPNS_7RefBase12weakref_typeEE8do_splatEPvPKvj;
+ _ZNK7android6VectorIPNS_7RefBaseEE10do_destroyEPvj;
+ _ZNK7android6VectorIPNS_7RefBaseEE12do_constructEPvj;
+ _ZNK7android6VectorIPNS_7RefBaseEE15do_move_forwardEPvPKvj;
+ _ZNK7android6VectorIPNS_7RefBaseEE16do_move_backwardEPvPKvj;
+ _ZNK7android6VectorIPNS_7RefBaseEE7do_copyEPvPKvj;
+ _ZNK7android6VectorIPNS_7RefBaseEE8do_splatEPvPKvj;
+ _ZNK7android7BBinder10findObjectEPKv;
+ _ZNK7android7BBinder13isBinderAliveEv;
+ _ZNK7android7BBinder22getInterfaceDescriptorEv;
+ _ZNK7android7content2pm18PackageChangeEvent13writeToParcelEPNS_6ParcelE;
+ _ZNK7android7content2pm21IPackageManagerNative22getInterfaceDescriptorEv;
+ _ZNK7android7content2pm22IPackageChangeObserver22getInterfaceDescriptorEv;
+ _ZNK7android7IBinder13checkSubclassEPKv;
+ _ZNK7android7IMemory11fastPointerERKNS_2spINS_7IBinderEEEi;
+ _ZNK7android7IMemory15unsecurePointerEv;
+ _ZNK7android7IMemory22getInterfaceDescriptorEv;
+ _ZNK7android7IMemory4sizeEv;
+ _ZNK7android7IMemory6offsetEv;
+ _ZNK7android7IMemory7pointerEv;
+ _ZNK7android8BpBinder10findObjectEPKv;
+ _ZNK7android8BpBinder10rpcAddressEv;
+ _ZNK7android8BpBinder10rpcSessionEv;
+ _ZNK7android8BpBinder11isRpcBinderEv;
+ _ZNK7android8BpBinder12binderHandleEv;
+ _ZNK7android8BpBinder13isBinderAliveEv;
+ _ZNK7android8BpBinder13ObjectManager4findEPKv;
+ _ZNK7android8BpBinder18isDescriptorCachedEv;
+ _ZNK7android8BpBinder22getInterfaceDescriptorEv;
+ _ZNK7android8BpMemory9getMemoryEPiPj;
+ _ZNKSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE3strEv;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE4findIS3_EENS_21__tree_const_iteratorIS6_PNS_11__tree_nodeIS6_PvEEiEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIxNS_9allocatorIxEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ExEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEN7android6binder8internal25ClientCounterCallbackImpl7ServiceEEENS_19__map_value_compareIS7_SD_NS_4lessIS7_EELb1EEENS5_ISD_EEE14__count_uniqueIS7_EEjRKT_;
+ _ZNSt3__111__sift_downIRNS_4lessIN7android8RpcState10BinderNode9AsyncTodoEEENS_11__wrap_iterIPS5_EEEEvT0_SB_T_NS_15iterator_traitsISB_E15difference_typeESB_;
+ _ZNSt3__111unique_lockINS_5mutexEE6unlockEv;
+ _ZNSt3__112__hash_tableINS_17__hash_value_typeIijEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE14__erase_uniqueIiEEjRKT_;
+ _ZNSt3__112__hash_tableINS_17__hash_value_typeIijEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE25__emplace_unique_key_argsIiJRKNS_21piecewise_construct_tENS_5tupleIJRKiEEENSI_IJEEEEEENS_4pairINS_15__hash_iteratorIPNS_11__hash_nodeIS2_PvEEEEbEERKT_DpOT0_;
+ _ZNSt3__112__hash_tableINS_17__hash_value_typeIijEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE6rehashEj;
+ _ZNSt3__112__hash_tableINS_17__hash_value_typeIijEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE6removeENS_21__hash_const_iteratorIPNS_11__hash_nodeIS2_PvEEEE;
+ _ZNSt3__112__hash_tableINS_17__hash_value_typeIijEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE8__rehashEj;
+ _ZNSt3__113__tree_removeIPNS_16__tree_node_baseIPvEEEEvT_S5_;
+ _ZNSt3__113unordered_mapIijNS_4hashIiEENS_8equal_toIiEENS_9allocatorINS_4pairIKijEEEEEixERS7_;
+ _ZNSt3__114__copy_alignedINS_6vectorIbNS_9allocatorIbEEEELb0EEENS_14__bit_iteratorIT_Lb0EXLi0EEEENS5_IS6_XT0_EXLi0EEEES8_S7_;
+ _ZNSt3__114__copy_alignedINS_6vectorIbNS_9allocatorIbEEEELb1EEENS_14__bit_iteratorIT_Lb0EXLi0EEEENS5_IS6_XT0_EXLi0EEEES8_S7_;
+ _ZNSt3__114__thread_proxyINS_5tupleIJNS_10unique_ptrINS_15__thread_structENS_14default_deleteIS3_EEEEMN7android9RpcServerEFvONS7_2spIS8_EENS7_4base14unique_fd_implINSC_13DefaultCloserEEEEPS8_SA_SF_EEEEEPvSK_;
+ _ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE7seekoffExNS_8ios_base7seekdirEj;
+ _ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE8overflowEi;
+ _ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE9pbackfailEi;
+ _ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE9underflowEv;
+ _ZNSt3__116__copy_unalignedINS_6vectorIbNS_9allocatorIbEEEELb0EEENS_14__bit_iteratorIT_Lb0EXLi0EEEENS5_IS6_XT0_EXLi0EEEES8_S7_;
+ _ZNSt3__116__copy_unalignedINS_6vectorIbNS_9allocatorIbEEEELb1EEENS_14__bit_iteratorIT_Lb0EXLi0EEEENS5_IS6_XT0_EXLi0EEEES8_S7_;
+ _ZNSt3__120__shared_ptr_emplaceIN7android14RpcWireAddressENS_9allocatorIS2_EEE16__on_zero_sharedEv;
+ _ZNSt3__120__shared_ptr_emplaceIN7android14RpcWireAddressENS_9allocatorIS2_EEE21__on_zero_shared_weakEv;
+ _ZNSt3__120__shared_ptr_emplaceIN7android6binder8internal21ClientCounterCallbackENS_9allocatorIS4_EEE16__on_zero_sharedEv;
+ _ZNSt3__120__shared_ptr_emplaceIN7android6binder8internal21ClientCounterCallbackENS_9allocatorIS4_EEE21__on_zero_shared_weakEv;
+ _ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_j;
+ _ZNSt3__127__tree_balance_after_insertIPNS_16__tree_node_baseIPvEEEEvT_S5_;
+ _ZNSt3__13mapIiN7android2spINS1_10RpcSessionEEENS_4lessIiEENS_9allocatorINS_4pairIKiS4_EEEEEixERS9_;
+ _ZNSt3__13mapIN7android8String16EbNS_4lessIS2_EENS_9allocatorINS_4pairIKS2_bEEEEEixERS7_;
+ _ZNSt3__13mapIN7android8String16EdNS_4lessIS2_EENS_9allocatorINS_4pairIKS2_dEEEEEixERS7_;
+ _ZNSt3__13mapIN7android8String16EiNS_4lessIS2_EENS_9allocatorINS_4pairIKS2_iEEEEEixERS7_;
+ _ZNSt3__13mapIN7android8String16ENS1_2os17PersistableBundleENS_4lessIS2_EENS_9allocatorINS_4pairIKS2_S4_EEEEEixERS9_;
+ _ZNSt3__13mapIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEENS_4lessIS2_EENS4_INS_4pairIKS2_S6_EEEEEixERSA_;
+ _ZNSt3__13mapIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEENS_4lessIS2_EENS4_INS_4pairIKS2_S6_EEEEEixERSA_;
+ _ZNSt3__13mapIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEENS_4lessIS2_EENS4_INS_4pairIKS2_S6_EEEEEixERSA_;
+ _ZNSt3__13mapIN7android8String16ENS_6vectorIS2_NS_9allocatorIS2_EEEENS_4lessIS2_EENS4_INS_4pairIKS2_S6_EEEEEixERSA_;
+ _ZNSt3__13mapIN7android8String16ENS_6vectorIxNS_9allocatorIxEEEENS_4lessIS2_EENS4_INS_4pairIKS2_S6_EEEEEixERSA_;
+ _ZNSt3__13mapIN7android8String16ES2_NS_4lessIS2_EENS_9allocatorINS_4pairIKS2_S2_EEEEEixERS7_;
+ _ZNSt3__13mapIN7android8String16ExNS_4lessIS2_EENS_9allocatorINS_4pairIKS2_xEEEEEixERS7_;
+ _ZNSt3__16__treeIN7android8String16ENS_4lessIS2_EENS_9allocatorIS2_EEE12__find_equalIS2_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISC_EERKT_;
+ _ZNSt3__16__treeIN7android8String16ENS_4lessIS2_EENS_9allocatorIS2_EEE25__emplace_unique_key_argsIS2_JRKS2_EEENS_4pairINS_15__tree_iteratorIS2_PNS_11__tree_nodeIS2_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeIN7android8String16ENS_4lessIS2_EENS_9allocatorIS2_EEE7destroyEPNS_11__tree_nodeIS2_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIiN7android2spINS2_10RpcSessionEEEEENS_19__map_value_compareIiS6_NS_4lessIiEELb1EEENS_9allocatorIS6_EEE5eraseENS_21__tree_const_iteratorIS6_PNS_11__tree_nodeIS6_PvEEiEE;
+ _ZNSt3__16__treeINS_12__value_typeIiN7android2spINS2_10RpcSessionEEEEENS_19__map_value_compareIiS6_NS_4lessIiEELb1EEENS_9allocatorIS6_EEE7destroyEPNS_11__tree_nodeIS6_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android10RpcAddressENS2_8RpcState10BinderNodeEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE25__emplace_unique_key_argsIS3_JNS_4pairIKS3_S5_EEEEENSF_INS_15__tree_iteratorIS6_PNS_11__tree_nodeIS6_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android10RpcAddressENS2_8RpcState10BinderNodeEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE7destroyEPNS_11__tree_nodeIS6_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_SE_EEiEERPNS_15__tree_end_nodeISG_EESH_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISG_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE14__assign_multiINS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEEEvT_SJ_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE15__emplace_multiIJRKNS_4pairIKS3_bEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSG_IJEEEEEENS_4pairINS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_bEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEENS_21__tree_const_iteratorIS4_SM_iEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE7destroyEPNS_11__tree_nodeIS4_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_SE_EEiEERPNS_15__tree_end_nodeISG_EESH_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISG_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE14__assign_multiINS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEEEvT_SJ_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE15__emplace_multiIJRKNS_4pairIKS3_dEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSG_IJEEEEEENS_4pairINS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_dEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEENS_21__tree_const_iteratorIS4_SM_iEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE7destroyEPNS_11__tree_nodeIS4_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_SE_EEiEERPNS_15__tree_end_nodeISG_EESH_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISG_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE14__assign_multiINS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEEEvT_SJ_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE15__emplace_multiIJRKNS_4pairIKS3_iEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSG_IJEEEEEENS_4pairINS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_iEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEENS_21__tree_const_iteratorIS4_SM_iEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE7destroyEPNS_11__tree_nodeIS4_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS6_PNS_11__tree_nodeIS6_SG_EEiEERPNS_15__tree_end_nodeISI_EESJ_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISI_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE14__assign_multiINS_21__tree_const_iteratorIS6_PNS_11__tree_nodeIS6_PvEEiEEEEvT_SL_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE14__erase_uniqueIS3_EEjRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE15__emplace_multiIJRKNS_4pairIKS3_S5_EEEEENS_15__tree_iteratorIS6_PNS_11__tree_nodeIS6_PvEEiEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSI_IJEEEEEENS_4pairINS_15__tree_iteratorIS6_PNS_11__tree_nodeIS6_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S5_EEEEENS_15__tree_iteratorIS6_PNS_11__tree_nodeIS6_PvEEiEENS_21__tree_const_iteratorIS6_SO_iEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE4findIS3_EENS_15__tree_iteratorIS6_PNS_11__tree_nodeIS6_PvEEiEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE5eraseENS_21__tree_const_iteratorIS6_PNS_11__tree_nodeIS6_PvEEiEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE7destroyEPNS_11__tree_nodeIS6_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_SH_EEiEERPNS_15__tree_end_nodeISJ_EESK_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISJ_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__assign_multiINS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEEEvT_SM_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__erase_uniqueIS3_EEjRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE15__emplace_multiIJRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSJ_IJEEEEEENS_4pairINS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEENS_21__tree_const_iteratorIS8_SP_iEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE5eraseENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE7destroyEPNS_11__tree_nodeIS8_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_SH_EEiEERPNS_15__tree_end_nodeISJ_EESK_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISJ_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__assign_multiINS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEEEvT_SM_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__erase_uniqueIS3_EEjRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE15__emplace_multiIJRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSJ_IJEEEEEENS_4pairINS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEENS_21__tree_const_iteratorIS8_SP_iEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE5eraseENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE7destroyEPNS_11__tree_nodeIS8_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_SH_EEiEERPNS_15__tree_end_nodeISJ_EESK_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISJ_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__assign_multiINS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEEEvT_SM_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__erase_uniqueIS3_EEjRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE15__emplace_multiIJRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSJ_IJEEEEEENS_4pairINS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEENS_21__tree_const_iteratorIS8_SP_iEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE5eraseENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE7destroyEPNS_11__tree_nodeIS8_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_SH_EEiEERPNS_15__tree_end_nodeISJ_EESK_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISJ_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__assign_multiINS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEEEvT_SM_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__erase_uniqueIS3_EEjRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE15__emplace_multiIJRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSJ_IJEEEEEENS_4pairINS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEENS_21__tree_const_iteratorIS8_SP_iEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE5eraseENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE7destroyEPNS_11__tree_nodeIS8_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIxNS_9allocatorIxEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_SH_EEiEERPNS_15__tree_end_nodeISJ_EESK_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIxNS_9allocatorIxEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISJ_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIxNS_9allocatorIxEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__assign_multiINS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEEEvT_SM_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIxNS_9allocatorIxEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__erase_uniqueIS3_EEjRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIxNS_9allocatorIxEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE15__emplace_multiIJRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIxNS_9allocatorIxEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSJ_IJEEEEEENS_4pairINS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIxNS_9allocatorIxEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEENS_21__tree_const_iteratorIS8_SP_iEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIxNS_9allocatorIxEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIxNS_9allocatorIxEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE5eraseENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIxNS_9allocatorIxEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE7destroyEPNS_11__tree_nodeIS8_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_SE_EEiEERPNS_15__tree_end_nodeISG_EESH_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISG_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE14__assign_multiINS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEEEvT_SJ_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE14__erase_uniqueIS3_EEjRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE15__emplace_multiIJRKNS_4pairIKS3_S3_EEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSG_IJEEEEEENS_4pairINS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S3_EEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEENS_21__tree_const_iteratorIS4_SM_iEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE5eraseENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE7destroyEPNS_11__tree_nodeIS4_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ExEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_SE_EEiEERPNS_15__tree_end_nodeISG_EESH_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ExEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISG_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ExEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE14__assign_multiINS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEEEvT_SJ_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ExEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE15__emplace_multiIJRKNS_4pairIKS3_xEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ExEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSG_IJEEEEEENS_4pairINS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ExEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_xEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEENS_21__tree_const_iteratorIS4_SM_iEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ExEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ExEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE7destroyEPNS_11__tree_nodeIS4_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeINS_11__thread_idENS_6threadEEENS_19__map_value_compareIS2_S4_NS_4lessIS2_EELb1EEENS_9allocatorIS4_EEE7destroyEPNS_11__tree_nodeIS4_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEN7android6binder8internal25ClientCounterCallbackImpl7ServiceEEENS_19__map_value_compareIS7_SD_NS_4lessIS7_EELb1EEENS5_ISD_EEE12__find_equalIS7_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISO_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEN7android6binder8internal25ClientCounterCallbackImpl7ServiceEEENS_19__map_value_compareIS7_SD_NS_4lessIS7_EELb1EEENS5_ISD_EEE25__emplace_unique_key_argsIS7_JRKNS_21piecewise_construct_tENS_5tupleIJRKS7_EEENSO_IJEEEEEENS_4pairINS_15__tree_iteratorISD_PNS_11__tree_nodeISD_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEN7android6binder8internal25ClientCounterCallbackImpl7ServiceEEENS_19__map_value_compareIS7_SD_NS_4lessIS7_EELb1EEENS5_ISD_EEE7destroyEPNS_11__tree_nodeISD_PvEE;
+ _ZNSt3__16vectorIaNS_9allocatorIaEEE6insertIPKaEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIaNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPaEEE4typeENSC_IS6_EES8_S8_;
+ _ZNSt3__16vectorIbNS_9allocatorIbEEE18__construct_at_endINS_14__bit_iteratorIS3_Lb0ELj0EEEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeES8_S8_;
+ _ZNSt3__16vectorIbNS_9allocatorIbEEE18__construct_at_endINS_14__bit_iteratorIS3_Lb1ELj0EEEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeES8_S8_;
+ _ZNSt3__16vectorIbNS_9allocatorIbEEE7reserveEj;
+ _ZNSt3__16vectorIbNS_9allocatorIbEEE9push_backERKb;
+ _ZNSt3__16vectorIbNS_9allocatorIbEEEaSERKS3_;
+ _ZNSt3__16vectorIdNS_9allocatorIdEEE6assignIPdEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIdNS_15iterator_traitsIS7_E9referenceEEE5valueEvE4typeES7_S7_;
+ _ZNSt3__16vectorIdNS_9allocatorIdEEE6insertIPKdEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIdNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPdEEE4typeENSC_IS6_EES8_S8_;
+ _ZNSt3__16vectorIdNS_9allocatorIdEEEC2ERKS3_;
+ _ZNSt3__16vectorIDsNS_9allocatorIDsEEE24__emplace_back_slow_pathIJDsEEEvDpOT_;
+ _ZNSt3__16vectorIDsNS_9allocatorIDsEEE7reserveEj;
+ _ZNSt3__16vectorIfNS_9allocatorIfEEE6insertIPKfEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIfNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPfEEE4typeENSC_IS6_EES8_S8_;
+ _ZNSt3__16vectorIhNS_9allocatorIhEEE6insertIPKhEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIhNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPhEEE4typeENSC_IS6_EES8_S8_;
+ _ZNSt3__16vectorIiNS_9allocatorIiEEE6assignIPiEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIiNS_15iterator_traitsIS7_E9referenceEEE5valueEvE4typeES7_S7_;
+ _ZNSt3__16vectorIiNS_9allocatorIiEEE6insertIPKiEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIiNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPiEEE4typeENSC_IS6_EES8_S8_;
+ _ZNSt3__16vectorIN7android2os16ServiceDebugInfoENS_9allocatorIS3_EEE8__appendEj;
+ _ZNSt3__16vectorIN7android2spINS1_10RpcSession13RpcConnectionEEENS_9allocatorIS5_EEE21__push_back_slow_pathIRKS5_EEvOT_;
+ _ZNSt3__16vectorIN7android2spINS1_10RpcSessionEEENS_9allocatorIS4_EEE21__push_back_slow_pathIRKS4_EEvOT_;
+ _ZNSt3__16vectorIN7android2spINS1_7IBinderEEENS_9allocatorIS4_EEE21__push_back_slow_pathIRKS4_EEvOT_;
+ _ZNSt3__16vectorIN7android2spINS1_7IBinderEEENS_9allocatorIS4_EEE8__appendEj;
+ _ZNSt3__16vectorIN7android4base14unique_fd_implINS2_13DefaultCloserEEENS_9allocatorIS5_EEE8__appendEj;
+ _ZNSt3__16vectorIN7android8RpcState10BinderNode9AsyncTodoENS_9allocatorIS4_EEE21__push_back_slow_pathIS4_EEvOT_;
+ _ZNSt3__16vectorIN7android8String16ENS_9allocatorIS2_EEE6assignIPS2_EENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIS2_NS_15iterator_traitsIS9_E9referenceEEE5valueEvE4typeES9_S9_;
+ _ZNSt3__16vectorIN7android8String16ENS_9allocatorIS2_EEE8__appendEj;
+ _ZNSt3__16vectorINS_10unique_ptrIN7android8String16ENS_14default_deleteIS3_EEEENS_9allocatorIS6_EEE8__appendEj;
+ _ZNSt3__16vectorINS_10unique_ptrINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS_14default_deleteIS7_EEEENS5_ISA_EEE8__appendEj;
+ _ZNSt3__16vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEE8__appendEj;
+ _ZNSt3__16vectorINS_8optionalIN7android8String16EEENS_9allocatorIS4_EEE8__appendEj;
+ _ZNSt3__16vectorINS_8optionalINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEENS5_IS8_EEE8__appendEj;
+ _ZNSt3__16vectorIxNS_9allocatorIxEEE6assignIPxEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIxNS_15iterator_traitsIS7_E9referenceEEE5valueEvE4typeES7_S7_;
+ _ZNSt3__16vectorIxNS_9allocatorIxEEE6insertIPKxEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIxNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPxEEE4typeENSC_IS6_EES8_S8_;
+ _ZNSt3__16vectorIxNS_9allocatorIxEEEC2ERKS3_;
+ _ZNSt3__16vectorIyNS_9allocatorIyEEE6insertIPKyEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIyNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPyEEE4typeENSC_IS6_EES8_S8_;
+ _ZNSt3__19__sift_upIRNS_4lessIN7android8RpcState10BinderNode9AsyncTodoEEENS_11__wrap_iterIPS5_EEEEvT0_SB_T_NS_15iterator_traitsISB_E15difference_typeE;
+ _ZTCN7android10AllocationE0_NS_10IInterfaceE;
+ _ZTCN7android10AllocationE0_NS_10MemoryBaseE;
+ _ZTCN7android10AllocationE0_NS_11BnInterfaceINS_7IMemoryEEE;
+ _ZTCN7android10AllocationE0_NS_7IMemoryE;
+ _ZTCN7android10AllocationE0_NS_8BnMemoryE;
+ _ZTCN7android10AllocationE4_NS_7BBinderE;
+ _ZTCN7android10AllocationE4_NS_7IBinderE;
+ _ZTCN7android10MemoryBaseE0_NS_10IInterfaceE;
+ _ZTCN7android10MemoryBaseE0_NS_11BnInterfaceINS_7IMemoryEEE;
+ _ZTCN7android10MemoryBaseE0_NS_7IMemoryE;
+ _ZTCN7android10MemoryBaseE0_NS_8BnMemoryE;
+ _ZTCN7android10MemoryBaseE4_NS_7BBinderE;
+ _ZTCN7android10MemoryBaseE4_NS_7IBinderE;
+ _ZTCN7android10PoolThreadE0_NS_6ThreadE;
+ _ZTCN7android11IMemoryHeapE0_NS_10IInterfaceE;
+ _ZTCN7android12BnMemoryHeapE0_NS_10IInterfaceE;
+ _ZTCN7android12BnMemoryHeapE0_NS_11BnInterfaceINS_11IMemoryHeapEEE;
+ _ZTCN7android12BnMemoryHeapE0_NS_11IMemoryHeapE;
+ _ZTCN7android12BnMemoryHeapE4_NS_7BBinderE;
+ _ZTCN7android12BnMemoryHeapE4_NS_7IBinderE;
+ _ZTCN7android12BpMemoryHeapE0_NS_10IInterfaceE;
+ _ZTCN7android12BpMemoryHeapE0_NS_11BpInterfaceINS_11IMemoryHeapEEE;
+ _ZTCN7android12BpMemoryHeapE0_NS_11IMemoryHeapE;
+ _ZTCN7android12BpMemoryHeapE4_NS_9BpRefBaseE;
+ _ZTCN7android14IShellCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android14MemoryHeapBaseE32_NS_10IInterfaceE;
+ _ZTCN7android14MemoryHeapBaseE32_NS_11BnInterfaceINS_11IMemoryHeapEEE;
+ _ZTCN7android14MemoryHeapBaseE32_NS_11IMemoryHeapE;
+ _ZTCN7android14MemoryHeapBaseE32_NS_12BnMemoryHeapE;
+ _ZTCN7android14MemoryHeapBaseE36_NS_7BBinderE;
+ _ZTCN7android14MemoryHeapBaseE36_NS_7IBinderE;
+ _ZTCN7android15BnShellCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android15BnShellCallbackE0_NS_11BnInterfaceINS_14IShellCallbackEEE;
+ _ZTCN7android15BnShellCallbackE0_NS_14IShellCallbackE;
+ _ZTCN7android15BnShellCallbackE4_NS_7BBinderE;
+ _ZTCN7android15BnShellCallbackE4_NS_7IBinderE;
+ _ZTCN7android15BpShellCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android15BpShellCallbackE0_NS_11BpInterfaceINS_14IShellCallbackEEE;
+ _ZTCN7android15BpShellCallbackE0_NS_14IShellCallbackE;
+ _ZTCN7android15BpShellCallbackE4_NS_9BpRefBaseE;
+ _ZTCN7android15IResultReceiverE0_NS_10IInterfaceE;
+ _ZTCN7android15IServiceManagerE0_NS_10IInterfaceE;
+ _ZTCN7android16BnResultReceiverE0_NS_10IInterfaceE;
+ _ZTCN7android16BnResultReceiverE0_NS_11BnInterfaceINS_15IResultReceiverEEE;
+ _ZTCN7android16BnResultReceiverE0_NS_15IResultReceiverE;
+ _ZTCN7android16BnResultReceiverE4_NS_7BBinderE;
+ _ZTCN7android16BnResultReceiverE4_NS_7IBinderE;
+ _ZTCN7android16BpResultReceiverE0_NS_10IInterfaceE;
+ _ZTCN7android16BpResultReceiverE0_NS_11BpInterfaceINS_15IResultReceiverEEE;
+ _ZTCN7android16BpResultReceiverE0_NS_15IResultReceiverE;
+ _ZTCN7android16BpResultReceiverE4_NS_9BpRefBaseE;
+ _ZTCN7android18ServiceManagerShimE0_NS_10IInterfaceE;
+ _ZTCN7android18ServiceManagerShimE0_NS_15IServiceManagerE;
+ _ZTCN7android21IPermissionControllerE0_NS_10IInterfaceE;
+ _ZTCN7android22BnPermissionControllerE0_NS_10IInterfaceE;
+ _ZTCN7android22BnPermissionControllerE0_NS_11BnInterfaceINS_21IPermissionControllerEEE;
+ _ZTCN7android22BnPermissionControllerE0_NS_21IPermissionControllerE;
+ _ZTCN7android22BnPermissionControllerE4_NS_7BBinderE;
+ _ZTCN7android22BnPermissionControllerE4_NS_7IBinderE;
+ _ZTCN7android22BpPermissionControllerE0_NS_10IInterfaceE;
+ _ZTCN7android22BpPermissionControllerE0_NS_11BpInterfaceINS_21IPermissionControllerEEE;
+ _ZTCN7android22BpPermissionControllerE0_NS_21IPermissionControllerE;
+ _ZTCN7android22BpPermissionControllerE4_NS_9BpRefBaseE;
+ _ZTCN7android2os15IClientCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android2os15IServiceManagerE0_NS_10IInterfaceE;
+ _ZTCN7android2os16BnClientCallbackE0_NS0_15IClientCallbackE;
+ _ZTCN7android2os16BnClientCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android2os16BnClientCallbackE0_NS_11BnInterfaceINS0_15IClientCallbackEEE;
+ _ZTCN7android2os16BnClientCallbackE4_NS_7BBinderE;
+ _ZTCN7android2os16BnClientCallbackE4_NS_7IBinderE;
+ _ZTCN7android2os16BnServiceManagerE0_NS0_15IServiceManagerE;
+ _ZTCN7android2os16BnServiceManagerE0_NS_10IInterfaceE;
+ _ZTCN7android2os16BnServiceManagerE0_NS_11BnInterfaceINS0_15IServiceManagerEEE;
+ _ZTCN7android2os16BnServiceManagerE4_NS_7BBinderE;
+ _ZTCN7android2os16BnServiceManagerE4_NS_7IBinderE;
+ _ZTCN7android2os16BpClientCallbackE0_NS0_15IClientCallbackE;
+ _ZTCN7android2os16BpClientCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android2os16BpClientCallbackE0_NS_11BpInterfaceINS0_15IClientCallbackEEE;
+ _ZTCN7android2os16BpClientCallbackE4_NS_9BpRefBaseE;
+ _ZTCN7android2os16BpServiceManagerE0_NS0_15IServiceManagerE;
+ _ZTCN7android2os16BpServiceManagerE0_NS_10IInterfaceE;
+ _ZTCN7android2os16BpServiceManagerE0_NS_11BpInterfaceINS0_15IServiceManagerEEE;
+ _ZTCN7android2os16BpServiceManagerE4_NS_9BpRefBaseE;
+ _ZTCN7android2os16IServiceCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android2os17BnServiceCallbackE0_NS0_16IServiceCallbackE;
+ _ZTCN7android2os17BnServiceCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android2os17BnServiceCallbackE0_NS_11BnInterfaceINS0_16IServiceCallbackEEE;
+ _ZTCN7android2os17BnServiceCallbackE4_NS_7BBinderE;
+ _ZTCN7android2os17BnServiceCallbackE4_NS_7IBinderE;
+ _ZTCN7android2os17BpServiceCallbackE0_NS0_16IServiceCallbackE;
+ _ZTCN7android2os17BpServiceCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android2os17BpServiceCallbackE0_NS_11BpInterfaceINS0_16IServiceCallbackEEE;
+ _ZTCN7android2os17BpServiceCallbackE4_NS_9BpRefBaseE;
+ _ZTCN7android6binder8internal25ClientCounterCallbackImplE0_NS_10IInterfaceE;
+ _ZTCN7android6binder8internal25ClientCounterCallbackImplE0_NS_11BnInterfaceINS_2os15IClientCallbackEEE;
+ _ZTCN7android6binder8internal25ClientCounterCallbackImplE0_NS_2os15IClientCallbackE;
+ _ZTCN7android6binder8internal25ClientCounterCallbackImplE0_NS_2os16BnClientCallbackE;
+ _ZTCN7android6binder8internal25ClientCounterCallbackImplE4_NS_7BBinderE;
+ _ZTCN7android6binder8internal25ClientCounterCallbackImplE4_NS_7IBinderE;
+ _ZTCN7android7BBinderE0_NS_7IBinderE;
+ _ZTCN7android7content2pm21IPackageManagerNativeE0_NS_10IInterfaceE;
+ _ZTCN7android7content2pm22BnPackageManagerNativeE0_NS_10IInterfaceE;
+ _ZTCN7android7content2pm22BnPackageManagerNativeE0_NS_11BnInterfaceINS1_21IPackageManagerNativeEEE;
+ _ZTCN7android7content2pm22BnPackageManagerNativeE0_NS1_21IPackageManagerNativeE;
+ _ZTCN7android7content2pm22BnPackageManagerNativeE4_NS_7BBinderE;
+ _ZTCN7android7content2pm22BnPackageManagerNativeE4_NS_7IBinderE;
+ _ZTCN7android7content2pm22BpPackageManagerNativeE0_NS_10IInterfaceE;
+ _ZTCN7android7content2pm22BpPackageManagerNativeE0_NS_11BpInterfaceINS1_21IPackageManagerNativeEEE;
+ _ZTCN7android7content2pm22BpPackageManagerNativeE0_NS1_21IPackageManagerNativeE;
+ _ZTCN7android7content2pm22BpPackageManagerNativeE4_NS_9BpRefBaseE;
+ _ZTCN7android7content2pm22IPackageChangeObserverE0_NS_10IInterfaceE;
+ _ZTCN7android7content2pm23BnPackageChangeObserverE0_NS_10IInterfaceE;
+ _ZTCN7android7content2pm23BnPackageChangeObserverE0_NS_11BnInterfaceINS1_22IPackageChangeObserverEEE;
+ _ZTCN7android7content2pm23BnPackageChangeObserverE0_NS1_22IPackageChangeObserverE;
+ _ZTCN7android7content2pm23BnPackageChangeObserverE4_NS_7BBinderE;
+ _ZTCN7android7content2pm23BnPackageChangeObserverE4_NS_7IBinderE;
+ _ZTCN7android7content2pm23BpPackageChangeObserverE0_NS_10IInterfaceE;
+ _ZTCN7android7content2pm23BpPackageChangeObserverE0_NS_11BpInterfaceINS1_22IPackageChangeObserverEEE;
+ _ZTCN7android7content2pm23BpPackageChangeObserverE0_NS1_22IPackageChangeObserverE;
+ _ZTCN7android7content2pm23BpPackageChangeObserverE4_NS_9BpRefBaseE;
+ _ZTCN7android7IMemoryE0_NS_10IInterfaceE;
+ _ZTCN7android8BnMemoryE0_NS_10IInterfaceE;
+ _ZTCN7android8BnMemoryE0_NS_11BnInterfaceINS_7IMemoryEEE;
+ _ZTCN7android8BnMemoryE0_NS_7IMemoryE;
+ _ZTCN7android8BnMemoryE4_NS_7BBinderE;
+ _ZTCN7android8BnMemoryE4_NS_7IBinderE;
+ _ZTCN7android8BpBinderE0_NS_7IBinderE;
+ _ZTCN7android8BpMemoryE0_NS_10IInterfaceE;
+ _ZTCN7android8BpMemoryE0_NS_11BpInterfaceINS_7IMemoryEEE;
+ _ZTCN7android8BpMemoryE0_NS_7IMemoryE;
+ _ZTCN7android8BpMemoryE4_NS_9BpRefBaseE;
+ _ZTCN7android9HeapCacheE0_NS_7IBinder14DeathRecipientE;
+ _ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE0_NS_13basic_istreamIcS2_EE;
+ _ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE0_NS_14basic_iostreamIcS2_EE;
+ _ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE8_NS_13basic_ostreamIcS2_EE;
+ _ZThn4_N7android10AllocationD0Ev;
+ _ZThn4_N7android10AllocationD1Ev;
+ _ZThn4_N7android10MemoryBaseD0Ev;
+ _ZThn4_N7android10MemoryBaseD1Ev;
+ _ZThn4_N7android12BnMemoryHeap10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZThn4_N7android12BnMemoryHeapD0Ev;
+ _ZThn4_N7android12BnMemoryHeapD1Ev;
+ _ZThn4_N7android12BpMemoryHeapD0Ev;
+ _ZThn4_N7android12BpMemoryHeapD1Ev;
+ _ZThn4_N7android15BnShellCallback10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZThn4_N7android16BnResultReceiver10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZThn4_N7android22BnPermissionController10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZThn4_N7android2os16BnClientCallback10onTransactEjRKNS_6ParcelEPS2_j;
+ _ZThn4_N7android2os16BnServiceManager10onTransactEjRKNS_6ParcelEPS2_j;
+ _ZThn4_N7android2os17BnServiceCallback10onTransactEjRKNS_6ParcelEPS2_j;
+ _ZThn4_N7android7content2pm22BnPackageManagerNative10onTransactEjRKNS_6ParcelEPS3_j;
+ _ZThn4_N7android7content2pm23BnPackageChangeObserver10onTransactEjRKNS_6ParcelEPS3_j;
+ _ZThn4_N7android8BnMemory10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZThn4_N7android8BnMemoryD0Ev;
+ _ZThn4_N7android8BnMemoryD1Ev;
+ _ZThn4_N7android8BpMemoryD0Ev;
+ _ZThn4_N7android8BpMemoryD1Ev;
+ _ZTTN7android10AllocationE;
+ _ZTTN7android10IInterfaceE;
+ _ZTTN7android10MemoryBaseE;
+ _ZTTN7android10PoolThreadE;
+ _ZTTN7android10RpcSessionE;
+ _ZTTN7android11IMemoryHeapE;
+ _ZTTN7android12BnMemoryHeapE;
+ _ZTTN7android12BpMemoryHeapE;
+ _ZTTN7android12ProcessStateE;
+ _ZTTN7android14IShellCallbackE;
+ _ZTTN7android14MemoryHeapBaseE;
+ _ZTTN7android15BnShellCallbackE;
+ _ZTTN7android15BpShellCallbackE;
+ _ZTTN7android15IResultReceiverE;
+ _ZTTN7android15IServiceManagerE;
+ _ZTTN7android16BnResultReceiverE;
+ _ZTTN7android16BpResultReceiverE;
+ _ZTTN7android18ServiceManagerShimE;
+ _ZTTN7android21IPermissionControllerE;
+ _ZTTN7android22BnPermissionControllerE;
+ _ZTTN7android22BpPermissionControllerE;
+ _ZTTN7android2os15IClientCallbackE;
+ _ZTTN7android2os15IServiceManagerE;
+ _ZTTN7android2os16BnClientCallbackE;
+ _ZTTN7android2os16BnServiceManagerE;
+ _ZTTN7android2os16BpClientCallbackE;
+ _ZTTN7android2os16BpServiceManagerE;
+ _ZTTN7android2os16IServiceCallbackE;
+ _ZTTN7android2os17BnServiceCallbackE;
+ _ZTTN7android2os17BpServiceCallbackE;
+ _ZTTN7android6binder8internal25ClientCounterCallbackImplE;
+ _ZTTN7android7BBinderE;
+ _ZTTN7android7content2pm21IPackageManagerNativeE;
+ _ZTTN7android7content2pm22BnPackageManagerNativeE;
+ _ZTTN7android7content2pm22BpPackageManagerNativeE;
+ _ZTTN7android7content2pm22IPackageChangeObserverE;
+ _ZTTN7android7content2pm23BnPackageChangeObserverE;
+ _ZTTN7android7content2pm23BpPackageChangeObserverE;
+ _ZTTN7android7IBinderE;
+ _ZTTN7android7IMemoryE;
+ _ZTTN7android8BnMemoryE;
+ _ZTTN7android8BpBinderE;
+ _ZTTN7android8BpMemoryE;
+ _ZTTN7android9BpRefBaseE;
+ _ZTTN7android9HeapCacheE;
+ _ZTTN7android9RpcServerE;
+ _ZTTNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE;
+ _ZTv0_n12_N7android10AllocationD0Ev;
+ _ZTv0_n12_N7android10AllocationD1Ev;
+ _ZTv0_n12_N7android10IInterfaceD0Ev;
+ _ZTv0_n12_N7android10IInterfaceD1Ev;
+ _ZTv0_n12_N7android10MemoryBaseD0Ev;
+ _ZTv0_n12_N7android10MemoryBaseD1Ev;
+ _ZTv0_n12_N7android10RpcSessionD0Ev;
+ _ZTv0_n12_N7android10RpcSessionD1Ev;
+ _ZTv0_n12_N7android11IMemoryHeapD0Ev;
+ _ZTv0_n12_N7android11IMemoryHeapD1Ev;
+ _ZTv0_n12_N7android12BnMemoryHeapD0Ev;
+ _ZTv0_n12_N7android12BnMemoryHeapD1Ev;
+ _ZTv0_n12_N7android12BpMemoryHeapD0Ev;
+ _ZTv0_n12_N7android12BpMemoryHeapD1Ev;
+ _ZTv0_n12_N7android12ProcessStateD0Ev;
+ _ZTv0_n12_N7android12ProcessStateD1Ev;
+ _ZTv0_n12_N7android14IShellCallbackD0Ev;
+ _ZTv0_n12_N7android14IShellCallbackD1Ev;
+ _ZTv0_n12_N7android14MemoryHeapBaseD0Ev;
+ _ZTv0_n12_N7android14MemoryHeapBaseD1Ev;
+ _ZTv0_n12_N7android15IResultReceiverD0Ev;
+ _ZTv0_n12_N7android15IResultReceiverD1Ev;
+ _ZTv0_n12_N7android15IServiceManagerD0Ev;
+ _ZTv0_n12_N7android15IServiceManagerD1Ev;
+ _ZTv0_n12_N7android21IPermissionControllerD0Ev;
+ _ZTv0_n12_N7android21IPermissionControllerD1Ev;
+ _ZTv0_n12_N7android2os15IClientCallbackD0Ev;
+ _ZTv0_n12_N7android2os15IClientCallbackD1Ev;
+ _ZTv0_n12_N7android2os15IServiceManagerD0Ev;
+ _ZTv0_n12_N7android2os15IServiceManagerD1Ev;
+ _ZTv0_n12_N7android2os16IServiceCallbackD0Ev;
+ _ZTv0_n12_N7android2os16IServiceCallbackD1Ev;
+ _ZTv0_n12_N7android7BBinderD0Ev;
+ _ZTv0_n12_N7android7BBinderD1Ev;
+ _ZTv0_n12_N7android7content2pm21IPackageManagerNativeD0Ev;
+ _ZTv0_n12_N7android7content2pm21IPackageManagerNativeD1Ev;
+ _ZTv0_n12_N7android7content2pm22IPackageChangeObserverD0Ev;
+ _ZTv0_n12_N7android7content2pm22IPackageChangeObserverD1Ev;
+ _ZTv0_n12_N7android7IBinderD0Ev;
+ _ZTv0_n12_N7android7IBinderD1Ev;
+ _ZTv0_n12_N7android7IMemoryD0Ev;
+ _ZTv0_n12_N7android7IMemoryD1Ev;
+ _ZTv0_n12_N7android8BnMemoryD0Ev;
+ _ZTv0_n12_N7android8BnMemoryD1Ev;
+ _ZTv0_n12_N7android8BpBinderD0Ev;
+ _ZTv0_n12_N7android8BpBinderD1Ev;
+ _ZTv0_n12_N7android8BpMemoryD0Ev;
+ _ZTv0_n12_N7android8BpMemoryD1Ev;
+ _ZTv0_n12_N7android9BpRefBaseD0Ev;
+ _ZTv0_n12_N7android9BpRefBaseD1Ev;
+ _ZTv0_n12_N7android9HeapCacheD0Ev;
+ _ZTv0_n12_N7android9HeapCacheD1Ev;
+ _ZTv0_n12_N7android9RpcServerD0Ev;
+ _ZTv0_n12_N7android9RpcServerD1Ev;
+ _ZTv0_n16_N7android14MemoryHeapBaseD0Ev;
+ _ZTv0_n16_N7android14MemoryHeapBaseD1Ev;
+ _ZTv0_n16_N7android8BpBinder10onFirstRefEv;
+ _ZTv0_n16_N7android9BpRefBase10onFirstRefEv;
+ _ZTv0_n20_N7android8BpBinder15onLastStrongRefEPKv;
+ _ZTv0_n20_N7android9BpRefBase15onLastStrongRefEPKv;
+ _ZTv0_n24_N7android8BpBinder20onIncStrongAttemptedEjPKv;
+ _ZTv0_n24_N7android9BpRefBase20onIncStrongAttemptedEjPKv;
+ _ZTv0_n28_NK7android14MemoryHeapBase9getHeapIDEv;
+ _ZTv0_n32_NK7android14MemoryHeapBase7getBaseEv;
+ _ZTv0_n36_NK7android14MemoryHeapBase7getSizeEv;
+ _ZTv0_n40_NK7android14MemoryHeapBase8getFlagsEv;
+ _ZTv0_n44_NK7android14MemoryHeapBase9getOffsetEv;
+ _ZTvn4_n16_N7android14MemoryHeapBaseD0Ev;
+ _ZTvn4_n16_N7android14MemoryHeapBaseD1Ev;
+ _ZTVN7android10AllocationE;
+ _ZTVN7android10IInterfaceE;
+ _ZTVN7android10MemoryBaseE;
+ _ZTVN7android10PoolThreadE;
+ _ZTVN7android10RpcSession13RpcConnectionE;
+ _ZTVN7android10RpcSessionE;
+ _ZTVN7android10TextOutputE;
+ _ZTVN7android11IMemoryHeapE;
+ _ZTVN7android12BnMemoryHeapE;
+ _ZTVN7android12BpMemoryHeapE;
+ _ZTVN7android12FdTextOutputE;
+ _ZTVN7android12MemoryDealerE;
+ _ZTVN7android12ProcessStateE;
+ _ZTVN7android12SortedVectorINS_15PermissionCache5EntryEEE;
+ _ZTVN7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEEE;
+ _ZTVN7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEEE;
+ _ZTVN7android12SortedVectorINS_8String16EEE;
+ _ZTVN7android13LogTextOutputE;
+ _ZTVN7android14IShellCallbackE;
+ _ZTVN7android14MemoryHeapBaseE;
+ _ZTVN7android15BnShellCallbackE;
+ _ZTVN7android15BpShellCallbackE;
+ _ZTVN7android15IResultReceiverE;
+ _ZTVN7android15IServiceManagerE;
+ _ZTVN7android16BnResultReceiverE;
+ _ZTVN7android16BpResultReceiverE;
+ _ZTVN7android17InetSocketAddressE;
+ _ZTVN7android17UnixSocketAddressE;
+ _ZTVN7android18BufferedTextOutput11BufferStateE;
+ _ZTVN7android18BufferedTextOutputE;
+ _ZTVN7android18ServiceManagerShimE;
+ _ZTVN7android18VsockSocketAddressE;
+ _ZTVN7android21IPermissionControllerE;
+ _ZTVN7android22BnPermissionControllerE;
+ _ZTVN7android22BpPermissionControllerE;
+ _ZTVN7android2os15IClientCallbackE;
+ _ZTVN7android2os15IServiceManagerE;
+ _ZTVN7android2os16BnClientCallbackE;
+ _ZTVN7android2os16BnServiceManagerE;
+ _ZTVN7android2os16BpClientCallbackE;
+ _ZTVN7android2os16BpServiceManagerE;
+ _ZTVN7android2os16IServiceCallbackE;
+ _ZTVN7android2os16ParcelableHolderE;
+ _ZTVN7android2os16ServiceDebugInfoE;
+ _ZTVN7android2os17BnServiceCallbackE;
+ _ZTVN7android2os17BpServiceCallbackE;
+ _ZTVN7android2os17PersistableBundleE;
+ _ZTVN7android2os20ParcelFileDescriptorE;
+ _ZTVN7android6binder8internal25ClientCounterCallbackImplE;
+ _ZTVN7android6VectorIiEE;
+ _ZTVN7android6VectorINS_12ProcessState12handle_entryEEE;
+ _ZTVN7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEEE;
+ _ZTVN7android6VectorINS_8BpBinder8ObituaryEEE;
+ _ZTVN7android6VectorINS_8String16EEE;
+ _ZTVN7android6VectorIPNS_7BBinderEEE;
+ _ZTVN7android6VectorIPNS_7RefBase12weakref_typeEEE;
+ _ZTVN7android6VectorIPNS_7RefBaseEEE;
+ _ZTVN7android7BBinderE;
+ _ZTVN7android7content2pm18PackageChangeEventE;
+ _ZTVN7android7content2pm21IPackageManagerNativeE;
+ _ZTVN7android7content2pm22BnPackageManagerNativeE;
+ _ZTVN7android7content2pm22BpPackageManagerNativeE;
+ _ZTVN7android7content2pm22IPackageChangeObserverE;
+ _ZTVN7android7content2pm23BnPackageChangeObserverE;
+ _ZTVN7android7content2pm23BpPackageChangeObserverE;
+ _ZTVN7android7IBinderE;
+ _ZTVN7android7IMemoryE;
+ _ZTVN7android8BnMemoryE;
+ _ZTVN7android8BpBinderE;
+ _ZTVN7android8BpMemoryE;
+ _ZTVN7android9BpRefBaseE;
+ _ZTVN7android9HeapCacheE;
+ _ZTVN7android9RpcServerE;
+ _ZTVNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEEE;
+ _ZTVNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE;
+ _ZTVNSt3__120__shared_ptr_emplaceIN7android14RpcWireAddressENS_9allocatorIS2_EEEE;
+ _ZTVNSt3__120__shared_ptr_emplaceIN7android6binder8internal21ClientCounterCallbackENS_9allocatorIS4_EEEE;
+ local:
+ *;
+};
diff --git a/libs/binder/libbinder.arm32.vendor.map b/libs/binder/libbinder.arm32.vendor.map
new file mode 100644
index 0000000..8d5a323
--- /dev/null
+++ b/libs/binder/libbinder.arm32.vendor.map
@@ -0,0 +1,1540 @@
+# b/190148312: Populate with correct list of ABI symbols
+LIBBINDER {
+ global:
+ getBinderKernelReferences;
+ kDefaultDriver;
+ _ZN7android10AllocationC1ERKNS_2spINS_12MemoryDealerEEERKNS1_INS_11IMemoryHeapEEEij;
+ _ZN7android10AllocationC2ERKNS_2spINS_12MemoryDealerEEERKNS1_INS_11IMemoryHeapEEEij;
+ _ZN7android10AllocationD0Ev;
+ _ZN7android10AllocationD1Ev;
+ _ZN7android10AllocationD2Ev;
+ _ZN7android10IInterface8asBinderEPKS0_;
+ _ZN7android10IInterface8asBinderERKNS_2spIS0_EE;
+ _ZN7android10IInterfaceC2Ev;
+ _ZN7android10IInterfaceD0Ev;
+ _ZN7android10IInterfaceD1Ev;
+ _ZN7android10IInterfaceD2Ev;
+ _ZN7android10MemoryBaseC1ERKNS_2spINS_11IMemoryHeapEEEij;
+ _ZN7android10MemoryBaseC2ERKNS_2spINS_11IMemoryHeapEEEij;
+ _ZN7android10MemoryBaseD0Ev;
+ _ZN7android10MemoryBaseD1Ev;
+ _ZN7android10MemoryBaseD2Ev;
+ _ZN7android10RpcAddress14readFromParcelERKNS_6ParcelE;
+ _ZN7android10RpcAddress15fromRawEmbeddedEPKNS_14RpcWireAddressE;
+ _ZN7android10RpcAddress4zeroEv;
+ _ZN7android10RpcAddress6uniqueEv;
+ _ZN7android10RpcAddressC1Ev;
+ _ZN7android10RpcAddressC2Ev;
+ _ZN7android10RpcAddressD1Ev;
+ _ZN7android10RpcAddressD2Ev;
+ _ZN7android10RpcSession12setForServerERKNS_2wpINS_9RpcServerEEEi;
+ _ZN7android10RpcSession13getRootObjectEv;
+ _ZN7android10RpcSession13sendDecStrongERKNS_10RpcAddressE;
+ _ZN7android10RpcSession15setupInetClientEPKcj;
+ _ZN7android10RpcSession15terminateLockedEv;
+ _ZN7android10RpcSession16setupVsockClientEjj;
+ _ZN7android10RpcSession17setupSocketClientERKNS_16RpcSocketAddressE;
+ _ZN7android10RpcSession19addClientConnectionENS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZN7android10RpcSession19ExclusiveConnection14findConnectionEiPNS_2spINS0_13RpcConnectionEEES5_RNSt3__16vectorIS4_NS6_9allocatorIS4_EEEEj;
+ _ZN7android10RpcSession19ExclusiveConnectionC1ERKNS_2spIS0_EENS0_13ConnectionUseE;
+ _ZN7android10RpcSession19ExclusiveConnectionC2ERKNS_2spIS0_EENS0_13ConnectionUseE;
+ _ZN7android10RpcSession19ExclusiveConnectionD1Ev;
+ _ZN7android10RpcSession19ExclusiveConnectionD2Ev;
+ _ZN7android10RpcSession19getRemoteMaxThreadsEPj;
+ _ZN7android10RpcSession20setupOneSocketClientERKNS_16RpcSocketAddressEi;
+ _ZN7android10RpcSession21setupUnixDomainClientEPKc;
+ _ZN7android10RpcSession22addNullDebuggingClientEv;
+ _ZN7android10RpcSession22removeServerConnectionERKNS_2spINS0_13RpcConnectionEEE;
+ _ZN7android10RpcSession24assignServerToThisThreadENS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZN7android10RpcSession4joinENS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZN7android10RpcSession4makeEv;
+ _ZN7android10RpcSession6readIdEv;
+ _ZN7android10RpcSession6serverEv;
+ _ZN7android10RpcSession7preJoinENSt3__16threadE;
+ _ZN7android10RpcSession8transactERKNS_10RpcAddressEjRKNS_6ParcelEPS4_j;
+ _ZN7android10RpcSessionC1Ev;
+ _ZN7android10RpcSessionC2Ev;
+ _ZN7android10RpcSessionD0Ev;
+ _ZN7android10RpcSessionD1Ev;
+ _ZN7android10RpcSessionD2Ev;
+ _ZN7android10TextOutputC2Ev;
+ _ZN7android10TextOutputD0Ev;
+ _ZN7android10TextOutputD1Ev;
+ _ZN7android10TextOutputD2Ev;
+ _ZN7android10zeroMemoryEPhj;
+ _ZN7android11BnInterfaceINS_11IMemoryHeapEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_14IShellCallbackEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_15IResultReceiverEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_2os15IClientCallbackEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_2os15IServiceManagerEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_2os16IServiceCallbackEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_7content2pm21IPackageManagerNativeEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_7content2pm22IPackageChangeObserverEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_7IMemoryEE10onAsBinderEv;
+ _ZN7android11IMemoryHeap10descriptorE;
+ _ZN7android11IMemoryHeap11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android11IMemoryHeap12default_implE;
+ _ZN7android11IMemoryHeap14getDefaultImplEv;
+ _ZN7android11IMemoryHeap14setDefaultImplENSt3__110unique_ptrIS0_NS1_14default_deleteIS0_EEEE;
+ _ZN7android11IMemoryHeapC2Ev;
+ _ZN7android11IMemoryHeapD0Ev;
+ _ZN7android11IMemoryHeapD1Ev;
+ _ZN7android11IMemoryHeapD2Ev;
+ _ZN7android12BnMemoryHeap10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZN7android12BnMemoryHeapC2Ev;
+ _ZN7android12BnMemoryHeapD0Ev;
+ _ZN7android12BnMemoryHeapD1Ev;
+ _ZN7android12BnMemoryHeapD2Ev;
+ _ZN7android12BpMemoryHeapC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android12BpMemoryHeapC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android12BpMemoryHeapD0Ev;
+ _ZN7android12BpMemoryHeapD1Ev;
+ _ZN7android12BpMemoryHeapD2Ev;
+ _ZN7android12gTextBuffersE;
+ _ZN7android12MemoryDealer10deallocateEj;
+ _ZN7android12MemoryDealer22getAllocationAlignmentEv;
+ _ZN7android12MemoryDealer8allocateEj;
+ _ZN7android12MemoryDealerC1EjPKcj;
+ _ZN7android12MemoryDealerC2EjPKcj;
+ _ZN7android12MemoryDealerD0Ev;
+ _ZN7android12MemoryDealerD1Ev;
+ _ZN7android12MemoryDealerD2Ev;
+ _ZN7android12printHexDataEiPKvjjijbPFvPvPKcES2_;
+ _ZN7android12ProcessState10selfOrNullEv;
+ _ZN7android12ProcessState13expungeHandleEiPNS_7IBinderE;
+ _ZN7android12ProcessState13getDriverNameEv;
+ _ZN7android12ProcessState14initWithDriverEPKc;
+ _ZN7android12ProcessState15startThreadPoolEv;
+ _ZN7android12ProcessState16getContextObjectERKNS_2spINS_7IBinderEEE;
+ _ZN7android12ProcessState17spawnPooledThreadEb;
+ _ZN7android12ProcessState18giveThreadPoolNameEv;
+ _ZN7android12ProcessState18lookupHandleLockedEi;
+ _ZN7android12ProcessState18setCallRestrictionENS0_15CallRestrictionE;
+ _ZN7android12ProcessState19getKernelReferencesEjPj;
+ _ZN7android12ProcessState20becomeContextManagerEv;
+ _ZN7android12ProcessState20makeBinderThreadNameEv;
+ _ZN7android12ProcessState23getStrongProxyForHandleEi;
+ _ZN7android12ProcessState24getStrongRefCountForNodeERKNS_2spINS_8BpBinderEEE;
+ _ZN7android12ProcessState25enableOnewaySpamDetectionEb;
+ _ZN7android12ProcessState27setThreadPoolMaxThreadCountEj;
+ _ZN7android12ProcessState4initEPKcb;
+ _ZN7android12ProcessState4selfEv;
+ _ZN7android12ProcessStateC1EPKc;
+ _ZN7android12ProcessStateC2EPKc;
+ _ZN7android12ProcessStateD0Ev;
+ _ZN7android12ProcessStateD1Ev;
+ _ZN7android12ProcessStateD2Ev;
+ _ZN7android13printTypeCodeEjPFvPvPKcES0_;
+ _ZN7android14IPCThreadState10freeBufferEPNS_6ParcelEPKhjPKyj;
+ _ZN7android14IPCThreadState10selfOrNullEv;
+ _ZN7android14IPCThreadState11clearCallerEv;
+ _ZN7android14IPCThreadState11stopProcessEb;
+ _ZN7android14IPCThreadState12setupPollingEPi;
+ _ZN7android14IPCThreadState13decWeakHandleEi;
+ _ZN7android14IPCThreadState13expungeHandleEiPNS_7IBinderE;
+ _ZN7android14IPCThreadState13flushCommandsEv;
+ _ZN7android14IPCThreadState13flushIfNeededEv;
+ _ZN7android14IPCThreadState13incWeakHandleEiPNS_8BpBinderE;
+ _ZN7android14IPCThreadState14clearLastErrorEv;
+ _ZN7android14IPCThreadState14executeCommandEi;
+ _ZN7android14IPCThreadState14joinThreadPoolEb;
+ _ZN7android14IPCThreadState14talkWithDriverEb;
+ _ZN7android14IPCThreadState15decStrongHandleEi;
+ _ZN7android14IPCThreadState15incStrongHandleEiPNS_8BpBinderE;
+ _ZN7android14IPCThreadState15waitForResponseEPNS_6ParcelEPi;
+ _ZN7android14IPCThreadState16threadDestructorEPv;
+ _ZN7android14IPCThreadState18setCallRestrictionENS_12ProcessState15CallRestrictionE;
+ _ZN7android14IPCThreadState19setStrictModePolicyEi;
+ _ZN7android14IPCThreadState19setTheContextObjectERKNS_2spINS_7BBinderEEE;
+ _ZN7android14IPCThreadState20clearCallingIdentityEv;
+ _ZN7android14IPCThreadState20getAndExecuteCommandEv;
+ _ZN7android14IPCThreadState20getProcessFreezeInfoEiPbS1_;
+ _ZN7android14IPCThreadState20handlePolledCommandsEv;
+ _ZN7android14IPCThreadState20processPendingDerefsEv;
+ _ZN7android14IPCThreadState20writeTransactionDataEijijRKNS_6ParcelEPi;
+ _ZN7android14IPCThreadState22attemptIncStrongHandleEi;
+ _ZN7android14IPCThreadState22clearCallingWorkSourceEv;
+ _ZN7android14IPCThreadState22clearDeathNotificationEiPNS_8BpBinderE;
+ _ZN7android14IPCThreadState22processPostWriteDerefsEv;
+ _ZN7android14IPCThreadState22restoreCallingIdentityEx;
+ _ZN7android14IPCThreadState23setCallingWorkSourceUidEj;
+ _ZN7android14IPCThreadState24clearPropagateWorkSourceEv;
+ _ZN7android14IPCThreadState24requestDeathNotificationEiPNS_8BpBinderE;
+ _ZN7android14IPCThreadState24restoreCallingWorkSourceEx;
+ _ZN7android14IPCThreadState25blockUntilThreadAvailableEv;
+ _ZN7android14IPCThreadState27disableBackgroundSchedulingEb;
+ _ZN7android14IPCThreadState28backgroundSchedulingDisabledEv;
+ _ZN7android14IPCThreadState29setLastTransactionBinderFlagsEi;
+ _ZN7android14IPCThreadState41setCallingWorkSourceUidWithoutPropagationEj;
+ _ZN7android14IPCThreadState4selfEv;
+ _ZN7android14IPCThreadState6freezeEibj;
+ _ZN7android14IPCThreadState7processEv;
+ _ZN7android14IPCThreadState8shutdownEv;
+ _ZN7android14IPCThreadState8transactEijRKNS_6ParcelEPS1_j;
+ _ZN7android14IPCThreadState9sendReplyERKNS_6ParcelEj;
+ _ZN7android14IPCThreadStateC1Ev;
+ _ZN7android14IPCThreadStateC2Ev;
+ _ZN7android14IPCThreadStateD1Ev;
+ _ZN7android14IPCThreadStateD2Ev;
+ _ZN7android14IShellCallback10descriptorE;
+ _ZN7android14IShellCallback11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android14IShellCallback12default_implE;
+ _ZN7android14IShellCallback14getDefaultImplEv;
+ _ZN7android14IShellCallback14setDefaultImplENSt3__110unique_ptrIS0_NS1_14default_deleteIS0_EEEE;
+ _ZN7android14IShellCallbackC2Ev;
+ _ZN7android14IShellCallbackD0Ev;
+ _ZN7android14IShellCallbackD1Ev;
+ _ZN7android14IShellCallbackD2Ev;
+ _ZN7android14MemoryHeapBase4initEiPvjiPKc;
+ _ZN7android14MemoryHeapBase5mapfdEibjl;
+ _ZN7android14MemoryHeapBase7disposeEv;
+ _ZN7android14MemoryHeapBaseC1Eijjl;
+ _ZN7android14MemoryHeapBaseC1EjjPKc;
+ _ZN7android14MemoryHeapBaseC1EPKcjj;
+ _ZN7android14MemoryHeapBaseC1Ev;
+ _ZN7android14MemoryHeapBaseC2Eijjl;
+ _ZN7android14MemoryHeapBaseC2EjjPKc;
+ _ZN7android14MemoryHeapBaseC2EPKcjj;
+ _ZN7android14MemoryHeapBaseC2Ev;
+ _ZN7android14MemoryHeapBaseD0Ev;
+ _ZN7android14MemoryHeapBaseD1Ev;
+ _ZN7android14MemoryHeapBaseD2Ev;
+ _ZN7android15BnShellCallback10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZN7android15IResultReceiver10descriptorE;
+ _ZN7android15IResultReceiver11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android15IResultReceiver12default_implE;
+ _ZN7android15IResultReceiver14getDefaultImplEv;
+ _ZN7android15IResultReceiver14setDefaultImplENSt3__110unique_ptrIS0_NS1_14default_deleteIS0_EEEE;
+ _ZN7android15IResultReceiverC2Ev;
+ _ZN7android15IResultReceiverD0Ev;
+ _ZN7android15IResultReceiverD1Ev;
+ _ZN7android15IResultReceiverD2Ev;
+ _ZN7android15IServiceManagerC2Ev;
+ _ZN7android15IServiceManagerD0Ev;
+ _ZN7android15IServiceManagerD1Ev;
+ _ZN7android15IServiceManagerD2Ev;
+ _ZN7android15stringForIndentEi;
+ _ZN7android16BnResultReceiver10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZN7android18BufferedTextOutput10moveIndentEi;
+ _ZN7android18BufferedTextOutput10pushBundleEv;
+ _ZN7android18BufferedTextOutput5printEPKcj;
+ _ZN7android18BufferedTextOutput9popBundleEv;
+ _ZN7android18BufferedTextOutputC2Ej;
+ _ZN7android18BufferedTextOutputD0Ev;
+ _ZN7android18BufferedTextOutputD1Ev;
+ _ZN7android18BufferedTextOutputD2Ev;
+ _ZN7android18ServiceManagerShim10addServiceERKNS_8String16ERKNS_2spINS_7IBinderEEEbi;
+ _ZN7android18ServiceManagerShim10isDeclaredERKNS_8String16E;
+ _ZN7android18ServiceManagerShim12listServicesEi;
+ _ZN7android18ServiceManagerShim14waitForServiceERKNS_8String16E;
+ _ZN7android18ServiceManagerShim16updatableViaApexERKNS_8String16E;
+ _ZN7android18ServiceManagerShim20getDeclaredInstancesERKNS_8String16E;
+ _ZN7android18ServiceManagerShimC1ERKNS_2spINS_2os15IServiceManagerEEE;
+ _ZN7android18ServiceManagerShimC2ERKNS_2spINS_2os15IServiceManagerEEE;
+ _ZN7android18the_context_objectE;
+ _ZN7android21defaultServiceManagerEv;
+ _ZN7android22SimpleBestFitAllocator10deallocateEj;
+ _ZN7android22SimpleBestFitAllocator12kMemoryAlignE;
+ _ZN7android22SimpleBestFitAllocator5allocEjj;
+ _ZN7android22SimpleBestFitAllocator7deallocEj;
+ _ZN7android22SimpleBestFitAllocator8allocateEjj;
+ _ZN7android22SimpleBestFitAllocatorC1Ej;
+ _ZN7android22SimpleBestFitAllocatorC2Ej;
+ _ZN7android22SimpleBestFitAllocatorD1Ev;
+ _ZN7android22SimpleBestFitAllocatorD2Ev;
+ _ZN7android24setDefaultServiceManagerERKNS_2spINS_15IServiceManagerEEE;
+ _ZN7android2os15IClientCallback10descriptorE;
+ _ZN7android2os15IClientCallback11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os15IClientCallback12default_implE;
+ _ZN7android2os15IClientCallback14getDefaultImplEv;
+ _ZN7android2os15IClientCallback14setDefaultImplENSt3__110unique_ptrIS1_NS2_14default_deleteIS1_EEEE;
+ _ZN7android2os15IClientCallbackC2Ev;
+ _ZN7android2os15IClientCallbackD0Ev;
+ _ZN7android2os15IClientCallbackD1Ev;
+ _ZN7android2os15IClientCallbackD2Ev;
+ _ZN7android2os15IServiceManager10descriptorE;
+ _ZN7android2os15IServiceManager11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os15IServiceManager12default_implE;
+ _ZN7android2os15IServiceManager14getDefaultImplEv;
+ _ZN7android2os15IServiceManager14setDefaultImplENSt3__110unique_ptrIS1_NS2_14default_deleteIS1_EEEE;
+ _ZN7android2os15IServiceManagerC2Ev;
+ _ZN7android2os15IServiceManagerD0Ev;
+ _ZN7android2os15IServiceManagerD1Ev;
+ _ZN7android2os15IServiceManagerD2Ev;
+ _ZN7android2os16BnClientCallback10onTransactEjRKNS_6ParcelEPS2_j;
+ _ZN7android2os16BnClientCallbackC2Ev;
+ _ZN7android2os16BnServiceManager10onTransactEjRKNS_6ParcelEPS2_j;
+ _ZN7android2os16BnServiceManagerC2Ev;
+ _ZN7android2os16BpClientCallback9onClientsERKNS_2spINS_7IBinderEEEb;
+ _ZN7android2os16BpClientCallbackC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os16BpClientCallbackC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os16BpServiceManager10addServiceERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS_7IBinderEEEbi;
+ _ZN7android2os16BpServiceManager10getServiceERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPNS_2spINS_7IBinderEEE;
+ _ZN7android2os16BpServiceManager10isDeclaredERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPb;
+ _ZN7android2os16BpServiceManager12checkServiceERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPNS_2spINS_7IBinderEEE;
+ _ZN7android2os16BpServiceManager12listServicesEiPNSt3__16vectorINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS7_IS9_EEEE;
+ _ZN7android2os16BpServiceManager16updatableViaApexERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPNS2_8optionalIS8_EE;
+ _ZN7android2os16BpServiceManager19getServiceDebugInfoEPNSt3__16vectorINS0_16ServiceDebugInfoENS2_9allocatorIS4_EEEE;
+ _ZN7android2os16BpServiceManager20getDeclaredInstancesERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPNS2_6vectorIS8_NS6_IS8_EEEE;
+ _ZN7android2os16BpServiceManager20tryUnregisterServiceERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os16BpServiceManager22registerClientCallbackERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS_7IBinderEEERKNSB_INS0_15IClientCallbackEEE;
+ _ZN7android2os16BpServiceManager24registerForNotificationsERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS0_16IServiceCallbackEEE;
+ _ZN7android2os16BpServiceManager26unregisterForNotificationsERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS0_16IServiceCallbackEEE;
+ _ZN7android2os16BpServiceManagerC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os16BpServiceManagerC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os16IServiceCallback10descriptorE;
+ _ZN7android2os16IServiceCallback11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os16IServiceCallback12default_implE;
+ _ZN7android2os16IServiceCallback14getDefaultImplEv;
+ _ZN7android2os16IServiceCallback14setDefaultImplENSt3__110unique_ptrIS1_NS2_14default_deleteIS1_EEEE;
+ _ZN7android2os16IServiceCallbackC2Ev;
+ _ZN7android2os16IServiceCallbackD0Ev;
+ _ZN7android2os16IServiceCallbackD1Ev;
+ _ZN7android2os16IServiceCallbackD2Ev;
+ _ZN7android2os16ParcelableHolder14readFromParcelEPKNS_6ParcelE;
+ _ZN7android2os16ServiceDebugInfo14readFromParcelEPKNS_6ParcelE;
+ _ZN7android2os17BnServiceCallback10onTransactEjRKNS_6ParcelEPS2_j;
+ _ZN7android2os17BnServiceCallbackC2Ev;
+ _ZN7android2os17BpServiceCallback14onRegistrationERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os17BpServiceCallbackC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os17BpServiceCallbackC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os17PersistableBundle10putBooleanERKNS_8String16Eb;
+ _ZN7android2os17PersistableBundle12putIntVectorERKNS_8String16ERKNSt3__16vectorIiNS5_9allocatorIiEEEE;
+ _ZN7android2os17PersistableBundle13putLongVectorERKNS_8String16ERKNSt3__16vectorIxNS5_9allocatorIxEEEE;
+ _ZN7android2os17PersistableBundle14readFromParcelEPKNS_6ParcelE;
+ _ZN7android2os17PersistableBundle15putDoubleVectorERKNS_8String16ERKNSt3__16vectorIdNS5_9allocatorIdEEEE;
+ _ZN7android2os17PersistableBundle15putStringVectorERKNS_8String16ERKNSt3__16vectorIS2_NS5_9allocatorIS2_EEEE;
+ _ZN7android2os17PersistableBundle16putBooleanVectorERKNS_8String16ERKNSt3__16vectorIbNS5_9allocatorIbEEEE;
+ _ZN7android2os17PersistableBundle19readFromParcelInnerEPKNS_6ParcelEj;
+ _ZN7android2os17PersistableBundle20putPersistableBundleERKNS_8String16ERKS1_;
+ _ZN7android2os17PersistableBundle5eraseERKNS_8String16E;
+ _ZN7android2os17PersistableBundle6putIntERKNS_8String16Ei;
+ _ZN7android2os17PersistableBundle7putLongERKNS_8String16Ex;
+ _ZN7android2os17PersistableBundle9putDoubleERKNS_8String16Ed;
+ _ZN7android2os17PersistableBundle9putStringERKNS_8String16ES4_;
+ _ZN7android2os20ParcelFileDescriptor14readFromParcelEPKNS_6ParcelE;
+ _ZN7android2os20ParcelFileDescriptorC1ENS_4base14unique_fd_implINS2_13DefaultCloserEEE;
+ _ZN7android2os20ParcelFileDescriptorC1Ev;
+ _ZN7android2os20ParcelFileDescriptorC2ENS_4base14unique_fd_implINS2_13DefaultCloserEEE;
+ _ZN7android2os20ParcelFileDescriptorC2Ev;
+ _ZN7android2os20ParcelFileDescriptorD0Ev;
+ _ZN7android2os20ParcelFileDescriptorD1Ev;
+ _ZN7android2os20ParcelFileDescriptorD2Ev;
+ _ZN7android2spINS_7BBinderEED2Ev;
+ _ZN7android2spINS_7IBinderEEaSEOS2_;
+ _ZN7android2spINS_7IBinderEEaSERKS2_;
+ _ZN7android2spINS_9HeapCacheEED2Ev;
+ _ZN7android4aerrE;
+ _ZN7android4alogE;
+ _ZN7android4aoutE;
+ _ZN7android6binder20LazyServiceRegistrar10reRegisterEv;
+ _ZN7android6binder20LazyServiceRegistrar11getInstanceEv;
+ _ZN7android6binder20LazyServiceRegistrar12forcePersistEb;
+ _ZN7android6binder20LazyServiceRegistrar13tryUnregisterEv;
+ _ZN7android6binder20LazyServiceRegistrar15registerServiceERKNS_2spINS_7IBinderEEERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEEbi;
+ _ZN7android6binder20LazyServiceRegistrar25setActiveServicesCallbackERKNSt3__18functionIFbbEEE;
+ _ZN7android6binder20LazyServiceRegistrarC1Ev;
+ _ZN7android6binder20LazyServiceRegistrarC2Ev;
+ _ZN7android6binder6Status11fromStatusTEi;
+ _ZN7android6binder6Status12setExceptionEiRKNS_7String8E;
+ _ZN7android6binder6Status14readFromParcelERKNS_6ParcelE;
+ _ZN7android6binder6Status14setFromStatusTEi;
+ _ZN7android6binder6Status17exceptionToStringEi;
+ _ZN7android6binder6Status17fromExceptionCodeEi;
+ _ZN7android6binder6Status17fromExceptionCodeEiPKc;
+ _ZN7android6binder6Status17fromExceptionCodeEiRKNS_7String8E;
+ _ZN7android6binder6Status23setServiceSpecificErrorEiRKNS_7String8E;
+ _ZN7android6binder6Status24fromServiceSpecificErrorEi;
+ _ZN7android6binder6Status24fromServiceSpecificErrorEiPKc;
+ _ZN7android6binder6Status24fromServiceSpecificErrorEiRKNS_7String8E;
+ _ZN7android6binder6Status2okEv;
+ _ZN7android6binder6StatusC1Eii;
+ _ZN7android6binder6StatusC1EiiRKNS_7String8E;
+ _ZN7android6binder6StatusC2Eii;
+ _ZN7android6binder6StatusC2EiiRKNS_7String8E;
+ _ZN7android6binder8internal21ClientCounterCallback10reRegisterEv;
+ _ZN7android6binder8internal21ClientCounterCallback12forcePersistEb;
+ _ZN7android6binder8internal21ClientCounterCallback13tryUnregisterEv;
+ _ZN7android6binder8internal21ClientCounterCallback15registerServiceERKNS_2spINS_7IBinderEEERKNSt3__112basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEEbi;
+ _ZN7android6binder8internal21ClientCounterCallback25setActiveServicesCallbackERKNSt3__18functionIFbbEEE;
+ _ZN7android6binder8internal21ClientCounterCallbackC1Ev;
+ _ZN7android6binder8internal21ClientCounterCallbackC2Ev;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl10reRegisterEv;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl11tryShutdownEv;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl12forcePersistEb;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl13tryUnregisterEv;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl15registerServiceERKNS_2spINS_7IBinderEEERKNSt3__112basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEEbi;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl16maybeTryShutdownEv;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl23assertRegisteredServiceERKNS_2spINS_7IBinderEEE;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl25setActiveServicesCallbackERKNSt3__18functionIFbbEEE;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl9onClientsERKNS_2spINS_7IBinderEEEb;
+ _ZN7android6Parcel10appendFromEPKS0_jj;
+ _ZN7android6Parcel10markForRpcERKNS_2spINS_10RpcSessionEEE;
+ _ZN7android6Parcel10writeFloatEf;
+ _ZN7android6Parcel10writeInt32Ei;
+ _ZN7android6Parcel10writeInt64Ex;
+ _ZN7android6Parcel11compareDataERKS0_;
+ _ZN7android6Parcel11finishWriteEj;
+ _ZN7android6Parcel11setDataSizeEj;
+ _ZN7android6Parcel11writeDoubleEd;
+ _ZN7android6Parcel11writeObjectERK18flat_binder_objectb;
+ _ZN7android6Parcel11writeUint32Ej;
+ _ZN7android6Parcel11writeUint64Ey;
+ _ZN7android6Parcel12pushAllowFdsEb;
+ _ZN7android6Parcel12restartWriteEj;
+ _ZN7android6Parcel12writeCStringEPKc;
+ _ZN7android6Parcel12writeInplaceEj;
+ _ZN7android6Parcel12writePointerEj;
+ _ZN7android6Parcel12writeString8EPKcj;
+ _ZN7android6Parcel12writeString8ERKNS_7String8E;
+ _ZN7android6Parcel13continueWriteEj;
+ _ZN7android6Parcel13flattenBinderERKNS_2spINS_7IBinderEEE;
+ _ZN7android6Parcel13markForBinderERKNS_2spINS_7IBinderEEE;
+ _ZN7android6Parcel13writeString16EPKDsj;
+ _ZN7android6Parcel13writeString16ERKNS_8String16E;
+ _ZN7android6Parcel13writeString16ERKNSt3__110unique_ptrINS_8String16ENS1_14default_deleteIS3_EEEE;
+ _ZN7android6Parcel13writeString16ERKNSt3__18optionalINS_8String16EEE;
+ _ZN7android6Parcel13writeUnpaddedEPKvj;
+ _ZN7android6Parcel14acquireObjectsEv;
+ _ZN7android6Parcel14freeDataNoInitEv;
+ _ZN7android6Parcel14releaseObjectsEv;
+ _ZN7android6Parcel14writeByteArrayEjPKh;
+ _ZN7android6Parcel15restoreAllowFdsEb;
+ _ZN7android6Parcel15setDataCapacityEj;
+ _ZN7android6Parcel15writeBoolVectorERKNSt3__110unique_ptrINS1_6vectorIbNS1_9allocatorIbEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel15writeBoolVectorERKNSt3__16vectorIbNS1_9allocatorIbEEEE;
+ _ZN7android6Parcel15writeBoolVectorERKNSt3__18optionalINS1_6vectorIbNS1_9allocatorIbEEEEEE;
+ _ZN7android6Parcel15writeByteVectorERKNSt3__110unique_ptrINS1_6vectorIaNS1_9allocatorIaEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel15writeByteVectorERKNSt3__110unique_ptrINS1_6vectorIhNS1_9allocatorIhEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel15writeByteVectorERKNSt3__16vectorIaNS1_9allocatorIaEEEE;
+ _ZN7android6Parcel15writeByteVectorERKNSt3__16vectorIhNS1_9allocatorIhEEEE;
+ _ZN7android6Parcel15writeByteVectorERKNSt3__18optionalINS1_6vectorIaNS1_9allocatorIaEEEEEE;
+ _ZN7android6Parcel15writeByteVectorERKNSt3__18optionalINS1_6vectorIhNS1_9allocatorIhEEEEEE;
+ _ZN7android6Parcel15writeCharVectorERKNSt3__110unique_ptrINS1_6vectorIDsNS1_9allocatorIDsEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel15writeCharVectorERKNSt3__16vectorIDsNS1_9allocatorIDsEEEE;
+ _ZN7android6Parcel15writeCharVectorERKNSt3__18optionalINS1_6vectorIDsNS1_9allocatorIDsEEEEEE;
+ _ZN7android6Parcel15writeInt32ArrayEjPKi;
+ _ZN7android6Parcel15writeParcelableERKNS_10ParcelableE;
+ _ZN7android6Parcel16writeFloatVectorERKNSt3__110unique_ptrINS1_6vectorIfNS1_9allocatorIfEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel16writeFloatVectorERKNSt3__16vectorIfNS1_9allocatorIfEEEE;
+ _ZN7android6Parcel16writeFloatVectorERKNSt3__18optionalINS1_6vectorIfNS1_9allocatorIfEEEEEE;
+ _ZN7android6Parcel16writeInt32VectorERKNSt3__110unique_ptrINS1_6vectorIiNS1_9allocatorIiEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel16writeInt32VectorERKNSt3__16vectorIiNS1_9allocatorIiEEEE;
+ _ZN7android6Parcel16writeInt32VectorERKNSt3__18optionalINS1_6vectorIiNS1_9allocatorIiEEEEEE;
+ _ZN7android6Parcel16writeInt64VectorERKNSt3__110unique_ptrINS1_6vectorIxNS1_9allocatorIxEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel16writeInt64VectorERKNSt3__16vectorIxNS1_9allocatorIxEEEE;
+ _ZN7android6Parcel16writeInt64VectorERKNSt3__18optionalINS1_6vectorIxNS1_9allocatorIxEEEEEE;
+ _ZN7android6Parcel16writeNoExceptionEv;
+ _ZN7android6Parcel16writeUtf8AsUtf16ERKNSt3__110unique_ptrINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS1_14default_deleteIS8_EEEE;
+ _ZN7android6Parcel16writeUtf8AsUtf16ERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE;
+ _ZN7android6Parcel16writeUtf8AsUtf16ERKNSt3__18optionalINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEE;
+ _ZN7android6Parcel17writeDoubleVectorERKNSt3__110unique_ptrINS1_6vectorIdNS1_9allocatorIdEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel17writeDoubleVectorERKNSt3__16vectorIdNS1_9allocatorIdEEEE;
+ _ZN7android6Parcel17writeDoubleVectorERKNSt3__18optionalINS1_6vectorIdNS1_9allocatorIdEEEEEE;
+ _ZN7android6Parcel17writeNativeHandleEPK13native_handle;
+ _ZN7android6Parcel17writeStrongBinderERKNS_2spINS_7IBinderEEE;
+ _ZN7android6Parcel17writeUint64VectorERKNSt3__110unique_ptrINS1_6vectorIyNS1_9allocatorIyEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel17writeUint64VectorERKNSt3__16vectorIyNS1_9allocatorIyEEEE;
+ _ZN7android6Parcel17writeUint64VectorERKNSt3__18optionalINS1_6vectorIyNS1_9allocatorIyEEEEEE;
+ _ZN7android6Parcel18getGlobalAllocSizeEv;
+ _ZN7android6Parcel19finishFlattenBinderERKNS_2spINS_7IBinderEEE;
+ _ZN7android6Parcel19getGlobalAllocCountEv;
+ _ZN7android6Parcel19ipcSetDataReferenceEPKhjPKyjPFvPS0_S2_jS4_jE;
+ _ZN7android6Parcel19writeFileDescriptorEib;
+ _ZN7android6Parcel19writeInterfaceTokenEPKDsj;
+ _ZN7android6Parcel19writeInterfaceTokenERKNS_8String16E;
+ _ZN7android6Parcel19writeString16VectorERKNSt3__110unique_ptrINS1_6vectorINS2_INS_8String16ENS1_14default_deleteIS4_EEEENS1_9allocatorIS7_EEEENS5_ISA_EEEE;
+ _ZN7android6Parcel19writeString16VectorERKNSt3__16vectorINS_8String16ENS1_9allocatorIS3_EEEE;
+ _ZN7android6Parcel19writeString16VectorERKNSt3__18optionalINS1_6vectorINS2_INS_8String16EEENS1_9allocatorIS5_EEEEEE;
+ _ZN7android6Parcel20closeFileDescriptorsEv;
+ _ZN7android6Parcel22writeDupFileDescriptorEi;
+ _ZN7android6Parcel23writeStrongBinderVectorERKNSt3__110unique_ptrINS1_6vectorINS_2spINS_7IBinderEEENS1_9allocatorIS6_EEEENS1_14default_deleteIS9_EEEE;
+ _ZN7android6Parcel23writeStrongBinderVectorERKNSt3__16vectorINS_2spINS_7IBinderEEENS1_9allocatorIS5_EEEE;
+ _ZN7android6Parcel23writeStrongBinderVectorERKNSt3__18optionalINS1_6vectorINS_2spINS_7IBinderEEENS1_9allocatorIS6_EEEEEE;
+ _ZN7android6Parcel25writeParcelFileDescriptorEib;
+ _ZN7android6Parcel25writeUniqueFileDescriptorERKNS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZN7android6Parcel26writeRawNullableParcelableEPKNS_10ParcelableE;
+ _ZN7android6Parcel27replaceCallingWorkSourceUidEj;
+ _ZN7android6Parcel28writeDupParcelFileDescriptorEi;
+ _ZN7android6Parcel28writeUtf8VectorAsUtf16VectorERKNSt3__110unique_ptrINS1_6vectorINS2_INS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS1_14default_deleteIS9_EEEENS7_ISC_EEEENSA_ISE_EEEE;
+ _ZN7android6Parcel28writeUtf8VectorAsUtf16VectorERKNSt3__16vectorINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS6_IS8_EEEE;
+ _ZN7android6Parcel28writeUtf8VectorAsUtf16VectorERKNSt3__18optionalINS1_6vectorINS2_INS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEENS7_ISA_EEEEEE;
+ _ZN7android6Parcel31writeUniqueFileDescriptorVectorERKNSt3__110unique_ptrINS1_6vectorINS_4base14unique_fd_implINS4_13DefaultCloserEEENS1_9allocatorIS7_EEEENS1_14default_deleteISA_EEEE;
+ _ZN7android6Parcel31writeUniqueFileDescriptorVectorERKNSt3__16vectorINS_4base14unique_fd_implINS3_13DefaultCloserEEENS1_9allocatorIS6_EEEE;
+ _ZN7android6Parcel31writeUniqueFileDescriptorVectorERKNSt3__18optionalINS1_6vectorINS_4base14unique_fd_implINS4_13DefaultCloserEEENS1_9allocatorIS7_EEEEEE;
+ _ZN7android6Parcel35writeDupImmutableBlobFileDescriptorEi;
+ _ZN7android6Parcel4Blob4initEiPvjb;
+ _ZN7android6Parcel4Blob5clearEv;
+ _ZN7android6Parcel4Blob7releaseEv;
+ _ZN7android6Parcel4BlobC1Ev;
+ _ZN7android6Parcel4BlobC2Ev;
+ _ZN7android6Parcel4BlobD1Ev;
+ _ZN7android6Parcel4BlobD2Ev;
+ _ZN7android6Parcel5writeEPKvj;
+ _ZN7android6Parcel5writeERKNS0_26FlattenableHelperInterfaceE;
+ _ZN7android6Parcel7setDataEPKhj;
+ _ZN7android6Parcel8freeDataEv;
+ _ZN7android6Parcel8growDataEj;
+ _ZN7android6Parcel8setErrorEi;
+ _ZN7android6Parcel9initStateEv;
+ _ZN7android6Parcel9writeBlobEjbPNS0_12WritableBlobE;
+ _ZN7android6Parcel9writeBoolEb;
+ _ZN7android6Parcel9writeByteEa;
+ _ZN7android6Parcel9writeCharEDs;
+ _ZN7android6ParcelC1Ev;
+ _ZN7android6ParcelC2Ev;
+ _ZN7android6ParcelD1Ev;
+ _ZN7android6ParcelD2Ev;
+ _ZN7android7BBinder10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZN7android7BBinder10pingBinderEv;
+ _ZN7android7BBinder11getDebugPidEv;
+ _ZN7android7BBinder11isInheritRtEv;
+ _ZN7android7BBinder11linkToDeathERKNS_2spINS_7IBinder14DeathRecipientEEEPvj;
+ _ZN7android7BBinder11localBinderEv;
+ _ZN7android7BBinder12attachObjectEPKvPvS3_PFvS2_S3_S3_E;
+ _ZN7android7BBinder12detachObjectEPKv;
+ _ZN7android7BBinder12getExtensionEv;
+ _ZN7android7BBinder12setExtensionERKNS_2spINS_7IBinderEEE;
+ _ZN7android7BBinder12setInheritRtEb;
+ _ZN7android7BBinder13unlinkToDeathERKNS_2wpINS_7IBinder14DeathRecipientEEEPvjPS4_;
+ _ZN7android7BBinder15isRequestingSidEv;
+ _ZN7android7BBinder16setRequestingSidEb;
+ _ZN7android7BBinder17getOrCreateExtrasEv;
+ _ZN7android7BBinder21getMinSchedulerPolicyEv;
+ _ZN7android7BBinder21setMinSchedulerPolicyEii;
+ _ZN7android7BBinder23getMinSchedulerPriorityEv;
+ _ZN7android7BBinder4dumpEiRKNS_6VectorINS_8String16EEE;
+ _ZN7android7BBinder8transactEjRKNS_6ParcelEPS1_j;
+ _ZN7android7BBinderC1Ev;
+ _ZN7android7BBinderC2Ev;
+ _ZN7android7BBinderD0Ev;
+ _ZN7android7BBinderD1Ev;
+ _ZN7android7BBinderD2Ev;
+ _ZN7android7content2pm18PackageChangeEvent14readFromParcelEPKNS_6ParcelE;
+ _ZN7android7content2pm21IPackageManagerNative10descriptorE;
+ _ZN7android7content2pm21IPackageManagerNative11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android7content2pm21IPackageManagerNative12default_implE;
+ _ZN7android7content2pm21IPackageManagerNative14getDefaultImplEv;
+ _ZN7android7content2pm21IPackageManagerNative14setDefaultImplENSt3__110unique_ptrIS2_NS3_14default_deleteIS2_EEEE;
+ _ZN7android7content2pm21IPackageManagerNativeC2Ev;
+ _ZN7android7content2pm21IPackageManagerNativeD0Ev;
+ _ZN7android7content2pm21IPackageManagerNativeD1Ev;
+ _ZN7android7content2pm21IPackageManagerNativeD2Ev;
+ _ZN7android7content2pm22BnPackageManagerNative10onTransactEjRKNS_6ParcelEPS3_j;
+ _ZN7android7content2pm22BnPackageManagerNativeC2Ev;
+ _ZN7android7content2pm22BpPackageManagerNative14getAllPackagesEPNSt3__16vectorINS3_12basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS8_ISA_EEEE;
+ _ZN7android7content2pm22BpPackageManagerNative15getNamesForUidsERKNSt3__16vectorIiNS3_9allocatorIiEEEEPNS4_INS3_12basic_stringIcNS3_11char_traitsIcEENS5_IcEEEENS5_ISE_EEEE;
+ _ZN7android7content2pm22BpPackageManagerNative16getLocationFlagsERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEPi;
+ _ZN7android7content2pm22BpPackageManagerNative16hasSystemFeatureERKNS_8String16EiPb;
+ _ZN7android7content2pm22BpPackageManagerNative19isPackageDebuggableERKNS_8String16EPb;
+ _ZN7android7content2pm22BpPackageManagerNative22getInstallerForPackageERKNS_8String16EPNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEE;
+ _ZN7android7content2pm22BpPackageManagerNative24getVersionCodeForPackageERKNS_8String16EPx;
+ _ZN7android7content2pm22BpPackageManagerNative27hasSha256SigningCertificateERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKNS3_6vectorIhNS7_IhEEEEPb;
+ _ZN7android7content2pm22BpPackageManagerNative28getModuleMetadataPackageNameEPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE;
+ _ZN7android7content2pm22BpPackageManagerNative29getTargetSdkVersionForPackageERKNS_8String16EPi;
+ _ZN7android7content2pm22BpPackageManagerNative29isAudioPlaybackCaptureAllowedERKNSt3__16vectorINS3_12basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS8_ISA_EEEEPNS4_IbNS8_IbEEEE;
+ _ZN7android7content2pm22BpPackageManagerNative29registerPackageChangeObserverERKNS_2spINS1_22IPackageChangeObserverEEE;
+ _ZN7android7content2pm22BpPackageManagerNative31unregisterPackageChangeObserverERKNS_2spINS1_22IPackageChangeObserverEEE;
+ _ZN7android7content2pm22BpPackageManagerNativeC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android7content2pm22BpPackageManagerNativeC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android7content2pm22IPackageChangeObserver10descriptorE;
+ _ZN7android7content2pm22IPackageChangeObserver11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android7content2pm22IPackageChangeObserver12default_implE;
+ _ZN7android7content2pm22IPackageChangeObserver14getDefaultImplEv;
+ _ZN7android7content2pm22IPackageChangeObserver14setDefaultImplENSt3__110unique_ptrIS2_NS3_14default_deleteIS2_EEEE;
+ _ZN7android7content2pm22IPackageChangeObserverC2Ev;
+ _ZN7android7content2pm22IPackageChangeObserverD0Ev;
+ _ZN7android7content2pm22IPackageChangeObserverD1Ev;
+ _ZN7android7content2pm22IPackageChangeObserverD2Ev;
+ _ZN7android7content2pm23BnPackageChangeObserver10onTransactEjRKNS_6ParcelEPS3_j;
+ _ZN7android7content2pm23BnPackageChangeObserverC2Ev;
+ _ZN7android7content2pm23BpPackageChangeObserver16onPackageChangedERKNS1_18PackageChangeEventE;
+ _ZN7android7content2pm23BpPackageChangeObserverC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android7content2pm23BpPackageChangeObserverC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android7HexDumpC1EPKvjj;
+ _ZN7android7HexDumpC2EPKvjj;
+ _ZN7android7IBinder11getDebugPidEPi;
+ _ZN7android7IBinder11localBinderEv;
+ _ZN7android7IBinder12getExtensionEPNS_2spIS0_EE;
+ _ZN7android7IBinder12remoteBinderEv;
+ _ZN7android7IBinder12shellCommandERKNS_2spIS0_EEiiiRNS_6VectorINS_8String16EEERKNS1_INS_14IShellCallbackEEERKNS1_INS_15IResultReceiverEEE;
+ _ZN7android7IBinder19queryLocalInterfaceERKNS_8String16E;
+ _ZN7android7IBinderC2Ev;
+ _ZN7android7IBinderD0Ev;
+ _ZN7android7IBinderD1Ev;
+ _ZN7android7IBinderD2Ev;
+ _ZN7android7IMemory10descriptorE;
+ _ZN7android7IMemory11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android7IMemory12default_implE;
+ _ZN7android7IMemory14getDefaultImplEv;
+ _ZN7android7IMemory14setDefaultImplENSt3__110unique_ptrIS0_NS1_14default_deleteIS0_EEEE;
+ _ZN7android7IMemoryC2Ev;
+ _ZN7android7IMemoryD0Ev;
+ _ZN7android7IMemoryD1Ev;
+ _ZN7android7IMemoryD2Ev;
+ _ZN7android8BnMemory10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZN7android8BnMemoryC2Ev;
+ _ZN7android8BnMemoryD0Ev;
+ _ZN7android8BnMemoryD1Ev;
+ _ZN7android8BnMemoryD2Ev;
+ _ZN7android8BpBinder10onFirstRefEv;
+ _ZN7android8BpBinder10pingBinderEv;
+ _ZN7android8BpBinder11linkToDeathERKNS_2spINS_7IBinder14DeathRecipientEEEPvj;
+ _ZN7android8BpBinder12attachObjectEPKvPvS3_PFvS2_S3_S3_E;
+ _ZN7android8BpBinder12detachObjectEPKv;
+ _ZN7android8BpBinder12remoteBinderEv;
+ _ZN7android8BpBinder12sendObituaryEv;
+ _ZN7android8BpBinder12sTrackingMapE;
+ _ZN7android8BpBinder13getCountByUidERNS_6VectorIjEES3_;
+ _ZN7android8BpBinder13ObjectManager4killEv;
+ _ZN7android8BpBinder13ObjectManager6attachEPKvPvS4_PFvS3_S4_S4_E;
+ _ZN7android8BpBinder13ObjectManager6detachEPKv;
+ _ZN7android8BpBinder13ObjectManagerC1Ev;
+ _ZN7android8BpBinder13ObjectManagerC2Ev;
+ _ZN7android8BpBinder13ObjectManagerD1Ev;
+ _ZN7android8BpBinder13ObjectManagerD2Ev;
+ _ZN7android8BpBinder13sTrackingLockE;
+ _ZN7android8BpBinder13unlinkToDeathERKNS_2wpINS_7IBinder14DeathRecipientEEEPvjPS4_;
+ _ZN7android8BpBinder14reportOneDeathERKNS0_8ObituaryE;
+ _ZN7android8BpBinder14sLimitCallbackE;
+ _ZN7android8BpBinder15onLastStrongRefEPKv;
+ _ZN7android8BpBinder15sNumTrackedUidsE;
+ _ZN7android8BpBinder16enableCountByUidEv;
+ _ZN7android8BpBinder16setLimitCallbackEPFviE;
+ _ZN7android8BpBinder17disableCountByUidEv;
+ _ZN7android8BpBinder18sCountByUidEnabledE;
+ _ZN7android8BpBinder19getBinderProxyCountEj;
+ _ZN7android8BpBinder20onIncStrongAttemptedEjPKv;
+ _ZN7android8BpBinder20setCountByUidEnabledEb;
+ _ZN7android8BpBinder26sBinderProxyThrottleCreateE;
+ _ZN7android8BpBinder29sBinderProxyCountLowWatermarkE;
+ _ZN7android8BpBinder29setBinderProxyCountWatermarksEii;
+ _ZN7android8BpBinder30sBinderProxyCountHighWatermarkE;
+ _ZN7android8BpBinder4dumpEiRKNS_6VectorINS_8String16EEE;
+ _ZN7android8BpBinder6createEi;
+ _ZN7android8BpBinder6createERKNS_2spINS_10RpcSessionEEERKNS_10RpcAddressE;
+ _ZN7android8BpBinder8transactEjRKNS_6ParcelEPS1_j;
+ _ZN7android8BpBinderC1EONS0_12BinderHandleEi;
+ _ZN7android8BpBinderC1EONS0_9RpcHandleE;
+ _ZN7android8BpBinderC1EONSt3__17variantIJNS0_12BinderHandleENS0_9RpcHandleEEEE;
+ _ZN7android8BpBinderC2EONS0_12BinderHandleEi;
+ _ZN7android8BpBinderC2EONS0_9RpcHandleE;
+ _ZN7android8BpBinderC2EONSt3__17variantIJNS0_12BinderHandleENS0_9RpcHandleEEEE;
+ _ZN7android8BpBinderD0Ev;
+ _ZN7android8BpBinderD1Ev;
+ _ZN7android8BpBinderD2Ev;
+ _ZN7android8BpMemoryC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android8BpMemoryC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android8BpMemoryD0Ev;
+ _ZN7android8BpMemoryD1Ev;
+ _ZN7android8BpMemoryD2Ev;
+ _ZN7android8internal9Stability11getCategoryEPNS_7IBinderE;
+ _ZN7android8internal9Stability11levelStringENS1_5LevelE;
+ _ZN7android8internal9Stability13getLocalLevelEv;
+ _ZN7android8internal9Stability15isDeclaredLevelENS1_5LevelE;
+ _ZN7android8internal9Stability17debugLogStabilityERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS_7IBinderEEE;
+ _ZN7android8internal9Stability19markCompilationUnitEPNS_7IBinderE;
+ _ZN7android8internal9Stability22tryMarkCompilationUnitEPNS_7IBinderE;
+ _ZN7android8internal9Stability24requiresVintfDeclarationERKNS_2spINS_7IBinderEEE;
+ _ZN7android8internal9Stability25forceDowngradeToStabilityERKNS_2spINS_7IBinderEEENS1_5LevelE;
+ _ZN7android8internal9Stability30forceDowngradeToLocalStabilityERKNS_2spINS_7IBinderEEE;
+ _ZN7android8internal9Stability31forceDowngradeToSystemStabilityERKNS_2spINS_7IBinderEEE;
+ _ZN7android8internal9Stability31forceDowngradeToVendorStabilityERKNS_2spINS_7IBinderEEE;
+ _ZN7android8internal9Stability5checkENS1_8CategoryENS1_5LevelE;
+ _ZN7android8internal9Stability7setReprEPNS_7IBinderEij;
+ _ZN7android8internal9Stability8Category11debugStringEv;
+ _ZN7android8internal9Stability8markVndkEPNS_7IBinderE;
+ _ZN7android8internal9Stability9markVintfEPNS_7IBinderE;
+ _ZN7android8RpcState11CommandDataC1Ej;
+ _ZN7android8RpcState11CommandDataC2Ej;
+ _ZN7android8RpcState12countBindersEv;
+ _ZN7android8RpcState12getSessionIdERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEEPi;
+ _ZN7android8RpcState12waitForReplyERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEEPNS_6ParcelE;
+ _ZN7android8RpcState13getMaxThreadsERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEEPj;
+ _ZN7android8RpcState13getRootObjectERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEE;
+ _ZN7android8RpcState13sendDecStrongERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_10RpcAddressE;
+ _ZN7android8RpcState15onBinderLeavingERKNS_2spINS_10RpcSessionEEERKNS1_INS_7IBinderEEEPNS_10RpcAddressE;
+ _ZN7android8RpcState15processTransactERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEERKNS_13RpcWireHeaderE;
+ _ZN7android8RpcState16onBinderEnteringERKNS_2spINS_10RpcSessionEEERKNS_10RpcAddressE;
+ _ZN7android8RpcState16processDecStrongERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_13RpcWireHeaderE;
+ _ZN7android8RpcState20getAndExecuteCommandERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEE;
+ _ZN7android8RpcState20processServerCommandERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEERKNS_13RpcWireHeaderE;
+ _ZN7android8RpcState23processTransactInternalERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEENS0_11CommandDataE;
+ _ZN7android8RpcState4dumpEv;
+ _ZN7android8RpcState6rpcRecERKNS_4base14unique_fd_implINS1_13DefaultCloserEEEPKcPvj;
+ _ZN7android8RpcState7rpcSendERKNS_4base14unique_fd_implINS1_13DefaultCloserEEEPKcPKvj;
+ _ZN7android8RpcState8transactERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_10RpcAddressEjRKNS_6ParcelERKNS_2spINS_10RpcSessionEEEPSA_j;
+ _ZN7android8RpcState9terminateEv;
+ _ZN7android8RpcStateC1Ev;
+ _ZN7android8RpcStateC2Ev;
+ _ZN7android8RpcStateD1Ev;
+ _ZN7android8RpcStateD2Ev;
+ _ZN7android9BpRefBase10onFirstRefEv;
+ _ZN7android9BpRefBase15onLastStrongRefEPKv;
+ _ZN7android9BpRefBase20onIncStrongAttemptedEjPKv;
+ _ZN7android9BpRefBaseC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android9BpRefBaseC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android9BpRefBaseD0Ev;
+ _ZN7android9BpRefBaseD1Ev;
+ _ZN7android9BpRefBaseD2Ev;
+ _ZN7android9HeapCache10binderDiedERKNS_2wpINS_7IBinderEEE;
+ _ZN7android9HeapCache10dump_heapsEv;
+ _ZN7android9HeapCache8get_heapERKNS_2spINS_7IBinderEEE;
+ _ZN7android9HeapCache9find_heapERKNS_2spINS_7IBinderEEE;
+ _ZN7android9HeapCache9free_heapERKNS_2spINS_7IBinderEEE;
+ _ZN7android9HeapCache9free_heapERKNS_2wpINS_7IBinderEEE;
+ _ZN7android9HeapCacheC1Ev;
+ _ZN7android9HeapCacheC2Ev;
+ _ZN7android9HeapCacheD0Ev;
+ _ZN7android9HeapCacheD1Ev;
+ _ZN7android9HeapCacheD2Ev;
+ _ZN7android9hexStringEPKvj;
+ _ZN7android9RpcServer12listSessionsEv;
+ _ZN7android9RpcServer13getMaxThreadsEv;
+ _ZN7android9RpcServer13getRootObjectEv;
+ _ZN7android9RpcServer13releaseServerEv;
+ _ZN7android9RpcServer13setMaxThreadsEj;
+ _ZN7android9RpcServer13setRootObjectERKNS_2spINS_7IBinderEEE;
+ _ZN7android9RpcServer15setupInetServerEjPj;
+ _ZN7android9RpcServer16setupVsockServerEj;
+ _ZN7android9RpcServer17setRootObjectWeakERKNS_2wpINS_7IBinderEEE;
+ _ZN7android9RpcServer17setupSocketServerERKNS_16RpcSocketAddressE;
+ _ZN7android9RpcServer19establishConnectionEONS_2spIS0_EENS_4base14unique_fd_implINS4_13DefaultCloserEEE;
+ _ZN7android9RpcServer19setupExternalServerENS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZN7android9RpcServer20onSessionTerminatingERKNS_2spINS_10RpcSessionEEE;
+ _ZN7android9RpcServer21setupUnixDomainServerEPKc;
+ _ZN7android9RpcServer24numUninitializedSessionsEv;
+ _ZN7android9RpcServer4joinEv;
+ _ZN7android9RpcServer4makeEv;
+ _ZN7android9RpcServer61iUnderstandThisCodeIsExperimentalAndIWillNotUseItInProductionEv;
+ _ZN7android9RpcServer9acceptOneEv;
+ _ZN7android9RpcServer9hasServerEv;
+ _ZN7android9RpcServerC1Ev;
+ _ZN7android9RpcServerC2Ev;
+ _ZN7android9RpcServerD0Ev;
+ _ZN7android9RpcServerD1Ev;
+ _ZN7android9RpcServerD2Ev;
+ _ZN7androidlsERNS_10TextOutputERKNS_7HexDumpE;
+ _ZN7androidlsERNS_10TextOutputERKNS_8TypeCodeE;
+ _ZN7androidlsIA15_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA24_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA2_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA34_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA3_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA43_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA4_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA5_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA8_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA9_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIjEERNS_10TextOutputES2_RKT_;
+ _ZN7androidlsINSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEERNS_10TextOutputES9_RKT_;
+ _ZN7androidlsIPcEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIPvEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIyEERNS_10TextOutputES2_RKT_;
+ _ZNK7android10MemoryBase9getMemoryEPiPj;
+ _ZNK7android10RpcAddress13writeToParcelEPNS_6ParcelE;
+ _ZNK7android10RpcAddress15viewRawEmbeddedEv;
+ _ZNK7android10RpcAddress6isZeroEv;
+ _ZNK7android10RpcAddress8toStringEv;
+ _ZNK7android10RpcAddressltERKS0_;
+ _ZNK7android11IMemoryHeap22getInterfaceDescriptorEv;
+ _ZNK7android12BpMemoryHeap12assertMappedEv;
+ _ZNK7android12BpMemoryHeap18assertReallyMappedEv;
+ _ZNK7android12BpMemoryHeap7getBaseEv;
+ _ZNK7android12BpMemoryHeap7getSizeEv;
+ _ZNK7android12BpMemoryHeap8getFlagsEv;
+ _ZNK7android12BpMemoryHeap9getHeapIDEv;
+ _ZNK7android12BpMemoryHeap9getOffsetEv;
+ _ZNK7android12MemoryDealer4dumpEPKc;
+ _ZNK7android12MemoryDealer4heapEv;
+ _ZNK7android12MemoryDealer9allocatorEv;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE10do_compareEPKvSA_;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE10do_destroyEPvj;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE12do_constructEPvj;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE15do_move_forwardEPvPKvj;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE16do_move_backwardEPvPKvj;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE7do_copyEPvPKvj;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE8do_splatEPvPKvj;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE10do_compareES3_S3_;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE10do_destroyEPvj;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE12do_constructEPvj;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE15do_move_forwardEPvS3_j;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE16do_move_backwardEPvS3_j;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE7do_copyEPvS3_j;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE8do_splatEPvS3_j;
+ _ZNK7android14IPCThreadState13getCallingPidEv;
+ _ZNK7android14IPCThreadState13getCallingSidEv;
+ _ZNK7android14IPCThreadState13getCallingUidEv;
+ _ZNK7android14IPCThreadState18getCallRestrictionEv;
+ _ZNK7android14IPCThreadState19getStrictModePolicyEv;
+ _ZNK7android14IPCThreadState22getServingStackPointerEv;
+ _ZNK7android14IPCThreadState23getCallingWorkSourceUidEv;
+ _ZNK7android14IPCThreadState25shouldPropagateWorkSourceEv;
+ _ZNK7android14IPCThreadState29getLastTransactionBinderFlagsEv;
+ _ZNK7android14IShellCallback22getInterfaceDescriptorEv;
+ _ZNK7android14MemoryHeapBase7getBaseEv;
+ _ZNK7android14MemoryHeapBase7getSizeEv;
+ _ZNK7android14MemoryHeapBase8getFlagsEv;
+ _ZNK7android14MemoryHeapBase9getDeviceEv;
+ _ZNK7android14MemoryHeapBase9getHeapIDEv;
+ _ZNK7android14MemoryHeapBase9getOffsetEv;
+ _ZNK7android15IResultReceiver22getInterfaceDescriptorEv;
+ _ZNK7android15IServiceManager22getInterfaceDescriptorEv;
+ _ZNK7android18BufferedTextOutput9getBufferEv;
+ _ZNK7android18ServiceManagerShim10getServiceERKNS_8String16E;
+ _ZNK7android18ServiceManagerShim12checkServiceERKNS_8String16E;
+ _ZNK7android22SimpleBestFitAllocator4dumpEPKc;
+ _ZNK7android22SimpleBestFitAllocator4dumpERNS_7String8EPKc;
+ _ZNK7android22SimpleBestFitAllocator4sizeEv;
+ _ZNK7android22SimpleBestFitAllocator6dump_lEPKc;
+ _ZNK7android22SimpleBestFitAllocator6dump_lERNS_7String8EPKc;
+ _ZNK7android2os15IClientCallback22getInterfaceDescriptorEv;
+ _ZNK7android2os15IServiceManager22getInterfaceDescriptorEv;
+ _ZNK7android2os16IServiceCallback22getInterfaceDescriptorEv;
+ _ZNK7android2os16ParcelableHolder13writeToParcelEPNS_6ParcelE;
+ _ZNK7android2os16ServiceDebugInfo13writeToParcelEPNS_6ParcelE;
+ _ZNK7android2os17PersistableBundle10getBooleanERKNS_8String16EPb;
+ _ZNK7android2os17PersistableBundle10getIntKeysEv;
+ _ZNK7android2os17PersistableBundle11getLongKeysEv;
+ _ZNK7android2os17PersistableBundle12getIntVectorERKNS_8String16EPNSt3__16vectorIiNS5_9allocatorIiEEEE;
+ _ZNK7android2os17PersistableBundle13getDoubleKeysEv;
+ _ZNK7android2os17PersistableBundle13getLongVectorERKNS_8String16EPNSt3__16vectorIxNS5_9allocatorIxEEEE;
+ _ZNK7android2os17PersistableBundle13getStringKeysEv;
+ _ZNK7android2os17PersistableBundle13writeToParcelEPNS_6ParcelE;
+ _ZNK7android2os17PersistableBundle14getBooleanKeysEv;
+ _ZNK7android2os17PersistableBundle15getDoubleVectorERKNS_8String16EPNSt3__16vectorIdNS5_9allocatorIdEEEE;
+ _ZNK7android2os17PersistableBundle15getStringVectorERKNS_8String16EPNSt3__16vectorIS2_NS5_9allocatorIS2_EEEE;
+ _ZNK7android2os17PersistableBundle16getBooleanVectorERKNS_8String16EPNSt3__16vectorIbNS5_9allocatorIbEEEE;
+ _ZNK7android2os17PersistableBundle16getIntVectorKeysEv;
+ _ZNK7android2os17PersistableBundle17getLongVectorKeysEv;
+ _ZNK7android2os17PersistableBundle18writeToParcelInnerEPNS_6ParcelE;
+ _ZNK7android2os17PersistableBundle19getDoubleVectorKeysEv;
+ _ZNK7android2os17PersistableBundle19getStringVectorKeysEv;
+ _ZNK7android2os17PersistableBundle20getBooleanVectorKeysEv;
+ _ZNK7android2os17PersistableBundle20getPersistableBundleERKNS_8String16EPS1_;
+ _ZNK7android2os17PersistableBundle24getPersistableBundleKeysEv;
+ _ZNK7android2os17PersistableBundle4sizeEv;
+ _ZNK7android2os17PersistableBundle5emptyEv;
+ _ZNK7android2os17PersistableBundle6getIntERKNS_8String16EPi;
+ _ZNK7android2os17PersistableBundle7getLongERKNS_8String16EPx;
+ _ZNK7android2os17PersistableBundle9getDoubleERKNS_8String16EPd;
+ _ZNK7android2os17PersistableBundle9getStringERKNS_8String16EPS2_;
+ _ZNK7android2os20ParcelFileDescriptor13writeToParcelEPNS_6ParcelE;
+ _ZNK7android6binder6Status13writeToParcelEPNS_6ParcelE;
+ _ZNK7android6binder6Status9toString8Ev;
+ _ZNK7android6Parcel10errorCheckEv;
+ _ZNK7android6Parcel10ipcObjectsEv;
+ _ZNK7android6Parcel10readDoubleEPd;
+ _ZNK7android6Parcel10readDoubleEv;
+ _ZNK7android6Parcel10readObjectEb;
+ _ZNK7android6Parcel10readUint32EPj;
+ _ZNK7android6Parcel10readUint32Ev;
+ _ZNK7android6Parcel10readUint64EPy;
+ _ZNK7android6Parcel10readUint64Ev;
+ _ZNK7android6Parcel10scanForFdsEv;
+ _ZNK7android6Parcel11ipcDataSizeEv;
+ _ZNK7android6Parcel11readCStringEv;
+ _ZNK7android6Parcel11readInplaceEj;
+ _ZNK7android6Parcel11readPointerEPj;
+ _ZNK7android6Parcel11readPointerEv;
+ _ZNK7android6Parcel11readString8EPNS_7String8E;
+ _ZNK7android6Parcel11readString8Ev;
+ _ZNK7android6Parcel12dataCapacityEv;
+ _ZNK7android6Parcel12dataPositionEv;
+ _ZNK7android6Parcel12objectsCountEv;
+ _ZNK7android6Parcel12readString16EPNS_8String16E;
+ _ZNK7android6Parcel12readString16EPNSt3__110unique_ptrINS_8String16ENS1_14default_deleteIS3_EEEE;
+ _ZNK7android6Parcel12readString16EPNSt3__18optionalINS_8String16EEE;
+ _ZNK7android6Parcel12readString16Ev;
+ _ZNK7android6Parcel13markSensitiveEv;
+ _ZNK7android6Parcel14checkInterfaceEPNS_7IBinderE;
+ _ZNK7android6Parcel14readBoolVectorEPNSt3__110unique_ptrINS1_6vectorIbNS1_9allocatorIbEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel14readBoolVectorEPNSt3__16vectorIbNS1_9allocatorIbEEEE;
+ _ZNK7android6Parcel14readBoolVectorEPNSt3__18optionalINS1_6vectorIbNS1_9allocatorIbEEEEEE;
+ _ZNK7android6Parcel14readByteVectorEPNSt3__110unique_ptrINS1_6vectorIaNS1_9allocatorIaEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel14readByteVectorEPNSt3__110unique_ptrINS1_6vectorIhNS1_9allocatorIhEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel14readByteVectorEPNSt3__16vectorIaNS1_9allocatorIaEEEE;
+ _ZNK7android6Parcel14readByteVectorEPNSt3__16vectorIhNS1_9allocatorIhEEEE;
+ _ZNK7android6Parcel14readByteVectorEPNSt3__18optionalINS1_6vectorIaNS1_9allocatorIaEEEEEE;
+ _ZNK7android6Parcel14readByteVectorEPNSt3__18optionalINS1_6vectorIhNS1_9allocatorIhEEEEEE;
+ _ZNK7android6Parcel14readCharVectorEPNSt3__110unique_ptrINS1_6vectorIDsNS1_9allocatorIDsEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel14readCharVectorEPNSt3__16vectorIDsNS1_9allocatorIDsEEEE;
+ _ZNK7android6Parcel14readCharVectorEPNSt3__18optionalINS1_6vectorIDsNS1_9allocatorIDsEEEEEE;
+ _ZNK7android6Parcel14readParcelableEPNS_10ParcelableE;
+ _ZNK7android6Parcel15ipcObjectsCountEv;
+ _ZNK7android6Parcel15readFloatVectorEPNSt3__110unique_ptrINS1_6vectorIfNS1_9allocatorIfEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel15readFloatVectorEPNSt3__16vectorIfNS1_9allocatorIfEEEE;
+ _ZNK7android6Parcel15readFloatVectorEPNSt3__18optionalINS1_6vectorIfNS1_9allocatorIfEEEEEE;
+ _ZNK7android6Parcel15readInt32VectorEPNSt3__110unique_ptrINS1_6vectorIiNS1_9allocatorIiEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel15readInt32VectorEPNSt3__16vectorIiNS1_9allocatorIiEEEE;
+ _ZNK7android6Parcel15readInt32VectorEPNSt3__18optionalINS1_6vectorIiNS1_9allocatorIiEEEEEE;
+ _ZNK7android6Parcel15readInt64VectorEPNSt3__110unique_ptrINS1_6vectorIxNS1_9allocatorIxEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel15readInt64VectorEPNSt3__16vectorIxNS1_9allocatorIxEEEE;
+ _ZNK7android6Parcel15readInt64VectorEPNSt3__18optionalINS1_6vectorIxNS1_9allocatorIxEEEEEE;
+ _ZNK7android6Parcel15setDataPositionEj;
+ _ZNK7android6Parcel15unflattenBinderEPNS_2spINS_7IBinderEEE;
+ _ZNK7android6Parcel16enforceInterfaceEPKDsjPNS_14IPCThreadStateE;
+ _ZNK7android6Parcel16enforceInterfaceERKNS_8String16EPNS_14IPCThreadStateE;
+ _ZNK7android6Parcel16readDoubleVectorEPNSt3__110unique_ptrINS1_6vectorIdNS1_9allocatorIdEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel16readDoubleVectorEPNSt3__16vectorIdNS1_9allocatorIdEEEE;
+ _ZNK7android6Parcel16readDoubleVectorEPNSt3__18optionalINS1_6vectorIdNS1_9allocatorIdEEEEEE;
+ _ZNK7android6Parcel16readNativeHandleEv;
+ _ZNK7android6Parcel16readStrongBinderEPNS_2spINS_7IBinderEEE;
+ _ZNK7android6Parcel16readStrongBinderEv;
+ _ZNK7android6Parcel16readStrongBinderINS_2os15IClientCallbackEEEiPNS_2spIT_EE;
+ _ZNK7android6Parcel16readStrongBinderINS_2os16IServiceCallbackEEEiPNS_2spIT_EE;
+ _ZNK7android6Parcel16readStrongBinderINS_7content2pm22IPackageChangeObserverEEEiPNS_2spIT_EE;
+ _ZNK7android6Parcel16readUint64VectorEPNSt3__110unique_ptrINS1_6vectorIyNS1_9allocatorIyEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel16readUint64VectorEPNSt3__16vectorIyNS1_9allocatorIyEEEE;
+ _ZNK7android6Parcel16readUint64VectorEPNSt3__18optionalINS1_6vectorIyNS1_9allocatorIyEEEEEE;
+ _ZNK7android6Parcel16validateReadDataEj;
+ _ZNK7android6Parcel17getBlobAshmemSizeEv;
+ _ZNK7android6Parcel17getOpenAshmemSizeEv;
+ _ZNK7android6Parcel17readExceptionCodeEv;
+ _ZNK7android6Parcel17readUtf8FromUtf16EPNSt3__110unique_ptrINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS1_14default_deleteIS8_EEEE;
+ _ZNK7android6Parcel17readUtf8FromUtf16EPNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE;
+ _ZNK7android6Parcel17readUtf8FromUtf16EPNSt3__18optionalINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEE;
+ _ZNK7android6Parcel18hasFileDescriptorsEv;
+ _ZNK7android6Parcel18readFileDescriptorEv;
+ _ZNK7android6Parcel18readString16VectorEPNSt3__110unique_ptrINS1_6vectorINS2_INS_8String16ENS1_14default_deleteIS4_EEEENS1_9allocatorIS7_EEEENS5_ISA_EEEE;
+ _ZNK7android6Parcel18readString16VectorEPNSt3__16vectorINS_8String16ENS1_9allocatorIS3_EEEE;
+ _ZNK7android6Parcel18readString16VectorEPNSt3__18optionalINS1_6vectorINS2_INS_8String16EEENS1_9allocatorIS5_EEEEEE;
+ _ZNK7android6Parcel18readString8InplaceEPj;
+ _ZNK7android6Parcel19readString16InplaceEPj;
+ _ZNK7android6Parcel21finishUnflattenBinderERKNS_2spINS_7IBinderEEEPS3_;
+ _ZNK7android6Parcel22readStrongBinderVectorEPNSt3__110unique_ptrINS1_6vectorINS_2spINS_7IBinderEEENS1_9allocatorIS6_EEEENS1_14default_deleteIS9_EEEE;
+ _ZNK7android6Parcel22readStrongBinderVectorEPNSt3__16vectorINS_2spINS_7IBinderEEENS1_9allocatorIS5_EEEE;
+ _ZNK7android6Parcel22readStrongBinderVectorEPNSt3__18optionalINS1_6vectorINS_2spINS_7IBinderEEENS1_9allocatorIS6_EEEEEE;
+ _ZNK7android6Parcel24readCallingWorkSourceUidEv;
+ _ZNK7android6Parcel24readNullableStrongBinderEPNS_2spINS_7IBinderEEE;
+ _ZNK7android6Parcel24readParcelFileDescriptorEv;
+ _ZNK7android6Parcel24readUniqueFileDescriptorEPNS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZNK7android6Parcel29readUtf8VectorFromUtf16VectorEPNSt3__110unique_ptrINS1_6vectorINS2_INS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS1_14default_deleteIS9_EEEENS7_ISC_EEEENSA_ISE_EEEE;
+ _ZNK7android6Parcel29readUtf8VectorFromUtf16VectorEPNSt3__16vectorINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS6_IS8_EEEE;
+ _ZNK7android6Parcel29readUtf8VectorFromUtf16VectorEPNSt3__18optionalINS1_6vectorINS2_INS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEENS7_ISA_EEEEEE;
+ _ZNK7android6Parcel30readUniqueFileDescriptorVectorEPNSt3__110unique_ptrINS1_6vectorINS_4base14unique_fd_implINS4_13DefaultCloserEEENS1_9allocatorIS7_EEEENS1_14default_deleteISA_EEEE;
+ _ZNK7android6Parcel30readUniqueFileDescriptorVectorEPNSt3__16vectorINS_4base14unique_fd_implINS3_13DefaultCloserEEENS1_9allocatorIS6_EEEE;
+ _ZNK7android6Parcel30readUniqueFileDescriptorVectorEPNSt3__18optionalINS1_6vectorINS_4base14unique_fd_implINS4_13DefaultCloserEEENS1_9allocatorIS7_EEEEEE;
+ _ZNK7android6Parcel30readUniqueParcelFileDescriptorEPNS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZNK7android6Parcel37updateWorkSourceRequestHeaderPositionEv;
+ _ZNK7android6Parcel4dataEv;
+ _ZNK7android6Parcel4readEPvj;
+ _ZNK7android6Parcel4readERNS0_26FlattenableHelperInterfaceE;
+ _ZNK7android6Parcel5printERNS_10TextOutputEj;
+ _ZNK7android6Parcel7ipcDataEv;
+ _ZNK7android6Parcel8allowFdsEv;
+ _ZNK7android6Parcel8dataSizeEv;
+ _ZNK7android6Parcel8isForRpcEv;
+ _ZNK7android6Parcel8readBlobEjPNS0_12ReadableBlobE;
+ _ZNK7android6Parcel8readBoolEPb;
+ _ZNK7android6Parcel8readBoolEv;
+ _ZNK7android6Parcel8readByteEPa;
+ _ZNK7android6Parcel8readByteEv;
+ _ZNK7android6Parcel8readCharEPDs;
+ _ZNK7android6Parcel8readCharEv;
+ _ZNK7android6Parcel9dataAvailEv;
+ _ZNK7android6Parcel9readFloatEPf;
+ _ZNK7android6Parcel9readFloatEv;
+ _ZNK7android6Parcel9readInt32EPi;
+ _ZNK7android6Parcel9readInt32Ev;
+ _ZNK7android6Parcel9readInt64EPx;
+ _ZNK7android6Parcel9readInt64Ev;
+ _ZNK7android6VectorIiE10do_destroyEPvj;
+ _ZNK7android6VectorIiE12do_constructEPvj;
+ _ZNK7android6VectorIiE15do_move_forwardEPvPKvj;
+ _ZNK7android6VectorIiE16do_move_backwardEPvPKvj;
+ _ZNK7android6VectorIiE7do_copyEPvPKvj;
+ _ZNK7android6VectorIiE8do_splatEPvPKvj;
+ _ZNK7android6VectorINS_12ProcessState12handle_entryEE10do_destroyEPvj;
+ _ZNK7android6VectorINS_12ProcessState12handle_entryEE12do_constructEPvj;
+ _ZNK7android6VectorINS_12ProcessState12handle_entryEE15do_move_forwardEPvPKvj;
+ _ZNK7android6VectorINS_12ProcessState12handle_entryEE16do_move_backwardEPvPKvj;
+ _ZNK7android6VectorINS_12ProcessState12handle_entryEE7do_copyEPvPKvj;
+ _ZNK7android6VectorINS_12ProcessState12handle_entryEE8do_splatEPvPKvj;
+ _ZNK7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEE10do_destroyEPvj;
+ _ZNK7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEE12do_constructEPvj;
+ _ZNK7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEE15do_move_forwardEPvPKvj;
+ _ZNK7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEE16do_move_backwardEPvPKvj;
+ _ZNK7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEE7do_copyEPvPKvj;
+ _ZNK7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEE8do_splatEPvPKvj;
+ _ZNK7android6VectorINS_8BpBinder8ObituaryEE10do_destroyEPvj;
+ _ZNK7android6VectorINS_8BpBinder8ObituaryEE12do_constructEPvj;
+ _ZNK7android6VectorINS_8BpBinder8ObituaryEE15do_move_forwardEPvPKvj;
+ _ZNK7android6VectorINS_8BpBinder8ObituaryEE16do_move_backwardEPvPKvj;
+ _ZNK7android6VectorINS_8BpBinder8ObituaryEE7do_copyEPvPKvj;
+ _ZNK7android6VectorINS_8BpBinder8ObituaryEE8do_splatEPvPKvj;
+ _ZNK7android6VectorINS_8String16EE10do_destroyEPvj;
+ _ZNK7android6VectorINS_8String16EE12do_constructEPvj;
+ _ZNK7android6VectorINS_8String16EE15do_move_forwardEPvPKvj;
+ _ZNK7android6VectorINS_8String16EE16do_move_backwardEPvPKvj;
+ _ZNK7android6VectorINS_8String16EE7do_copyEPvPKvj;
+ _ZNK7android6VectorINS_8String16EE8do_splatEPvPKvj;
+ _ZNK7android6VectorIPNS_7BBinderEE10do_destroyEPvj;
+ _ZNK7android6VectorIPNS_7BBinderEE12do_constructEPvj;
+ _ZNK7android6VectorIPNS_7BBinderEE15do_move_forwardEPvPKvj;
+ _ZNK7android6VectorIPNS_7BBinderEE16do_move_backwardEPvPKvj;
+ _ZNK7android6VectorIPNS_7BBinderEE7do_copyEPvPKvj;
+ _ZNK7android6VectorIPNS_7BBinderEE8do_splatEPvPKvj;
+ _ZNK7android6VectorIPNS_7RefBase12weakref_typeEE10do_destroyEPvj;
+ _ZNK7android6VectorIPNS_7RefBase12weakref_typeEE12do_constructEPvj;
+ _ZNK7android6VectorIPNS_7RefBase12weakref_typeEE15do_move_forwardEPvPKvj;
+ _ZNK7android6VectorIPNS_7RefBase12weakref_typeEE16do_move_backwardEPvPKvj;
+ _ZNK7android6VectorIPNS_7RefBase12weakref_typeEE7do_copyEPvPKvj;
+ _ZNK7android6VectorIPNS_7RefBase12weakref_typeEE8do_splatEPvPKvj;
+ _ZNK7android6VectorIPNS_7RefBaseEE10do_destroyEPvj;
+ _ZNK7android6VectorIPNS_7RefBaseEE12do_constructEPvj;
+ _ZNK7android6VectorIPNS_7RefBaseEE15do_move_forwardEPvPKvj;
+ _ZNK7android6VectorIPNS_7RefBaseEE16do_move_backwardEPvPKvj;
+ _ZNK7android6VectorIPNS_7RefBaseEE7do_copyEPvPKvj;
+ _ZNK7android6VectorIPNS_7RefBaseEE8do_splatEPvPKvj;
+ _ZNK7android7BBinder10findObjectEPKv;
+ _ZNK7android7BBinder13isBinderAliveEv;
+ _ZNK7android7BBinder22getInterfaceDescriptorEv;
+ _ZNK7android7content2pm18PackageChangeEvent13writeToParcelEPNS_6ParcelE;
+ _ZNK7android7content2pm21IPackageManagerNative22getInterfaceDescriptorEv;
+ _ZNK7android7content2pm22IPackageChangeObserver22getInterfaceDescriptorEv;
+ _ZNK7android7IBinder13checkSubclassEPKv;
+ _ZNK7android7IMemory11fastPointerERKNS_2spINS_7IBinderEEEi;
+ _ZNK7android7IMemory15unsecurePointerEv;
+ _ZNK7android7IMemory22getInterfaceDescriptorEv;
+ _ZNK7android7IMemory4sizeEv;
+ _ZNK7android7IMemory6offsetEv;
+ _ZNK7android7IMemory7pointerEv;
+ _ZNK7android8BpBinder10findObjectEPKv;
+ _ZNK7android8BpBinder10rpcAddressEv;
+ _ZNK7android8BpBinder10rpcSessionEv;
+ _ZNK7android8BpBinder11isRpcBinderEv;
+ _ZNK7android8BpBinder12binderHandleEv;
+ _ZNK7android8BpBinder13isBinderAliveEv;
+ _ZNK7android8BpBinder13ObjectManager4findEPKv;
+ _ZNK7android8BpBinder18isDescriptorCachedEv;
+ _ZNK7android8BpBinder22getInterfaceDescriptorEv;
+ _ZNK7android8BpMemory9getMemoryEPiPj;
+ _ZNKSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE3strEv;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE4findIS3_EENS_21__tree_const_iteratorIS6_PNS_11__tree_nodeIS6_PvEEiEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIxNS_9allocatorIxEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ExEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEN7android6binder8internal25ClientCounterCallbackImpl7ServiceEEENS_19__map_value_compareIS7_SD_NS_4lessIS7_EELb1EEENS5_ISD_EEE14__count_uniqueIS7_EEjRKT_;
+ _ZNSt3__111__sift_downIRNS_4lessIN7android8RpcState10BinderNode9AsyncTodoEEENS_11__wrap_iterIPS5_EEEEvT0_SB_T_NS_15iterator_traitsISB_E15difference_typeESB_;
+ _ZNSt3__111unique_lockINS_5mutexEE6unlockEv;
+ _ZNSt3__112__hash_tableINS_17__hash_value_typeIijEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE14__erase_uniqueIiEEjRKT_;
+ _ZNSt3__112__hash_tableINS_17__hash_value_typeIijEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE25__emplace_unique_key_argsIiJRKNS_21piecewise_construct_tENS_5tupleIJRKiEEENSI_IJEEEEEENS_4pairINS_15__hash_iteratorIPNS_11__hash_nodeIS2_PvEEEEbEERKT_DpOT0_;
+ _ZNSt3__112__hash_tableINS_17__hash_value_typeIijEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE6rehashEj;
+ _ZNSt3__112__hash_tableINS_17__hash_value_typeIijEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE6removeENS_21__hash_const_iteratorIPNS_11__hash_nodeIS2_PvEEEE;
+ _ZNSt3__112__hash_tableINS_17__hash_value_typeIijEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE8__rehashEj;
+ _ZNSt3__113__tree_removeIPNS_16__tree_node_baseIPvEEEEvT_S5_;
+ _ZNSt3__113unordered_mapIijNS_4hashIiEENS_8equal_toIiEENS_9allocatorINS_4pairIKijEEEEEixERS7_;
+ _ZNSt3__114__copy_alignedINS_6vectorIbNS_9allocatorIbEEEELb0EEENS_14__bit_iteratorIT_Lb0EXLi0EEEENS5_IS6_XT0_EXLi0EEEES8_S7_;
+ _ZNSt3__114__copy_alignedINS_6vectorIbNS_9allocatorIbEEEELb1EEENS_14__bit_iteratorIT_Lb0EXLi0EEEENS5_IS6_XT0_EXLi0EEEES8_S7_;
+ _ZNSt3__114__thread_proxyINS_5tupleIJNS_10unique_ptrINS_15__thread_structENS_14default_deleteIS3_EEEEMN7android9RpcServerEFvONS7_2spIS8_EENS7_4base14unique_fd_implINSC_13DefaultCloserEEEEPS8_SA_SF_EEEEEPvSK_;
+ _ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE7seekoffExNS_8ios_base7seekdirEj;
+ _ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE8overflowEi;
+ _ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE9pbackfailEi;
+ _ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE9underflowEv;
+ _ZNSt3__116__copy_unalignedINS_6vectorIbNS_9allocatorIbEEEELb0EEENS_14__bit_iteratorIT_Lb0EXLi0EEEENS5_IS6_XT0_EXLi0EEEES8_S7_;
+ _ZNSt3__116__copy_unalignedINS_6vectorIbNS_9allocatorIbEEEELb1EEENS_14__bit_iteratorIT_Lb0EXLi0EEEENS5_IS6_XT0_EXLi0EEEES8_S7_;
+ _ZNSt3__120__shared_ptr_emplaceIN7android14RpcWireAddressENS_9allocatorIS2_EEE16__on_zero_sharedEv;
+ _ZNSt3__120__shared_ptr_emplaceIN7android14RpcWireAddressENS_9allocatorIS2_EEE21__on_zero_shared_weakEv;
+ _ZNSt3__120__shared_ptr_emplaceIN7android6binder8internal21ClientCounterCallbackENS_9allocatorIS4_EEE16__on_zero_sharedEv;
+ _ZNSt3__120__shared_ptr_emplaceIN7android6binder8internal21ClientCounterCallbackENS_9allocatorIS4_EEE21__on_zero_shared_weakEv;
+ _ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_j;
+ _ZNSt3__127__tree_balance_after_insertIPNS_16__tree_node_baseIPvEEEEvT_S5_;
+ _ZNSt3__13mapIiN7android2spINS1_10RpcSessionEEENS_4lessIiEENS_9allocatorINS_4pairIKiS4_EEEEEixERS9_;
+ _ZNSt3__13mapIN7android8String16EbNS_4lessIS2_EENS_9allocatorINS_4pairIKS2_bEEEEEixERS7_;
+ _ZNSt3__13mapIN7android8String16EdNS_4lessIS2_EENS_9allocatorINS_4pairIKS2_dEEEEEixERS7_;
+ _ZNSt3__13mapIN7android8String16EiNS_4lessIS2_EENS_9allocatorINS_4pairIKS2_iEEEEEixERS7_;
+ _ZNSt3__13mapIN7android8String16ENS1_2os17PersistableBundleENS_4lessIS2_EENS_9allocatorINS_4pairIKS2_S4_EEEEEixERS9_;
+ _ZNSt3__13mapIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEENS_4lessIS2_EENS4_INS_4pairIKS2_S6_EEEEEixERSA_;
+ _ZNSt3__13mapIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEENS_4lessIS2_EENS4_INS_4pairIKS2_S6_EEEEEixERSA_;
+ _ZNSt3__13mapIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEENS_4lessIS2_EENS4_INS_4pairIKS2_S6_EEEEEixERSA_;
+ _ZNSt3__13mapIN7android8String16ENS_6vectorIS2_NS_9allocatorIS2_EEEENS_4lessIS2_EENS4_INS_4pairIKS2_S6_EEEEEixERSA_;
+ _ZNSt3__13mapIN7android8String16ENS_6vectorIxNS_9allocatorIxEEEENS_4lessIS2_EENS4_INS_4pairIKS2_S6_EEEEEixERSA_;
+ _ZNSt3__13mapIN7android8String16ES2_NS_4lessIS2_EENS_9allocatorINS_4pairIKS2_S2_EEEEEixERS7_;
+ _ZNSt3__13mapIN7android8String16ExNS_4lessIS2_EENS_9allocatorINS_4pairIKS2_xEEEEEixERS7_;
+ _ZNSt3__16__treeIN7android8String16ENS_4lessIS2_EENS_9allocatorIS2_EEE12__find_equalIS2_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISC_EERKT_;
+ _ZNSt3__16__treeIN7android8String16ENS_4lessIS2_EENS_9allocatorIS2_EEE25__emplace_unique_key_argsIS2_JRKS2_EEENS_4pairINS_15__tree_iteratorIS2_PNS_11__tree_nodeIS2_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeIN7android8String16ENS_4lessIS2_EENS_9allocatorIS2_EEE7destroyEPNS_11__tree_nodeIS2_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIiN7android2spINS2_10RpcSessionEEEEENS_19__map_value_compareIiS6_NS_4lessIiEELb1EEENS_9allocatorIS6_EEE5eraseENS_21__tree_const_iteratorIS6_PNS_11__tree_nodeIS6_PvEEiEE;
+ _ZNSt3__16__treeINS_12__value_typeIiN7android2spINS2_10RpcSessionEEEEENS_19__map_value_compareIiS6_NS_4lessIiEELb1EEENS_9allocatorIS6_EEE7destroyEPNS_11__tree_nodeIS6_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android10RpcAddressENS2_8RpcState10BinderNodeEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE25__emplace_unique_key_argsIS3_JNS_4pairIKS3_S5_EEEEENSF_INS_15__tree_iteratorIS6_PNS_11__tree_nodeIS6_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android10RpcAddressENS2_8RpcState10BinderNodeEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE7destroyEPNS_11__tree_nodeIS6_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_SE_EEiEERPNS_15__tree_end_nodeISG_EESH_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISG_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE14__assign_multiINS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEEEvT_SJ_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE15__emplace_multiIJRKNS_4pairIKS3_bEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSG_IJEEEEEENS_4pairINS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_bEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEENS_21__tree_const_iteratorIS4_SM_iEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE7destroyEPNS_11__tree_nodeIS4_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_SE_EEiEERPNS_15__tree_end_nodeISG_EESH_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISG_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE14__assign_multiINS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEEEvT_SJ_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE15__emplace_multiIJRKNS_4pairIKS3_dEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSG_IJEEEEEENS_4pairINS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_dEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEENS_21__tree_const_iteratorIS4_SM_iEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE7destroyEPNS_11__tree_nodeIS4_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_SE_EEiEERPNS_15__tree_end_nodeISG_EESH_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISG_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE14__assign_multiINS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEEEvT_SJ_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE15__emplace_multiIJRKNS_4pairIKS3_iEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSG_IJEEEEEENS_4pairINS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_iEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEENS_21__tree_const_iteratorIS4_SM_iEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE7destroyEPNS_11__tree_nodeIS4_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS6_PNS_11__tree_nodeIS6_SG_EEiEERPNS_15__tree_end_nodeISI_EESJ_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISI_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE14__assign_multiINS_21__tree_const_iteratorIS6_PNS_11__tree_nodeIS6_PvEEiEEEEvT_SL_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE14__erase_uniqueIS3_EEjRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE15__emplace_multiIJRKNS_4pairIKS3_S5_EEEEENS_15__tree_iteratorIS6_PNS_11__tree_nodeIS6_PvEEiEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSI_IJEEEEEENS_4pairINS_15__tree_iteratorIS6_PNS_11__tree_nodeIS6_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S5_EEEEENS_15__tree_iteratorIS6_PNS_11__tree_nodeIS6_PvEEiEENS_21__tree_const_iteratorIS6_SO_iEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE4findIS3_EENS_15__tree_iteratorIS6_PNS_11__tree_nodeIS6_PvEEiEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE5eraseENS_21__tree_const_iteratorIS6_PNS_11__tree_nodeIS6_PvEEiEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE7destroyEPNS_11__tree_nodeIS6_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_SH_EEiEERPNS_15__tree_end_nodeISJ_EESK_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISJ_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__assign_multiINS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEEEvT_SM_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__erase_uniqueIS3_EEjRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE15__emplace_multiIJRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSJ_IJEEEEEENS_4pairINS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEENS_21__tree_const_iteratorIS8_SP_iEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE5eraseENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE7destroyEPNS_11__tree_nodeIS8_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_SH_EEiEERPNS_15__tree_end_nodeISJ_EESK_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISJ_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__assign_multiINS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEEEvT_SM_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__erase_uniqueIS3_EEjRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE15__emplace_multiIJRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSJ_IJEEEEEENS_4pairINS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEENS_21__tree_const_iteratorIS8_SP_iEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE5eraseENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE7destroyEPNS_11__tree_nodeIS8_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_SH_EEiEERPNS_15__tree_end_nodeISJ_EESK_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISJ_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__assign_multiINS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEEEvT_SM_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__erase_uniqueIS3_EEjRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE15__emplace_multiIJRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSJ_IJEEEEEENS_4pairINS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEENS_21__tree_const_iteratorIS8_SP_iEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE5eraseENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE7destroyEPNS_11__tree_nodeIS8_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_SH_EEiEERPNS_15__tree_end_nodeISJ_EESK_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISJ_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__assign_multiINS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEEEvT_SM_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__erase_uniqueIS3_EEjRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE15__emplace_multiIJRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSJ_IJEEEEEENS_4pairINS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEENS_21__tree_const_iteratorIS8_SP_iEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE5eraseENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE7destroyEPNS_11__tree_nodeIS8_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIxNS_9allocatorIxEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_SH_EEiEERPNS_15__tree_end_nodeISJ_EESK_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIxNS_9allocatorIxEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISJ_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIxNS_9allocatorIxEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__assign_multiINS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEEEvT_SM_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIxNS_9allocatorIxEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__erase_uniqueIS3_EEjRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIxNS_9allocatorIxEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE15__emplace_multiIJRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIxNS_9allocatorIxEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSJ_IJEEEEEENS_4pairINS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIxNS_9allocatorIxEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEENS_21__tree_const_iteratorIS8_SP_iEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIxNS_9allocatorIxEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIxNS_9allocatorIxEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE5eraseENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEEiEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIxNS_9allocatorIxEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE7destroyEPNS_11__tree_nodeIS8_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_SE_EEiEERPNS_15__tree_end_nodeISG_EESH_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISG_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE14__assign_multiINS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEEEvT_SJ_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE14__erase_uniqueIS3_EEjRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE15__emplace_multiIJRKNS_4pairIKS3_S3_EEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSG_IJEEEEEENS_4pairINS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S3_EEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEENS_21__tree_const_iteratorIS4_SM_iEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE5eraseENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE7destroyEPNS_11__tree_nodeIS4_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ExEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_SE_EEiEERPNS_15__tree_end_nodeISG_EESH_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ExEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISG_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ExEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE14__assign_multiINS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEEEvT_SJ_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ExEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE15__emplace_multiIJRKNS_4pairIKS3_xEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ExEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSG_IJEEEEEENS_4pairINS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ExEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_xEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEENS_21__tree_const_iteratorIS4_SM_iEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ExEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEEiEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ExEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE7destroyEPNS_11__tree_nodeIS4_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeINS_11__thread_idENS_6threadEEENS_19__map_value_compareIS2_S4_NS_4lessIS2_EELb1EEENS_9allocatorIS4_EEE7destroyEPNS_11__tree_nodeIS4_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEN7android6binder8internal25ClientCounterCallbackImpl7ServiceEEENS_19__map_value_compareIS7_SD_NS_4lessIS7_EELb1EEENS5_ISD_EEE12__find_equalIS7_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISO_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEN7android6binder8internal25ClientCounterCallbackImpl7ServiceEEENS_19__map_value_compareIS7_SD_NS_4lessIS7_EELb1EEENS5_ISD_EEE25__emplace_unique_key_argsIS7_JRKNS_21piecewise_construct_tENS_5tupleIJRKS7_EEENSO_IJEEEEEENS_4pairINS_15__tree_iteratorISD_PNS_11__tree_nodeISD_PvEEiEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEN7android6binder8internal25ClientCounterCallbackImpl7ServiceEEENS_19__map_value_compareIS7_SD_NS_4lessIS7_EELb1EEENS5_ISD_EEE7destroyEPNS_11__tree_nodeISD_PvEE;
+ _ZNSt3__16vectorIaNS_9allocatorIaEEE6insertIPKaEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIaNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPaEEE4typeENSC_IS6_EES8_S8_;
+ _ZNSt3__16vectorIbNS_9allocatorIbEEE18__construct_at_endINS_14__bit_iteratorIS3_Lb0ELj0EEEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeES8_S8_;
+ _ZNSt3__16vectorIbNS_9allocatorIbEEE18__construct_at_endINS_14__bit_iteratorIS3_Lb1ELj0EEEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeES8_S8_;
+ _ZNSt3__16vectorIbNS_9allocatorIbEEE7reserveEj;
+ _ZNSt3__16vectorIbNS_9allocatorIbEEE9push_backERKb;
+ _ZNSt3__16vectorIbNS_9allocatorIbEEEaSERKS3_;
+ _ZNSt3__16vectorIdNS_9allocatorIdEEE6assignIPdEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIdNS_15iterator_traitsIS7_E9referenceEEE5valueEvE4typeES7_S7_;
+ _ZNSt3__16vectorIdNS_9allocatorIdEEE6insertIPKdEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIdNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPdEEE4typeENSC_IS6_EES8_S8_;
+ _ZNSt3__16vectorIdNS_9allocatorIdEEEC2ERKS3_;
+ _ZNSt3__16vectorIDsNS_9allocatorIDsEEE24__emplace_back_slow_pathIJDsEEEvDpOT_;
+ _ZNSt3__16vectorIDsNS_9allocatorIDsEEE7reserveEj;
+ _ZNSt3__16vectorIfNS_9allocatorIfEEE6insertIPKfEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIfNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPfEEE4typeENSC_IS6_EES8_S8_;
+ _ZNSt3__16vectorIhNS_9allocatorIhEEE6insertIPKhEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIhNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPhEEE4typeENSC_IS6_EES8_S8_;
+ _ZNSt3__16vectorIiNS_9allocatorIiEEE6assignIPiEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIiNS_15iterator_traitsIS7_E9referenceEEE5valueEvE4typeES7_S7_;
+ _ZNSt3__16vectorIiNS_9allocatorIiEEE6insertIPKiEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIiNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPiEEE4typeENSC_IS6_EES8_S8_;
+ _ZNSt3__16vectorIN7android2os16ServiceDebugInfoENS_9allocatorIS3_EEE8__appendEj;
+ _ZNSt3__16vectorIN7android2spINS1_10RpcSession13RpcConnectionEEENS_9allocatorIS5_EEE21__push_back_slow_pathIRKS5_EEvOT_;
+ _ZNSt3__16vectorIN7android2spINS1_10RpcSessionEEENS_9allocatorIS4_EEE21__push_back_slow_pathIRKS4_EEvOT_;
+ _ZNSt3__16vectorIN7android2spINS1_7IBinderEEENS_9allocatorIS4_EEE21__push_back_slow_pathIRKS4_EEvOT_;
+ _ZNSt3__16vectorIN7android2spINS1_7IBinderEEENS_9allocatorIS4_EEE8__appendEj;
+ _ZNSt3__16vectorIN7android4base14unique_fd_implINS2_13DefaultCloserEEENS_9allocatorIS5_EEE8__appendEj;
+ _ZNSt3__16vectorIN7android8RpcState10BinderNode9AsyncTodoENS_9allocatorIS4_EEE21__push_back_slow_pathIS4_EEvOT_;
+ _ZNSt3__16vectorIN7android8String16ENS_9allocatorIS2_EEE6assignIPS2_EENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIS2_NS_15iterator_traitsIS9_E9referenceEEE5valueEvE4typeES9_S9_;
+ _ZNSt3__16vectorIN7android8String16ENS_9allocatorIS2_EEE8__appendEj;
+ _ZNSt3__16vectorINS_10unique_ptrIN7android8String16ENS_14default_deleteIS3_EEEENS_9allocatorIS6_EEE8__appendEj;
+ _ZNSt3__16vectorINS_10unique_ptrINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS_14default_deleteIS7_EEEENS5_ISA_EEE8__appendEj;
+ _ZNSt3__16vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEE8__appendEj;
+ _ZNSt3__16vectorINS_8optionalIN7android8String16EEENS_9allocatorIS4_EEE8__appendEj;
+ _ZNSt3__16vectorINS_8optionalINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEENS5_IS8_EEE8__appendEj;
+ _ZNSt3__16vectorIxNS_9allocatorIxEEE6assignIPxEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIxNS_15iterator_traitsIS7_E9referenceEEE5valueEvE4typeES7_S7_;
+ _ZNSt3__16vectorIxNS_9allocatorIxEEE6insertIPKxEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIxNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPxEEE4typeENSC_IS6_EES8_S8_;
+ _ZNSt3__16vectorIxNS_9allocatorIxEEEC2ERKS3_;
+ _ZNSt3__16vectorIyNS_9allocatorIyEEE6insertIPKyEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIyNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPyEEE4typeENSC_IS6_EES8_S8_;
+ _ZNSt3__19__sift_upIRNS_4lessIN7android8RpcState10BinderNode9AsyncTodoEEENS_11__wrap_iterIPS5_EEEEvT0_SB_T_NS_15iterator_traitsISB_E15difference_typeE;
+ _ZTCN7android10AllocationE0_NS_10IInterfaceE;
+ _ZTCN7android10AllocationE0_NS_10MemoryBaseE;
+ _ZTCN7android10AllocationE0_NS_11BnInterfaceINS_7IMemoryEEE;
+ _ZTCN7android10AllocationE0_NS_7IMemoryE;
+ _ZTCN7android10AllocationE0_NS_8BnMemoryE;
+ _ZTCN7android10AllocationE4_NS_7BBinderE;
+ _ZTCN7android10AllocationE4_NS_7IBinderE;
+ _ZTCN7android10MemoryBaseE0_NS_10IInterfaceE;
+ _ZTCN7android10MemoryBaseE0_NS_11BnInterfaceINS_7IMemoryEEE;
+ _ZTCN7android10MemoryBaseE0_NS_7IMemoryE;
+ _ZTCN7android10MemoryBaseE0_NS_8BnMemoryE;
+ _ZTCN7android10MemoryBaseE4_NS_7BBinderE;
+ _ZTCN7android10MemoryBaseE4_NS_7IBinderE;
+ _ZTCN7android10PoolThreadE0_NS_6ThreadE;
+ _ZTCN7android11IMemoryHeapE0_NS_10IInterfaceE;
+ _ZTCN7android12BnMemoryHeapE0_NS_10IInterfaceE;
+ _ZTCN7android12BnMemoryHeapE0_NS_11BnInterfaceINS_11IMemoryHeapEEE;
+ _ZTCN7android12BnMemoryHeapE0_NS_11IMemoryHeapE;
+ _ZTCN7android12BnMemoryHeapE4_NS_7BBinderE;
+ _ZTCN7android12BnMemoryHeapE4_NS_7IBinderE;
+ _ZTCN7android12BpMemoryHeapE0_NS_10IInterfaceE;
+ _ZTCN7android12BpMemoryHeapE0_NS_11BpInterfaceINS_11IMemoryHeapEEE;
+ _ZTCN7android12BpMemoryHeapE0_NS_11IMemoryHeapE;
+ _ZTCN7android12BpMemoryHeapE4_NS_9BpRefBaseE;
+ _ZTCN7android14IShellCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android14MemoryHeapBaseE32_NS_10IInterfaceE;
+ _ZTCN7android14MemoryHeapBaseE32_NS_11BnInterfaceINS_11IMemoryHeapEEE;
+ _ZTCN7android14MemoryHeapBaseE32_NS_11IMemoryHeapE;
+ _ZTCN7android14MemoryHeapBaseE32_NS_12BnMemoryHeapE;
+ _ZTCN7android14MemoryHeapBaseE36_NS_7BBinderE;
+ _ZTCN7android14MemoryHeapBaseE36_NS_7IBinderE;
+ _ZTCN7android15BnShellCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android15BnShellCallbackE0_NS_11BnInterfaceINS_14IShellCallbackEEE;
+ _ZTCN7android15BnShellCallbackE0_NS_14IShellCallbackE;
+ _ZTCN7android15BnShellCallbackE4_NS_7BBinderE;
+ _ZTCN7android15BnShellCallbackE4_NS_7IBinderE;
+ _ZTCN7android15BpShellCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android15BpShellCallbackE0_NS_11BpInterfaceINS_14IShellCallbackEEE;
+ _ZTCN7android15BpShellCallbackE0_NS_14IShellCallbackE;
+ _ZTCN7android15BpShellCallbackE4_NS_9BpRefBaseE;
+ _ZTCN7android15IResultReceiverE0_NS_10IInterfaceE;
+ _ZTCN7android15IServiceManagerE0_NS_10IInterfaceE;
+ _ZTCN7android16BnResultReceiverE0_NS_10IInterfaceE;
+ _ZTCN7android16BnResultReceiverE0_NS_11BnInterfaceINS_15IResultReceiverEEE;
+ _ZTCN7android16BnResultReceiverE0_NS_15IResultReceiverE;
+ _ZTCN7android16BnResultReceiverE4_NS_7BBinderE;
+ _ZTCN7android16BnResultReceiverE4_NS_7IBinderE;
+ _ZTCN7android16BpResultReceiverE0_NS_10IInterfaceE;
+ _ZTCN7android16BpResultReceiverE0_NS_11BpInterfaceINS_15IResultReceiverEEE;
+ _ZTCN7android16BpResultReceiverE0_NS_15IResultReceiverE;
+ _ZTCN7android16BpResultReceiverE4_NS_9BpRefBaseE;
+ _ZTCN7android18ServiceManagerShimE0_NS_10IInterfaceE;
+ _ZTCN7android18ServiceManagerShimE0_NS_15IServiceManagerE;
+ _ZTCN7android2os15IClientCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android2os15IServiceManagerE0_NS_10IInterfaceE;
+ _ZTCN7android2os16BnClientCallbackE0_NS0_15IClientCallbackE;
+ _ZTCN7android2os16BnClientCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android2os16BnClientCallbackE0_NS_11BnInterfaceINS0_15IClientCallbackEEE;
+ _ZTCN7android2os16BnClientCallbackE4_NS_7BBinderE;
+ _ZTCN7android2os16BnClientCallbackE4_NS_7IBinderE;
+ _ZTCN7android2os16BnServiceManagerE0_NS0_15IServiceManagerE;
+ _ZTCN7android2os16BnServiceManagerE0_NS_10IInterfaceE;
+ _ZTCN7android2os16BnServiceManagerE0_NS_11BnInterfaceINS0_15IServiceManagerEEE;
+ _ZTCN7android2os16BnServiceManagerE4_NS_7BBinderE;
+ _ZTCN7android2os16BnServiceManagerE4_NS_7IBinderE;
+ _ZTCN7android2os16BpClientCallbackE0_NS0_15IClientCallbackE;
+ _ZTCN7android2os16BpClientCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android2os16BpClientCallbackE0_NS_11BpInterfaceINS0_15IClientCallbackEEE;
+ _ZTCN7android2os16BpClientCallbackE4_NS_9BpRefBaseE;
+ _ZTCN7android2os16BpServiceManagerE0_NS0_15IServiceManagerE;
+ _ZTCN7android2os16BpServiceManagerE0_NS_10IInterfaceE;
+ _ZTCN7android2os16BpServiceManagerE0_NS_11BpInterfaceINS0_15IServiceManagerEEE;
+ _ZTCN7android2os16BpServiceManagerE4_NS_9BpRefBaseE;
+ _ZTCN7android2os16IServiceCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android2os17BnServiceCallbackE0_NS0_16IServiceCallbackE;
+ _ZTCN7android2os17BnServiceCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android2os17BnServiceCallbackE0_NS_11BnInterfaceINS0_16IServiceCallbackEEE;
+ _ZTCN7android2os17BnServiceCallbackE4_NS_7BBinderE;
+ _ZTCN7android2os17BnServiceCallbackE4_NS_7IBinderE;
+ _ZTCN7android2os17BpServiceCallbackE0_NS0_16IServiceCallbackE;
+ _ZTCN7android2os17BpServiceCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android2os17BpServiceCallbackE0_NS_11BpInterfaceINS0_16IServiceCallbackEEE;
+ _ZTCN7android2os17BpServiceCallbackE4_NS_9BpRefBaseE;
+ _ZTCN7android6binder8internal25ClientCounterCallbackImplE0_NS_10IInterfaceE;
+ _ZTCN7android6binder8internal25ClientCounterCallbackImplE0_NS_11BnInterfaceINS_2os15IClientCallbackEEE;
+ _ZTCN7android6binder8internal25ClientCounterCallbackImplE0_NS_2os15IClientCallbackE;
+ _ZTCN7android6binder8internal25ClientCounterCallbackImplE0_NS_2os16BnClientCallbackE;
+ _ZTCN7android6binder8internal25ClientCounterCallbackImplE4_NS_7BBinderE;
+ _ZTCN7android6binder8internal25ClientCounterCallbackImplE4_NS_7IBinderE;
+ _ZTCN7android7BBinderE0_NS_7IBinderE;
+ _ZTCN7android7content2pm21IPackageManagerNativeE0_NS_10IInterfaceE;
+ _ZTCN7android7content2pm22BnPackageManagerNativeE0_NS_10IInterfaceE;
+ _ZTCN7android7content2pm22BnPackageManagerNativeE0_NS_11BnInterfaceINS1_21IPackageManagerNativeEEE;
+ _ZTCN7android7content2pm22BnPackageManagerNativeE0_NS1_21IPackageManagerNativeE;
+ _ZTCN7android7content2pm22BnPackageManagerNativeE4_NS_7BBinderE;
+ _ZTCN7android7content2pm22BnPackageManagerNativeE4_NS_7IBinderE;
+ _ZTCN7android7content2pm22BpPackageManagerNativeE0_NS_10IInterfaceE;
+ _ZTCN7android7content2pm22BpPackageManagerNativeE0_NS_11BpInterfaceINS1_21IPackageManagerNativeEEE;
+ _ZTCN7android7content2pm22BpPackageManagerNativeE0_NS1_21IPackageManagerNativeE;
+ _ZTCN7android7content2pm22BpPackageManagerNativeE4_NS_9BpRefBaseE;
+ _ZTCN7android7content2pm22IPackageChangeObserverE0_NS_10IInterfaceE;
+ _ZTCN7android7content2pm23BnPackageChangeObserverE0_NS_10IInterfaceE;
+ _ZTCN7android7content2pm23BnPackageChangeObserverE0_NS_11BnInterfaceINS1_22IPackageChangeObserverEEE;
+ _ZTCN7android7content2pm23BnPackageChangeObserverE0_NS1_22IPackageChangeObserverE;
+ _ZTCN7android7content2pm23BnPackageChangeObserverE4_NS_7BBinderE;
+ _ZTCN7android7content2pm23BnPackageChangeObserverE4_NS_7IBinderE;
+ _ZTCN7android7content2pm23BpPackageChangeObserverE0_NS_10IInterfaceE;
+ _ZTCN7android7content2pm23BpPackageChangeObserverE0_NS_11BpInterfaceINS1_22IPackageChangeObserverEEE;
+ _ZTCN7android7content2pm23BpPackageChangeObserverE0_NS1_22IPackageChangeObserverE;
+ _ZTCN7android7content2pm23BpPackageChangeObserverE4_NS_9BpRefBaseE;
+ _ZTCN7android7IMemoryE0_NS_10IInterfaceE;
+ _ZTCN7android8BnMemoryE0_NS_10IInterfaceE;
+ _ZTCN7android8BnMemoryE0_NS_11BnInterfaceINS_7IMemoryEEE;
+ _ZTCN7android8BnMemoryE0_NS_7IMemoryE;
+ _ZTCN7android8BnMemoryE4_NS_7BBinderE;
+ _ZTCN7android8BnMemoryE4_NS_7IBinderE;
+ _ZTCN7android8BpBinderE0_NS_7IBinderE;
+ _ZTCN7android8BpMemoryE0_NS_10IInterfaceE;
+ _ZTCN7android8BpMemoryE0_NS_11BpInterfaceINS_7IMemoryEEE;
+ _ZTCN7android8BpMemoryE0_NS_7IMemoryE;
+ _ZTCN7android8BpMemoryE4_NS_9BpRefBaseE;
+ _ZTCN7android9HeapCacheE0_NS_7IBinder14DeathRecipientE;
+ _ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE0_NS_13basic_istreamIcS2_EE;
+ _ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE0_NS_14basic_iostreamIcS2_EE;
+ _ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE8_NS_13basic_ostreamIcS2_EE;
+ _ZThn4_N7android10AllocationD0Ev;
+ _ZThn4_N7android10AllocationD1Ev;
+ _ZThn4_N7android10MemoryBaseD0Ev;
+ _ZThn4_N7android10MemoryBaseD1Ev;
+ _ZThn4_N7android12BnMemoryHeap10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZThn4_N7android12BnMemoryHeapD0Ev;
+ _ZThn4_N7android12BnMemoryHeapD1Ev;
+ _ZThn4_N7android12BpMemoryHeapD0Ev;
+ _ZThn4_N7android12BpMemoryHeapD1Ev;
+ _ZThn4_N7android15BnShellCallback10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZThn4_N7android16BnResultReceiver10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZThn4_N7android2os16BnClientCallback10onTransactEjRKNS_6ParcelEPS2_j;
+ _ZThn4_N7android2os16BnServiceManager10onTransactEjRKNS_6ParcelEPS2_j;
+ _ZThn4_N7android2os17BnServiceCallback10onTransactEjRKNS_6ParcelEPS2_j;
+ _ZThn4_N7android7content2pm22BnPackageManagerNative10onTransactEjRKNS_6ParcelEPS3_j;
+ _ZThn4_N7android7content2pm23BnPackageChangeObserver10onTransactEjRKNS_6ParcelEPS3_j;
+ _ZThn4_N7android8BnMemory10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZThn4_N7android8BnMemoryD0Ev;
+ _ZThn4_N7android8BnMemoryD1Ev;
+ _ZThn4_N7android8BpMemoryD0Ev;
+ _ZThn4_N7android8BpMemoryD1Ev;
+ _ZTTN7android10AllocationE;
+ _ZTTN7android10IInterfaceE;
+ _ZTTN7android10MemoryBaseE;
+ _ZTTN7android10PoolThreadE;
+ _ZTTN7android10RpcSessionE;
+ _ZTTN7android11IMemoryHeapE;
+ _ZTTN7android12BnMemoryHeapE;
+ _ZTTN7android12BpMemoryHeapE;
+ _ZTTN7android12ProcessStateE;
+ _ZTTN7android14IShellCallbackE;
+ _ZTTN7android14MemoryHeapBaseE;
+ _ZTTN7android15BnShellCallbackE;
+ _ZTTN7android15BpShellCallbackE;
+ _ZTTN7android15IResultReceiverE;
+ _ZTTN7android15IServiceManagerE;
+ _ZTTN7android16BnResultReceiverE;
+ _ZTTN7android16BpResultReceiverE;
+ _ZTTN7android18ServiceManagerShimE;
+ _ZTTN7android2os15IClientCallbackE;
+ _ZTTN7android2os15IServiceManagerE;
+ _ZTTN7android2os16BnClientCallbackE;
+ _ZTTN7android2os16BnServiceManagerE;
+ _ZTTN7android2os16BpClientCallbackE;
+ _ZTTN7android2os16BpServiceManagerE;
+ _ZTTN7android2os16IServiceCallbackE;
+ _ZTTN7android2os17BnServiceCallbackE;
+ _ZTTN7android2os17BpServiceCallbackE;
+ _ZTTN7android6binder8internal25ClientCounterCallbackImplE;
+ _ZTTN7android7BBinderE;
+ _ZTTN7android7content2pm21IPackageManagerNativeE;
+ _ZTTN7android7content2pm22BnPackageManagerNativeE;
+ _ZTTN7android7content2pm22BpPackageManagerNativeE;
+ _ZTTN7android7content2pm22IPackageChangeObserverE;
+ _ZTTN7android7content2pm23BnPackageChangeObserverE;
+ _ZTTN7android7content2pm23BpPackageChangeObserverE;
+ _ZTTN7android7IBinderE;
+ _ZTTN7android7IMemoryE;
+ _ZTTN7android8BnMemoryE;
+ _ZTTN7android8BpBinderE;
+ _ZTTN7android8BpMemoryE;
+ _ZTTN7android9BpRefBaseE;
+ _ZTTN7android9HeapCacheE;
+ _ZTTN7android9RpcServerE;
+ _ZTTNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE;
+ _ZTv0_n12_N7android10AllocationD0Ev;
+ _ZTv0_n12_N7android10AllocationD1Ev;
+ _ZTv0_n12_N7android10IInterfaceD0Ev;
+ _ZTv0_n12_N7android10IInterfaceD1Ev;
+ _ZTv0_n12_N7android10MemoryBaseD0Ev;
+ _ZTv0_n12_N7android10MemoryBaseD1Ev;
+ _ZTv0_n12_N7android10RpcSessionD0Ev;
+ _ZTv0_n12_N7android10RpcSessionD1Ev;
+ _ZTv0_n12_N7android11IMemoryHeapD0Ev;
+ _ZTv0_n12_N7android11IMemoryHeapD1Ev;
+ _ZTv0_n12_N7android12BnMemoryHeapD0Ev;
+ _ZTv0_n12_N7android12BnMemoryHeapD1Ev;
+ _ZTv0_n12_N7android12BpMemoryHeapD0Ev;
+ _ZTv0_n12_N7android12BpMemoryHeapD1Ev;
+ _ZTv0_n12_N7android12ProcessStateD0Ev;
+ _ZTv0_n12_N7android12ProcessStateD1Ev;
+ _ZTv0_n12_N7android14IShellCallbackD0Ev;
+ _ZTv0_n12_N7android14IShellCallbackD1Ev;
+ _ZTv0_n12_N7android14MemoryHeapBaseD0Ev;
+ _ZTv0_n12_N7android14MemoryHeapBaseD1Ev;
+ _ZTv0_n12_N7android15IResultReceiverD0Ev;
+ _ZTv0_n12_N7android15IResultReceiverD1Ev;
+ _ZTv0_n12_N7android15IServiceManagerD0Ev;
+ _ZTv0_n12_N7android15IServiceManagerD1Ev;
+ _ZTv0_n12_N7android2os15IClientCallbackD0Ev;
+ _ZTv0_n12_N7android2os15IClientCallbackD1Ev;
+ _ZTv0_n12_N7android2os15IServiceManagerD0Ev;
+ _ZTv0_n12_N7android2os15IServiceManagerD1Ev;
+ _ZTv0_n12_N7android2os16IServiceCallbackD0Ev;
+ _ZTv0_n12_N7android2os16IServiceCallbackD1Ev;
+ _ZTv0_n12_N7android7BBinderD0Ev;
+ _ZTv0_n12_N7android7BBinderD1Ev;
+ _ZTv0_n12_N7android7content2pm21IPackageManagerNativeD0Ev;
+ _ZTv0_n12_N7android7content2pm21IPackageManagerNativeD1Ev;
+ _ZTv0_n12_N7android7content2pm22IPackageChangeObserverD0Ev;
+ _ZTv0_n12_N7android7content2pm22IPackageChangeObserverD1Ev;
+ _ZTv0_n12_N7android7IBinderD0Ev;
+ _ZTv0_n12_N7android7IBinderD1Ev;
+ _ZTv0_n12_N7android7IMemoryD0Ev;
+ _ZTv0_n12_N7android7IMemoryD1Ev;
+ _ZTv0_n12_N7android8BnMemoryD0Ev;
+ _ZTv0_n12_N7android8BnMemoryD1Ev;
+ _ZTv0_n12_N7android8BpBinderD0Ev;
+ _ZTv0_n12_N7android8BpBinderD1Ev;
+ _ZTv0_n12_N7android8BpMemoryD0Ev;
+ _ZTv0_n12_N7android8BpMemoryD1Ev;
+ _ZTv0_n12_N7android9BpRefBaseD0Ev;
+ _ZTv0_n12_N7android9BpRefBaseD1Ev;
+ _ZTv0_n12_N7android9HeapCacheD0Ev;
+ _ZTv0_n12_N7android9HeapCacheD1Ev;
+ _ZTv0_n12_N7android9RpcServerD0Ev;
+ _ZTv0_n12_N7android9RpcServerD1Ev;
+ _ZTv0_n16_N7android14MemoryHeapBaseD0Ev;
+ _ZTv0_n16_N7android14MemoryHeapBaseD1Ev;
+ _ZTv0_n16_N7android8BpBinder10onFirstRefEv;
+ _ZTv0_n16_N7android9BpRefBase10onFirstRefEv;
+ _ZTv0_n20_N7android8BpBinder15onLastStrongRefEPKv;
+ _ZTv0_n20_N7android9BpRefBase15onLastStrongRefEPKv;
+ _ZTv0_n24_N7android8BpBinder20onIncStrongAttemptedEjPKv;
+ _ZTv0_n24_N7android9BpRefBase20onIncStrongAttemptedEjPKv;
+ _ZTv0_n28_NK7android14MemoryHeapBase9getHeapIDEv;
+ _ZTv0_n32_NK7android14MemoryHeapBase7getBaseEv;
+ _ZTv0_n36_NK7android14MemoryHeapBase7getSizeEv;
+ _ZTv0_n40_NK7android14MemoryHeapBase8getFlagsEv;
+ _ZTv0_n44_NK7android14MemoryHeapBase9getOffsetEv;
+ _ZTvn4_n16_N7android14MemoryHeapBaseD0Ev;
+ _ZTvn4_n16_N7android14MemoryHeapBaseD1Ev;
+ _ZTVN7android10AllocationE;
+ _ZTVN7android10IInterfaceE;
+ _ZTVN7android10MemoryBaseE;
+ _ZTVN7android10PoolThreadE;
+ _ZTVN7android10RpcSession13RpcConnectionE;
+ _ZTVN7android10RpcSessionE;
+ _ZTVN7android10TextOutputE;
+ _ZTVN7android11IMemoryHeapE;
+ _ZTVN7android12BnMemoryHeapE;
+ _ZTVN7android12BpMemoryHeapE;
+ _ZTVN7android12FdTextOutputE;
+ _ZTVN7android12MemoryDealerE;
+ _ZTVN7android12ProcessStateE;
+ _ZTVN7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEEE;
+ _ZTVN7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEEE;
+ _ZTVN7android13LogTextOutputE;
+ _ZTVN7android14IShellCallbackE;
+ _ZTVN7android14MemoryHeapBaseE;
+ _ZTVN7android15BnShellCallbackE;
+ _ZTVN7android15BpShellCallbackE;
+ _ZTVN7android15IResultReceiverE;
+ _ZTVN7android15IServiceManagerE;
+ _ZTVN7android16BnResultReceiverE;
+ _ZTVN7android16BpResultReceiverE;
+ _ZTVN7android17InetSocketAddressE;
+ _ZTVN7android17UnixSocketAddressE;
+ _ZTVN7android18BufferedTextOutput11BufferStateE;
+ _ZTVN7android18BufferedTextOutputE;
+ _ZTVN7android18ServiceManagerShimE;
+ _ZTVN7android18VsockSocketAddressE;
+ _ZTVN7android2os15IClientCallbackE;
+ _ZTVN7android2os15IServiceManagerE;
+ _ZTVN7android2os16BnClientCallbackE;
+ _ZTVN7android2os16BnServiceManagerE;
+ _ZTVN7android2os16BpClientCallbackE;
+ _ZTVN7android2os16BpServiceManagerE;
+ _ZTVN7android2os16IServiceCallbackE;
+ _ZTVN7android2os16ParcelableHolderE;
+ _ZTVN7android2os16ServiceDebugInfoE;
+ _ZTVN7android2os17BnServiceCallbackE;
+ _ZTVN7android2os17BpServiceCallbackE;
+ _ZTVN7android2os17PersistableBundleE;
+ _ZTVN7android2os20ParcelFileDescriptorE;
+ _ZTVN7android6binder8internal25ClientCounterCallbackImplE;
+ _ZTVN7android6VectorIiEE;
+ _ZTVN7android6VectorINS_12ProcessState12handle_entryEEE;
+ _ZTVN7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEEE;
+ _ZTVN7android6VectorINS_8BpBinder8ObituaryEEE;
+ _ZTVN7android6VectorINS_8String16EEE;
+ _ZTVN7android6VectorIPNS_7BBinderEEE;
+ _ZTVN7android6VectorIPNS_7RefBase12weakref_typeEEE;
+ _ZTVN7android6VectorIPNS_7RefBaseEEE;
+ _ZTVN7android7BBinderE;
+ _ZTVN7android7content2pm18PackageChangeEventE;
+ _ZTVN7android7content2pm21IPackageManagerNativeE;
+ _ZTVN7android7content2pm22BnPackageManagerNativeE;
+ _ZTVN7android7content2pm22BpPackageManagerNativeE;
+ _ZTVN7android7content2pm22IPackageChangeObserverE;
+ _ZTVN7android7content2pm23BnPackageChangeObserverE;
+ _ZTVN7android7content2pm23BpPackageChangeObserverE;
+ _ZTVN7android7IBinderE;
+ _ZTVN7android7IMemoryE;
+ _ZTVN7android8BnMemoryE;
+ _ZTVN7android8BpBinderE;
+ _ZTVN7android8BpMemoryE;
+ _ZTVN7android9BpRefBaseE;
+ _ZTVN7android9HeapCacheE;
+ _ZTVN7android9RpcServerE;
+ _ZTVNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEEE;
+ _ZTVNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE;
+ _ZTVNSt3__120__shared_ptr_emplaceIN7android14RpcWireAddressENS_9allocatorIS2_EEEE;
+ _ZTVNSt3__120__shared_ptr_emplaceIN7android6binder8internal21ClientCounterCallbackENS_9allocatorIS4_EEEE;
+ local:
+ *;
+};
diff --git a/libs/binder/libbinder.arm64.map b/libs/binder/libbinder.arm64.map
new file mode 100644
index 0000000..dc34de8
--- /dev/null
+++ b/libs/binder/libbinder.arm64.map
@@ -0,0 +1,1601 @@
+# b/190148312: Populate with correct list of ABI symbols
+LIBBINDER {
+ global:
+ getBinderKernelReferences;
+ kDefaultDriver;
+ _ZN7android10AllocationC1ERKNS_2spINS_12MemoryDealerEEERKNS1_INS_11IMemoryHeapEEElm;
+ _ZN7android10AllocationC2ERKNS_2spINS_12MemoryDealerEEERKNS1_INS_11IMemoryHeapEEElm;
+ _ZN7android10AllocationD0Ev;
+ _ZN7android10AllocationD1Ev;
+ _ZN7android10AllocationD2Ev;
+ _ZN7android10IInterface8asBinderEPKS0_;
+ _ZN7android10IInterface8asBinderERKNS_2spIS0_EE;
+ _ZN7android10IInterfaceC2Ev;
+ _ZN7android10IInterfaceD0Ev;
+ _ZN7android10IInterfaceD1Ev;
+ _ZN7android10IInterfaceD2Ev;
+ _ZN7android10MemoryBaseC1ERKNS_2spINS_11IMemoryHeapEEElm;
+ _ZN7android10MemoryBaseC2ERKNS_2spINS_11IMemoryHeapEEElm;
+ _ZN7android10MemoryBaseD0Ev;
+ _ZN7android10MemoryBaseD1Ev;
+ _ZN7android10MemoryBaseD2Ev;
+ _ZN7android10RpcAddress14readFromParcelERKNS_6ParcelE;
+ _ZN7android10RpcAddress15fromRawEmbeddedEPKNS_14RpcWireAddressE;
+ _ZN7android10RpcAddress4zeroEv;
+ _ZN7android10RpcAddress6uniqueEv;
+ _ZN7android10RpcAddressC1Ev;
+ _ZN7android10RpcAddressC2Ev;
+ _ZN7android10RpcAddressD1Ev;
+ _ZN7android10RpcAddressD2Ev;
+ _ZN7android10RpcSession12setForServerERKNS_2wpINS_9RpcServerEEEi;
+ _ZN7android10RpcSession13getRootObjectEv;
+ _ZN7android10RpcSession13sendDecStrongERKNS_10RpcAddressE;
+ _ZN7android10RpcSession15setupInetClientEPKcj;
+ _ZN7android10RpcSession15terminateLockedEv;
+ _ZN7android10RpcSession16setupVsockClientEjj;
+ _ZN7android10RpcSession17setupSocketClientERKNS_16RpcSocketAddressE;
+ _ZN7android10RpcSession19addClientConnectionENS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZN7android10RpcSession19ExclusiveConnection14findConnectionEiPNS_2spINS0_13RpcConnectionEEES5_RNSt3__16vectorIS4_NS6_9allocatorIS4_EEEEm;
+ _ZN7android10RpcSession19ExclusiveConnectionC1ERKNS_2spIS0_EENS0_13ConnectionUseE;
+ _ZN7android10RpcSession19ExclusiveConnectionC2ERKNS_2spIS0_EENS0_13ConnectionUseE;
+ _ZN7android10RpcSession19ExclusiveConnectionD1Ev;
+ _ZN7android10RpcSession19ExclusiveConnectionD2Ev;
+ _ZN7android10RpcSession19getRemoteMaxThreadsEPm;
+ _ZN7android10RpcSession20setupOneSocketClientERKNS_16RpcSocketAddressEi;
+ _ZN7android10RpcSession21setupUnixDomainClientEPKc;
+ _ZN7android10RpcSession22addNullDebuggingClientEv;
+ _ZN7android10RpcSession22removeServerConnectionERKNS_2spINS0_13RpcConnectionEEE;
+ _ZN7android10RpcSession24assignServerToThisThreadENS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZN7android10RpcSession4joinENS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZN7android10RpcSession4makeEv;
+ _ZN7android10RpcSession6readIdEv;
+ _ZN7android10RpcSession6serverEv;
+ _ZN7android10RpcSession7preJoinENSt3__16threadE;
+ _ZN7android10RpcSession8transactERKNS_10RpcAddressEjRKNS_6ParcelEPS4_j;
+ _ZN7android10RpcSessionC1Ev;
+ _ZN7android10RpcSessionC2Ev;
+ _ZN7android10RpcSessionD0Ev;
+ _ZN7android10RpcSessionD1Ev;
+ _ZN7android10RpcSessionD2Ev;
+ _ZN7android10TextOutputC2Ev;
+ _ZN7android10TextOutputD0Ev;
+ _ZN7android10TextOutputD1Ev;
+ _ZN7android10TextOutputD2Ev;
+ _ZN7android10zeroMemoryEPhm;
+ _ZN7android11BnInterfaceINS_11IMemoryHeapEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_14IShellCallbackEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_15IResultReceiverEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_21IPermissionControllerEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_2os15IClientCallbackEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_2os15IServiceManagerEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_2os16IServiceCallbackEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_7content2pm21IPackageManagerNativeEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_7content2pm22IPackageChangeObserverEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_7IMemoryEE10onAsBinderEv;
+ _ZN7android11IMemoryHeap10descriptorE;
+ _ZN7android11IMemoryHeap11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android11IMemoryHeap12default_implE;
+ _ZN7android11IMemoryHeap14getDefaultImplEv;
+ _ZN7android11IMemoryHeap14setDefaultImplENSt3__110unique_ptrIS0_NS1_14default_deleteIS0_EEEE;
+ _ZN7android11IMemoryHeapC2Ev;
+ _ZN7android11IMemoryHeapD0Ev;
+ _ZN7android11IMemoryHeapD1Ev;
+ _ZN7android11IMemoryHeapD2Ev;
+ _ZN7android12BnMemoryHeap10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZN7android12BnMemoryHeapC2Ev;
+ _ZN7android12BnMemoryHeapD0Ev;
+ _ZN7android12BnMemoryHeapD1Ev;
+ _ZN7android12BnMemoryHeapD2Ev;
+ _ZN7android12BpMemoryHeapC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android12BpMemoryHeapC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android12BpMemoryHeapD0Ev;
+ _ZN7android12BpMemoryHeapD1Ev;
+ _ZN7android12BpMemoryHeapD2Ev;
+ _ZN7android12gTextBuffersE;
+ _ZN7android12MemoryDealer10deallocateEm;
+ _ZN7android12MemoryDealer22getAllocationAlignmentEv;
+ _ZN7android12MemoryDealer8allocateEm;
+ _ZN7android12MemoryDealerC1EmPKcj;
+ _ZN7android12MemoryDealerC2EmPKcj;
+ _ZN7android12MemoryDealerD0Ev;
+ _ZN7android12MemoryDealerD1Ev;
+ _ZN7android12MemoryDealerD2Ev;
+ _ZN7android12printHexDataEiPKvmmimbPFvPvPKcES2_;
+ _ZN7android12ProcessState10selfOrNullEv;
+ _ZN7android12ProcessState13expungeHandleEiPNS_7IBinderE;
+ _ZN7android12ProcessState13getDriverNameEv;
+ _ZN7android12ProcessState14initWithDriverEPKc;
+ _ZN7android12ProcessState15startThreadPoolEv;
+ _ZN7android12ProcessState16getContextObjectERKNS_2spINS_7IBinderEEE;
+ _ZN7android12ProcessState17spawnPooledThreadEb;
+ _ZN7android12ProcessState18giveThreadPoolNameEv;
+ _ZN7android12ProcessState18lookupHandleLockedEi;
+ _ZN7android12ProcessState18setCallRestrictionENS0_15CallRestrictionE;
+ _ZN7android12ProcessState19getKernelReferencesEmPm;
+ _ZN7android12ProcessState20becomeContextManagerEv;
+ _ZN7android12ProcessState20makeBinderThreadNameEv;
+ _ZN7android12ProcessState23getStrongProxyForHandleEi;
+ _ZN7android12ProcessState24getStrongRefCountForNodeERKNS_2spINS_8BpBinderEEE;
+ _ZN7android12ProcessState25enableOnewaySpamDetectionEb;
+ _ZN7android12ProcessState27setThreadPoolMaxThreadCountEm;
+ _ZN7android12ProcessState4initEPKcb;
+ _ZN7android12ProcessState4selfEv;
+ _ZN7android12ProcessStateC1EPKc;
+ _ZN7android12ProcessStateC2EPKc;
+ _ZN7android12ProcessStateD0Ev;
+ _ZN7android12ProcessStateD1Ev;
+ _ZN7android12ProcessStateD2Ev;
+ _ZN7android13printTypeCodeEjPFvPvPKcES0_;
+ _ZN7android14IPCThreadState10freeBufferEPNS_6ParcelEPKhmPKym;
+ _ZN7android14IPCThreadState10selfOrNullEv;
+ _ZN7android14IPCThreadState11clearCallerEv;
+ _ZN7android14IPCThreadState11stopProcessEb;
+ _ZN7android14IPCThreadState12setupPollingEPi;
+ _ZN7android14IPCThreadState13decWeakHandleEi;
+ _ZN7android14IPCThreadState13expungeHandleEiPNS_7IBinderE;
+ _ZN7android14IPCThreadState13flushCommandsEv;
+ _ZN7android14IPCThreadState13flushIfNeededEv;
+ _ZN7android14IPCThreadState13incWeakHandleEiPNS_8BpBinderE;
+ _ZN7android14IPCThreadState14clearLastErrorEv;
+ _ZN7android14IPCThreadState14executeCommandEi;
+ _ZN7android14IPCThreadState14joinThreadPoolEb;
+ _ZN7android14IPCThreadState14talkWithDriverEb;
+ _ZN7android14IPCThreadState15decStrongHandleEi;
+ _ZN7android14IPCThreadState15incStrongHandleEiPNS_8BpBinderE;
+ _ZN7android14IPCThreadState15waitForResponseEPNS_6ParcelEPi;
+ _ZN7android14IPCThreadState16threadDestructorEPv;
+ _ZN7android14IPCThreadState18setCallRestrictionENS_12ProcessState15CallRestrictionE;
+ _ZN7android14IPCThreadState19setStrictModePolicyEi;
+ _ZN7android14IPCThreadState19setTheContextObjectERKNS_2spINS_7BBinderEEE;
+ _ZN7android14IPCThreadState20clearCallingIdentityEv;
+ _ZN7android14IPCThreadState20getAndExecuteCommandEv;
+ _ZN7android14IPCThreadState20getProcessFreezeInfoEiPbS1_;
+ _ZN7android14IPCThreadState20handlePolledCommandsEv;
+ _ZN7android14IPCThreadState20processPendingDerefsEv;
+ _ZN7android14IPCThreadState20writeTransactionDataEijijRKNS_6ParcelEPi;
+ _ZN7android14IPCThreadState22attemptIncStrongHandleEi;
+ _ZN7android14IPCThreadState22clearCallingWorkSourceEv;
+ _ZN7android14IPCThreadState22clearDeathNotificationEiPNS_8BpBinderE;
+ _ZN7android14IPCThreadState22processPostWriteDerefsEv;
+ _ZN7android14IPCThreadState22restoreCallingIdentityEl;
+ _ZN7android14IPCThreadState23setCallingWorkSourceUidEj;
+ _ZN7android14IPCThreadState24clearPropagateWorkSourceEv;
+ _ZN7android14IPCThreadState24requestDeathNotificationEiPNS_8BpBinderE;
+ _ZN7android14IPCThreadState24restoreCallingWorkSourceEl;
+ _ZN7android14IPCThreadState25blockUntilThreadAvailableEv;
+ _ZN7android14IPCThreadState27disableBackgroundSchedulingEb;
+ _ZN7android14IPCThreadState28backgroundSchedulingDisabledEv;
+ _ZN7android14IPCThreadState29setLastTransactionBinderFlagsEi;
+ _ZN7android14IPCThreadState41setCallingWorkSourceUidWithoutPropagationEj;
+ _ZN7android14IPCThreadState4selfEv;
+ _ZN7android14IPCThreadState6freezeEibj;
+ _ZN7android14IPCThreadState7processEv;
+ _ZN7android14IPCThreadState8shutdownEv;
+ _ZN7android14IPCThreadState8transactEijRKNS_6ParcelEPS1_j;
+ _ZN7android14IPCThreadState9sendReplyERKNS_6ParcelEj;
+ _ZN7android14IPCThreadStateC1Ev;
+ _ZN7android14IPCThreadStateC2Ev;
+ _ZN7android14IPCThreadStateD1Ev;
+ _ZN7android14IPCThreadStateD2Ev;
+ _ZN7android14IShellCallback10descriptorE;
+ _ZN7android14IShellCallback11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android14IShellCallback12default_implE;
+ _ZN7android14IShellCallback14getDefaultImplEv;
+ _ZN7android14IShellCallback14setDefaultImplENSt3__110unique_ptrIS0_NS1_14default_deleteIS0_EEEE;
+ _ZN7android14IShellCallbackC2Ev;
+ _ZN7android14IShellCallbackD0Ev;
+ _ZN7android14IShellCallbackD1Ev;
+ _ZN7android14IShellCallbackD2Ev;
+ _ZN7android14MemoryHeapBase4initEiPvmiPKc;
+ _ZN7android14MemoryHeapBase5mapfdEibml;
+ _ZN7android14MemoryHeapBase7disposeEv;
+ _ZN7android14MemoryHeapBaseC1Eimjl;
+ _ZN7android14MemoryHeapBaseC1EmjPKc;
+ _ZN7android14MemoryHeapBaseC1EPKcmj;
+ _ZN7android14MemoryHeapBaseC1Ev;
+ _ZN7android14MemoryHeapBaseC2Eimjl;
+ _ZN7android14MemoryHeapBaseC2EmjPKc;
+ _ZN7android14MemoryHeapBaseC2EPKcmj;
+ _ZN7android14MemoryHeapBaseC2Ev;
+ _ZN7android14MemoryHeapBaseD0Ev;
+ _ZN7android14MemoryHeapBaseD1Ev;
+ _ZN7android14MemoryHeapBaseD2Ev;
+ _ZN7android15BnShellCallback10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZN7android15checkPermissionERKNS_8String16Eij;
+ _ZN7android15IResultReceiver10descriptorE;
+ _ZN7android15IResultReceiver11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android15IResultReceiver12default_implE;
+ _ZN7android15IResultReceiver14getDefaultImplEv;
+ _ZN7android15IResultReceiver14setDefaultImplENSt3__110unique_ptrIS0_NS1_14default_deleteIS0_EEEE;
+ _ZN7android15IResultReceiverC2Ev;
+ _ZN7android15IResultReceiverD0Ev;
+ _ZN7android15IResultReceiverD1Ev;
+ _ZN7android15IResultReceiverD2Ev;
+ _ZN7android15IServiceManagerC2Ev;
+ _ZN7android15IServiceManagerD0Ev;
+ _ZN7android15IServiceManagerD1Ev;
+ _ZN7android15IServiceManagerD2Ev;
+ _ZN7android15PermissionCache10purgeCacheEv;
+ _ZN7android15PermissionCache15checkPermissionERKNS_8String16Eij;
+ _ZN7android15PermissionCache22checkCallingPermissionERKNS_8String16E;
+ _ZN7android15PermissionCache22checkCallingPermissionERKNS_8String16EPiS4_;
+ _ZN7android15PermissionCache5cacheERKNS_8String16Ejb;
+ _ZN7android15PermissionCache5purgeEv;
+ _ZN7android15PermissionCacheC1Ev;
+ _ZN7android15PermissionCacheC2Ev;
+ _ZN7android15stringForIndentEi;
+ _ZN7android16BnResultReceiver10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZN7android18BufferedTextOutput10moveIndentEi;
+ _ZN7android18BufferedTextOutput10pushBundleEv;
+ _ZN7android18BufferedTextOutput5printEPKcm;
+ _ZN7android18BufferedTextOutput9popBundleEv;
+ _ZN7android18BufferedTextOutputC2Ej;
+ _ZN7android18BufferedTextOutputD0Ev;
+ _ZN7android18BufferedTextOutputD1Ev;
+ _ZN7android18BufferedTextOutputD2Ev;
+ _ZN7android18ServiceManagerShim10addServiceERKNS_8String16ERKNS_2spINS_7IBinderEEEbi;
+ _ZN7android18ServiceManagerShim10isDeclaredERKNS_8String16E;
+ _ZN7android18ServiceManagerShim12listServicesEi;
+ _ZN7android18ServiceManagerShim14waitForServiceERKNS_8String16E;
+ _ZN7android18ServiceManagerShim16updatableViaApexERKNS_8String16E;
+ _ZN7android18ServiceManagerShim20getDeclaredInstancesERKNS_8String16E;
+ _ZN7android18ServiceManagerShimC1ERKNS_2spINS_2os15IServiceManagerEEE;
+ _ZN7android18ServiceManagerShimC2ERKNS_2spINS_2os15IServiceManagerEEE;
+ _ZN7android18the_context_objectE;
+ _ZN7android20PermissionController10getServiceEv;
+ _ZN7android20PermissionController13getPackageUidERKNS_8String16Ei;
+ _ZN7android20PermissionController15checkPermissionERKNS_8String16Eii;
+ _ZN7android20PermissionController17getPackagesForUidEjRNS_6VectorINS_8String16EEE;
+ _ZN7android20PermissionController19isRuntimePermissionERKNS_8String16E;
+ _ZN7android20PermissionController6noteOpERKNS_8String16EiS3_;
+ _ZN7android20PermissionControllerC1Ev;
+ _ZN7android20PermissionControllerC2Ev;
+ _ZN7android21defaultServiceManagerEv;
+ _ZN7android21IPermissionController10descriptorE;
+ _ZN7android21IPermissionController11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android21IPermissionController12default_implE;
+ _ZN7android21IPermissionController14getDefaultImplEv;
+ _ZN7android21IPermissionController14setDefaultImplENSt3__110unique_ptrIS0_NS1_14default_deleteIS0_EEEE;
+ _ZN7android21IPermissionControllerC2Ev;
+ _ZN7android21IPermissionControllerD0Ev;
+ _ZN7android21IPermissionControllerD1Ev;
+ _ZN7android21IPermissionControllerD2Ev;
+ _ZN7android22BnPermissionController10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZN7android22checkCallingPermissionERKNS_8String16E;
+ _ZN7android22checkCallingPermissionERKNS_8String16EPiS3_;
+ _ZN7android22SimpleBestFitAllocator10deallocateEm;
+ _ZN7android22SimpleBestFitAllocator12kMemoryAlignE;
+ _ZN7android22SimpleBestFitAllocator5allocEmj;
+ _ZN7android22SimpleBestFitAllocator7deallocEm;
+ _ZN7android22SimpleBestFitAllocator8allocateEmj;
+ _ZN7android22SimpleBestFitAllocatorC1Em;
+ _ZN7android22SimpleBestFitAllocatorC2Em;
+ _ZN7android22SimpleBestFitAllocatorD1Ev;
+ _ZN7android22SimpleBestFitAllocatorD2Ev;
+ _ZN7android24setDefaultServiceManagerERKNS_2spINS_15IServiceManagerEEE;
+ _ZN7android2os15IClientCallback10descriptorE;
+ _ZN7android2os15IClientCallback11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os15IClientCallback12default_implE;
+ _ZN7android2os15IClientCallback14getDefaultImplEv;
+ _ZN7android2os15IClientCallback14setDefaultImplENSt3__110unique_ptrIS1_NS2_14default_deleteIS1_EEEE;
+ _ZN7android2os15IClientCallbackC2Ev;
+ _ZN7android2os15IClientCallbackD0Ev;
+ _ZN7android2os15IClientCallbackD1Ev;
+ _ZN7android2os15IClientCallbackD2Ev;
+ _ZN7android2os15IServiceManager10descriptorE;
+ _ZN7android2os15IServiceManager11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os15IServiceManager12default_implE;
+ _ZN7android2os15IServiceManager14getDefaultImplEv;
+ _ZN7android2os15IServiceManager14setDefaultImplENSt3__110unique_ptrIS1_NS2_14default_deleteIS1_EEEE;
+ _ZN7android2os15IServiceManagerC2Ev;
+ _ZN7android2os15IServiceManagerD0Ev;
+ _ZN7android2os15IServiceManagerD1Ev;
+ _ZN7android2os15IServiceManagerD2Ev;
+ _ZN7android2os16BnClientCallback10onTransactEjRKNS_6ParcelEPS2_j;
+ _ZN7android2os16BnClientCallbackC2Ev;
+ _ZN7android2os16BnServiceManager10onTransactEjRKNS_6ParcelEPS2_j;
+ _ZN7android2os16BnServiceManagerC2Ev;
+ _ZN7android2os16BpClientCallback9onClientsERKNS_2spINS_7IBinderEEEb;
+ _ZN7android2os16BpClientCallbackC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os16BpClientCallbackC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os16BpServiceManager10addServiceERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS_7IBinderEEEbi;
+ _ZN7android2os16BpServiceManager10getServiceERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPNS_2spINS_7IBinderEEE;
+ _ZN7android2os16BpServiceManager10isDeclaredERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPb;
+ _ZN7android2os16BpServiceManager12checkServiceERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPNS_2spINS_7IBinderEEE;
+ _ZN7android2os16BpServiceManager12listServicesEiPNSt3__16vectorINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS7_IS9_EEEE;
+ _ZN7android2os16BpServiceManager16updatableViaApexERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPNS2_8optionalIS8_EE;
+ _ZN7android2os16BpServiceManager19getServiceDebugInfoEPNSt3__16vectorINS0_16ServiceDebugInfoENS2_9allocatorIS4_EEEE;
+ _ZN7android2os16BpServiceManager20getDeclaredInstancesERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPNS2_6vectorIS8_NS6_IS8_EEEE;
+ _ZN7android2os16BpServiceManager20tryUnregisterServiceERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os16BpServiceManager22registerClientCallbackERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS_7IBinderEEERKNSB_INS0_15IClientCallbackEEE;
+ _ZN7android2os16BpServiceManager24registerForNotificationsERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS0_16IServiceCallbackEEE;
+ _ZN7android2os16BpServiceManager26unregisterForNotificationsERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS0_16IServiceCallbackEEE;
+ _ZN7android2os16BpServiceManagerC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os16BpServiceManagerC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os16IServiceCallback10descriptorE;
+ _ZN7android2os16IServiceCallback11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os16IServiceCallback12default_implE;
+ _ZN7android2os16IServiceCallback14getDefaultImplEv;
+ _ZN7android2os16IServiceCallback14setDefaultImplENSt3__110unique_ptrIS1_NS2_14default_deleteIS1_EEEE;
+ _ZN7android2os16IServiceCallbackC2Ev;
+ _ZN7android2os16IServiceCallbackD0Ev;
+ _ZN7android2os16IServiceCallbackD1Ev;
+ _ZN7android2os16IServiceCallbackD2Ev;
+ _ZN7android2os16ParcelableHolder14readFromParcelEPKNS_6ParcelE;
+ _ZN7android2os16ServiceDebugInfo14readFromParcelEPKNS_6ParcelE;
+ _ZN7android2os17BnServiceCallback10onTransactEjRKNS_6ParcelEPS2_j;
+ _ZN7android2os17BnServiceCallbackC2Ev;
+ _ZN7android2os17BpServiceCallback14onRegistrationERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os17BpServiceCallbackC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os17BpServiceCallbackC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os17PersistableBundle10putBooleanERKNS_8String16Eb;
+ _ZN7android2os17PersistableBundle12putIntVectorERKNS_8String16ERKNSt3__16vectorIiNS5_9allocatorIiEEEE;
+ _ZN7android2os17PersistableBundle13putLongVectorERKNS_8String16ERKNSt3__16vectorIlNS5_9allocatorIlEEEE;
+ _ZN7android2os17PersistableBundle14readFromParcelEPKNS_6ParcelE;
+ _ZN7android2os17PersistableBundle15putDoubleVectorERKNS_8String16ERKNSt3__16vectorIdNS5_9allocatorIdEEEE;
+ _ZN7android2os17PersistableBundle15putStringVectorERKNS_8String16ERKNSt3__16vectorIS2_NS5_9allocatorIS2_EEEE;
+ _ZN7android2os17PersistableBundle16putBooleanVectorERKNS_8String16ERKNSt3__16vectorIbNS5_9allocatorIbEEEE;
+ _ZN7android2os17PersistableBundle19readFromParcelInnerEPKNS_6ParcelEm;
+ _ZN7android2os17PersistableBundle20putPersistableBundleERKNS_8String16ERKS1_;
+ _ZN7android2os17PersistableBundle5eraseERKNS_8String16E;
+ _ZN7android2os17PersistableBundle6putIntERKNS_8String16Ei;
+ _ZN7android2os17PersistableBundle7putLongERKNS_8String16El;
+ _ZN7android2os17PersistableBundle9putDoubleERKNS_8String16Ed;
+ _ZN7android2os17PersistableBundle9putStringERKNS_8String16ES4_;
+ _ZN7android2os20ParcelFileDescriptor14readFromParcelEPKNS_6ParcelE;
+ _ZN7android2os20ParcelFileDescriptorC1ENS_4base14unique_fd_implINS2_13DefaultCloserEEE;
+ _ZN7android2os20ParcelFileDescriptorC1Ev;
+ _ZN7android2os20ParcelFileDescriptorC2ENS_4base14unique_fd_implINS2_13DefaultCloserEEE;
+ _ZN7android2os20ParcelFileDescriptorC2Ev;
+ _ZN7android2os20ParcelFileDescriptorD0Ev;
+ _ZN7android2os20ParcelFileDescriptorD1Ev;
+ _ZN7android2os20ParcelFileDescriptorD2Ev;
+ _ZN7android2spINS_21IPermissionControllerEED2Ev;
+ _ZN7android2spINS_7BBinderEED2Ev;
+ _ZN7android2spINS_7IBinderEEaSEOS2_;
+ _ZN7android2spINS_7IBinderEEaSERKS2_;
+ _ZN7android2spINS_9HeapCacheEED2Ev;
+ _ZN7android4aerrE;
+ _ZN7android4alogE;
+ _ZN7android4aoutE;
+ _ZN7android6binder20LazyServiceRegistrar10reRegisterEv;
+ _ZN7android6binder20LazyServiceRegistrar11getInstanceEv;
+ _ZN7android6binder20LazyServiceRegistrar12forcePersistEb;
+ _ZN7android6binder20LazyServiceRegistrar13tryUnregisterEv;
+ _ZN7android6binder20LazyServiceRegistrar15registerServiceERKNS_2spINS_7IBinderEEERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEEbi;
+ _ZN7android6binder20LazyServiceRegistrar25setActiveServicesCallbackERKNSt3__18functionIFbbEEE;
+ _ZN7android6binder20LazyServiceRegistrarC1Ev;
+ _ZN7android6binder20LazyServiceRegistrarC2Ev;
+ _ZN7android6binder6Status11fromStatusTEi;
+ _ZN7android6binder6Status12setExceptionEiRKNS_7String8E;
+ _ZN7android6binder6Status14readFromParcelERKNS_6ParcelE;
+ _ZN7android6binder6Status14setFromStatusTEi;
+ _ZN7android6binder6Status17exceptionToStringEi;
+ _ZN7android6binder6Status17fromExceptionCodeEi;
+ _ZN7android6binder6Status17fromExceptionCodeEiPKc;
+ _ZN7android6binder6Status17fromExceptionCodeEiRKNS_7String8E;
+ _ZN7android6binder6Status23setServiceSpecificErrorEiRKNS_7String8E;
+ _ZN7android6binder6Status24fromServiceSpecificErrorEi;
+ _ZN7android6binder6Status24fromServiceSpecificErrorEiPKc;
+ _ZN7android6binder6Status24fromServiceSpecificErrorEiRKNS_7String8E;
+ _ZN7android6binder6Status2okEv;
+ _ZN7android6binder6StatusC1Eii;
+ _ZN7android6binder6StatusC1EiiRKNS_7String8E;
+ _ZN7android6binder6StatusC2Eii;
+ _ZN7android6binder6StatusC2EiiRKNS_7String8E;
+ _ZN7android6binder8internal21ClientCounterCallback10reRegisterEv;
+ _ZN7android6binder8internal21ClientCounterCallback12forcePersistEb;
+ _ZN7android6binder8internal21ClientCounterCallback13tryUnregisterEv;
+ _ZN7android6binder8internal21ClientCounterCallback15registerServiceERKNS_2spINS_7IBinderEEERKNSt3__112basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEEbi;
+ _ZN7android6binder8internal21ClientCounterCallback25setActiveServicesCallbackERKNSt3__18functionIFbbEEE;
+ _ZN7android6binder8internal21ClientCounterCallbackC1Ev;
+ _ZN7android6binder8internal21ClientCounterCallbackC2Ev;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl10reRegisterEv;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl11tryShutdownEv;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl12forcePersistEb;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl13tryUnregisterEv;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl15registerServiceERKNS_2spINS_7IBinderEEERKNSt3__112basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEEbi;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl16maybeTryShutdownEv;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl23assertRegisteredServiceERKNS_2spINS_7IBinderEEE;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl25setActiveServicesCallbackERKNSt3__18functionIFbbEEE;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl9onClientsERKNS_2spINS_7IBinderEEEb;
+ _ZN7android6Parcel10appendFromEPKS0_mm;
+ _ZN7android6Parcel10markForRpcERKNS_2spINS_10RpcSessionEEE;
+ _ZN7android6Parcel10writeFloatEf;
+ _ZN7android6Parcel10writeInt32Ei;
+ _ZN7android6Parcel10writeInt64El;
+ _ZN7android6Parcel11compareDataERKS0_;
+ _ZN7android6Parcel11finishWriteEm;
+ _ZN7android6Parcel11setDataSizeEm;
+ _ZN7android6Parcel11writeDoubleEd;
+ _ZN7android6Parcel11writeObjectERK18flat_binder_objectb;
+ _ZN7android6Parcel11writeUint32Ej;
+ _ZN7android6Parcel11writeUint64Em;
+ _ZN7android6Parcel12pushAllowFdsEb;
+ _ZN7android6Parcel12restartWriteEm;
+ _ZN7android6Parcel12writeCStringEPKc;
+ _ZN7android6Parcel12writeInplaceEm;
+ _ZN7android6Parcel12writePointerEm;
+ _ZN7android6Parcel12writeString8EPKcm;
+ _ZN7android6Parcel12writeString8ERKNS_7String8E;
+ _ZN7android6Parcel13continueWriteEm;
+ _ZN7android6Parcel13flattenBinderERKNS_2spINS_7IBinderEEE;
+ _ZN7android6Parcel13markForBinderERKNS_2spINS_7IBinderEEE;
+ _ZN7android6Parcel13writeString16EPKDsm;
+ _ZN7android6Parcel13writeString16ERKNS_8String16E;
+ _ZN7android6Parcel13writeString16ERKNSt3__110unique_ptrINS_8String16ENS1_14default_deleteIS3_EEEE;
+ _ZN7android6Parcel13writeString16ERKNSt3__18optionalINS_8String16EEE;
+ _ZN7android6Parcel13writeUnpaddedEPKvm;
+ _ZN7android6Parcel14acquireObjectsEv;
+ _ZN7android6Parcel14freeDataNoInitEv;
+ _ZN7android6Parcel14releaseObjectsEv;
+ _ZN7android6Parcel14writeByteArrayEmPKh;
+ _ZN7android6Parcel15restoreAllowFdsEb;
+ _ZN7android6Parcel15setDataCapacityEm;
+ _ZN7android6Parcel15writeBoolVectorERKNSt3__110unique_ptrINS1_6vectorIbNS1_9allocatorIbEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel15writeBoolVectorERKNSt3__16vectorIbNS1_9allocatorIbEEEE;
+ _ZN7android6Parcel15writeBoolVectorERKNSt3__18optionalINS1_6vectorIbNS1_9allocatorIbEEEEEE;
+ _ZN7android6Parcel15writeByteVectorERKNSt3__110unique_ptrINS1_6vectorIaNS1_9allocatorIaEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel15writeByteVectorERKNSt3__110unique_ptrINS1_6vectorIhNS1_9allocatorIhEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel15writeByteVectorERKNSt3__16vectorIaNS1_9allocatorIaEEEE;
+ _ZN7android6Parcel15writeByteVectorERKNSt3__16vectorIhNS1_9allocatorIhEEEE;
+ _ZN7android6Parcel15writeByteVectorERKNSt3__18optionalINS1_6vectorIaNS1_9allocatorIaEEEEEE;
+ _ZN7android6Parcel15writeByteVectorERKNSt3__18optionalINS1_6vectorIhNS1_9allocatorIhEEEEEE;
+ _ZN7android6Parcel15writeCharVectorERKNSt3__110unique_ptrINS1_6vectorIDsNS1_9allocatorIDsEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel15writeCharVectorERKNSt3__16vectorIDsNS1_9allocatorIDsEEEE;
+ _ZN7android6Parcel15writeCharVectorERKNSt3__18optionalINS1_6vectorIDsNS1_9allocatorIDsEEEEEE;
+ _ZN7android6Parcel15writeInt32ArrayEmPKi;
+ _ZN7android6Parcel15writeParcelableERKNS_10ParcelableE;
+ _ZN7android6Parcel16writeFloatVectorERKNSt3__110unique_ptrINS1_6vectorIfNS1_9allocatorIfEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel16writeFloatVectorERKNSt3__16vectorIfNS1_9allocatorIfEEEE;
+ _ZN7android6Parcel16writeFloatVectorERKNSt3__18optionalINS1_6vectorIfNS1_9allocatorIfEEEEEE;
+ _ZN7android6Parcel16writeInt32VectorERKNSt3__110unique_ptrINS1_6vectorIiNS1_9allocatorIiEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel16writeInt32VectorERKNSt3__16vectorIiNS1_9allocatorIiEEEE;
+ _ZN7android6Parcel16writeInt32VectorERKNSt3__18optionalINS1_6vectorIiNS1_9allocatorIiEEEEEE;
+ _ZN7android6Parcel16writeInt64VectorERKNSt3__110unique_ptrINS1_6vectorIlNS1_9allocatorIlEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel16writeInt64VectorERKNSt3__16vectorIlNS1_9allocatorIlEEEE;
+ _ZN7android6Parcel16writeInt64VectorERKNSt3__18optionalINS1_6vectorIlNS1_9allocatorIlEEEEEE;
+ _ZN7android6Parcel16writeNoExceptionEv;
+ _ZN7android6Parcel16writeUtf8AsUtf16ERKNSt3__110unique_ptrINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS1_14default_deleteIS8_EEEE;
+ _ZN7android6Parcel16writeUtf8AsUtf16ERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE;
+ _ZN7android6Parcel16writeUtf8AsUtf16ERKNSt3__18optionalINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEE;
+ _ZN7android6Parcel17writeDoubleVectorERKNSt3__110unique_ptrINS1_6vectorIdNS1_9allocatorIdEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel17writeDoubleVectorERKNSt3__16vectorIdNS1_9allocatorIdEEEE;
+ _ZN7android6Parcel17writeDoubleVectorERKNSt3__18optionalINS1_6vectorIdNS1_9allocatorIdEEEEEE;
+ _ZN7android6Parcel17writeNativeHandleEPK13native_handle;
+ _ZN7android6Parcel17writeStrongBinderERKNS_2spINS_7IBinderEEE;
+ _ZN7android6Parcel17writeUint64VectorERKNSt3__110unique_ptrINS1_6vectorImNS1_9allocatorImEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel17writeUint64VectorERKNSt3__16vectorImNS1_9allocatorImEEEE;
+ _ZN7android6Parcel17writeUint64VectorERKNSt3__18optionalINS1_6vectorImNS1_9allocatorImEEEEEE;
+ _ZN7android6Parcel18getGlobalAllocSizeEv;
+ _ZN7android6Parcel19finishFlattenBinderERKNS_2spINS_7IBinderEEE;
+ _ZN7android6Parcel19getGlobalAllocCountEv;
+ _ZN7android6Parcel19ipcSetDataReferenceEPKhmPKymPFvPS0_S2_mS4_mE;
+ _ZN7android6Parcel19writeFileDescriptorEib;
+ _ZN7android6Parcel19writeInterfaceTokenEPKDsm;
+ _ZN7android6Parcel19writeInterfaceTokenERKNS_8String16E;
+ _ZN7android6Parcel19writeString16VectorERKNSt3__110unique_ptrINS1_6vectorINS2_INS_8String16ENS1_14default_deleteIS4_EEEENS1_9allocatorIS7_EEEENS5_ISA_EEEE;
+ _ZN7android6Parcel19writeString16VectorERKNSt3__16vectorINS_8String16ENS1_9allocatorIS3_EEEE;
+ _ZN7android6Parcel19writeString16VectorERKNSt3__18optionalINS1_6vectorINS2_INS_8String16EEENS1_9allocatorIS5_EEEEEE;
+ _ZN7android6Parcel20closeFileDescriptorsEv;
+ _ZN7android6Parcel22writeDupFileDescriptorEi;
+ _ZN7android6Parcel23writeStrongBinderVectorERKNSt3__110unique_ptrINS1_6vectorINS_2spINS_7IBinderEEENS1_9allocatorIS6_EEEENS1_14default_deleteIS9_EEEE;
+ _ZN7android6Parcel23writeStrongBinderVectorERKNSt3__16vectorINS_2spINS_7IBinderEEENS1_9allocatorIS5_EEEE;
+ _ZN7android6Parcel23writeStrongBinderVectorERKNSt3__18optionalINS1_6vectorINS_2spINS_7IBinderEEENS1_9allocatorIS6_EEEEEE;
+ _ZN7android6Parcel25writeParcelFileDescriptorEib;
+ _ZN7android6Parcel25writeUniqueFileDescriptorERKNS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZN7android6Parcel26writeRawNullableParcelableEPKNS_10ParcelableE;
+ _ZN7android6Parcel27replaceCallingWorkSourceUidEj;
+ _ZN7android6Parcel28writeDupParcelFileDescriptorEi;
+ _ZN7android6Parcel28writeUtf8VectorAsUtf16VectorERKNSt3__110unique_ptrINS1_6vectorINS2_INS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS1_14default_deleteIS9_EEEENS7_ISC_EEEENSA_ISE_EEEE;
+ _ZN7android6Parcel28writeUtf8VectorAsUtf16VectorERKNSt3__16vectorINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS6_IS8_EEEE;
+ _ZN7android6Parcel28writeUtf8VectorAsUtf16VectorERKNSt3__18optionalINS1_6vectorINS2_INS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEENS7_ISA_EEEEEE;
+ _ZN7android6Parcel31writeUniqueFileDescriptorVectorERKNSt3__110unique_ptrINS1_6vectorINS_4base14unique_fd_implINS4_13DefaultCloserEEENS1_9allocatorIS7_EEEENS1_14default_deleteISA_EEEE;
+ _ZN7android6Parcel31writeUniqueFileDescriptorVectorERKNSt3__16vectorINS_4base14unique_fd_implINS3_13DefaultCloserEEENS1_9allocatorIS6_EEEE;
+ _ZN7android6Parcel31writeUniqueFileDescriptorVectorERKNSt3__18optionalINS1_6vectorINS_4base14unique_fd_implINS4_13DefaultCloserEEENS1_9allocatorIS7_EEEEEE;
+ _ZN7android6Parcel35writeDupImmutableBlobFileDescriptorEi;
+ _ZN7android6Parcel4Blob4initEiPvmb;
+ _ZN7android6Parcel4Blob5clearEv;
+ _ZN7android6Parcel4Blob7releaseEv;
+ _ZN7android6Parcel4BlobC1Ev;
+ _ZN7android6Parcel4BlobC2Ev;
+ _ZN7android6Parcel4BlobD1Ev;
+ _ZN7android6Parcel4BlobD2Ev;
+ _ZN7android6Parcel5writeEPKvm;
+ _ZN7android6Parcel5writeERKNS0_26FlattenableHelperInterfaceE;
+ _ZN7android6Parcel7setDataEPKhm;
+ _ZN7android6Parcel8freeDataEv;
+ _ZN7android6Parcel8growDataEm;
+ _ZN7android6Parcel8setErrorEi;
+ _ZN7android6Parcel9initStateEv;
+ _ZN7android6Parcel9writeBlobEmbPNS0_12WritableBlobE;
+ _ZN7android6Parcel9writeBoolEb;
+ _ZN7android6Parcel9writeByteEa;
+ _ZN7android6Parcel9writeCharEDs;
+ _ZN7android6ParcelC1Ev;
+ _ZN7android6ParcelC2Ev;
+ _ZN7android6ParcelD1Ev;
+ _ZN7android6ParcelD2Ev;
+ _ZN7android7BBinder10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZN7android7BBinder10pingBinderEv;
+ _ZN7android7BBinder11getDebugPidEv;
+ _ZN7android7BBinder11isInheritRtEv;
+ _ZN7android7BBinder11linkToDeathERKNS_2spINS_7IBinder14DeathRecipientEEEPvj;
+ _ZN7android7BBinder11localBinderEv;
+ _ZN7android7BBinder12attachObjectEPKvPvS3_PFvS2_S3_S3_E;
+ _ZN7android7BBinder12detachObjectEPKv;
+ _ZN7android7BBinder12getExtensionEv;
+ _ZN7android7BBinder12setExtensionERKNS_2spINS_7IBinderEEE;
+ _ZN7android7BBinder12setInheritRtEb;
+ _ZN7android7BBinder13unlinkToDeathERKNS_2wpINS_7IBinder14DeathRecipientEEEPvjPS4_;
+ _ZN7android7BBinder15isRequestingSidEv;
+ _ZN7android7BBinder16setRequestingSidEb;
+ _ZN7android7BBinder17getOrCreateExtrasEv;
+ _ZN7android7BBinder21getMinSchedulerPolicyEv;
+ _ZN7android7BBinder21setMinSchedulerPolicyEii;
+ _ZN7android7BBinder23getMinSchedulerPriorityEv;
+ _ZN7android7BBinder4dumpEiRKNS_6VectorINS_8String16EEE;
+ _ZN7android7BBinder8transactEjRKNS_6ParcelEPS1_j;
+ _ZN7android7BBinderC1Ev;
+ _ZN7android7BBinderC2Ev;
+ _ZN7android7BBinderD0Ev;
+ _ZN7android7BBinderD1Ev;
+ _ZN7android7BBinderD2Ev;
+ _ZN7android7content2pm18PackageChangeEvent14readFromParcelEPKNS_6ParcelE;
+ _ZN7android7content2pm21IPackageManagerNative10descriptorE;
+ _ZN7android7content2pm21IPackageManagerNative11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android7content2pm21IPackageManagerNative12default_implE;
+ _ZN7android7content2pm21IPackageManagerNative14getDefaultImplEv;
+ _ZN7android7content2pm21IPackageManagerNative14setDefaultImplENSt3__110unique_ptrIS2_NS3_14default_deleteIS2_EEEE;
+ _ZN7android7content2pm21IPackageManagerNativeC2Ev;
+ _ZN7android7content2pm21IPackageManagerNativeD0Ev;
+ _ZN7android7content2pm21IPackageManagerNativeD1Ev;
+ _ZN7android7content2pm21IPackageManagerNativeD2Ev;
+ _ZN7android7content2pm22BnPackageManagerNative10onTransactEjRKNS_6ParcelEPS3_j;
+ _ZN7android7content2pm22BnPackageManagerNativeC2Ev;
+ _ZN7android7content2pm22BpPackageManagerNative14getAllPackagesEPNSt3__16vectorINS3_12basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS8_ISA_EEEE;
+ _ZN7android7content2pm22BpPackageManagerNative15getNamesForUidsERKNSt3__16vectorIiNS3_9allocatorIiEEEEPNS4_INS3_12basic_stringIcNS3_11char_traitsIcEENS5_IcEEEENS5_ISE_EEEE;
+ _ZN7android7content2pm22BpPackageManagerNative16getLocationFlagsERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEPi;
+ _ZN7android7content2pm22BpPackageManagerNative16hasSystemFeatureERKNS_8String16EiPb;
+ _ZN7android7content2pm22BpPackageManagerNative19isPackageDebuggableERKNS_8String16EPb;
+ _ZN7android7content2pm22BpPackageManagerNative22getInstallerForPackageERKNS_8String16EPNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEE;
+ _ZN7android7content2pm22BpPackageManagerNative24getVersionCodeForPackageERKNS_8String16EPl;
+ _ZN7android7content2pm22BpPackageManagerNative27hasSha256SigningCertificateERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKNS3_6vectorIhNS7_IhEEEEPb;
+ _ZN7android7content2pm22BpPackageManagerNative28getModuleMetadataPackageNameEPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE;
+ _ZN7android7content2pm22BpPackageManagerNative29getTargetSdkVersionForPackageERKNS_8String16EPi;
+ _ZN7android7content2pm22BpPackageManagerNative29isAudioPlaybackCaptureAllowedERKNSt3__16vectorINS3_12basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS8_ISA_EEEEPNS4_IbNS8_IbEEEE;
+ _ZN7android7content2pm22BpPackageManagerNative29registerPackageChangeObserverERKNS_2spINS1_22IPackageChangeObserverEEE;
+ _ZN7android7content2pm22BpPackageManagerNative31unregisterPackageChangeObserverERKNS_2spINS1_22IPackageChangeObserverEEE;
+ _ZN7android7content2pm22BpPackageManagerNativeC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android7content2pm22BpPackageManagerNativeC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android7content2pm22IPackageChangeObserver10descriptorE;
+ _ZN7android7content2pm22IPackageChangeObserver11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android7content2pm22IPackageChangeObserver12default_implE;
+ _ZN7android7content2pm22IPackageChangeObserver14getDefaultImplEv;
+ _ZN7android7content2pm22IPackageChangeObserver14setDefaultImplENSt3__110unique_ptrIS2_NS3_14default_deleteIS2_EEEE;
+ _ZN7android7content2pm22IPackageChangeObserverC2Ev;
+ _ZN7android7content2pm22IPackageChangeObserverD0Ev;
+ _ZN7android7content2pm22IPackageChangeObserverD1Ev;
+ _ZN7android7content2pm22IPackageChangeObserverD2Ev;
+ _ZN7android7content2pm23BnPackageChangeObserver10onTransactEjRKNS_6ParcelEPS3_j;
+ _ZN7android7content2pm23BnPackageChangeObserverC2Ev;
+ _ZN7android7content2pm23BpPackageChangeObserver16onPackageChangedERKNS1_18PackageChangeEventE;
+ _ZN7android7content2pm23BpPackageChangeObserverC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android7content2pm23BpPackageChangeObserverC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android7HexDumpC1EPKvmm;
+ _ZN7android7HexDumpC2EPKvmm;
+ _ZN7android7IBinder11getDebugPidEPi;
+ _ZN7android7IBinder11localBinderEv;
+ _ZN7android7IBinder12getExtensionEPNS_2spIS0_EE;
+ _ZN7android7IBinder12remoteBinderEv;
+ _ZN7android7IBinder12shellCommandERKNS_2spIS0_EEiiiRNS_6VectorINS_8String16EEERKNS1_INS_14IShellCallbackEEERKNS1_INS_15IResultReceiverEEE;
+ _ZN7android7IBinder19queryLocalInterfaceERKNS_8String16E;
+ _ZN7android7IBinderC2Ev;
+ _ZN7android7IBinderD0Ev;
+ _ZN7android7IBinderD1Ev;
+ _ZN7android7IBinderD2Ev;
+ _ZN7android7IMemory10descriptorE;
+ _ZN7android7IMemory11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android7IMemory12default_implE;
+ _ZN7android7IMemory14getDefaultImplEv;
+ _ZN7android7IMemory14setDefaultImplENSt3__110unique_ptrIS0_NS1_14default_deleteIS0_EEEE;
+ _ZN7android7IMemoryC2Ev;
+ _ZN7android7IMemoryD0Ev;
+ _ZN7android7IMemoryD1Ev;
+ _ZN7android7IMemoryD2Ev;
+ _ZN7android8BnMemory10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZN7android8BnMemoryC2Ev;
+ _ZN7android8BnMemoryD0Ev;
+ _ZN7android8BnMemoryD1Ev;
+ _ZN7android8BnMemoryD2Ev;
+ _ZN7android8BpBinder10onFirstRefEv;
+ _ZN7android8BpBinder10pingBinderEv;
+ _ZN7android8BpBinder11linkToDeathERKNS_2spINS_7IBinder14DeathRecipientEEEPvj;
+ _ZN7android8BpBinder12attachObjectEPKvPvS3_PFvS2_S3_S3_E;
+ _ZN7android8BpBinder12detachObjectEPKv;
+ _ZN7android8BpBinder12remoteBinderEv;
+ _ZN7android8BpBinder12sendObituaryEv;
+ _ZN7android8BpBinder12sTrackingMapE;
+ _ZN7android8BpBinder13getCountByUidERNS_6VectorIjEES3_;
+ _ZN7android8BpBinder13ObjectManager4killEv;
+ _ZN7android8BpBinder13ObjectManager6attachEPKvPvS4_PFvS3_S4_S4_E;
+ _ZN7android8BpBinder13ObjectManager6detachEPKv;
+ _ZN7android8BpBinder13ObjectManagerC1Ev;
+ _ZN7android8BpBinder13ObjectManagerC2Ev;
+ _ZN7android8BpBinder13ObjectManagerD1Ev;
+ _ZN7android8BpBinder13ObjectManagerD2Ev;
+ _ZN7android8BpBinder13sTrackingLockE;
+ _ZN7android8BpBinder13unlinkToDeathERKNS_2wpINS_7IBinder14DeathRecipientEEEPvjPS4_;
+ _ZN7android8BpBinder14reportOneDeathERKNS0_8ObituaryE;
+ _ZN7android8BpBinder14sLimitCallbackE;
+ _ZN7android8BpBinder15onLastStrongRefEPKv;
+ _ZN7android8BpBinder15sNumTrackedUidsE;
+ _ZN7android8BpBinder16enableCountByUidEv;
+ _ZN7android8BpBinder16setLimitCallbackEPFviE;
+ _ZN7android8BpBinder17disableCountByUidEv;
+ _ZN7android8BpBinder18sCountByUidEnabledE;
+ _ZN7android8BpBinder19getBinderProxyCountEj;
+ _ZN7android8BpBinder20onIncStrongAttemptedEjPKv;
+ _ZN7android8BpBinder20setCountByUidEnabledEb;
+ _ZN7android8BpBinder26sBinderProxyThrottleCreateE;
+ _ZN7android8BpBinder29sBinderProxyCountLowWatermarkE;
+ _ZN7android8BpBinder29setBinderProxyCountWatermarksEii;
+ _ZN7android8BpBinder30sBinderProxyCountHighWatermarkE;
+ _ZN7android8BpBinder4dumpEiRKNS_6VectorINS_8String16EEE;
+ _ZN7android8BpBinder6createEi;
+ _ZN7android8BpBinder6createERKNS_2spINS_10RpcSessionEEERKNS_10RpcAddressE;
+ _ZN7android8BpBinder8transactEjRKNS_6ParcelEPS1_j;
+ _ZN7android8BpBinderC1EONS0_12BinderHandleEi;
+ _ZN7android8BpBinderC1EONS0_9RpcHandleE;
+ _ZN7android8BpBinderC1EONSt3__17variantIJNS0_12BinderHandleENS0_9RpcHandleEEEE;
+ _ZN7android8BpBinderC2EONS0_12BinderHandleEi;
+ _ZN7android8BpBinderC2EONS0_9RpcHandleE;
+ _ZN7android8BpBinderC2EONSt3__17variantIJNS0_12BinderHandleENS0_9RpcHandleEEEE;
+ _ZN7android8BpBinderD0Ev;
+ _ZN7android8BpBinderD1Ev;
+ _ZN7android8BpBinderD2Ev;
+ _ZN7android8BpMemoryC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android8BpMemoryC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android8BpMemoryD0Ev;
+ _ZN7android8BpMemoryD1Ev;
+ _ZN7android8BpMemoryD2Ev;
+ _ZN7android8internal9Stability11getCategoryEPNS_7IBinderE;
+ _ZN7android8internal9Stability11levelStringENS1_5LevelE;
+ _ZN7android8internal9Stability13getLocalLevelEv;
+ _ZN7android8internal9Stability15isDeclaredLevelENS1_5LevelE;
+ _ZN7android8internal9Stability17debugLogStabilityERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS_7IBinderEEE;
+ _ZN7android8internal9Stability19markCompilationUnitEPNS_7IBinderE;
+ _ZN7android8internal9Stability22tryMarkCompilationUnitEPNS_7IBinderE;
+ _ZN7android8internal9Stability24requiresVintfDeclarationERKNS_2spINS_7IBinderEEE;
+ _ZN7android8internal9Stability25forceDowngradeToStabilityERKNS_2spINS_7IBinderEEENS1_5LevelE;
+ _ZN7android8internal9Stability30forceDowngradeToLocalStabilityERKNS_2spINS_7IBinderEEE;
+ _ZN7android8internal9Stability31forceDowngradeToSystemStabilityERKNS_2spINS_7IBinderEEE;
+ _ZN7android8internal9Stability31forceDowngradeToVendorStabilityERKNS_2spINS_7IBinderEEE;
+ _ZN7android8internal9Stability5checkENS1_8CategoryENS1_5LevelE;
+ _ZN7android8internal9Stability7setReprEPNS_7IBinderEij;
+ _ZN7android8internal9Stability8Category11debugStringEv;
+ _ZN7android8internal9Stability8markVndkEPNS_7IBinderE;
+ _ZN7android8internal9Stability9markVintfEPNS_7IBinderE;
+ _ZN7android8RpcState11CommandDataC1Em;
+ _ZN7android8RpcState11CommandDataC2Em;
+ _ZN7android8RpcState12countBindersEv;
+ _ZN7android8RpcState12getSessionIdERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEEPi;
+ _ZN7android8RpcState12waitForReplyERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEEPNS_6ParcelE;
+ _ZN7android8RpcState13getMaxThreadsERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEEPm;
+ _ZN7android8RpcState13getRootObjectERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEE;
+ _ZN7android8RpcState13sendDecStrongERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_10RpcAddressE;
+ _ZN7android8RpcState15onBinderLeavingERKNS_2spINS_10RpcSessionEEERKNS1_INS_7IBinderEEEPNS_10RpcAddressE;
+ _ZN7android8RpcState15processTransactERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEERKNS_13RpcWireHeaderE;
+ _ZN7android8RpcState16onBinderEnteringERKNS_2spINS_10RpcSessionEEERKNS_10RpcAddressE;
+ _ZN7android8RpcState16processDecStrongERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_13RpcWireHeaderE;
+ _ZN7android8RpcState20getAndExecuteCommandERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEE;
+ _ZN7android8RpcState20processServerCommandERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEERKNS_13RpcWireHeaderE;
+ _ZN7android8RpcState23processTransactInternalERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEENS0_11CommandDataE;
+ _ZN7android8RpcState4dumpEv;
+ _ZN7android8RpcState6rpcRecERKNS_4base14unique_fd_implINS1_13DefaultCloserEEEPKcPvm;
+ _ZN7android8RpcState7rpcSendERKNS_4base14unique_fd_implINS1_13DefaultCloserEEEPKcPKvm;
+ _ZN7android8RpcState8transactERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_10RpcAddressEjRKNS_6ParcelERKNS_2spINS_10RpcSessionEEEPSA_j;
+ _ZN7android8RpcState9terminateEv;
+ _ZN7android8RpcStateC1Ev;
+ _ZN7android8RpcStateC2Ev;
+ _ZN7android8RpcStateD1Ev;
+ _ZN7android8RpcStateD2Ev;
+ _ZN7android9BpRefBase10onFirstRefEv;
+ _ZN7android9BpRefBase15onLastStrongRefEPKv;
+ _ZN7android9BpRefBase20onIncStrongAttemptedEjPKv;
+ _ZN7android9BpRefBaseC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android9BpRefBaseC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android9BpRefBaseD0Ev;
+ _ZN7android9BpRefBaseD1Ev;
+ _ZN7android9BpRefBaseD2Ev;
+ _ZN7android9HeapCache10binderDiedERKNS_2wpINS_7IBinderEEE;
+ _ZN7android9HeapCache10dump_heapsEv;
+ _ZN7android9HeapCache8get_heapERKNS_2spINS_7IBinderEEE;
+ _ZN7android9HeapCache9find_heapERKNS_2spINS_7IBinderEEE;
+ _ZN7android9HeapCache9free_heapERKNS_2spINS_7IBinderEEE;
+ _ZN7android9HeapCache9free_heapERKNS_2wpINS_7IBinderEEE;
+ _ZN7android9HeapCacheC1Ev;
+ _ZN7android9HeapCacheC2Ev;
+ _ZN7android9HeapCacheD0Ev;
+ _ZN7android9HeapCacheD1Ev;
+ _ZN7android9HeapCacheD2Ev;
+ _ZN7android9hexStringEPKvm;
+ _ZN7android9RpcServer12listSessionsEv;
+ _ZN7android9RpcServer13getMaxThreadsEv;
+ _ZN7android9RpcServer13getRootObjectEv;
+ _ZN7android9RpcServer13releaseServerEv;
+ _ZN7android9RpcServer13setMaxThreadsEm;
+ _ZN7android9RpcServer13setRootObjectERKNS_2spINS_7IBinderEEE;
+ _ZN7android9RpcServer15setupInetServerEjPj;
+ _ZN7android9RpcServer16setupVsockServerEj;
+ _ZN7android9RpcServer17setRootObjectWeakERKNS_2wpINS_7IBinderEEE;
+ _ZN7android9RpcServer17setupSocketServerERKNS_16RpcSocketAddressE;
+ _ZN7android9RpcServer19establishConnectionEONS_2spIS0_EENS_4base14unique_fd_implINS4_13DefaultCloserEEE;
+ _ZN7android9RpcServer19setupExternalServerENS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZN7android9RpcServer20onSessionTerminatingERKNS_2spINS_10RpcSessionEEE;
+ _ZN7android9RpcServer21setupUnixDomainServerEPKc;
+ _ZN7android9RpcServer24numUninitializedSessionsEv;
+ _ZN7android9RpcServer4joinEv;
+ _ZN7android9RpcServer4makeEv;
+ _ZN7android9RpcServer61iUnderstandThisCodeIsExperimentalAndIWillNotUseItInProductionEv;
+ _ZN7android9RpcServer9acceptOneEv;
+ _ZN7android9RpcServer9hasServerEv;
+ _ZN7android9RpcServerC1Ev;
+ _ZN7android9RpcServerC2Ev;
+ _ZN7android9RpcServerD0Ev;
+ _ZN7android9RpcServerD1Ev;
+ _ZN7android9RpcServerD2Ev;
+ _ZN7android9SingletonINS_15PermissionCacheEE11getInstanceEv;
+ _ZN7android9SingletonINS_15PermissionCacheEE11hasInstanceEv;
+ _ZN7android9SingletonINS_15PermissionCacheEE5sLockE;
+ _ZN7android9SingletonINS_15PermissionCacheEE9sInstanceE;
+ _ZN7android9SingletonINS_15PermissionCacheEEC1Ev;
+ _ZN7android9SingletonINS_15PermissionCacheEEC2Ev;
+ _ZN7android9SingletonINS_15PermissionCacheEED1Ev;
+ _ZN7android9SingletonINS_15PermissionCacheEED2Ev;
+ _ZN7androidlsERNS_10TextOutputERKNS_7HexDumpE;
+ _ZN7androidlsERNS_10TextOutputERKNS_8TypeCodeE;
+ _ZN7androidlsIA15_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA24_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA2_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA34_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA3_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA43_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA4_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA5_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA8_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA9_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIjEERNS_10TextOutputES2_RKT_;
+ _ZN7androidlsImEERNS_10TextOutputES2_RKT_;
+ _ZN7androidlsINSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEERNS_10TextOutputES9_RKT_;
+ _ZN7androidlsIPcEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIPvEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIyEERNS_10TextOutputES2_RKT_;
+ _ZNK7android10MemoryBase9getMemoryEPlPm;
+ _ZNK7android10RpcAddress13writeToParcelEPNS_6ParcelE;
+ _ZNK7android10RpcAddress15viewRawEmbeddedEv;
+ _ZNK7android10RpcAddress6isZeroEv;
+ _ZNK7android10RpcAddress8toStringEv;
+ _ZNK7android10RpcAddressltERKS0_;
+ _ZNK7android11IMemoryHeap22getInterfaceDescriptorEv;
+ _ZNK7android12BpMemoryHeap12assertMappedEv;
+ _ZNK7android12BpMemoryHeap18assertReallyMappedEv;
+ _ZNK7android12BpMemoryHeap7getBaseEv;
+ _ZNK7android12BpMemoryHeap7getSizeEv;
+ _ZNK7android12BpMemoryHeap8getFlagsEv;
+ _ZNK7android12BpMemoryHeap9getHeapIDEv;
+ _ZNK7android12BpMemoryHeap9getOffsetEv;
+ _ZNK7android12MemoryDealer4dumpEPKc;
+ _ZNK7android12MemoryDealer4heapEv;
+ _ZNK7android12MemoryDealer9allocatorEv;
+ _ZNK7android12SortedVectorINS_15PermissionCache5EntryEE10do_compareEPKvS5_;
+ _ZNK7android12SortedVectorINS_15PermissionCache5EntryEE10do_destroyEPvm;
+ _ZNK7android12SortedVectorINS_15PermissionCache5EntryEE12do_constructEPvm;
+ _ZNK7android12SortedVectorINS_15PermissionCache5EntryEE15do_move_forwardEPvPKvm;
+ _ZNK7android12SortedVectorINS_15PermissionCache5EntryEE16do_move_backwardEPvPKvm;
+ _ZNK7android12SortedVectorINS_15PermissionCache5EntryEE7do_copyEPvPKvm;
+ _ZNK7android12SortedVectorINS_15PermissionCache5EntryEE8do_splatEPvPKvm;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE10do_compareEPKvSA_;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE10do_destroyEPvm;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE12do_constructEPvm;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE15do_move_forwardEPvPKvm;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE16do_move_backwardEPvPKvm;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE7do_copyEPvPKvm;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE8do_splatEPvPKvm;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE10do_compareES3_S3_;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE10do_destroyEPvm;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE12do_constructEPvm;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE15do_move_forwardEPvS3_m;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE16do_move_backwardEPvS3_m;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE7do_copyEPvS3_m;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE8do_splatEPvS3_m;
+ _ZNK7android12SortedVectorINS_8String16EE10do_compareEPKvS4_;
+ _ZNK7android12SortedVectorINS_8String16EE10do_destroyEPvm;
+ _ZNK7android12SortedVectorINS_8String16EE12do_constructEPvm;
+ _ZNK7android12SortedVectorINS_8String16EE15do_move_forwardEPvPKvm;
+ _ZNK7android12SortedVectorINS_8String16EE16do_move_backwardEPvPKvm;
+ _ZNK7android12SortedVectorINS_8String16EE7do_copyEPvPKvm;
+ _ZNK7android12SortedVectorINS_8String16EE8do_splatEPvPKvm;
+ _ZNK7android14IPCThreadState13getCallingPidEv;
+ _ZNK7android14IPCThreadState13getCallingSidEv;
+ _ZNK7android14IPCThreadState13getCallingUidEv;
+ _ZNK7android14IPCThreadState18getCallRestrictionEv;
+ _ZNK7android14IPCThreadState19getStrictModePolicyEv;
+ _ZNK7android14IPCThreadState22getServingStackPointerEv;
+ _ZNK7android14IPCThreadState23getCallingWorkSourceUidEv;
+ _ZNK7android14IPCThreadState25shouldPropagateWorkSourceEv;
+ _ZNK7android14IPCThreadState29getLastTransactionBinderFlagsEv;
+ _ZNK7android14IShellCallback22getInterfaceDescriptorEv;
+ _ZNK7android14MemoryHeapBase7getBaseEv;
+ _ZNK7android14MemoryHeapBase7getSizeEv;
+ _ZNK7android14MemoryHeapBase8getFlagsEv;
+ _ZNK7android14MemoryHeapBase9getDeviceEv;
+ _ZNK7android14MemoryHeapBase9getHeapIDEv;
+ _ZNK7android14MemoryHeapBase9getOffsetEv;
+ _ZNK7android15IResultReceiver22getInterfaceDescriptorEv;
+ _ZNK7android15IServiceManager22getInterfaceDescriptorEv;
+ _ZNK7android15PermissionCache5checkEPbRKNS_8String16Ej;
+ _ZNK7android18BufferedTextOutput9getBufferEv;
+ _ZNK7android18ServiceManagerShim10getServiceERKNS_8String16E;
+ _ZNK7android18ServiceManagerShim12checkServiceERKNS_8String16E;
+ _ZNK7android21IPermissionController22getInterfaceDescriptorEv;
+ _ZNK7android22SimpleBestFitAllocator4dumpEPKc;
+ _ZNK7android22SimpleBestFitAllocator4dumpERNS_7String8EPKc;
+ _ZNK7android22SimpleBestFitAllocator4sizeEv;
+ _ZNK7android22SimpleBestFitAllocator6dump_lEPKc;
+ _ZNK7android22SimpleBestFitAllocator6dump_lERNS_7String8EPKc;
+ _ZNK7android2os15IClientCallback22getInterfaceDescriptorEv;
+ _ZNK7android2os15IServiceManager22getInterfaceDescriptorEv;
+ _ZNK7android2os16IServiceCallback22getInterfaceDescriptorEv;
+ _ZNK7android2os16ParcelableHolder13writeToParcelEPNS_6ParcelE;
+ _ZNK7android2os16ServiceDebugInfo13writeToParcelEPNS_6ParcelE;
+ _ZNK7android2os17PersistableBundle10getBooleanERKNS_8String16EPb;
+ _ZNK7android2os17PersistableBundle10getIntKeysEv;
+ _ZNK7android2os17PersistableBundle11getLongKeysEv;
+ _ZNK7android2os17PersistableBundle12getIntVectorERKNS_8String16EPNSt3__16vectorIiNS5_9allocatorIiEEEE;
+ _ZNK7android2os17PersistableBundle13getDoubleKeysEv;
+ _ZNK7android2os17PersistableBundle13getLongVectorERKNS_8String16EPNSt3__16vectorIlNS5_9allocatorIlEEEE;
+ _ZNK7android2os17PersistableBundle13getStringKeysEv;
+ _ZNK7android2os17PersistableBundle13writeToParcelEPNS_6ParcelE;
+ _ZNK7android2os17PersistableBundle14getBooleanKeysEv;
+ _ZNK7android2os17PersistableBundle15getDoubleVectorERKNS_8String16EPNSt3__16vectorIdNS5_9allocatorIdEEEE;
+ _ZNK7android2os17PersistableBundle15getStringVectorERKNS_8String16EPNSt3__16vectorIS2_NS5_9allocatorIS2_EEEE;
+ _ZNK7android2os17PersistableBundle16getBooleanVectorERKNS_8String16EPNSt3__16vectorIbNS5_9allocatorIbEEEE;
+ _ZNK7android2os17PersistableBundle16getIntVectorKeysEv;
+ _ZNK7android2os17PersistableBundle17getLongVectorKeysEv;
+ _ZNK7android2os17PersistableBundle18writeToParcelInnerEPNS_6ParcelE;
+ _ZNK7android2os17PersistableBundle19getDoubleVectorKeysEv;
+ _ZNK7android2os17PersistableBundle19getStringVectorKeysEv;
+ _ZNK7android2os17PersistableBundle20getBooleanVectorKeysEv;
+ _ZNK7android2os17PersistableBundle20getPersistableBundleERKNS_8String16EPS1_;
+ _ZNK7android2os17PersistableBundle24getPersistableBundleKeysEv;
+ _ZNK7android2os17PersistableBundle4sizeEv;
+ _ZNK7android2os17PersistableBundle5emptyEv;
+ _ZNK7android2os17PersistableBundle6getIntERKNS_8String16EPi;
+ _ZNK7android2os17PersistableBundle7getLongERKNS_8String16EPl;
+ _ZNK7android2os17PersistableBundle9getDoubleERKNS_8String16EPd;
+ _ZNK7android2os17PersistableBundle9getStringERKNS_8String16EPS2_;
+ _ZNK7android2os20ParcelFileDescriptor13writeToParcelEPNS_6ParcelE;
+ _ZNK7android6binder6Status13writeToParcelEPNS_6ParcelE;
+ _ZNK7android6binder6Status9toString8Ev;
+ _ZNK7android6Parcel10errorCheckEv;
+ _ZNK7android6Parcel10ipcObjectsEv;
+ _ZNK7android6Parcel10readDoubleEPd;
+ _ZNK7android6Parcel10readDoubleEv;
+ _ZNK7android6Parcel10readObjectEb;
+ _ZNK7android6Parcel10readUint32EPj;
+ _ZNK7android6Parcel10readUint32Ev;
+ _ZNK7android6Parcel10readUint64EPm;
+ _ZNK7android6Parcel10readUint64Ev;
+ _ZNK7android6Parcel10scanForFdsEv;
+ _ZNK7android6Parcel11ipcDataSizeEv;
+ _ZNK7android6Parcel11readCStringEv;
+ _ZNK7android6Parcel11readInplaceEm;
+ _ZNK7android6Parcel11readPointerEPm;
+ _ZNK7android6Parcel11readPointerEv;
+ _ZNK7android6Parcel11readString8EPNS_7String8E;
+ _ZNK7android6Parcel11readString8Ev;
+ _ZNK7android6Parcel12dataCapacityEv;
+ _ZNK7android6Parcel12dataPositionEv;
+ _ZNK7android6Parcel12objectsCountEv;
+ _ZNK7android6Parcel12readString16EPNS_8String16E;
+ _ZNK7android6Parcel12readString16EPNSt3__110unique_ptrINS_8String16ENS1_14default_deleteIS3_EEEE;
+ _ZNK7android6Parcel12readString16EPNSt3__18optionalINS_8String16EEE;
+ _ZNK7android6Parcel12readString16Ev;
+ _ZNK7android6Parcel13markSensitiveEv;
+ _ZNK7android6Parcel14checkInterfaceEPNS_7IBinderE;
+ _ZNK7android6Parcel14readBoolVectorEPNSt3__110unique_ptrINS1_6vectorIbNS1_9allocatorIbEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel14readBoolVectorEPNSt3__16vectorIbNS1_9allocatorIbEEEE;
+ _ZNK7android6Parcel14readBoolVectorEPNSt3__18optionalINS1_6vectorIbNS1_9allocatorIbEEEEEE;
+ _ZNK7android6Parcel14readByteVectorEPNSt3__110unique_ptrINS1_6vectorIaNS1_9allocatorIaEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel14readByteVectorEPNSt3__110unique_ptrINS1_6vectorIhNS1_9allocatorIhEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel14readByteVectorEPNSt3__16vectorIaNS1_9allocatorIaEEEE;
+ _ZNK7android6Parcel14readByteVectorEPNSt3__16vectorIhNS1_9allocatorIhEEEE;
+ _ZNK7android6Parcel14readByteVectorEPNSt3__18optionalINS1_6vectorIaNS1_9allocatorIaEEEEEE;
+ _ZNK7android6Parcel14readByteVectorEPNSt3__18optionalINS1_6vectorIhNS1_9allocatorIhEEEEEE;
+ _ZNK7android6Parcel14readCharVectorEPNSt3__110unique_ptrINS1_6vectorIDsNS1_9allocatorIDsEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel14readCharVectorEPNSt3__16vectorIDsNS1_9allocatorIDsEEEE;
+ _ZNK7android6Parcel14readCharVectorEPNSt3__18optionalINS1_6vectorIDsNS1_9allocatorIDsEEEEEE;
+ _ZNK7android6Parcel14readParcelableEPNS_10ParcelableE;
+ _ZNK7android6Parcel15ipcObjectsCountEv;
+ _ZNK7android6Parcel15readFloatVectorEPNSt3__110unique_ptrINS1_6vectorIfNS1_9allocatorIfEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel15readFloatVectorEPNSt3__16vectorIfNS1_9allocatorIfEEEE;
+ _ZNK7android6Parcel15readFloatVectorEPNSt3__18optionalINS1_6vectorIfNS1_9allocatorIfEEEEEE;
+ _ZNK7android6Parcel15readInt32VectorEPNSt3__110unique_ptrINS1_6vectorIiNS1_9allocatorIiEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel15readInt32VectorEPNSt3__16vectorIiNS1_9allocatorIiEEEE;
+ _ZNK7android6Parcel15readInt32VectorEPNSt3__18optionalINS1_6vectorIiNS1_9allocatorIiEEEEEE;
+ _ZNK7android6Parcel15readInt64VectorEPNSt3__110unique_ptrINS1_6vectorIlNS1_9allocatorIlEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel15readInt64VectorEPNSt3__16vectorIlNS1_9allocatorIlEEEE;
+ _ZNK7android6Parcel15readInt64VectorEPNSt3__18optionalINS1_6vectorIlNS1_9allocatorIlEEEEEE;
+ _ZNK7android6Parcel15setDataPositionEm;
+ _ZNK7android6Parcel15unflattenBinderEPNS_2spINS_7IBinderEEE;
+ _ZNK7android6Parcel16enforceInterfaceEPKDsmPNS_14IPCThreadStateE;
+ _ZNK7android6Parcel16enforceInterfaceERKNS_8String16EPNS_14IPCThreadStateE;
+ _ZNK7android6Parcel16readDoubleVectorEPNSt3__110unique_ptrINS1_6vectorIdNS1_9allocatorIdEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel16readDoubleVectorEPNSt3__16vectorIdNS1_9allocatorIdEEEE;
+ _ZNK7android6Parcel16readDoubleVectorEPNSt3__18optionalINS1_6vectorIdNS1_9allocatorIdEEEEEE;
+ _ZNK7android6Parcel16readNativeHandleEv;
+ _ZNK7android6Parcel16readStrongBinderEPNS_2spINS_7IBinderEEE;
+ _ZNK7android6Parcel16readStrongBinderEv;
+ _ZNK7android6Parcel16readStrongBinderINS_2os15IClientCallbackEEEiPNS_2spIT_EE;
+ _ZNK7android6Parcel16readStrongBinderINS_2os16IServiceCallbackEEEiPNS_2spIT_EE;
+ _ZNK7android6Parcel16readStrongBinderINS_7content2pm22IPackageChangeObserverEEEiPNS_2spIT_EE;
+ _ZNK7android6Parcel16readUint64VectorEPNSt3__110unique_ptrINS1_6vectorImNS1_9allocatorImEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel16readUint64VectorEPNSt3__16vectorImNS1_9allocatorImEEEE;
+ _ZNK7android6Parcel16readUint64VectorEPNSt3__18optionalINS1_6vectorImNS1_9allocatorImEEEEEE;
+ _ZNK7android6Parcel16validateReadDataEm;
+ _ZNK7android6Parcel17getBlobAshmemSizeEv;
+ _ZNK7android6Parcel17getOpenAshmemSizeEv;
+ _ZNK7android6Parcel17readExceptionCodeEv;
+ _ZNK7android6Parcel17readUtf8FromUtf16EPNSt3__110unique_ptrINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS1_14default_deleteIS8_EEEE;
+ _ZNK7android6Parcel17readUtf8FromUtf16EPNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE;
+ _ZNK7android6Parcel17readUtf8FromUtf16EPNSt3__18optionalINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEE;
+ _ZNK7android6Parcel18hasFileDescriptorsEv;
+ _ZNK7android6Parcel18readFileDescriptorEv;
+ _ZNK7android6Parcel18readString16VectorEPNSt3__110unique_ptrINS1_6vectorINS2_INS_8String16ENS1_14default_deleteIS4_EEEENS1_9allocatorIS7_EEEENS5_ISA_EEEE;
+ _ZNK7android6Parcel18readString16VectorEPNSt3__16vectorINS_8String16ENS1_9allocatorIS3_EEEE;
+ _ZNK7android6Parcel18readString16VectorEPNSt3__18optionalINS1_6vectorINS2_INS_8String16EEENS1_9allocatorIS5_EEEEEE;
+ _ZNK7android6Parcel18readString8InplaceEPm;
+ _ZNK7android6Parcel19readString16InplaceEPm;
+ _ZNK7android6Parcel21finishUnflattenBinderERKNS_2spINS_7IBinderEEEPS3_;
+ _ZNK7android6Parcel22readStrongBinderVectorEPNSt3__110unique_ptrINS1_6vectorINS_2spINS_7IBinderEEENS1_9allocatorIS6_EEEENS1_14default_deleteIS9_EEEE;
+ _ZNK7android6Parcel22readStrongBinderVectorEPNSt3__16vectorINS_2spINS_7IBinderEEENS1_9allocatorIS5_EEEE;
+ _ZNK7android6Parcel22readStrongBinderVectorEPNSt3__18optionalINS1_6vectorINS_2spINS_7IBinderEEENS1_9allocatorIS6_EEEEEE;
+ _ZNK7android6Parcel24readCallingWorkSourceUidEv;
+ _ZNK7android6Parcel24readNullableStrongBinderEPNS_2spINS_7IBinderEEE;
+ _ZNK7android6Parcel24readParcelFileDescriptorEv;
+ _ZNK7android6Parcel24readUniqueFileDescriptorEPNS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZNK7android6Parcel29readUtf8VectorFromUtf16VectorEPNSt3__110unique_ptrINS1_6vectorINS2_INS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS1_14default_deleteIS9_EEEENS7_ISC_EEEENSA_ISE_EEEE;
+ _ZNK7android6Parcel29readUtf8VectorFromUtf16VectorEPNSt3__16vectorINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS6_IS8_EEEE;
+ _ZNK7android6Parcel29readUtf8VectorFromUtf16VectorEPNSt3__18optionalINS1_6vectorINS2_INS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEENS7_ISA_EEEEEE;
+ _ZNK7android6Parcel30readUniqueFileDescriptorVectorEPNSt3__110unique_ptrINS1_6vectorINS_4base14unique_fd_implINS4_13DefaultCloserEEENS1_9allocatorIS7_EEEENS1_14default_deleteISA_EEEE;
+ _ZNK7android6Parcel30readUniqueFileDescriptorVectorEPNSt3__16vectorINS_4base14unique_fd_implINS3_13DefaultCloserEEENS1_9allocatorIS6_EEEE;
+ _ZNK7android6Parcel30readUniqueFileDescriptorVectorEPNSt3__18optionalINS1_6vectorINS_4base14unique_fd_implINS4_13DefaultCloserEEENS1_9allocatorIS7_EEEEEE;
+ _ZNK7android6Parcel30readUniqueParcelFileDescriptorEPNS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZNK7android6Parcel37updateWorkSourceRequestHeaderPositionEv;
+ _ZNK7android6Parcel4dataEv;
+ _ZNK7android6Parcel4readEPvm;
+ _ZNK7android6Parcel4readERNS0_26FlattenableHelperInterfaceE;
+ _ZNK7android6Parcel5printERNS_10TextOutputEj;
+ _ZNK7android6Parcel7ipcDataEv;
+ _ZNK7android6Parcel8allowFdsEv;
+ _ZNK7android6Parcel8dataSizeEv;
+ _ZNK7android6Parcel8isForRpcEv;
+ _ZNK7android6Parcel8readBlobEmPNS0_12ReadableBlobE;
+ _ZNK7android6Parcel8readBoolEPb;
+ _ZNK7android6Parcel8readBoolEv;
+ _ZNK7android6Parcel8readByteEPa;
+ _ZNK7android6Parcel8readByteEv;
+ _ZNK7android6Parcel8readCharEPDs;
+ _ZNK7android6Parcel8readCharEv;
+ _ZNK7android6Parcel9dataAvailEv;
+ _ZNK7android6Parcel9readFloatEPf;
+ _ZNK7android6Parcel9readFloatEv;
+ _ZNK7android6Parcel9readInt32EPi;
+ _ZNK7android6Parcel9readInt32Ev;
+ _ZNK7android6Parcel9readInt64EPl;
+ _ZNK7android6Parcel9readInt64Ev;
+ _ZNK7android6VectorIiE10do_destroyEPvm;
+ _ZNK7android6VectorIiE12do_constructEPvm;
+ _ZNK7android6VectorIiE15do_move_forwardEPvPKvm;
+ _ZNK7android6VectorIiE16do_move_backwardEPvPKvm;
+ _ZNK7android6VectorIiE7do_copyEPvPKvm;
+ _ZNK7android6VectorIiE8do_splatEPvPKvm;
+ _ZNK7android6VectorINS_12ProcessState12handle_entryEE10do_destroyEPvm;
+ _ZNK7android6VectorINS_12ProcessState12handle_entryEE12do_constructEPvm;
+ _ZNK7android6VectorINS_12ProcessState12handle_entryEE15do_move_forwardEPvPKvm;
+ _ZNK7android6VectorINS_12ProcessState12handle_entryEE16do_move_backwardEPvPKvm;
+ _ZNK7android6VectorINS_12ProcessState12handle_entryEE7do_copyEPvPKvm;
+ _ZNK7android6VectorINS_12ProcessState12handle_entryEE8do_splatEPvPKvm;
+ _ZNK7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEE10do_destroyEPvm;
+ _ZNK7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEE12do_constructEPvm;
+ _ZNK7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEE15do_move_forwardEPvPKvm;
+ _ZNK7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEE16do_move_backwardEPvPKvm;
+ _ZNK7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEE7do_copyEPvPKvm;
+ _ZNK7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEE8do_splatEPvPKvm;
+ _ZNK7android6VectorINS_8BpBinder8ObituaryEE10do_destroyEPvm;
+ _ZNK7android6VectorINS_8BpBinder8ObituaryEE12do_constructEPvm;
+ _ZNK7android6VectorINS_8BpBinder8ObituaryEE15do_move_forwardEPvPKvm;
+ _ZNK7android6VectorINS_8BpBinder8ObituaryEE16do_move_backwardEPvPKvm;
+ _ZNK7android6VectorINS_8BpBinder8ObituaryEE7do_copyEPvPKvm;
+ _ZNK7android6VectorINS_8BpBinder8ObituaryEE8do_splatEPvPKvm;
+ _ZNK7android6VectorINS_8String16EE10do_destroyEPvm;
+ _ZNK7android6VectorINS_8String16EE12do_constructEPvm;
+ _ZNK7android6VectorINS_8String16EE15do_move_forwardEPvPKvm;
+ _ZNK7android6VectorINS_8String16EE16do_move_backwardEPvPKvm;
+ _ZNK7android6VectorINS_8String16EE7do_copyEPvPKvm;
+ _ZNK7android6VectorINS_8String16EE8do_splatEPvPKvm;
+ _ZNK7android6VectorIPNS_7BBinderEE10do_destroyEPvm;
+ _ZNK7android6VectorIPNS_7BBinderEE12do_constructEPvm;
+ _ZNK7android6VectorIPNS_7BBinderEE15do_move_forwardEPvPKvm;
+ _ZNK7android6VectorIPNS_7BBinderEE16do_move_backwardEPvPKvm;
+ _ZNK7android6VectorIPNS_7BBinderEE7do_copyEPvPKvm;
+ _ZNK7android6VectorIPNS_7BBinderEE8do_splatEPvPKvm;
+ _ZNK7android6VectorIPNS_7RefBase12weakref_typeEE10do_destroyEPvm;
+ _ZNK7android6VectorIPNS_7RefBase12weakref_typeEE12do_constructEPvm;
+ _ZNK7android6VectorIPNS_7RefBase12weakref_typeEE15do_move_forwardEPvPKvm;
+ _ZNK7android6VectorIPNS_7RefBase12weakref_typeEE16do_move_backwardEPvPKvm;
+ _ZNK7android6VectorIPNS_7RefBase12weakref_typeEE7do_copyEPvPKvm;
+ _ZNK7android6VectorIPNS_7RefBase12weakref_typeEE8do_splatEPvPKvm;
+ _ZNK7android6VectorIPNS_7RefBaseEE10do_destroyEPvm;
+ _ZNK7android6VectorIPNS_7RefBaseEE12do_constructEPvm;
+ _ZNK7android6VectorIPNS_7RefBaseEE15do_move_forwardEPvPKvm;
+ _ZNK7android6VectorIPNS_7RefBaseEE16do_move_backwardEPvPKvm;
+ _ZNK7android6VectorIPNS_7RefBaseEE7do_copyEPvPKvm;
+ _ZNK7android6VectorIPNS_7RefBaseEE8do_splatEPvPKvm;
+ _ZNK7android7BBinder10findObjectEPKv;
+ _ZNK7android7BBinder13isBinderAliveEv;
+ _ZNK7android7BBinder22getInterfaceDescriptorEv;
+ _ZNK7android7content2pm18PackageChangeEvent13writeToParcelEPNS_6ParcelE;
+ _ZNK7android7content2pm21IPackageManagerNative22getInterfaceDescriptorEv;
+ _ZNK7android7content2pm22IPackageChangeObserver22getInterfaceDescriptorEv;
+ _ZNK7android7IBinder13checkSubclassEPKv;
+ _ZNK7android7IMemory11fastPointerERKNS_2spINS_7IBinderEEEl;
+ _ZNK7android7IMemory15unsecurePointerEv;
+ _ZNK7android7IMemory22getInterfaceDescriptorEv;
+ _ZNK7android7IMemory4sizeEv;
+ _ZNK7android7IMemory6offsetEv;
+ _ZNK7android7IMemory7pointerEv;
+ _ZNK7android8BpBinder10findObjectEPKv;
+ _ZNK7android8BpBinder10rpcAddressEv;
+ _ZNK7android8BpBinder10rpcSessionEv;
+ _ZNK7android8BpBinder11isRpcBinderEv;
+ _ZNK7android8BpBinder12binderHandleEv;
+ _ZNK7android8BpBinder13isBinderAliveEv;
+ _ZNK7android8BpBinder13ObjectManager4findEPKv;
+ _ZNK7android8BpBinder18isDescriptorCachedEv;
+ _ZNK7android8BpBinder22getInterfaceDescriptorEv;
+ _ZNK7android8BpMemory9getMemoryEPlPm;
+ _ZNKSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE3strEv;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ElEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE4findIS3_EENS_21__tree_const_iteratorIS6_PNS_11__tree_nodeIS6_PvEElEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIlNS_9allocatorIlEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEERKT_;
+ _ZNSt3__111__sift_downIRNS_4lessIN7android8RpcState10BinderNode9AsyncTodoEEENS_11__wrap_iterIPS5_EEEEvT0_SB_T_NS_15iterator_traitsISB_E15difference_typeESB_;
+ _ZNSt3__111unique_lockINS_5mutexEE6unlockEv;
+ _ZNSt3__112__hash_tableINS_17__hash_value_typeIijEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE14__erase_uniqueIiEEmRKT_;
+ _ZNSt3__112__hash_tableINS_17__hash_value_typeIijEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE25__emplace_unique_key_argsIiJRKNS_21piecewise_construct_tENS_5tupleIJRKiEEENSI_IJEEEEEENS_4pairINS_15__hash_iteratorIPNS_11__hash_nodeIS2_PvEEEEbEERKT_DpOT0_;
+ _ZNSt3__112__hash_tableINS_17__hash_value_typeIijEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE6rehashEm;
+ _ZNSt3__112__hash_tableINS_17__hash_value_typeIijEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE6removeENS_21__hash_const_iteratorIPNS_11__hash_nodeIS2_PvEEEE;
+ _ZNSt3__112__hash_tableINS_17__hash_value_typeIijEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE8__rehashEm;
+ _ZNSt3__113__tree_removeIPNS_16__tree_node_baseIPvEEEEvT_S5_;
+ _ZNSt3__114__copy_alignedINS_6vectorIbNS_9allocatorIbEEEELb0EEENS_14__bit_iteratorIT_Lb0EXLi0EEEENS5_IS6_XT0_EXLi0EEEES8_S7_;
+ _ZNSt3__114__copy_alignedINS_6vectorIbNS_9allocatorIbEEEELb1EEENS_14__bit_iteratorIT_Lb0EXLi0EEEENS5_IS6_XT0_EXLi0EEEES8_S7_;
+ _ZNSt3__114__thread_proxyINS_5tupleIJNS_10unique_ptrINS_15__thread_structENS_14default_deleteIS3_EEEEMN7android9RpcServerEFvONS7_2spIS8_EENS7_4base14unique_fd_implINSC_13DefaultCloserEEEEPS8_SA_SF_EEEEEPvSK_;
+ _ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE7seekoffExNS_8ios_base7seekdirEj;
+ _ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE8overflowEi;
+ _ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE9pbackfailEi;
+ _ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE9underflowEv;
+ _ZNSt3__116__copy_unalignedINS_6vectorIbNS_9allocatorIbEEEELb0EEENS_14__bit_iteratorIT_Lb0EXLi0EEEENS5_IS6_XT0_EXLi0EEEES8_S7_;
+ _ZNSt3__116__copy_unalignedINS_6vectorIbNS_9allocatorIbEEEELb1EEENS_14__bit_iteratorIT_Lb0EXLi0EEEENS5_IS6_XT0_EXLi0EEEES8_S7_;
+ _ZNSt3__120__shared_ptr_emplaceIN7android14RpcWireAddressENS_9allocatorIS2_EEE16__on_zero_sharedEv;
+ _ZNSt3__120__shared_ptr_emplaceIN7android14RpcWireAddressENS_9allocatorIS2_EEE21__on_zero_shared_weakEv;
+ _ZNSt3__120__shared_ptr_emplaceIN7android6binder8internal21ClientCounterCallbackENS_9allocatorIS4_EEE16__on_zero_sharedEv;
+ _ZNSt3__120__shared_ptr_emplaceIN7android6binder8internal21ClientCounterCallbackENS_9allocatorIS4_EEE21__on_zero_shared_weakEv;
+ _ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m;
+ _ZNSt3__127__tree_balance_after_insertIPNS_16__tree_node_baseIPvEEEEvT_S5_;
+ _ZNSt3__16__treeIN7android8String16ENS_4lessIS2_EENS_9allocatorIS2_EEE12__find_equalIS2_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISC_EERKT_;
+ _ZNSt3__16__treeIN7android8String16ENS_4lessIS2_EENS_9allocatorIS2_EEE25__emplace_unique_key_argsIS2_JRKS2_EEENS_4pairINS_15__tree_iteratorIS2_PNS_11__tree_nodeIS2_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeIN7android8String16ENS_4lessIS2_EENS_9allocatorIS2_EEE7destroyEPNS_11__tree_nodeIS2_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIiN7android2spINS2_10RpcSessionEEEEENS_19__map_value_compareIiS6_NS_4lessIiEELb1EEENS_9allocatorIS6_EEE5eraseENS_21__tree_const_iteratorIS6_PNS_11__tree_nodeIS6_PvEElEE;
+ _ZNSt3__16__treeINS_12__value_typeIiN7android2spINS2_10RpcSessionEEEEENS_19__map_value_compareIiS6_NS_4lessIiEELb1EEENS_9allocatorIS6_EEE7destroyEPNS_11__tree_nodeIS6_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android10RpcAddressENS2_8RpcState10BinderNodeEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE25__emplace_unique_key_argsIS3_JNS_4pairIKS3_S5_EEEEENSF_INS_15__tree_iteratorIS6_PNS_11__tree_nodeIS6_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android10RpcAddressENS2_8RpcState10BinderNodeEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE7destroyEPNS_11__tree_nodeIS6_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_SE_EElEERPNS_15__tree_end_nodeISG_EESH_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISG_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE14__assign_multiINS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEEEvT_SJ_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE15__emplace_multiIJRKNS_4pairIKS3_bEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSG_IJEEEEEENS_4pairINS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_bEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEENS_21__tree_const_iteratorIS4_SM_lEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE7destroyEPNS_11__tree_nodeIS4_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_SE_EElEERPNS_15__tree_end_nodeISG_EESH_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISG_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE14__assign_multiINS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEEEvT_SJ_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE15__emplace_multiIJRKNS_4pairIKS3_dEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSG_IJEEEEEENS_4pairINS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_dEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEENS_21__tree_const_iteratorIS4_SM_lEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE7destroyEPNS_11__tree_nodeIS4_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_SE_EElEERPNS_15__tree_end_nodeISG_EESH_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISG_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE14__assign_multiINS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEEEvT_SJ_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE15__emplace_multiIJRKNS_4pairIKS3_iEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSG_IJEEEEEENS_4pairINS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_iEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEENS_21__tree_const_iteratorIS4_SM_lEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE7destroyEPNS_11__tree_nodeIS4_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ElEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_SE_EElEERPNS_15__tree_end_nodeISG_EESH_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ElEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISG_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ElEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE14__assign_multiINS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEEEvT_SJ_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ElEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE15__emplace_multiIJRKNS_4pairIKS3_lEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ElEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSG_IJEEEEEENS_4pairINS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ElEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_lEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEENS_21__tree_const_iteratorIS4_SM_lEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ElEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ElEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE7destroyEPNS_11__tree_nodeIS4_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS6_PNS_11__tree_nodeIS6_SG_EElEERPNS_15__tree_end_nodeISI_EESJ_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISI_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE14__assign_multiINS_21__tree_const_iteratorIS6_PNS_11__tree_nodeIS6_PvEElEEEEvT_SL_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE14__erase_uniqueIS3_EEmRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE15__emplace_multiIJRKNS_4pairIKS3_S5_EEEEENS_15__tree_iteratorIS6_PNS_11__tree_nodeIS6_PvEElEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSI_IJEEEEEENS_4pairINS_15__tree_iteratorIS6_PNS_11__tree_nodeIS6_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S5_EEEEENS_15__tree_iteratorIS6_PNS_11__tree_nodeIS6_PvEElEENS_21__tree_const_iteratorIS6_SO_lEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE4findIS3_EENS_15__tree_iteratorIS6_PNS_11__tree_nodeIS6_PvEElEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE5eraseENS_21__tree_const_iteratorIS6_PNS_11__tree_nodeIS6_PvEElEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE7destroyEPNS_11__tree_nodeIS6_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_SH_EElEERPNS_15__tree_end_nodeISJ_EESK_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISJ_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__assign_multiINS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEEEvT_SM_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__erase_uniqueIS3_EEmRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE15__emplace_multiIJRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE16__construct_nodeIJRKNS_4pairIKS3_S7_EEEEENS_10unique_ptrINS_11__tree_nodeIS8_PvEENS_22__tree_node_destructorINS5_ISO_EEEEEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSJ_IJEEEEEENS_4pairINS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEENS_21__tree_const_iteratorIS8_SP_lEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE5eraseENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE7destroyEPNS_11__tree_nodeIS8_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_SH_EElEERPNS_15__tree_end_nodeISJ_EESK_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISJ_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__assign_multiINS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEEEvT_SM_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__erase_uniqueIS3_EEmRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE15__emplace_multiIJRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSJ_IJEEEEEENS_4pairINS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEENS_21__tree_const_iteratorIS8_SP_lEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE5eraseENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE7destroyEPNS_11__tree_nodeIS8_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_SH_EElEERPNS_15__tree_end_nodeISJ_EESK_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISJ_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__assign_multiINS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEEEvT_SM_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__erase_uniqueIS3_EEmRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE15__emplace_multiIJRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSJ_IJEEEEEENS_4pairINS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEENS_21__tree_const_iteratorIS8_SP_lEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE5eraseENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE7destroyEPNS_11__tree_nodeIS8_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIlNS_9allocatorIlEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_SH_EElEERPNS_15__tree_end_nodeISJ_EESK_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIlNS_9allocatorIlEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISJ_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIlNS_9allocatorIlEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__assign_multiINS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEEEvT_SM_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIlNS_9allocatorIlEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__erase_uniqueIS3_EEmRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIlNS_9allocatorIlEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE15__emplace_multiIJRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIlNS_9allocatorIlEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSJ_IJEEEEEENS_4pairINS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIlNS_9allocatorIlEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEENS_21__tree_const_iteratorIS8_SP_lEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIlNS_9allocatorIlEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIlNS_9allocatorIlEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE5eraseENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIlNS_9allocatorIlEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE7destroyEPNS_11__tree_nodeIS8_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_SH_EElEERPNS_15__tree_end_nodeISJ_EESK_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISJ_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__assign_multiINS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEEEvT_SM_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__erase_uniqueIS3_EEmRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE15__emplace_multiIJRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE16__construct_nodeIJRKNS_4pairIKS3_S7_EEEEENS_10unique_ptrINS_11__tree_nodeIS8_PvEENS_22__tree_node_destructorINS5_ISO_EEEEEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSJ_IJEEEEEENS_4pairINS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEENS_21__tree_const_iteratorIS8_SP_lEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE5eraseENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE7destroyEPNS_11__tree_nodeIS8_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_SE_EElEERPNS_15__tree_end_nodeISG_EESH_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISG_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE14__assign_multiINS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEEEvT_SJ_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE14__erase_uniqueIS3_EEmRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE15__emplace_multiIJRKNS_4pairIKS3_S3_EEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSG_IJEEEEEENS_4pairINS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S3_EEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEENS_21__tree_const_iteratorIS4_SM_lEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE5eraseENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE7destroyEPNS_11__tree_nodeIS4_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeINS_11__thread_idENS_6threadEEENS_19__map_value_compareIS2_S4_NS_4lessIS2_EELb1EEENS_9allocatorIS4_EEE7destroyEPNS_11__tree_nodeIS4_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEN7android6binder8internal25ClientCounterCallbackImpl7ServiceEEENS_19__map_value_compareIS7_SD_NS_4lessIS7_EELb1EEENS5_ISD_EEE12__find_equalIS7_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISO_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEN7android6binder8internal25ClientCounterCallbackImpl7ServiceEEENS_19__map_value_compareIS7_SD_NS_4lessIS7_EELb1EEENS5_ISD_EEE25__emplace_unique_key_argsIS7_JRKNS_21piecewise_construct_tENS_5tupleIJRKS7_EEENSO_IJEEEEEENS_4pairINS_15__tree_iteratorISD_PNS_11__tree_nodeISD_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEN7android6binder8internal25ClientCounterCallbackImpl7ServiceEEENS_19__map_value_compareIS7_SD_NS_4lessIS7_EELb1EEENS5_ISD_EEE7destroyEPNS_11__tree_nodeISD_PvEE;
+ _ZNSt3__16vectorIaNS_9allocatorIaEEE6insertIPKaEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIaNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPaEEE4typeENSC_IS6_EES8_S8_;
+ _ZNSt3__16vectorIbNS_9allocatorIbEEE18__construct_at_endINS_14__bit_iteratorIS3_Lb0ELm0EEEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeES8_S8_;
+ _ZNSt3__16vectorIbNS_9allocatorIbEEE18__construct_at_endINS_14__bit_iteratorIS3_Lb1ELm0EEEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeES8_S8_;
+ _ZNSt3__16vectorIbNS_9allocatorIbEEE7reserveEm;
+ _ZNSt3__16vectorIbNS_9allocatorIbEEE9push_backERKb;
+ _ZNSt3__16vectorIbNS_9allocatorIbEEEaSERKS3_;
+ _ZNSt3__16vectorIdNS_9allocatorIdEEE6assignIPdEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIdNS_15iterator_traitsIS7_E9referenceEEE5valueEvE4typeES7_S7_;
+ _ZNSt3__16vectorIdNS_9allocatorIdEEE6insertIPKdEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIdNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPdEEE4typeENSC_IS6_EES8_S8_;
+ _ZNSt3__16vectorIDsNS_9allocatorIDsEEE24__emplace_back_slow_pathIJDsEEEvDpOT_;
+ _ZNSt3__16vectorIDsNS_9allocatorIDsEEE7reserveEm;
+ _ZNSt3__16vectorIfNS_9allocatorIfEEE6insertIPKfEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIfNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPfEEE4typeENSC_IS6_EES8_S8_;
+ _ZNSt3__16vectorIhNS_9allocatorIhEEE6insertIPKhEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIhNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPhEEE4typeENSC_IS6_EES8_S8_;
+ _ZNSt3__16vectorIiNS_9allocatorIiEEE6assignIPiEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIiNS_15iterator_traitsIS7_E9referenceEEE5valueEvE4typeES7_S7_;
+ _ZNSt3__16vectorIiNS_9allocatorIiEEE6insertIPKiEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIiNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPiEEE4typeENSC_IS6_EES8_S8_;
+ _ZNSt3__16vectorIlNS_9allocatorIlEEE6assignIPlEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIlNS_15iterator_traitsIS7_E9referenceEEE5valueEvE4typeES7_S7_;
+ _ZNSt3__16vectorImNS_9allocatorImEEE6insertIPKmEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleImNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPmEEE4typeENSC_IS6_EES8_S8_;
+ _ZNSt3__16vectorIN7android2os16ServiceDebugInfoENS_9allocatorIS3_EEE8__appendEm;
+ _ZNSt3__16vectorIN7android2spINS1_10RpcSession13RpcConnectionEEENS_9allocatorIS5_EEE21__push_back_slow_pathIRKS5_EEvOT_;
+ _ZNSt3__16vectorIN7android2spINS1_10RpcSessionEEENS_9allocatorIS4_EEE21__push_back_slow_pathIRKS4_EEvOT_;
+ _ZNSt3__16vectorIN7android2spINS1_7IBinderEEENS_9allocatorIS4_EEE21__push_back_slow_pathIRKS4_EEvOT_;
+ _ZNSt3__16vectorIN7android2spINS1_7IBinderEEENS_9allocatorIS4_EEE8__appendEm;
+ _ZNSt3__16vectorIN7android4base14unique_fd_implINS2_13DefaultCloserEEENS_9allocatorIS5_EEE8__appendEm;
+ _ZNSt3__16vectorIN7android8RpcState10BinderNode9AsyncTodoENS_9allocatorIS4_EEE21__push_back_slow_pathIS4_EEvOT_;
+ _ZNSt3__16vectorIN7android8String16ENS_9allocatorIS2_EEE6assignIPS2_EENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIS2_NS_15iterator_traitsIS9_E9referenceEEE5valueEvE4typeES9_S9_;
+ _ZNSt3__16vectorIN7android8String16ENS_9allocatorIS2_EEE8__appendEm;
+ _ZNSt3__16vectorINS_10unique_ptrIN7android8String16ENS_14default_deleteIS3_EEEENS_9allocatorIS6_EEE8__appendEm;
+ _ZNSt3__16vectorINS_10unique_ptrINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS_14default_deleteIS7_EEEENS5_ISA_EEE8__appendEm;
+ _ZNSt3__16vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEE8__appendEm;
+ _ZNSt3__16vectorINS_8optionalIN7android8String16EEENS_9allocatorIS4_EEE8__appendEm;
+ _ZNSt3__16vectorINS_8optionalINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEENS5_IS8_EEE8__appendEm;
+ _ZTCN7android10AllocationE0_NS_10IInterfaceE;
+ _ZTCN7android10AllocationE0_NS_10MemoryBaseE;
+ _ZTCN7android10AllocationE0_NS_11BnInterfaceINS_7IMemoryEEE;
+ _ZTCN7android10AllocationE0_NS_7IMemoryE;
+ _ZTCN7android10AllocationE0_NS_8BnMemoryE;
+ _ZTCN7android10AllocationE8_NS_7BBinderE;
+ _ZTCN7android10AllocationE8_NS_7IBinderE;
+ _ZTCN7android10MemoryBaseE0_NS_10IInterfaceE;
+ _ZTCN7android10MemoryBaseE0_NS_11BnInterfaceINS_7IMemoryEEE;
+ _ZTCN7android10MemoryBaseE0_NS_7IMemoryE;
+ _ZTCN7android10MemoryBaseE0_NS_8BnMemoryE;
+ _ZTCN7android10MemoryBaseE8_NS_7BBinderE;
+ _ZTCN7android10MemoryBaseE8_NS_7IBinderE;
+ _ZTCN7android10PoolThreadE0_NS_6ThreadE;
+ _ZTCN7android11IMemoryHeapE0_NS_10IInterfaceE;
+ _ZTCN7android12BnMemoryHeapE0_NS_10IInterfaceE;
+ _ZTCN7android12BnMemoryHeapE0_NS_11BnInterfaceINS_11IMemoryHeapEEE;
+ _ZTCN7android12BnMemoryHeapE0_NS_11IMemoryHeapE;
+ _ZTCN7android12BnMemoryHeapE8_NS_7BBinderE;
+ _ZTCN7android12BnMemoryHeapE8_NS_7IBinderE;
+ _ZTCN7android12BpMemoryHeapE0_NS_10IInterfaceE;
+ _ZTCN7android12BpMemoryHeapE0_NS_11BpInterfaceINS_11IMemoryHeapEEE;
+ _ZTCN7android12BpMemoryHeapE0_NS_11IMemoryHeapE;
+ _ZTCN7android12BpMemoryHeapE8_NS_9BpRefBaseE;
+ _ZTCN7android14IShellCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android14MemoryHeapBaseE64_NS_10IInterfaceE;
+ _ZTCN7android14MemoryHeapBaseE64_NS_11BnInterfaceINS_11IMemoryHeapEEE;
+ _ZTCN7android14MemoryHeapBaseE64_NS_11IMemoryHeapE;
+ _ZTCN7android14MemoryHeapBaseE64_NS_12BnMemoryHeapE;
+ _ZTCN7android14MemoryHeapBaseE72_NS_7BBinderE;
+ _ZTCN7android14MemoryHeapBaseE72_NS_7IBinderE;
+ _ZTCN7android15BnShellCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android15BnShellCallbackE0_NS_11BnInterfaceINS_14IShellCallbackEEE;
+ _ZTCN7android15BnShellCallbackE0_NS_14IShellCallbackE;
+ _ZTCN7android15BnShellCallbackE8_NS_7BBinderE;
+ _ZTCN7android15BnShellCallbackE8_NS_7IBinderE;
+ _ZTCN7android15BpShellCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android15BpShellCallbackE0_NS_11BpInterfaceINS_14IShellCallbackEEE;
+ _ZTCN7android15BpShellCallbackE0_NS_14IShellCallbackE;
+ _ZTCN7android15BpShellCallbackE8_NS_9BpRefBaseE;
+ _ZTCN7android15IResultReceiverE0_NS_10IInterfaceE;
+ _ZTCN7android15IServiceManagerE0_NS_10IInterfaceE;
+ _ZTCN7android16BnResultReceiverE0_NS_10IInterfaceE;
+ _ZTCN7android16BnResultReceiverE0_NS_11BnInterfaceINS_15IResultReceiverEEE;
+ _ZTCN7android16BnResultReceiverE0_NS_15IResultReceiverE;
+ _ZTCN7android16BnResultReceiverE8_NS_7BBinderE;
+ _ZTCN7android16BnResultReceiverE8_NS_7IBinderE;
+ _ZTCN7android16BpResultReceiverE0_NS_10IInterfaceE;
+ _ZTCN7android16BpResultReceiverE0_NS_11BpInterfaceINS_15IResultReceiverEEE;
+ _ZTCN7android16BpResultReceiverE0_NS_15IResultReceiverE;
+ _ZTCN7android16BpResultReceiverE8_NS_9BpRefBaseE;
+ _ZTCN7android18ServiceManagerShimE0_NS_10IInterfaceE;
+ _ZTCN7android18ServiceManagerShimE0_NS_15IServiceManagerE;
+ _ZTCN7android21IPermissionControllerE0_NS_10IInterfaceE;
+ _ZTCN7android22BnPermissionControllerE0_NS_10IInterfaceE;
+ _ZTCN7android22BnPermissionControllerE0_NS_11BnInterfaceINS_21IPermissionControllerEEE;
+ _ZTCN7android22BnPermissionControllerE0_NS_21IPermissionControllerE;
+ _ZTCN7android22BnPermissionControllerE8_NS_7BBinderE;
+ _ZTCN7android22BnPermissionControllerE8_NS_7IBinderE;
+ _ZTCN7android22BpPermissionControllerE0_NS_10IInterfaceE;
+ _ZTCN7android22BpPermissionControllerE0_NS_11BpInterfaceINS_21IPermissionControllerEEE;
+ _ZTCN7android22BpPermissionControllerE0_NS_21IPermissionControllerE;
+ _ZTCN7android22BpPermissionControllerE8_NS_9BpRefBaseE;
+ _ZTCN7android2os15IClientCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android2os15IServiceManagerE0_NS_10IInterfaceE;
+ _ZTCN7android2os16BnClientCallbackE0_NS0_15IClientCallbackE;
+ _ZTCN7android2os16BnClientCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android2os16BnClientCallbackE0_NS_11BnInterfaceINS0_15IClientCallbackEEE;
+ _ZTCN7android2os16BnClientCallbackE8_NS_7BBinderE;
+ _ZTCN7android2os16BnClientCallbackE8_NS_7IBinderE;
+ _ZTCN7android2os16BnServiceManagerE0_NS0_15IServiceManagerE;
+ _ZTCN7android2os16BnServiceManagerE0_NS_10IInterfaceE;
+ _ZTCN7android2os16BnServiceManagerE0_NS_11BnInterfaceINS0_15IServiceManagerEEE;
+ _ZTCN7android2os16BnServiceManagerE8_NS_7BBinderE;
+ _ZTCN7android2os16BnServiceManagerE8_NS_7IBinderE;
+ _ZTCN7android2os16BpClientCallbackE0_NS0_15IClientCallbackE;
+ _ZTCN7android2os16BpClientCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android2os16BpClientCallbackE0_NS_11BpInterfaceINS0_15IClientCallbackEEE;
+ _ZTCN7android2os16BpClientCallbackE8_NS_9BpRefBaseE;
+ _ZTCN7android2os16BpServiceManagerE0_NS0_15IServiceManagerE;
+ _ZTCN7android2os16BpServiceManagerE0_NS_10IInterfaceE;
+ _ZTCN7android2os16BpServiceManagerE0_NS_11BpInterfaceINS0_15IServiceManagerEEE;
+ _ZTCN7android2os16BpServiceManagerE8_NS_9BpRefBaseE;
+ _ZTCN7android2os16IServiceCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android2os17BnServiceCallbackE0_NS0_16IServiceCallbackE;
+ _ZTCN7android2os17BnServiceCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android2os17BnServiceCallbackE0_NS_11BnInterfaceINS0_16IServiceCallbackEEE;
+ _ZTCN7android2os17BnServiceCallbackE8_NS_7BBinderE;
+ _ZTCN7android2os17BnServiceCallbackE8_NS_7IBinderE;
+ _ZTCN7android2os17BpServiceCallbackE0_NS0_16IServiceCallbackE;
+ _ZTCN7android2os17BpServiceCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android2os17BpServiceCallbackE0_NS_11BpInterfaceINS0_16IServiceCallbackEEE;
+ _ZTCN7android2os17BpServiceCallbackE8_NS_9BpRefBaseE;
+ _ZTCN7android6binder8internal25ClientCounterCallbackImplE0_NS_10IInterfaceE;
+ _ZTCN7android6binder8internal25ClientCounterCallbackImplE0_NS_11BnInterfaceINS_2os15IClientCallbackEEE;
+ _ZTCN7android6binder8internal25ClientCounterCallbackImplE0_NS_2os15IClientCallbackE;
+ _ZTCN7android6binder8internal25ClientCounterCallbackImplE0_NS_2os16BnClientCallbackE;
+ _ZTCN7android6binder8internal25ClientCounterCallbackImplE8_NS_7BBinderE;
+ _ZTCN7android6binder8internal25ClientCounterCallbackImplE8_NS_7IBinderE;
+ _ZTCN7android7BBinderE0_NS_7IBinderE;
+ _ZTCN7android7content2pm21IPackageManagerNativeE0_NS_10IInterfaceE;
+ _ZTCN7android7content2pm22BnPackageManagerNativeE0_NS_10IInterfaceE;
+ _ZTCN7android7content2pm22BnPackageManagerNativeE0_NS_11BnInterfaceINS1_21IPackageManagerNativeEEE;
+ _ZTCN7android7content2pm22BnPackageManagerNativeE0_NS1_21IPackageManagerNativeE;
+ _ZTCN7android7content2pm22BnPackageManagerNativeE8_NS_7BBinderE;
+ _ZTCN7android7content2pm22BnPackageManagerNativeE8_NS_7IBinderE;
+ _ZTCN7android7content2pm22BpPackageManagerNativeE0_NS_10IInterfaceE;
+ _ZTCN7android7content2pm22BpPackageManagerNativeE0_NS_11BpInterfaceINS1_21IPackageManagerNativeEEE;
+ _ZTCN7android7content2pm22BpPackageManagerNativeE0_NS1_21IPackageManagerNativeE;
+ _ZTCN7android7content2pm22BpPackageManagerNativeE8_NS_9BpRefBaseE;
+ _ZTCN7android7content2pm22IPackageChangeObserverE0_NS_10IInterfaceE;
+ _ZTCN7android7content2pm23BnPackageChangeObserverE0_NS_10IInterfaceE;
+ _ZTCN7android7content2pm23BnPackageChangeObserverE0_NS_11BnInterfaceINS1_22IPackageChangeObserverEEE;
+ _ZTCN7android7content2pm23BnPackageChangeObserverE0_NS1_22IPackageChangeObserverE;
+ _ZTCN7android7content2pm23BnPackageChangeObserverE8_NS_7BBinderE;
+ _ZTCN7android7content2pm23BnPackageChangeObserverE8_NS_7IBinderE;
+ _ZTCN7android7content2pm23BpPackageChangeObserverE0_NS_10IInterfaceE;
+ _ZTCN7android7content2pm23BpPackageChangeObserverE0_NS_11BpInterfaceINS1_22IPackageChangeObserverEEE;
+ _ZTCN7android7content2pm23BpPackageChangeObserverE0_NS1_22IPackageChangeObserverE;
+ _ZTCN7android7content2pm23BpPackageChangeObserverE8_NS_9BpRefBaseE;
+ _ZTCN7android7IMemoryE0_NS_10IInterfaceE;
+ _ZTCN7android8BnMemoryE0_NS_10IInterfaceE;
+ _ZTCN7android8BnMemoryE0_NS_11BnInterfaceINS_7IMemoryEEE;
+ _ZTCN7android8BnMemoryE0_NS_7IMemoryE;
+ _ZTCN7android8BnMemoryE8_NS_7BBinderE;
+ _ZTCN7android8BnMemoryE8_NS_7IBinderE;
+ _ZTCN7android8BpBinderE0_NS_7IBinderE;
+ _ZTCN7android8BpMemoryE0_NS_10IInterfaceE;
+ _ZTCN7android8BpMemoryE0_NS_11BpInterfaceINS_7IMemoryEEE;
+ _ZTCN7android8BpMemoryE0_NS_7IMemoryE;
+ _ZTCN7android8BpMemoryE8_NS_9BpRefBaseE;
+ _ZTCN7android9HeapCacheE0_NS_7IBinder14DeathRecipientE;
+ _ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE0_NS_13basic_istreamIcS2_EE;
+ _ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE0_NS_14basic_iostreamIcS2_EE;
+ _ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE16_NS_13basic_ostreamIcS2_EE;
+ _ZThn8_N7android10AllocationD0Ev;
+ _ZThn8_N7android10AllocationD1Ev;
+ _ZThn8_N7android10MemoryBaseD0Ev;
+ _ZThn8_N7android10MemoryBaseD1Ev;
+ _ZThn8_N7android12BnMemoryHeap10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZThn8_N7android12BnMemoryHeapD0Ev;
+ _ZThn8_N7android12BnMemoryHeapD1Ev;
+ _ZThn8_N7android12BpMemoryHeapD0Ev;
+ _ZThn8_N7android12BpMemoryHeapD1Ev;
+ _ZThn8_N7android15BnShellCallback10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZThn8_N7android16BnResultReceiver10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZThn8_N7android22BnPermissionController10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZThn8_N7android2os16BnClientCallback10onTransactEjRKNS_6ParcelEPS2_j;
+ _ZThn8_N7android2os16BnServiceManager10onTransactEjRKNS_6ParcelEPS2_j;
+ _ZThn8_N7android2os17BnServiceCallback10onTransactEjRKNS_6ParcelEPS2_j;
+ _ZThn8_N7android7content2pm22BnPackageManagerNative10onTransactEjRKNS_6ParcelEPS3_j;
+ _ZThn8_N7android7content2pm23BnPackageChangeObserver10onTransactEjRKNS_6ParcelEPS3_j;
+ _ZThn8_N7android8BnMemory10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZThn8_N7android8BnMemoryD0Ev;
+ _ZThn8_N7android8BnMemoryD1Ev;
+ _ZThn8_N7android8BpMemoryD0Ev;
+ _ZThn8_N7android8BpMemoryD1Ev;
+ _ZTTN7android10AllocationE;
+ _ZTTN7android10IInterfaceE;
+ _ZTTN7android10MemoryBaseE;
+ _ZTTN7android10PoolThreadE;
+ _ZTTN7android10RpcSessionE;
+ _ZTTN7android11IMemoryHeapE;
+ _ZTTN7android12BnMemoryHeapE;
+ _ZTTN7android12BpMemoryHeapE;
+ _ZTTN7android12ProcessStateE;
+ _ZTTN7android14IShellCallbackE;
+ _ZTTN7android14MemoryHeapBaseE;
+ _ZTTN7android15BnShellCallbackE;
+ _ZTTN7android15BpShellCallbackE;
+ _ZTTN7android15IResultReceiverE;
+ _ZTTN7android15IServiceManagerE;
+ _ZTTN7android16BnResultReceiverE;
+ _ZTTN7android16BpResultReceiverE;
+ _ZTTN7android18ServiceManagerShimE;
+ _ZTTN7android21IPermissionControllerE;
+ _ZTTN7android22BnPermissionControllerE;
+ _ZTTN7android22BpPermissionControllerE;
+ _ZTTN7android2os15IClientCallbackE;
+ _ZTTN7android2os15IServiceManagerE;
+ _ZTTN7android2os16BnClientCallbackE;
+ _ZTTN7android2os16BnServiceManagerE;
+ _ZTTN7android2os16BpClientCallbackE;
+ _ZTTN7android2os16BpServiceManagerE;
+ _ZTTN7android2os16IServiceCallbackE;
+ _ZTTN7android2os17BnServiceCallbackE;
+ _ZTTN7android2os17BpServiceCallbackE;
+ _ZTTN7android6binder8internal25ClientCounterCallbackImplE;
+ _ZTTN7android7BBinderE;
+ _ZTTN7android7content2pm21IPackageManagerNativeE;
+ _ZTTN7android7content2pm22BnPackageManagerNativeE;
+ _ZTTN7android7content2pm22BpPackageManagerNativeE;
+ _ZTTN7android7content2pm22IPackageChangeObserverE;
+ _ZTTN7android7content2pm23BnPackageChangeObserverE;
+ _ZTTN7android7content2pm23BpPackageChangeObserverE;
+ _ZTTN7android7IBinderE;
+ _ZTTN7android7IMemoryE;
+ _ZTTN7android8BnMemoryE;
+ _ZTTN7android8BpBinderE;
+ _ZTTN7android8BpMemoryE;
+ _ZTTN7android9BpRefBaseE;
+ _ZTTN7android9HeapCacheE;
+ _ZTTN7android9RpcServerE;
+ _ZTTNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE;
+ _ZTv0_n24_N7android10AllocationD0Ev;
+ _ZTv0_n24_N7android10AllocationD1Ev;
+ _ZTv0_n24_N7android10IInterfaceD0Ev;
+ _ZTv0_n24_N7android10IInterfaceD1Ev;
+ _ZTv0_n24_N7android10MemoryBaseD0Ev;
+ _ZTv0_n24_N7android10MemoryBaseD1Ev;
+ _ZTv0_n24_N7android10RpcSessionD0Ev;
+ _ZTv0_n24_N7android10RpcSessionD1Ev;
+ _ZTv0_n24_N7android11IMemoryHeapD0Ev;
+ _ZTv0_n24_N7android11IMemoryHeapD1Ev;
+ _ZTv0_n24_N7android12BnMemoryHeapD0Ev;
+ _ZTv0_n24_N7android12BnMemoryHeapD1Ev;
+ _ZTv0_n24_N7android12BpMemoryHeapD0Ev;
+ _ZTv0_n24_N7android12BpMemoryHeapD1Ev;
+ _ZTv0_n24_N7android12ProcessStateD0Ev;
+ _ZTv0_n24_N7android12ProcessStateD1Ev;
+ _ZTv0_n24_N7android14IShellCallbackD0Ev;
+ _ZTv0_n24_N7android14IShellCallbackD1Ev;
+ _ZTv0_n24_N7android14MemoryHeapBaseD0Ev;
+ _ZTv0_n24_N7android14MemoryHeapBaseD1Ev;
+ _ZTv0_n24_N7android15IResultReceiverD0Ev;
+ _ZTv0_n24_N7android15IResultReceiverD1Ev;
+ _ZTv0_n24_N7android15IServiceManagerD0Ev;
+ _ZTv0_n24_N7android15IServiceManagerD1Ev;
+ _ZTv0_n24_N7android21IPermissionControllerD0Ev;
+ _ZTv0_n24_N7android21IPermissionControllerD1Ev;
+ _ZTv0_n24_N7android2os15IClientCallbackD0Ev;
+ _ZTv0_n24_N7android2os15IClientCallbackD1Ev;
+ _ZTv0_n24_N7android2os15IServiceManagerD0Ev;
+ _ZTv0_n24_N7android2os15IServiceManagerD1Ev;
+ _ZTv0_n24_N7android2os16IServiceCallbackD0Ev;
+ _ZTv0_n24_N7android2os16IServiceCallbackD1Ev;
+ _ZTv0_n24_N7android7BBinderD0Ev;
+ _ZTv0_n24_N7android7BBinderD1Ev;
+ _ZTv0_n24_N7android7content2pm21IPackageManagerNativeD0Ev;
+ _ZTv0_n24_N7android7content2pm21IPackageManagerNativeD1Ev;
+ _ZTv0_n24_N7android7content2pm22IPackageChangeObserverD0Ev;
+ _ZTv0_n24_N7android7content2pm22IPackageChangeObserverD1Ev;
+ _ZTv0_n24_N7android7IBinderD0Ev;
+ _ZTv0_n24_N7android7IBinderD1Ev;
+ _ZTv0_n24_N7android7IMemoryD0Ev;
+ _ZTv0_n24_N7android7IMemoryD1Ev;
+ _ZTv0_n24_N7android8BnMemoryD0Ev;
+ _ZTv0_n24_N7android8BnMemoryD1Ev;
+ _ZTv0_n24_N7android8BpBinderD0Ev;
+ _ZTv0_n24_N7android8BpBinderD1Ev;
+ _ZTv0_n24_N7android8BpMemoryD0Ev;
+ _ZTv0_n24_N7android8BpMemoryD1Ev;
+ _ZTv0_n24_N7android9BpRefBaseD0Ev;
+ _ZTv0_n24_N7android9BpRefBaseD1Ev;
+ _ZTv0_n24_N7android9HeapCacheD0Ev;
+ _ZTv0_n24_N7android9HeapCacheD1Ev;
+ _ZTv0_n24_N7android9RpcServerD0Ev;
+ _ZTv0_n24_N7android9RpcServerD1Ev;
+ _ZTv0_n32_N7android14MemoryHeapBaseD0Ev;
+ _ZTv0_n32_N7android14MemoryHeapBaseD1Ev;
+ _ZTv0_n32_N7android8BpBinder10onFirstRefEv;
+ _ZTv0_n32_N7android9BpRefBase10onFirstRefEv;
+ _ZTv0_n40_N7android8BpBinder15onLastStrongRefEPKv;
+ _ZTv0_n40_N7android9BpRefBase15onLastStrongRefEPKv;
+ _ZTv0_n48_N7android8BpBinder20onIncStrongAttemptedEjPKv;
+ _ZTv0_n48_N7android9BpRefBase20onIncStrongAttemptedEjPKv;
+ _ZTv0_n56_NK7android14MemoryHeapBase9getHeapIDEv;
+ _ZTv0_n64_NK7android14MemoryHeapBase7getBaseEv;
+ _ZTv0_n72_NK7android14MemoryHeapBase7getSizeEv;
+ _ZTv0_n80_NK7android14MemoryHeapBase8getFlagsEv;
+ _ZTv0_n88_NK7android14MemoryHeapBase9getOffsetEv;
+ _ZTVN7android10AllocationE;
+ _ZTVN7android10IInterfaceE;
+ _ZTVN7android10MemoryBaseE;
+ _ZTVN7android10PoolThreadE;
+ _ZTVN7android10RpcSession13RpcConnectionE;
+ _ZTVN7android10RpcSessionE;
+ _ZTVN7android10TextOutputE;
+ _ZTVN7android11IMemoryHeapE;
+ _ZTVN7android12BnMemoryHeapE;
+ _ZTVN7android12BpMemoryHeapE;
+ _ZTVN7android12FdTextOutputE;
+ _ZTVN7android12MemoryDealerE;
+ _ZTVN7android12ProcessStateE;
+ _ZTVN7android12SortedVectorINS_15PermissionCache5EntryEEE;
+ _ZTVN7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEEE;
+ _ZTVN7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEEE;
+ _ZTVN7android12SortedVectorINS_8String16EEE;
+ _ZTVN7android13LogTextOutputE;
+ _ZTVN7android14IShellCallbackE;
+ _ZTVN7android14MemoryHeapBaseE;
+ _ZTVN7android15BnShellCallbackE;
+ _ZTVN7android15BpShellCallbackE;
+ _ZTVN7android15IResultReceiverE;
+ _ZTVN7android15IServiceManagerE;
+ _ZTVN7android16BnResultReceiverE;
+ _ZTVN7android16BpResultReceiverE;
+ _ZTVN7android17InetSocketAddressE;
+ _ZTVN7android17UnixSocketAddressE;
+ _ZTVN7android18BufferedTextOutput11BufferStateE;
+ _ZTVN7android18BufferedTextOutputE;
+ _ZTVN7android18ServiceManagerShimE;
+ _ZTVN7android18VsockSocketAddressE;
+ _ZTVN7android21IPermissionControllerE;
+ _ZTVN7android22BnPermissionControllerE;
+ _ZTVN7android22BpPermissionControllerE;
+ _ZTVN7android2os15IClientCallbackE;
+ _ZTVN7android2os15IServiceManagerE;
+ _ZTVN7android2os16BnClientCallbackE;
+ _ZTVN7android2os16BnServiceManagerE;
+ _ZTVN7android2os16BpClientCallbackE;
+ _ZTVN7android2os16BpServiceManagerE;
+ _ZTVN7android2os16IServiceCallbackE;
+ _ZTVN7android2os16ParcelableHolderE;
+ _ZTVN7android2os16ServiceDebugInfoE;
+ _ZTVN7android2os17BnServiceCallbackE;
+ _ZTVN7android2os17BpServiceCallbackE;
+ _ZTVN7android2os17PersistableBundleE;
+ _ZTVN7android2os20ParcelFileDescriptorE;
+ _ZTVN7android6binder8internal25ClientCounterCallbackImplE;
+ _ZTVN7android6VectorIiEE;
+ _ZTVN7android6VectorINS_12ProcessState12handle_entryEEE;
+ _ZTVN7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEEE;
+ _ZTVN7android6VectorINS_8BpBinder8ObituaryEEE;
+ _ZTVN7android6VectorINS_8String16EEE;
+ _ZTVN7android6VectorIPNS_7BBinderEEE;
+ _ZTVN7android6VectorIPNS_7RefBase12weakref_typeEEE;
+ _ZTVN7android6VectorIPNS_7RefBaseEEE;
+ _ZTVN7android7BBinderE;
+ _ZTVN7android7content2pm18PackageChangeEventE;
+ _ZTVN7android7content2pm21IPackageManagerNativeE;
+ _ZTVN7android7content2pm22BnPackageManagerNativeE;
+ _ZTVN7android7content2pm22BpPackageManagerNativeE;
+ _ZTVN7android7content2pm22IPackageChangeObserverE;
+ _ZTVN7android7content2pm23BnPackageChangeObserverE;
+ _ZTVN7android7content2pm23BpPackageChangeObserverE;
+ _ZTVN7android7IBinderE;
+ _ZTVN7android7IMemoryE;
+ _ZTVN7android8BnMemoryE;
+ _ZTVN7android8BpBinderE;
+ _ZTVN7android8BpMemoryE;
+ _ZTVN7android9BpRefBaseE;
+ _ZTVN7android9HeapCacheE;
+ _ZTVN7android9RpcServerE;
+ _ZTvn8_n32_N7android14MemoryHeapBaseD0Ev;
+ _ZTvn8_n32_N7android14MemoryHeapBaseD1Ev;
+ _ZTVNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEEE;
+ _ZTVNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE;
+ _ZTVNSt3__120__shared_ptr_emplaceIN7android14RpcWireAddressENS_9allocatorIS2_EEEE;
+ _ZTVNSt3__120__shared_ptr_emplaceIN7android6binder8internal21ClientCounterCallbackENS_9allocatorIS4_EEEE;
+ local:
+ *;
+};
diff --git a/libs/binder/libbinder.arm64.vendor.map b/libs/binder/libbinder.arm64.vendor.map
new file mode 100644
index 0000000..971ba92
--- /dev/null
+++ b/libs/binder/libbinder.arm64.vendor.map
@@ -0,0 +1,1525 @@
+# b/190148312: Populate with correct list of ABI symbols
+LIBBINDER {
+ global:
+ getBinderKernelReferences;
+ kDefaultDriver;
+ _ZN7android10AllocationC1ERKNS_2spINS_12MemoryDealerEEERKNS1_INS_11IMemoryHeapEEElm;
+ _ZN7android10AllocationC2ERKNS_2spINS_12MemoryDealerEEERKNS1_INS_11IMemoryHeapEEElm;
+ _ZN7android10AllocationD0Ev;
+ _ZN7android10AllocationD1Ev;
+ _ZN7android10AllocationD2Ev;
+ _ZN7android10IInterface8asBinderEPKS0_;
+ _ZN7android10IInterface8asBinderERKNS_2spIS0_EE;
+ _ZN7android10IInterfaceC2Ev;
+ _ZN7android10IInterfaceD0Ev;
+ _ZN7android10IInterfaceD1Ev;
+ _ZN7android10IInterfaceD2Ev;
+ _ZN7android10MemoryBaseC1ERKNS_2spINS_11IMemoryHeapEEElm;
+ _ZN7android10MemoryBaseC2ERKNS_2spINS_11IMemoryHeapEEElm;
+ _ZN7android10MemoryBaseD0Ev;
+ _ZN7android10MemoryBaseD1Ev;
+ _ZN7android10MemoryBaseD2Ev;
+ _ZN7android10RpcAddress14readFromParcelERKNS_6ParcelE;
+ _ZN7android10RpcAddress15fromRawEmbeddedEPKNS_14RpcWireAddressE;
+ _ZN7android10RpcAddress4zeroEv;
+ _ZN7android10RpcAddress6uniqueEv;
+ _ZN7android10RpcAddressC1Ev;
+ _ZN7android10RpcAddressC2Ev;
+ _ZN7android10RpcAddressD1Ev;
+ _ZN7android10RpcAddressD2Ev;
+ _ZN7android10RpcSession12setForServerERKNS_2wpINS_9RpcServerEEEi;
+ _ZN7android10RpcSession13getRootObjectEv;
+ _ZN7android10RpcSession13sendDecStrongERKNS_10RpcAddressE;
+ _ZN7android10RpcSession15setupInetClientEPKcj;
+ _ZN7android10RpcSession15terminateLockedEv;
+ _ZN7android10RpcSession16setupVsockClientEjj;
+ _ZN7android10RpcSession17setupSocketClientERKNS_16RpcSocketAddressE;
+ _ZN7android10RpcSession19addClientConnectionENS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZN7android10RpcSession19ExclusiveConnection14findConnectionEiPNS_2spINS0_13RpcConnectionEEES5_RNSt3__16vectorIS4_NS6_9allocatorIS4_EEEEm;
+ _ZN7android10RpcSession19ExclusiveConnectionC1ERKNS_2spIS0_EENS0_13ConnectionUseE;
+ _ZN7android10RpcSession19ExclusiveConnectionC2ERKNS_2spIS0_EENS0_13ConnectionUseE;
+ _ZN7android10RpcSession19ExclusiveConnectionD1Ev;
+ _ZN7android10RpcSession19ExclusiveConnectionD2Ev;
+ _ZN7android10RpcSession19getRemoteMaxThreadsEPm;
+ _ZN7android10RpcSession20setupOneSocketClientERKNS_16RpcSocketAddressEi;
+ _ZN7android10RpcSession21setupUnixDomainClientEPKc;
+ _ZN7android10RpcSession22addNullDebuggingClientEv;
+ _ZN7android10RpcSession22removeServerConnectionERKNS_2spINS0_13RpcConnectionEEE;
+ _ZN7android10RpcSession24assignServerToThisThreadENS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZN7android10RpcSession4joinENS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZN7android10RpcSession4makeEv;
+ _ZN7android10RpcSession6readIdEv;
+ _ZN7android10RpcSession6serverEv;
+ _ZN7android10RpcSession7preJoinENSt3__16threadE;
+ _ZN7android10RpcSession8transactERKNS_10RpcAddressEjRKNS_6ParcelEPS4_j;
+ _ZN7android10RpcSessionC1Ev;
+ _ZN7android10RpcSessionC2Ev;
+ _ZN7android10RpcSessionD0Ev;
+ _ZN7android10RpcSessionD1Ev;
+ _ZN7android10RpcSessionD2Ev;
+ _ZN7android10TextOutputC2Ev;
+ _ZN7android10TextOutputD0Ev;
+ _ZN7android10TextOutputD1Ev;
+ _ZN7android10TextOutputD2Ev;
+ _ZN7android10zeroMemoryEPhm;
+ _ZN7android11BnInterfaceINS_11IMemoryHeapEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_14IShellCallbackEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_15IResultReceiverEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_2os15IClientCallbackEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_2os15IServiceManagerEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_2os16IServiceCallbackEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_7content2pm21IPackageManagerNativeEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_7content2pm22IPackageChangeObserverEE10onAsBinderEv;
+ _ZN7android11BnInterfaceINS_7IMemoryEE10onAsBinderEv;
+ _ZN7android11IMemoryHeap10descriptorE;
+ _ZN7android11IMemoryHeap11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android11IMemoryHeap12default_implE;
+ _ZN7android11IMemoryHeap14getDefaultImplEv;
+ _ZN7android11IMemoryHeap14setDefaultImplENSt3__110unique_ptrIS0_NS1_14default_deleteIS0_EEEE;
+ _ZN7android11IMemoryHeapC2Ev;
+ _ZN7android11IMemoryHeapD0Ev;
+ _ZN7android11IMemoryHeapD1Ev;
+ _ZN7android11IMemoryHeapD2Ev;
+ _ZN7android12BnMemoryHeap10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZN7android12BnMemoryHeapC2Ev;
+ _ZN7android12BnMemoryHeapD0Ev;
+ _ZN7android12BnMemoryHeapD1Ev;
+ _ZN7android12BnMemoryHeapD2Ev;
+ _ZN7android12BpMemoryHeapC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android12BpMemoryHeapC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android12BpMemoryHeapD0Ev;
+ _ZN7android12BpMemoryHeapD1Ev;
+ _ZN7android12BpMemoryHeapD2Ev;
+ _ZN7android12gTextBuffersE;
+ _ZN7android12MemoryDealer10deallocateEm;
+ _ZN7android12MemoryDealer22getAllocationAlignmentEv;
+ _ZN7android12MemoryDealer8allocateEm;
+ _ZN7android12MemoryDealerC1EmPKcj;
+ _ZN7android12MemoryDealerC2EmPKcj;
+ _ZN7android12MemoryDealerD0Ev;
+ _ZN7android12MemoryDealerD1Ev;
+ _ZN7android12MemoryDealerD2Ev;
+ _ZN7android12printHexDataEiPKvmmimbPFvPvPKcES2_;
+ _ZN7android12ProcessState10selfOrNullEv;
+ _ZN7android12ProcessState13expungeHandleEiPNS_7IBinderE;
+ _ZN7android12ProcessState13getDriverNameEv;
+ _ZN7android12ProcessState14initWithDriverEPKc;
+ _ZN7android12ProcessState15startThreadPoolEv;
+ _ZN7android12ProcessState16getContextObjectERKNS_2spINS_7IBinderEEE;
+ _ZN7android12ProcessState17spawnPooledThreadEb;
+ _ZN7android12ProcessState18giveThreadPoolNameEv;
+ _ZN7android12ProcessState18lookupHandleLockedEi;
+ _ZN7android12ProcessState18setCallRestrictionENS0_15CallRestrictionE;
+ _ZN7android12ProcessState19getKernelReferencesEmPm;
+ _ZN7android12ProcessState20becomeContextManagerEv;
+ _ZN7android12ProcessState20makeBinderThreadNameEv;
+ _ZN7android12ProcessState23getStrongProxyForHandleEi;
+ _ZN7android12ProcessState24getStrongRefCountForNodeERKNS_2spINS_8BpBinderEEE;
+ _ZN7android12ProcessState25enableOnewaySpamDetectionEb;
+ _ZN7android12ProcessState27setThreadPoolMaxThreadCountEm;
+ _ZN7android12ProcessState4initEPKcb;
+ _ZN7android12ProcessState4selfEv;
+ _ZN7android12ProcessStateC1EPKc;
+ _ZN7android12ProcessStateC2EPKc;
+ _ZN7android12ProcessStateD0Ev;
+ _ZN7android12ProcessStateD1Ev;
+ _ZN7android12ProcessStateD2Ev;
+ _ZN7android13printTypeCodeEjPFvPvPKcES0_;
+ _ZN7android14IPCThreadState10freeBufferEPNS_6ParcelEPKhmPKym;
+ _ZN7android14IPCThreadState10selfOrNullEv;
+ _ZN7android14IPCThreadState11clearCallerEv;
+ _ZN7android14IPCThreadState11stopProcessEb;
+ _ZN7android14IPCThreadState12setupPollingEPi;
+ _ZN7android14IPCThreadState13decWeakHandleEi;
+ _ZN7android14IPCThreadState13expungeHandleEiPNS_7IBinderE;
+ _ZN7android14IPCThreadState13flushCommandsEv;
+ _ZN7android14IPCThreadState13flushIfNeededEv;
+ _ZN7android14IPCThreadState13incWeakHandleEiPNS_8BpBinderE;
+ _ZN7android14IPCThreadState14clearLastErrorEv;
+ _ZN7android14IPCThreadState14executeCommandEi;
+ _ZN7android14IPCThreadState14joinThreadPoolEb;
+ _ZN7android14IPCThreadState14talkWithDriverEb;
+ _ZN7android14IPCThreadState15decStrongHandleEi;
+ _ZN7android14IPCThreadState15incStrongHandleEiPNS_8BpBinderE;
+ _ZN7android14IPCThreadState15waitForResponseEPNS_6ParcelEPi;
+ _ZN7android14IPCThreadState16threadDestructorEPv;
+ _ZN7android14IPCThreadState18setCallRestrictionENS_12ProcessState15CallRestrictionE;
+ _ZN7android14IPCThreadState19setStrictModePolicyEi;
+ _ZN7android14IPCThreadState19setTheContextObjectERKNS_2spINS_7BBinderEEE;
+ _ZN7android14IPCThreadState20clearCallingIdentityEv;
+ _ZN7android14IPCThreadState20getAndExecuteCommandEv;
+ _ZN7android14IPCThreadState20getProcessFreezeInfoEiPbS1_;
+ _ZN7android14IPCThreadState20handlePolledCommandsEv;
+ _ZN7android14IPCThreadState20processPendingDerefsEv;
+ _ZN7android14IPCThreadState20writeTransactionDataEijijRKNS_6ParcelEPi;
+ _ZN7android14IPCThreadState22attemptIncStrongHandleEi;
+ _ZN7android14IPCThreadState22clearCallingWorkSourceEv;
+ _ZN7android14IPCThreadState22clearDeathNotificationEiPNS_8BpBinderE;
+ _ZN7android14IPCThreadState22processPostWriteDerefsEv;
+ _ZN7android14IPCThreadState22restoreCallingIdentityEl;
+ _ZN7android14IPCThreadState23setCallingWorkSourceUidEj;
+ _ZN7android14IPCThreadState24clearPropagateWorkSourceEv;
+ _ZN7android14IPCThreadState24requestDeathNotificationEiPNS_8BpBinderE;
+ _ZN7android14IPCThreadState24restoreCallingWorkSourceEl;
+ _ZN7android14IPCThreadState25blockUntilThreadAvailableEv;
+ _ZN7android14IPCThreadState27disableBackgroundSchedulingEb;
+ _ZN7android14IPCThreadState28backgroundSchedulingDisabledEv;
+ _ZN7android14IPCThreadState29setLastTransactionBinderFlagsEi;
+ _ZN7android14IPCThreadState41setCallingWorkSourceUidWithoutPropagationEj;
+ _ZN7android14IPCThreadState4selfEv;
+ _ZN7android14IPCThreadState6freezeEibj;
+ _ZN7android14IPCThreadState7processEv;
+ _ZN7android14IPCThreadState8shutdownEv;
+ _ZN7android14IPCThreadState8transactEijRKNS_6ParcelEPS1_j;
+ _ZN7android14IPCThreadState9sendReplyERKNS_6ParcelEj;
+ _ZN7android14IPCThreadStateC1Ev;
+ _ZN7android14IPCThreadStateC2Ev;
+ _ZN7android14IPCThreadStateD1Ev;
+ _ZN7android14IPCThreadStateD2Ev;
+ _ZN7android14IShellCallback10descriptorE;
+ _ZN7android14IShellCallback11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android14IShellCallback12default_implE;
+ _ZN7android14IShellCallback14getDefaultImplEv;
+ _ZN7android14IShellCallback14setDefaultImplENSt3__110unique_ptrIS0_NS1_14default_deleteIS0_EEEE;
+ _ZN7android14IShellCallbackC2Ev;
+ _ZN7android14IShellCallbackD0Ev;
+ _ZN7android14IShellCallbackD1Ev;
+ _ZN7android14IShellCallbackD2Ev;
+ _ZN7android14MemoryHeapBase4initEiPvmiPKc;
+ _ZN7android14MemoryHeapBase5mapfdEibml;
+ _ZN7android14MemoryHeapBase7disposeEv;
+ _ZN7android14MemoryHeapBaseC1Eimjl;
+ _ZN7android14MemoryHeapBaseC1EmjPKc;
+ _ZN7android14MemoryHeapBaseC1EPKcmj;
+ _ZN7android14MemoryHeapBaseC1Ev;
+ _ZN7android14MemoryHeapBaseC2Eimjl;
+ _ZN7android14MemoryHeapBaseC2EmjPKc;
+ _ZN7android14MemoryHeapBaseC2EPKcmj;
+ _ZN7android14MemoryHeapBaseC2Ev;
+ _ZN7android14MemoryHeapBaseD0Ev;
+ _ZN7android14MemoryHeapBaseD1Ev;
+ _ZN7android14MemoryHeapBaseD2Ev;
+ _ZN7android15BnShellCallback10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZN7android15IResultReceiver10descriptorE;
+ _ZN7android15IResultReceiver11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android15IResultReceiver12default_implE;
+ _ZN7android15IResultReceiver14getDefaultImplEv;
+ _ZN7android15IResultReceiver14setDefaultImplENSt3__110unique_ptrIS0_NS1_14default_deleteIS0_EEEE;
+ _ZN7android15IResultReceiverC2Ev;
+ _ZN7android15IResultReceiverD0Ev;
+ _ZN7android15IResultReceiverD1Ev;
+ _ZN7android15IResultReceiverD2Ev;
+ _ZN7android15IServiceManagerC2Ev;
+ _ZN7android15IServiceManagerD0Ev;
+ _ZN7android15IServiceManagerD1Ev;
+ _ZN7android15IServiceManagerD2Ev;
+ _ZN7android15stringForIndentEi;
+ _ZN7android16BnResultReceiver10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZN7android18BufferedTextOutput10moveIndentEi;
+ _ZN7android18BufferedTextOutput10pushBundleEv;
+ _ZN7android18BufferedTextOutput5printEPKcm;
+ _ZN7android18BufferedTextOutput9popBundleEv;
+ _ZN7android18BufferedTextOutputC2Ej;
+ _ZN7android18BufferedTextOutputD0Ev;
+ _ZN7android18BufferedTextOutputD1Ev;
+ _ZN7android18BufferedTextOutputD2Ev;
+ _ZN7android18ServiceManagerShim10addServiceERKNS_8String16ERKNS_2spINS_7IBinderEEEbi;
+ _ZN7android18ServiceManagerShim10isDeclaredERKNS_8String16E;
+ _ZN7android18ServiceManagerShim12listServicesEi;
+ _ZN7android18ServiceManagerShim14waitForServiceERKNS_8String16E;
+ _ZN7android18ServiceManagerShim16updatableViaApexERKNS_8String16E;
+ _ZN7android18ServiceManagerShim20getDeclaredInstancesERKNS_8String16E;
+ _ZN7android18ServiceManagerShimC1ERKNS_2spINS_2os15IServiceManagerEEE;
+ _ZN7android18ServiceManagerShimC2ERKNS_2spINS_2os15IServiceManagerEEE;
+ _ZN7android18the_context_objectE;
+ _ZN7android21defaultServiceManagerEv;
+ _ZN7android22SimpleBestFitAllocator10deallocateEm;
+ _ZN7android22SimpleBestFitAllocator12kMemoryAlignE;
+ _ZN7android22SimpleBestFitAllocator5allocEmj;
+ _ZN7android22SimpleBestFitAllocator7deallocEm;
+ _ZN7android22SimpleBestFitAllocator8allocateEmj;
+ _ZN7android22SimpleBestFitAllocatorC1Em;
+ _ZN7android22SimpleBestFitAllocatorC2Em;
+ _ZN7android22SimpleBestFitAllocatorD1Ev;
+ _ZN7android22SimpleBestFitAllocatorD2Ev;
+ _ZN7android24setDefaultServiceManagerERKNS_2spINS_15IServiceManagerEEE;
+ _ZN7android2os15IClientCallback10descriptorE;
+ _ZN7android2os15IClientCallback11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os15IClientCallback12default_implE;
+ _ZN7android2os15IClientCallback14getDefaultImplEv;
+ _ZN7android2os15IClientCallback14setDefaultImplENSt3__110unique_ptrIS1_NS2_14default_deleteIS1_EEEE;
+ _ZN7android2os15IClientCallbackC2Ev;
+ _ZN7android2os15IClientCallbackD0Ev;
+ _ZN7android2os15IClientCallbackD1Ev;
+ _ZN7android2os15IClientCallbackD2Ev;
+ _ZN7android2os15IServiceManager10descriptorE;
+ _ZN7android2os15IServiceManager11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os15IServiceManager12default_implE;
+ _ZN7android2os15IServiceManager14getDefaultImplEv;
+ _ZN7android2os15IServiceManager14setDefaultImplENSt3__110unique_ptrIS1_NS2_14default_deleteIS1_EEEE;
+ _ZN7android2os15IServiceManagerC2Ev;
+ _ZN7android2os15IServiceManagerD0Ev;
+ _ZN7android2os15IServiceManagerD1Ev;
+ _ZN7android2os15IServiceManagerD2Ev;
+ _ZN7android2os16BnClientCallback10onTransactEjRKNS_6ParcelEPS2_j;
+ _ZN7android2os16BnClientCallbackC2Ev;
+ _ZN7android2os16BnServiceManager10onTransactEjRKNS_6ParcelEPS2_j;
+ _ZN7android2os16BnServiceManagerC2Ev;
+ _ZN7android2os16BpClientCallback9onClientsERKNS_2spINS_7IBinderEEEb;
+ _ZN7android2os16BpClientCallbackC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os16BpClientCallbackC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os16BpServiceManager10addServiceERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS_7IBinderEEEbi;
+ _ZN7android2os16BpServiceManager10getServiceERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPNS_2spINS_7IBinderEEE;
+ _ZN7android2os16BpServiceManager10isDeclaredERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPb;
+ _ZN7android2os16BpServiceManager12checkServiceERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPNS_2spINS_7IBinderEEE;
+ _ZN7android2os16BpServiceManager12listServicesEiPNSt3__16vectorINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS7_IS9_EEEE;
+ _ZN7android2os16BpServiceManager16updatableViaApexERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPNS2_8optionalIS8_EE;
+ _ZN7android2os16BpServiceManager19getServiceDebugInfoEPNSt3__16vectorINS0_16ServiceDebugInfoENS2_9allocatorIS4_EEEE;
+ _ZN7android2os16BpServiceManager20getDeclaredInstancesERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPNS2_6vectorIS8_NS6_IS8_EEEE;
+ _ZN7android2os16BpServiceManager20tryUnregisterServiceERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os16BpServiceManager22registerClientCallbackERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS_7IBinderEEERKNSB_INS0_15IClientCallbackEEE;
+ _ZN7android2os16BpServiceManager24registerForNotificationsERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS0_16IServiceCallbackEEE;
+ _ZN7android2os16BpServiceManager26unregisterForNotificationsERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS0_16IServiceCallbackEEE;
+ _ZN7android2os16BpServiceManagerC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os16BpServiceManagerC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os16IServiceCallback10descriptorE;
+ _ZN7android2os16IServiceCallback11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os16IServiceCallback12default_implE;
+ _ZN7android2os16IServiceCallback14getDefaultImplEv;
+ _ZN7android2os16IServiceCallback14setDefaultImplENSt3__110unique_ptrIS1_NS2_14default_deleteIS1_EEEE;
+ _ZN7android2os16IServiceCallbackC2Ev;
+ _ZN7android2os16IServiceCallbackD0Ev;
+ _ZN7android2os16IServiceCallbackD1Ev;
+ _ZN7android2os16IServiceCallbackD2Ev;
+ _ZN7android2os16ParcelableHolder14readFromParcelEPKNS_6ParcelE;
+ _ZN7android2os16ServiceDebugInfo14readFromParcelEPKNS_6ParcelE;
+ _ZN7android2os17BnServiceCallback10onTransactEjRKNS_6ParcelEPS2_j;
+ _ZN7android2os17BnServiceCallbackC2Ev;
+ _ZN7android2os17BpServiceCallback14onRegistrationERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os17BpServiceCallbackC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os17BpServiceCallbackC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android2os17PersistableBundle10putBooleanERKNS_8String16Eb;
+ _ZN7android2os17PersistableBundle12putIntVectorERKNS_8String16ERKNSt3__16vectorIiNS5_9allocatorIiEEEE;
+ _ZN7android2os17PersistableBundle13putLongVectorERKNS_8String16ERKNSt3__16vectorIlNS5_9allocatorIlEEEE;
+ _ZN7android2os17PersistableBundle14readFromParcelEPKNS_6ParcelE;
+ _ZN7android2os17PersistableBundle15putDoubleVectorERKNS_8String16ERKNSt3__16vectorIdNS5_9allocatorIdEEEE;
+ _ZN7android2os17PersistableBundle15putStringVectorERKNS_8String16ERKNSt3__16vectorIS2_NS5_9allocatorIS2_EEEE;
+ _ZN7android2os17PersistableBundle16putBooleanVectorERKNS_8String16ERKNSt3__16vectorIbNS5_9allocatorIbEEEE;
+ _ZN7android2os17PersistableBundle19readFromParcelInnerEPKNS_6ParcelEm;
+ _ZN7android2os17PersistableBundle20putPersistableBundleERKNS_8String16ERKS1_;
+ _ZN7android2os17PersistableBundle5eraseERKNS_8String16E;
+ _ZN7android2os17PersistableBundle6putIntERKNS_8String16Ei;
+ _ZN7android2os17PersistableBundle7putLongERKNS_8String16El;
+ _ZN7android2os17PersistableBundle9putDoubleERKNS_8String16Ed;
+ _ZN7android2os17PersistableBundle9putStringERKNS_8String16ES4_;
+ _ZN7android2os20ParcelFileDescriptor14readFromParcelEPKNS_6ParcelE;
+ _ZN7android2os20ParcelFileDescriptorC1ENS_4base14unique_fd_implINS2_13DefaultCloserEEE;
+ _ZN7android2os20ParcelFileDescriptorC1Ev;
+ _ZN7android2os20ParcelFileDescriptorC2ENS_4base14unique_fd_implINS2_13DefaultCloserEEE;
+ _ZN7android2os20ParcelFileDescriptorC2Ev;
+ _ZN7android2os20ParcelFileDescriptorD0Ev;
+ _ZN7android2os20ParcelFileDescriptorD1Ev;
+ _ZN7android2os20ParcelFileDescriptorD2Ev;
+ _ZN7android2spINS_7BBinderEED2Ev;
+ _ZN7android2spINS_7IBinderEEaSEOS2_;
+ _ZN7android2spINS_7IBinderEEaSERKS2_;
+ _ZN7android2spINS_9HeapCacheEED2Ev;
+ _ZN7android4aerrE;
+ _ZN7android4alogE;
+ _ZN7android4aoutE;
+ _ZN7android6binder20LazyServiceRegistrar10reRegisterEv;
+ _ZN7android6binder20LazyServiceRegistrar11getInstanceEv;
+ _ZN7android6binder20LazyServiceRegistrar12forcePersistEb;
+ _ZN7android6binder20LazyServiceRegistrar13tryUnregisterEv;
+ _ZN7android6binder20LazyServiceRegistrar15registerServiceERKNS_2spINS_7IBinderEEERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEEbi;
+ _ZN7android6binder20LazyServiceRegistrar25setActiveServicesCallbackERKNSt3__18functionIFbbEEE;
+ _ZN7android6binder20LazyServiceRegistrarC1Ev;
+ _ZN7android6binder20LazyServiceRegistrarC2Ev;
+ _ZN7android6binder6Status11fromStatusTEi;
+ _ZN7android6binder6Status12setExceptionEiRKNS_7String8E;
+ _ZN7android6binder6Status14readFromParcelERKNS_6ParcelE;
+ _ZN7android6binder6Status14setFromStatusTEi;
+ _ZN7android6binder6Status17exceptionToStringEi;
+ _ZN7android6binder6Status17fromExceptionCodeEi;
+ _ZN7android6binder6Status17fromExceptionCodeEiPKc;
+ _ZN7android6binder6Status17fromExceptionCodeEiRKNS_7String8E;
+ _ZN7android6binder6Status23setServiceSpecificErrorEiRKNS_7String8E;
+ _ZN7android6binder6Status24fromServiceSpecificErrorEi;
+ _ZN7android6binder6Status24fromServiceSpecificErrorEiPKc;
+ _ZN7android6binder6Status24fromServiceSpecificErrorEiRKNS_7String8E;
+ _ZN7android6binder6Status2okEv;
+ _ZN7android6binder6StatusC1Eii;
+ _ZN7android6binder6StatusC1EiiRKNS_7String8E;
+ _ZN7android6binder6StatusC2Eii;
+ _ZN7android6binder6StatusC2EiiRKNS_7String8E;
+ _ZN7android6binder8internal21ClientCounterCallback10reRegisterEv;
+ _ZN7android6binder8internal21ClientCounterCallback12forcePersistEb;
+ _ZN7android6binder8internal21ClientCounterCallback13tryUnregisterEv;
+ _ZN7android6binder8internal21ClientCounterCallback15registerServiceERKNS_2spINS_7IBinderEEERKNSt3__112basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEEbi;
+ _ZN7android6binder8internal21ClientCounterCallback25setActiveServicesCallbackERKNSt3__18functionIFbbEEE;
+ _ZN7android6binder8internal21ClientCounterCallbackC1Ev;
+ _ZN7android6binder8internal21ClientCounterCallbackC2Ev;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl10reRegisterEv;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl11tryShutdownEv;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl12forcePersistEb;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl13tryUnregisterEv;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl15registerServiceERKNS_2spINS_7IBinderEEERKNSt3__112basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEEbi;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl16maybeTryShutdownEv;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl23assertRegisteredServiceERKNS_2spINS_7IBinderEEE;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl25setActiveServicesCallbackERKNSt3__18functionIFbbEEE;
+ _ZN7android6binder8internal25ClientCounterCallbackImpl9onClientsERKNS_2spINS_7IBinderEEEb;
+ _ZN7android6Parcel10appendFromEPKS0_mm;
+ _ZN7android6Parcel10markForRpcERKNS_2spINS_10RpcSessionEEE;
+ _ZN7android6Parcel10writeFloatEf;
+ _ZN7android6Parcel10writeInt32Ei;
+ _ZN7android6Parcel10writeInt64El;
+ _ZN7android6Parcel11compareDataERKS0_;
+ _ZN7android6Parcel11finishWriteEm;
+ _ZN7android6Parcel11setDataSizeEm;
+ _ZN7android6Parcel11writeDoubleEd;
+ _ZN7android6Parcel11writeObjectERK18flat_binder_objectb;
+ _ZN7android6Parcel11writeUint32Ej;
+ _ZN7android6Parcel11writeUint64Em;
+ _ZN7android6Parcel12pushAllowFdsEb;
+ _ZN7android6Parcel12restartWriteEm;
+ _ZN7android6Parcel12writeCStringEPKc;
+ _ZN7android6Parcel12writeInplaceEm;
+ _ZN7android6Parcel12writePointerEm;
+ _ZN7android6Parcel12writeString8EPKcm;
+ _ZN7android6Parcel12writeString8ERKNS_7String8E;
+ _ZN7android6Parcel13continueWriteEm;
+ _ZN7android6Parcel13flattenBinderERKNS_2spINS_7IBinderEEE;
+ _ZN7android6Parcel13markForBinderERKNS_2spINS_7IBinderEEE;
+ _ZN7android6Parcel13writeString16EPKDsm;
+ _ZN7android6Parcel13writeString16ERKNS_8String16E;
+ _ZN7android6Parcel13writeString16ERKNSt3__110unique_ptrINS_8String16ENS1_14default_deleteIS3_EEEE;
+ _ZN7android6Parcel13writeString16ERKNSt3__18optionalINS_8String16EEE;
+ _ZN7android6Parcel13writeUnpaddedEPKvm;
+ _ZN7android6Parcel14acquireObjectsEv;
+ _ZN7android6Parcel14freeDataNoInitEv;
+ _ZN7android6Parcel14releaseObjectsEv;
+ _ZN7android6Parcel14writeByteArrayEmPKh;
+ _ZN7android6Parcel15restoreAllowFdsEb;
+ _ZN7android6Parcel15setDataCapacityEm;
+ _ZN7android6Parcel15writeBoolVectorERKNSt3__110unique_ptrINS1_6vectorIbNS1_9allocatorIbEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel15writeBoolVectorERKNSt3__16vectorIbNS1_9allocatorIbEEEE;
+ _ZN7android6Parcel15writeBoolVectorERKNSt3__18optionalINS1_6vectorIbNS1_9allocatorIbEEEEEE;
+ _ZN7android6Parcel15writeByteVectorERKNSt3__110unique_ptrINS1_6vectorIaNS1_9allocatorIaEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel15writeByteVectorERKNSt3__110unique_ptrINS1_6vectorIhNS1_9allocatorIhEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel15writeByteVectorERKNSt3__16vectorIaNS1_9allocatorIaEEEE;
+ _ZN7android6Parcel15writeByteVectorERKNSt3__16vectorIhNS1_9allocatorIhEEEE;
+ _ZN7android6Parcel15writeByteVectorERKNSt3__18optionalINS1_6vectorIaNS1_9allocatorIaEEEEEE;
+ _ZN7android6Parcel15writeByteVectorERKNSt3__18optionalINS1_6vectorIhNS1_9allocatorIhEEEEEE;
+ _ZN7android6Parcel15writeCharVectorERKNSt3__110unique_ptrINS1_6vectorIDsNS1_9allocatorIDsEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel15writeCharVectorERKNSt3__16vectorIDsNS1_9allocatorIDsEEEE;
+ _ZN7android6Parcel15writeCharVectorERKNSt3__18optionalINS1_6vectorIDsNS1_9allocatorIDsEEEEEE;
+ _ZN7android6Parcel15writeInt32ArrayEmPKi;
+ _ZN7android6Parcel15writeParcelableERKNS_10ParcelableE;
+ _ZN7android6Parcel16writeFloatVectorERKNSt3__110unique_ptrINS1_6vectorIfNS1_9allocatorIfEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel16writeFloatVectorERKNSt3__16vectorIfNS1_9allocatorIfEEEE;
+ _ZN7android6Parcel16writeFloatVectorERKNSt3__18optionalINS1_6vectorIfNS1_9allocatorIfEEEEEE;
+ _ZN7android6Parcel16writeInt32VectorERKNSt3__110unique_ptrINS1_6vectorIiNS1_9allocatorIiEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel16writeInt32VectorERKNSt3__16vectorIiNS1_9allocatorIiEEEE;
+ _ZN7android6Parcel16writeInt32VectorERKNSt3__18optionalINS1_6vectorIiNS1_9allocatorIiEEEEEE;
+ _ZN7android6Parcel16writeInt64VectorERKNSt3__110unique_ptrINS1_6vectorIlNS1_9allocatorIlEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel16writeInt64VectorERKNSt3__16vectorIlNS1_9allocatorIlEEEE;
+ _ZN7android6Parcel16writeInt64VectorERKNSt3__18optionalINS1_6vectorIlNS1_9allocatorIlEEEEEE;
+ _ZN7android6Parcel16writeNoExceptionEv;
+ _ZN7android6Parcel16writeUtf8AsUtf16ERKNSt3__110unique_ptrINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS1_14default_deleteIS8_EEEE;
+ _ZN7android6Parcel16writeUtf8AsUtf16ERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE;
+ _ZN7android6Parcel16writeUtf8AsUtf16ERKNSt3__18optionalINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEE;
+ _ZN7android6Parcel17writeDoubleVectorERKNSt3__110unique_ptrINS1_6vectorIdNS1_9allocatorIdEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel17writeDoubleVectorERKNSt3__16vectorIdNS1_9allocatorIdEEEE;
+ _ZN7android6Parcel17writeDoubleVectorERKNSt3__18optionalINS1_6vectorIdNS1_9allocatorIdEEEEEE;
+ _ZN7android6Parcel17writeNativeHandleEPK13native_handle;
+ _ZN7android6Parcel17writeStrongBinderERKNS_2spINS_7IBinderEEE;
+ _ZN7android6Parcel17writeUint64VectorERKNSt3__110unique_ptrINS1_6vectorImNS1_9allocatorImEEEENS1_14default_deleteIS6_EEEE;
+ _ZN7android6Parcel17writeUint64VectorERKNSt3__16vectorImNS1_9allocatorImEEEE;
+ _ZN7android6Parcel17writeUint64VectorERKNSt3__18optionalINS1_6vectorImNS1_9allocatorImEEEEEE;
+ _ZN7android6Parcel18getGlobalAllocSizeEv;
+ _ZN7android6Parcel19finishFlattenBinderERKNS_2spINS_7IBinderEEE;
+ _ZN7android6Parcel19getGlobalAllocCountEv;
+ _ZN7android6Parcel19ipcSetDataReferenceEPKhmPKymPFvPS0_S2_mS4_mE;
+ _ZN7android6Parcel19writeFileDescriptorEib;
+ _ZN7android6Parcel19writeInterfaceTokenEPKDsm;
+ _ZN7android6Parcel19writeInterfaceTokenERKNS_8String16E;
+ _ZN7android6Parcel19writeString16VectorERKNSt3__110unique_ptrINS1_6vectorINS2_INS_8String16ENS1_14default_deleteIS4_EEEENS1_9allocatorIS7_EEEENS5_ISA_EEEE;
+ _ZN7android6Parcel19writeString16VectorERKNSt3__16vectorINS_8String16ENS1_9allocatorIS3_EEEE;
+ _ZN7android6Parcel19writeString16VectorERKNSt3__18optionalINS1_6vectorINS2_INS_8String16EEENS1_9allocatorIS5_EEEEEE;
+ _ZN7android6Parcel20closeFileDescriptorsEv;
+ _ZN7android6Parcel22writeDupFileDescriptorEi;
+ _ZN7android6Parcel23writeStrongBinderVectorERKNSt3__110unique_ptrINS1_6vectorINS_2spINS_7IBinderEEENS1_9allocatorIS6_EEEENS1_14default_deleteIS9_EEEE;
+ _ZN7android6Parcel23writeStrongBinderVectorERKNSt3__16vectorINS_2spINS_7IBinderEEENS1_9allocatorIS5_EEEE;
+ _ZN7android6Parcel23writeStrongBinderVectorERKNSt3__18optionalINS1_6vectorINS_2spINS_7IBinderEEENS1_9allocatorIS6_EEEEEE;
+ _ZN7android6Parcel25writeParcelFileDescriptorEib;
+ _ZN7android6Parcel25writeUniqueFileDescriptorERKNS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZN7android6Parcel26writeRawNullableParcelableEPKNS_10ParcelableE;
+ _ZN7android6Parcel27replaceCallingWorkSourceUidEj;
+ _ZN7android6Parcel28writeDupParcelFileDescriptorEi;
+ _ZN7android6Parcel28writeUtf8VectorAsUtf16VectorERKNSt3__110unique_ptrINS1_6vectorINS2_INS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS1_14default_deleteIS9_EEEENS7_ISC_EEEENSA_ISE_EEEE;
+ _ZN7android6Parcel28writeUtf8VectorAsUtf16VectorERKNSt3__16vectorINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS6_IS8_EEEE;
+ _ZN7android6Parcel28writeUtf8VectorAsUtf16VectorERKNSt3__18optionalINS1_6vectorINS2_INS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEENS7_ISA_EEEEEE;
+ _ZN7android6Parcel31writeUniqueFileDescriptorVectorERKNSt3__110unique_ptrINS1_6vectorINS_4base14unique_fd_implINS4_13DefaultCloserEEENS1_9allocatorIS7_EEEENS1_14default_deleteISA_EEEE;
+ _ZN7android6Parcel31writeUniqueFileDescriptorVectorERKNSt3__16vectorINS_4base14unique_fd_implINS3_13DefaultCloserEEENS1_9allocatorIS6_EEEE;
+ _ZN7android6Parcel31writeUniqueFileDescriptorVectorERKNSt3__18optionalINS1_6vectorINS_4base14unique_fd_implINS4_13DefaultCloserEEENS1_9allocatorIS7_EEEEEE;
+ _ZN7android6Parcel35writeDupImmutableBlobFileDescriptorEi;
+ _ZN7android6Parcel4Blob4initEiPvmb;
+ _ZN7android6Parcel4Blob5clearEv;
+ _ZN7android6Parcel4Blob7releaseEv;
+ _ZN7android6Parcel4BlobC1Ev;
+ _ZN7android6Parcel4BlobC2Ev;
+ _ZN7android6Parcel4BlobD1Ev;
+ _ZN7android6Parcel4BlobD2Ev;
+ _ZN7android6Parcel5writeEPKvm;
+ _ZN7android6Parcel5writeERKNS0_26FlattenableHelperInterfaceE;
+ _ZN7android6Parcel7setDataEPKhm;
+ _ZN7android6Parcel8freeDataEv;
+ _ZN7android6Parcel8growDataEm;
+ _ZN7android6Parcel8setErrorEi;
+ _ZN7android6Parcel9initStateEv;
+ _ZN7android6Parcel9writeBlobEmbPNS0_12WritableBlobE;
+ _ZN7android6Parcel9writeBoolEb;
+ _ZN7android6Parcel9writeByteEa;
+ _ZN7android6Parcel9writeCharEDs;
+ _ZN7android6ParcelC1Ev;
+ _ZN7android6ParcelC2Ev;
+ _ZN7android6ParcelD1Ev;
+ _ZN7android6ParcelD2Ev;
+ _ZN7android7BBinder10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZN7android7BBinder10pingBinderEv;
+ _ZN7android7BBinder11getDebugPidEv;
+ _ZN7android7BBinder11isInheritRtEv;
+ _ZN7android7BBinder11linkToDeathERKNS_2spINS_7IBinder14DeathRecipientEEEPvj;
+ _ZN7android7BBinder11localBinderEv;
+ _ZN7android7BBinder12attachObjectEPKvPvS3_PFvS2_S3_S3_E;
+ _ZN7android7BBinder12detachObjectEPKv;
+ _ZN7android7BBinder12getExtensionEv;
+ _ZN7android7BBinder12setExtensionERKNS_2spINS_7IBinderEEE;
+ _ZN7android7BBinder12setInheritRtEb;
+ _ZN7android7BBinder13unlinkToDeathERKNS_2wpINS_7IBinder14DeathRecipientEEEPvjPS4_;
+ _ZN7android7BBinder15isRequestingSidEv;
+ _ZN7android7BBinder16setRequestingSidEb;
+ _ZN7android7BBinder17getOrCreateExtrasEv;
+ _ZN7android7BBinder21getMinSchedulerPolicyEv;
+ _ZN7android7BBinder21setMinSchedulerPolicyEii;
+ _ZN7android7BBinder23getMinSchedulerPriorityEv;
+ _ZN7android7BBinder4dumpEiRKNS_6VectorINS_8String16EEE;
+ _ZN7android7BBinder8transactEjRKNS_6ParcelEPS1_j;
+ _ZN7android7BBinderC1Ev;
+ _ZN7android7BBinderC2Ev;
+ _ZN7android7BBinderD0Ev;
+ _ZN7android7BBinderD1Ev;
+ _ZN7android7BBinderD2Ev;
+ _ZN7android7content2pm18PackageChangeEvent14readFromParcelEPKNS_6ParcelE;
+ _ZN7android7content2pm21IPackageManagerNative10descriptorE;
+ _ZN7android7content2pm21IPackageManagerNative11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android7content2pm21IPackageManagerNative12default_implE;
+ _ZN7android7content2pm21IPackageManagerNative14getDefaultImplEv;
+ _ZN7android7content2pm21IPackageManagerNative14setDefaultImplENSt3__110unique_ptrIS2_NS3_14default_deleteIS2_EEEE;
+ _ZN7android7content2pm21IPackageManagerNativeC2Ev;
+ _ZN7android7content2pm21IPackageManagerNativeD0Ev;
+ _ZN7android7content2pm21IPackageManagerNativeD1Ev;
+ _ZN7android7content2pm21IPackageManagerNativeD2Ev;
+ _ZN7android7content2pm22BnPackageManagerNative10onTransactEjRKNS_6ParcelEPS3_j;
+ _ZN7android7content2pm22BnPackageManagerNativeC2Ev;
+ _ZN7android7content2pm22BpPackageManagerNative14getAllPackagesEPNSt3__16vectorINS3_12basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS8_ISA_EEEE;
+ _ZN7android7content2pm22BpPackageManagerNative15getNamesForUidsERKNSt3__16vectorIiNS3_9allocatorIiEEEEPNS4_INS3_12basic_stringIcNS3_11char_traitsIcEENS5_IcEEEENS5_ISE_EEEE;
+ _ZN7android7content2pm22BpPackageManagerNative16getLocationFlagsERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEPi;
+ _ZN7android7content2pm22BpPackageManagerNative16hasSystemFeatureERKNS_8String16EiPb;
+ _ZN7android7content2pm22BpPackageManagerNative19isPackageDebuggableERKNS_8String16EPb;
+ _ZN7android7content2pm22BpPackageManagerNative22getInstallerForPackageERKNS_8String16EPNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEE;
+ _ZN7android7content2pm22BpPackageManagerNative24getVersionCodeForPackageERKNS_8String16EPl;
+ _ZN7android7content2pm22BpPackageManagerNative27hasSha256SigningCertificateERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKNS3_6vectorIhNS7_IhEEEEPb;
+ _ZN7android7content2pm22BpPackageManagerNative28getModuleMetadataPackageNameEPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE;
+ _ZN7android7content2pm22BpPackageManagerNative29getTargetSdkVersionForPackageERKNS_8String16EPi;
+ _ZN7android7content2pm22BpPackageManagerNative29isAudioPlaybackCaptureAllowedERKNSt3__16vectorINS3_12basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS8_ISA_EEEEPNS4_IbNS8_IbEEEE;
+ _ZN7android7content2pm22BpPackageManagerNative29registerPackageChangeObserverERKNS_2spINS1_22IPackageChangeObserverEEE;
+ _ZN7android7content2pm22BpPackageManagerNative31unregisterPackageChangeObserverERKNS_2spINS1_22IPackageChangeObserverEEE;
+ _ZN7android7content2pm22BpPackageManagerNativeC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android7content2pm22BpPackageManagerNativeC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android7content2pm22IPackageChangeObserver10descriptorE;
+ _ZN7android7content2pm22IPackageChangeObserver11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android7content2pm22IPackageChangeObserver12default_implE;
+ _ZN7android7content2pm22IPackageChangeObserver14getDefaultImplEv;
+ _ZN7android7content2pm22IPackageChangeObserver14setDefaultImplENSt3__110unique_ptrIS2_NS3_14default_deleteIS2_EEEE;
+ _ZN7android7content2pm22IPackageChangeObserverC2Ev;
+ _ZN7android7content2pm22IPackageChangeObserverD0Ev;
+ _ZN7android7content2pm22IPackageChangeObserverD1Ev;
+ _ZN7android7content2pm22IPackageChangeObserverD2Ev;
+ _ZN7android7content2pm23BnPackageChangeObserver10onTransactEjRKNS_6ParcelEPS3_j;
+ _ZN7android7content2pm23BnPackageChangeObserverC2Ev;
+ _ZN7android7content2pm23BpPackageChangeObserver16onPackageChangedERKNS1_18PackageChangeEventE;
+ _ZN7android7content2pm23BpPackageChangeObserverC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android7content2pm23BpPackageChangeObserverC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android7HexDumpC1EPKvmm;
+ _ZN7android7HexDumpC2EPKvmm;
+ _ZN7android7IBinder11getDebugPidEPi;
+ _ZN7android7IBinder11localBinderEv;
+ _ZN7android7IBinder12getExtensionEPNS_2spIS0_EE;
+ _ZN7android7IBinder12remoteBinderEv;
+ _ZN7android7IBinder12shellCommandERKNS_2spIS0_EEiiiRNS_6VectorINS_8String16EEERKNS1_INS_14IShellCallbackEEERKNS1_INS_15IResultReceiverEEE;
+ _ZN7android7IBinder19queryLocalInterfaceERKNS_8String16E;
+ _ZN7android7IBinderC2Ev;
+ _ZN7android7IBinderD0Ev;
+ _ZN7android7IBinderD1Ev;
+ _ZN7android7IBinderD2Ev;
+ _ZN7android7IMemory10descriptorE;
+ _ZN7android7IMemory11asInterfaceERKNS_2spINS_7IBinderEEE;
+ _ZN7android7IMemory12default_implE;
+ _ZN7android7IMemory14getDefaultImplEv;
+ _ZN7android7IMemory14setDefaultImplENSt3__110unique_ptrIS0_NS1_14default_deleteIS0_EEEE;
+ _ZN7android7IMemoryC2Ev;
+ _ZN7android7IMemoryD0Ev;
+ _ZN7android7IMemoryD1Ev;
+ _ZN7android7IMemoryD2Ev;
+ _ZN7android8BnMemory10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZN7android8BnMemoryC2Ev;
+ _ZN7android8BnMemoryD0Ev;
+ _ZN7android8BnMemoryD1Ev;
+ _ZN7android8BnMemoryD2Ev;
+ _ZN7android8BpBinder10onFirstRefEv;
+ _ZN7android8BpBinder10pingBinderEv;
+ _ZN7android8BpBinder11linkToDeathERKNS_2spINS_7IBinder14DeathRecipientEEEPvj;
+ _ZN7android8BpBinder12attachObjectEPKvPvS3_PFvS2_S3_S3_E;
+ _ZN7android8BpBinder12detachObjectEPKv;
+ _ZN7android8BpBinder12remoteBinderEv;
+ _ZN7android8BpBinder12sendObituaryEv;
+ _ZN7android8BpBinder12sTrackingMapE;
+ _ZN7android8BpBinder13getCountByUidERNS_6VectorIjEES3_;
+ _ZN7android8BpBinder13ObjectManager4killEv;
+ _ZN7android8BpBinder13ObjectManager6attachEPKvPvS4_PFvS3_S4_S4_E;
+ _ZN7android8BpBinder13ObjectManager6detachEPKv;
+ _ZN7android8BpBinder13ObjectManagerC1Ev;
+ _ZN7android8BpBinder13ObjectManagerC2Ev;
+ _ZN7android8BpBinder13ObjectManagerD1Ev;
+ _ZN7android8BpBinder13ObjectManagerD2Ev;
+ _ZN7android8BpBinder13sTrackingLockE;
+ _ZN7android8BpBinder13unlinkToDeathERKNS_2wpINS_7IBinder14DeathRecipientEEEPvjPS4_;
+ _ZN7android8BpBinder14reportOneDeathERKNS0_8ObituaryE;
+ _ZN7android8BpBinder14sLimitCallbackE;
+ _ZN7android8BpBinder15onLastStrongRefEPKv;
+ _ZN7android8BpBinder15sNumTrackedUidsE;
+ _ZN7android8BpBinder16enableCountByUidEv;
+ _ZN7android8BpBinder16setLimitCallbackEPFviE;
+ _ZN7android8BpBinder17disableCountByUidEv;
+ _ZN7android8BpBinder18sCountByUidEnabledE;
+ _ZN7android8BpBinder19getBinderProxyCountEj;
+ _ZN7android8BpBinder20onIncStrongAttemptedEjPKv;
+ _ZN7android8BpBinder20setCountByUidEnabledEb;
+ _ZN7android8BpBinder26sBinderProxyThrottleCreateE;
+ _ZN7android8BpBinder29sBinderProxyCountLowWatermarkE;
+ _ZN7android8BpBinder29setBinderProxyCountWatermarksEii;
+ _ZN7android8BpBinder30sBinderProxyCountHighWatermarkE;
+ _ZN7android8BpBinder4dumpEiRKNS_6VectorINS_8String16EEE;
+ _ZN7android8BpBinder6createEi;
+ _ZN7android8BpBinder6createERKNS_2spINS_10RpcSessionEEERKNS_10RpcAddressE;
+ _ZN7android8BpBinder8transactEjRKNS_6ParcelEPS1_j;
+ _ZN7android8BpBinderC1EONS0_12BinderHandleEi;
+ _ZN7android8BpBinderC1EONS0_9RpcHandleE;
+ _ZN7android8BpBinderC1EONSt3__17variantIJNS0_12BinderHandleENS0_9RpcHandleEEEE;
+ _ZN7android8BpBinderC2EONS0_12BinderHandleEi;
+ _ZN7android8BpBinderC2EONS0_9RpcHandleE;
+ _ZN7android8BpBinderC2EONSt3__17variantIJNS0_12BinderHandleENS0_9RpcHandleEEEE;
+ _ZN7android8BpBinderD0Ev;
+ _ZN7android8BpBinderD1Ev;
+ _ZN7android8BpBinderD2Ev;
+ _ZN7android8BpMemoryC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android8BpMemoryC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android8BpMemoryD0Ev;
+ _ZN7android8BpMemoryD1Ev;
+ _ZN7android8BpMemoryD2Ev;
+ _ZN7android8internal9Stability11getCategoryEPNS_7IBinderE;
+ _ZN7android8internal9Stability11levelStringENS1_5LevelE;
+ _ZN7android8internal9Stability13getLocalLevelEv;
+ _ZN7android8internal9Stability15isDeclaredLevelENS1_5LevelE;
+ _ZN7android8internal9Stability17debugLogStabilityERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS_2spINS_7IBinderEEE;
+ _ZN7android8internal9Stability19markCompilationUnitEPNS_7IBinderE;
+ _ZN7android8internal9Stability22tryMarkCompilationUnitEPNS_7IBinderE;
+ _ZN7android8internal9Stability24requiresVintfDeclarationERKNS_2spINS_7IBinderEEE;
+ _ZN7android8internal9Stability25forceDowngradeToStabilityERKNS_2spINS_7IBinderEEENS1_5LevelE;
+ _ZN7android8internal9Stability30forceDowngradeToLocalStabilityERKNS_2spINS_7IBinderEEE;
+ _ZN7android8internal9Stability31forceDowngradeToSystemStabilityERKNS_2spINS_7IBinderEEE;
+ _ZN7android8internal9Stability31forceDowngradeToVendorStabilityERKNS_2spINS_7IBinderEEE;
+ _ZN7android8internal9Stability5checkENS1_8CategoryENS1_5LevelE;
+ _ZN7android8internal9Stability7setReprEPNS_7IBinderEij;
+ _ZN7android8internal9Stability8Category11debugStringEv;
+ _ZN7android8internal9Stability8markVndkEPNS_7IBinderE;
+ _ZN7android8internal9Stability9markVintfEPNS_7IBinderE;
+ _ZN7android8RpcState11CommandDataC1Em;
+ _ZN7android8RpcState11CommandDataC2Em;
+ _ZN7android8RpcState12countBindersEv;
+ _ZN7android8RpcState12getSessionIdERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEEPi;
+ _ZN7android8RpcState12waitForReplyERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEEPNS_6ParcelE;
+ _ZN7android8RpcState13getMaxThreadsERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEEPm;
+ _ZN7android8RpcState13getRootObjectERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEE;
+ _ZN7android8RpcState13sendDecStrongERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_10RpcAddressE;
+ _ZN7android8RpcState15onBinderLeavingERKNS_2spINS_10RpcSessionEEERKNS1_INS_7IBinderEEEPNS_10RpcAddressE;
+ _ZN7android8RpcState15processTransactERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEERKNS_13RpcWireHeaderE;
+ _ZN7android8RpcState16onBinderEnteringERKNS_2spINS_10RpcSessionEEERKNS_10RpcAddressE;
+ _ZN7android8RpcState16processDecStrongERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_13RpcWireHeaderE;
+ _ZN7android8RpcState20getAndExecuteCommandERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEE;
+ _ZN7android8RpcState20processServerCommandERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEERKNS_13RpcWireHeaderE;
+ _ZN7android8RpcState23processTransactInternalERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_2spINS_10RpcSessionEEENS0_11CommandDataE;
+ _ZN7android8RpcState4dumpEv;
+ _ZN7android8RpcState6rpcRecERKNS_4base14unique_fd_implINS1_13DefaultCloserEEEPKcPvm;
+ _ZN7android8RpcState7rpcSendERKNS_4base14unique_fd_implINS1_13DefaultCloserEEEPKcPKvm;
+ _ZN7android8RpcState8transactERKNS_4base14unique_fd_implINS1_13DefaultCloserEEERKNS_10RpcAddressEjRKNS_6ParcelERKNS_2spINS_10RpcSessionEEEPSA_j;
+ _ZN7android8RpcState9terminateEv;
+ _ZN7android8RpcStateC1Ev;
+ _ZN7android8RpcStateC2Ev;
+ _ZN7android8RpcStateD1Ev;
+ _ZN7android8RpcStateD2Ev;
+ _ZN7android9BpRefBase10onFirstRefEv;
+ _ZN7android9BpRefBase15onLastStrongRefEPKv;
+ _ZN7android9BpRefBase20onIncStrongAttemptedEjPKv;
+ _ZN7android9BpRefBaseC1ERKNS_2spINS_7IBinderEEE;
+ _ZN7android9BpRefBaseC2ERKNS_2spINS_7IBinderEEE;
+ _ZN7android9BpRefBaseD0Ev;
+ _ZN7android9BpRefBaseD1Ev;
+ _ZN7android9BpRefBaseD2Ev;
+ _ZN7android9HeapCache10binderDiedERKNS_2wpINS_7IBinderEEE;
+ _ZN7android9HeapCache10dump_heapsEv;
+ _ZN7android9HeapCache8get_heapERKNS_2spINS_7IBinderEEE;
+ _ZN7android9HeapCache9find_heapERKNS_2spINS_7IBinderEEE;
+ _ZN7android9HeapCache9free_heapERKNS_2spINS_7IBinderEEE;
+ _ZN7android9HeapCache9free_heapERKNS_2wpINS_7IBinderEEE;
+ _ZN7android9HeapCacheC1Ev;
+ _ZN7android9HeapCacheC2Ev;
+ _ZN7android9HeapCacheD0Ev;
+ _ZN7android9HeapCacheD1Ev;
+ _ZN7android9HeapCacheD2Ev;
+ _ZN7android9hexStringEPKvm;
+ _ZN7android9RpcServer12listSessionsEv;
+ _ZN7android9RpcServer13getMaxThreadsEv;
+ _ZN7android9RpcServer13getRootObjectEv;
+ _ZN7android9RpcServer13releaseServerEv;
+ _ZN7android9RpcServer13setMaxThreadsEm;
+ _ZN7android9RpcServer13setRootObjectERKNS_2spINS_7IBinderEEE;
+ _ZN7android9RpcServer15setupInetServerEjPj;
+ _ZN7android9RpcServer16setupVsockServerEj;
+ _ZN7android9RpcServer17setRootObjectWeakERKNS_2wpINS_7IBinderEEE;
+ _ZN7android9RpcServer17setupSocketServerERKNS_16RpcSocketAddressE;
+ _ZN7android9RpcServer19establishConnectionEONS_2spIS0_EENS_4base14unique_fd_implINS4_13DefaultCloserEEE;
+ _ZN7android9RpcServer19setupExternalServerENS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZN7android9RpcServer20onSessionTerminatingERKNS_2spINS_10RpcSessionEEE;
+ _ZN7android9RpcServer21setupUnixDomainServerEPKc;
+ _ZN7android9RpcServer24numUninitializedSessionsEv;
+ _ZN7android9RpcServer4joinEv;
+ _ZN7android9RpcServer4makeEv;
+ _ZN7android9RpcServer61iUnderstandThisCodeIsExperimentalAndIWillNotUseItInProductionEv;
+ _ZN7android9RpcServer9acceptOneEv;
+ _ZN7android9RpcServer9hasServerEv;
+ _ZN7android9RpcServerC1Ev;
+ _ZN7android9RpcServerC2Ev;
+ _ZN7android9RpcServerD0Ev;
+ _ZN7android9RpcServerD1Ev;
+ _ZN7android9RpcServerD2Ev;
+ _ZN7androidlsERNS_10TextOutputERKNS_7HexDumpE;
+ _ZN7androidlsERNS_10TextOutputERKNS_8TypeCodeE;
+ _ZN7androidlsIA15_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA24_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA2_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA34_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA3_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA43_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA4_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA5_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA8_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIA9_cEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIjEERNS_10TextOutputES2_RKT_;
+ _ZN7androidlsImEERNS_10TextOutputES2_RKT_;
+ _ZN7androidlsINSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEERNS_10TextOutputES9_RKT_;
+ _ZN7androidlsIPcEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIPvEERNS_10TextOutputES3_RKT_;
+ _ZN7androidlsIyEERNS_10TextOutputES2_RKT_;
+ _ZNK7android10MemoryBase9getMemoryEPlPm;
+ _ZNK7android10RpcAddress13writeToParcelEPNS_6ParcelE;
+ _ZNK7android10RpcAddress15viewRawEmbeddedEv;
+ _ZNK7android10RpcAddress6isZeroEv;
+ _ZNK7android10RpcAddress8toStringEv;
+ _ZNK7android10RpcAddressltERKS0_;
+ _ZNK7android11IMemoryHeap22getInterfaceDescriptorEv;
+ _ZNK7android12BpMemoryHeap12assertMappedEv;
+ _ZNK7android12BpMemoryHeap18assertReallyMappedEv;
+ _ZNK7android12BpMemoryHeap7getBaseEv;
+ _ZNK7android12BpMemoryHeap7getSizeEv;
+ _ZNK7android12BpMemoryHeap8getFlagsEv;
+ _ZNK7android12BpMemoryHeap9getHeapIDEv;
+ _ZNK7android12BpMemoryHeap9getOffsetEv;
+ _ZNK7android12MemoryDealer4dumpEPKc;
+ _ZNK7android12MemoryDealer4heapEv;
+ _ZNK7android12MemoryDealer9allocatorEv;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE10do_compareEPKvSA_;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE10do_destroyEPvm;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE12do_constructEPvm;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE15do_move_forwardEPvPKvm;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE16do_move_backwardEPvPKvm;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE7do_copyEPvPKvm;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEE8do_splatEPvPKvm;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE10do_compareES3_S3_;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE10do_destroyEPvm;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE12do_constructEPvm;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE15do_move_forwardEPvS3_m;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE16do_move_backwardEPvS3_m;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE7do_copyEPvS3_m;
+ _ZNK7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEE8do_splatEPvS3_m;
+ _ZNK7android14IPCThreadState13getCallingPidEv;
+ _ZNK7android14IPCThreadState13getCallingSidEv;
+ _ZNK7android14IPCThreadState13getCallingUidEv;
+ _ZNK7android14IPCThreadState18getCallRestrictionEv;
+ _ZNK7android14IPCThreadState19getStrictModePolicyEv;
+ _ZNK7android14IPCThreadState22getServingStackPointerEv;
+ _ZNK7android14IPCThreadState23getCallingWorkSourceUidEv;
+ _ZNK7android14IPCThreadState25shouldPropagateWorkSourceEv;
+ _ZNK7android14IPCThreadState29getLastTransactionBinderFlagsEv;
+ _ZNK7android14IShellCallback22getInterfaceDescriptorEv;
+ _ZNK7android14MemoryHeapBase7getBaseEv;
+ _ZNK7android14MemoryHeapBase7getSizeEv;
+ _ZNK7android14MemoryHeapBase8getFlagsEv;
+ _ZNK7android14MemoryHeapBase9getDeviceEv;
+ _ZNK7android14MemoryHeapBase9getHeapIDEv;
+ _ZNK7android14MemoryHeapBase9getOffsetEv;
+ _ZNK7android15IResultReceiver22getInterfaceDescriptorEv;
+ _ZNK7android15IServiceManager22getInterfaceDescriptorEv;
+ _ZNK7android18BufferedTextOutput9getBufferEv;
+ _ZNK7android18ServiceManagerShim10getServiceERKNS_8String16E;
+ _ZNK7android18ServiceManagerShim12checkServiceERKNS_8String16E;
+ _ZNK7android22SimpleBestFitAllocator4dumpEPKc;
+ _ZNK7android22SimpleBestFitAllocator4dumpERNS_7String8EPKc;
+ _ZNK7android22SimpleBestFitAllocator4sizeEv;
+ _ZNK7android22SimpleBestFitAllocator6dump_lEPKc;
+ _ZNK7android22SimpleBestFitAllocator6dump_lERNS_7String8EPKc;
+ _ZNK7android2os15IClientCallback22getInterfaceDescriptorEv;
+ _ZNK7android2os15IServiceManager22getInterfaceDescriptorEv;
+ _ZNK7android2os16IServiceCallback22getInterfaceDescriptorEv;
+ _ZNK7android2os16ParcelableHolder13writeToParcelEPNS_6ParcelE;
+ _ZNK7android2os16ServiceDebugInfo13writeToParcelEPNS_6ParcelE;
+ _ZNK7android2os17PersistableBundle10getBooleanERKNS_8String16EPb;
+ _ZNK7android2os17PersistableBundle10getIntKeysEv;
+ _ZNK7android2os17PersistableBundle11getLongKeysEv;
+ _ZNK7android2os17PersistableBundle12getIntVectorERKNS_8String16EPNSt3__16vectorIiNS5_9allocatorIiEEEE;
+ _ZNK7android2os17PersistableBundle13getDoubleKeysEv;
+ _ZNK7android2os17PersistableBundle13getLongVectorERKNS_8String16EPNSt3__16vectorIlNS5_9allocatorIlEEEE;
+ _ZNK7android2os17PersistableBundle13getStringKeysEv;
+ _ZNK7android2os17PersistableBundle13writeToParcelEPNS_6ParcelE;
+ _ZNK7android2os17PersistableBundle14getBooleanKeysEv;
+ _ZNK7android2os17PersistableBundle15getDoubleVectorERKNS_8String16EPNSt3__16vectorIdNS5_9allocatorIdEEEE;
+ _ZNK7android2os17PersistableBundle15getStringVectorERKNS_8String16EPNSt3__16vectorIS2_NS5_9allocatorIS2_EEEE;
+ _ZNK7android2os17PersistableBundle16getBooleanVectorERKNS_8String16EPNSt3__16vectorIbNS5_9allocatorIbEEEE;
+ _ZNK7android2os17PersistableBundle16getIntVectorKeysEv;
+ _ZNK7android2os17PersistableBundle17getLongVectorKeysEv;
+ _ZNK7android2os17PersistableBundle18writeToParcelInnerEPNS_6ParcelE;
+ _ZNK7android2os17PersistableBundle19getDoubleVectorKeysEv;
+ _ZNK7android2os17PersistableBundle19getStringVectorKeysEv;
+ _ZNK7android2os17PersistableBundle20getBooleanVectorKeysEv;
+ _ZNK7android2os17PersistableBundle20getPersistableBundleERKNS_8String16EPS1_;
+ _ZNK7android2os17PersistableBundle24getPersistableBundleKeysEv;
+ _ZNK7android2os17PersistableBundle4sizeEv;
+ _ZNK7android2os17PersistableBundle5emptyEv;
+ _ZNK7android2os17PersistableBundle6getIntERKNS_8String16EPi;
+ _ZNK7android2os17PersistableBundle7getLongERKNS_8String16EPl;
+ _ZNK7android2os17PersistableBundle9getDoubleERKNS_8String16EPd;
+ _ZNK7android2os17PersistableBundle9getStringERKNS_8String16EPS2_;
+ _ZNK7android2os20ParcelFileDescriptor13writeToParcelEPNS_6ParcelE;
+ _ZNK7android6binder6Status13writeToParcelEPNS_6ParcelE;
+ _ZNK7android6binder6Status9toString8Ev;
+ _ZNK7android6Parcel10errorCheckEv;
+ _ZNK7android6Parcel10ipcObjectsEv;
+ _ZNK7android6Parcel10readDoubleEPd;
+ _ZNK7android6Parcel10readDoubleEv;
+ _ZNK7android6Parcel10readObjectEb;
+ _ZNK7android6Parcel10readUint32EPj;
+ _ZNK7android6Parcel10readUint32Ev;
+ _ZNK7android6Parcel10readUint64EPm;
+ _ZNK7android6Parcel10readUint64Ev;
+ _ZNK7android6Parcel10scanForFdsEv;
+ _ZNK7android6Parcel11ipcDataSizeEv;
+ _ZNK7android6Parcel11readCStringEv;
+ _ZNK7android6Parcel11readInplaceEm;
+ _ZNK7android6Parcel11readPointerEPm;
+ _ZNK7android6Parcel11readPointerEv;
+ _ZNK7android6Parcel11readString8EPNS_7String8E;
+ _ZNK7android6Parcel11readString8Ev;
+ _ZNK7android6Parcel12dataCapacityEv;
+ _ZNK7android6Parcel12dataPositionEv;
+ _ZNK7android6Parcel12objectsCountEv;
+ _ZNK7android6Parcel12readString16EPNS_8String16E;
+ _ZNK7android6Parcel12readString16EPNSt3__110unique_ptrINS_8String16ENS1_14default_deleteIS3_EEEE;
+ _ZNK7android6Parcel12readString16EPNSt3__18optionalINS_8String16EEE;
+ _ZNK7android6Parcel12readString16Ev;
+ _ZNK7android6Parcel13markSensitiveEv;
+ _ZNK7android6Parcel14checkInterfaceEPNS_7IBinderE;
+ _ZNK7android6Parcel14readBoolVectorEPNSt3__110unique_ptrINS1_6vectorIbNS1_9allocatorIbEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel14readBoolVectorEPNSt3__16vectorIbNS1_9allocatorIbEEEE;
+ _ZNK7android6Parcel14readBoolVectorEPNSt3__18optionalINS1_6vectorIbNS1_9allocatorIbEEEEEE;
+ _ZNK7android6Parcel14readByteVectorEPNSt3__110unique_ptrINS1_6vectorIaNS1_9allocatorIaEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel14readByteVectorEPNSt3__110unique_ptrINS1_6vectorIhNS1_9allocatorIhEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel14readByteVectorEPNSt3__16vectorIaNS1_9allocatorIaEEEE;
+ _ZNK7android6Parcel14readByteVectorEPNSt3__16vectorIhNS1_9allocatorIhEEEE;
+ _ZNK7android6Parcel14readByteVectorEPNSt3__18optionalINS1_6vectorIaNS1_9allocatorIaEEEEEE;
+ _ZNK7android6Parcel14readByteVectorEPNSt3__18optionalINS1_6vectorIhNS1_9allocatorIhEEEEEE;
+ _ZNK7android6Parcel14readCharVectorEPNSt3__110unique_ptrINS1_6vectorIDsNS1_9allocatorIDsEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel14readCharVectorEPNSt3__16vectorIDsNS1_9allocatorIDsEEEE;
+ _ZNK7android6Parcel14readCharVectorEPNSt3__18optionalINS1_6vectorIDsNS1_9allocatorIDsEEEEEE;
+ _ZNK7android6Parcel14readParcelableEPNS_10ParcelableE;
+ _ZNK7android6Parcel15ipcObjectsCountEv;
+ _ZNK7android6Parcel15readFloatVectorEPNSt3__110unique_ptrINS1_6vectorIfNS1_9allocatorIfEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel15readFloatVectorEPNSt3__16vectorIfNS1_9allocatorIfEEEE;
+ _ZNK7android6Parcel15readFloatVectorEPNSt3__18optionalINS1_6vectorIfNS1_9allocatorIfEEEEEE;
+ _ZNK7android6Parcel15readInt32VectorEPNSt3__110unique_ptrINS1_6vectorIiNS1_9allocatorIiEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel15readInt32VectorEPNSt3__16vectorIiNS1_9allocatorIiEEEE;
+ _ZNK7android6Parcel15readInt32VectorEPNSt3__18optionalINS1_6vectorIiNS1_9allocatorIiEEEEEE;
+ _ZNK7android6Parcel15readInt64VectorEPNSt3__110unique_ptrINS1_6vectorIlNS1_9allocatorIlEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel15readInt64VectorEPNSt3__16vectorIlNS1_9allocatorIlEEEE;
+ _ZNK7android6Parcel15readInt64VectorEPNSt3__18optionalINS1_6vectorIlNS1_9allocatorIlEEEEEE;
+ _ZNK7android6Parcel15setDataPositionEm;
+ _ZNK7android6Parcel15unflattenBinderEPNS_2spINS_7IBinderEEE;
+ _ZNK7android6Parcel16enforceInterfaceEPKDsmPNS_14IPCThreadStateE;
+ _ZNK7android6Parcel16enforceInterfaceERKNS_8String16EPNS_14IPCThreadStateE;
+ _ZNK7android6Parcel16readDoubleVectorEPNSt3__110unique_ptrINS1_6vectorIdNS1_9allocatorIdEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel16readDoubleVectorEPNSt3__16vectorIdNS1_9allocatorIdEEEE;
+ _ZNK7android6Parcel16readDoubleVectorEPNSt3__18optionalINS1_6vectorIdNS1_9allocatorIdEEEEEE;
+ _ZNK7android6Parcel16readNativeHandleEv;
+ _ZNK7android6Parcel16readStrongBinderEPNS_2spINS_7IBinderEEE;
+ _ZNK7android6Parcel16readStrongBinderEv;
+ _ZNK7android6Parcel16readStrongBinderINS_2os15IClientCallbackEEEiPNS_2spIT_EE;
+ _ZNK7android6Parcel16readStrongBinderINS_2os16IServiceCallbackEEEiPNS_2spIT_EE;
+ _ZNK7android6Parcel16readStrongBinderINS_7content2pm22IPackageChangeObserverEEEiPNS_2spIT_EE;
+ _ZNK7android6Parcel16readUint64VectorEPNSt3__110unique_ptrINS1_6vectorImNS1_9allocatorImEEEENS1_14default_deleteIS6_EEEE;
+ _ZNK7android6Parcel16readUint64VectorEPNSt3__16vectorImNS1_9allocatorImEEEE;
+ _ZNK7android6Parcel16readUint64VectorEPNSt3__18optionalINS1_6vectorImNS1_9allocatorImEEEEEE;
+ _ZNK7android6Parcel16validateReadDataEm;
+ _ZNK7android6Parcel17getBlobAshmemSizeEv;
+ _ZNK7android6Parcel17getOpenAshmemSizeEv;
+ _ZNK7android6Parcel17readExceptionCodeEv;
+ _ZNK7android6Parcel17readUtf8FromUtf16EPNSt3__110unique_ptrINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS1_14default_deleteIS8_EEEE;
+ _ZNK7android6Parcel17readUtf8FromUtf16EPNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE;
+ _ZNK7android6Parcel17readUtf8FromUtf16EPNSt3__18optionalINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEE;
+ _ZNK7android6Parcel18hasFileDescriptorsEv;
+ _ZNK7android6Parcel18readFileDescriptorEv;
+ _ZNK7android6Parcel18readString16VectorEPNSt3__110unique_ptrINS1_6vectorINS2_INS_8String16ENS1_14default_deleteIS4_EEEENS1_9allocatorIS7_EEEENS5_ISA_EEEE;
+ _ZNK7android6Parcel18readString16VectorEPNSt3__16vectorINS_8String16ENS1_9allocatorIS3_EEEE;
+ _ZNK7android6Parcel18readString16VectorEPNSt3__18optionalINS1_6vectorINS2_INS_8String16EEENS1_9allocatorIS5_EEEEEE;
+ _ZNK7android6Parcel18readString8InplaceEPm;
+ _ZNK7android6Parcel19readString16InplaceEPm;
+ _ZNK7android6Parcel21finishUnflattenBinderERKNS_2spINS_7IBinderEEEPS3_;
+ _ZNK7android6Parcel22readStrongBinderVectorEPNSt3__110unique_ptrINS1_6vectorINS_2spINS_7IBinderEEENS1_9allocatorIS6_EEEENS1_14default_deleteIS9_EEEE;
+ _ZNK7android6Parcel22readStrongBinderVectorEPNSt3__16vectorINS_2spINS_7IBinderEEENS1_9allocatorIS5_EEEE;
+ _ZNK7android6Parcel22readStrongBinderVectorEPNSt3__18optionalINS1_6vectorINS_2spINS_7IBinderEEENS1_9allocatorIS6_EEEEEE;
+ _ZNK7android6Parcel24readCallingWorkSourceUidEv;
+ _ZNK7android6Parcel24readNullableStrongBinderEPNS_2spINS_7IBinderEEE;
+ _ZNK7android6Parcel24readParcelFileDescriptorEv;
+ _ZNK7android6Parcel24readUniqueFileDescriptorEPNS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZNK7android6Parcel29readUtf8VectorFromUtf16VectorEPNSt3__110unique_ptrINS1_6vectorINS2_INS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS1_14default_deleteIS9_EEEENS7_ISC_EEEENSA_ISE_EEEE;
+ _ZNK7android6Parcel29readUtf8VectorFromUtf16VectorEPNSt3__16vectorINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS6_IS8_EEEE;
+ _ZNK7android6Parcel29readUtf8VectorFromUtf16VectorEPNSt3__18optionalINS1_6vectorINS2_INS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEENS7_ISA_EEEEEE;
+ _ZNK7android6Parcel30readUniqueFileDescriptorVectorEPNSt3__110unique_ptrINS1_6vectorINS_4base14unique_fd_implINS4_13DefaultCloserEEENS1_9allocatorIS7_EEEENS1_14default_deleteISA_EEEE;
+ _ZNK7android6Parcel30readUniqueFileDescriptorVectorEPNSt3__16vectorINS_4base14unique_fd_implINS3_13DefaultCloserEEENS1_9allocatorIS6_EEEE;
+ _ZNK7android6Parcel30readUniqueFileDescriptorVectorEPNSt3__18optionalINS1_6vectorINS_4base14unique_fd_implINS4_13DefaultCloserEEENS1_9allocatorIS7_EEEEEE;
+ _ZNK7android6Parcel30readUniqueParcelFileDescriptorEPNS_4base14unique_fd_implINS1_13DefaultCloserEEE;
+ _ZNK7android6Parcel37updateWorkSourceRequestHeaderPositionEv;
+ _ZNK7android6Parcel4dataEv;
+ _ZNK7android6Parcel4readEPvm;
+ _ZNK7android6Parcel4readERNS0_26FlattenableHelperInterfaceE;
+ _ZNK7android6Parcel5printERNS_10TextOutputEj;
+ _ZNK7android6Parcel7ipcDataEv;
+ _ZNK7android6Parcel8allowFdsEv;
+ _ZNK7android6Parcel8dataSizeEv;
+ _ZNK7android6Parcel8isForRpcEv;
+ _ZNK7android6Parcel8readBlobEmPNS0_12ReadableBlobE;
+ _ZNK7android6Parcel8readBoolEPb;
+ _ZNK7android6Parcel8readBoolEv;
+ _ZNK7android6Parcel8readByteEPa;
+ _ZNK7android6Parcel8readByteEv;
+ _ZNK7android6Parcel8readCharEPDs;
+ _ZNK7android6Parcel8readCharEv;
+ _ZNK7android6Parcel9dataAvailEv;
+ _ZNK7android6Parcel9readFloatEPf;
+ _ZNK7android6Parcel9readFloatEv;
+ _ZNK7android6Parcel9readInt32EPi;
+ _ZNK7android6Parcel9readInt32Ev;
+ _ZNK7android6Parcel9readInt64EPl;
+ _ZNK7android6Parcel9readInt64Ev;
+ _ZNK7android6VectorIiE10do_destroyEPvm;
+ _ZNK7android6VectorIiE12do_constructEPvm;
+ _ZNK7android6VectorIiE15do_move_forwardEPvPKvm;
+ _ZNK7android6VectorIiE16do_move_backwardEPvPKvm;
+ _ZNK7android6VectorIiE7do_copyEPvPKvm;
+ _ZNK7android6VectorIiE8do_splatEPvPKvm;
+ _ZNK7android6VectorINS_12ProcessState12handle_entryEE10do_destroyEPvm;
+ _ZNK7android6VectorINS_12ProcessState12handle_entryEE12do_constructEPvm;
+ _ZNK7android6VectorINS_12ProcessState12handle_entryEE15do_move_forwardEPvPKvm;
+ _ZNK7android6VectorINS_12ProcessState12handle_entryEE16do_move_backwardEPvPKvm;
+ _ZNK7android6VectorINS_12ProcessState12handle_entryEE7do_copyEPvPKvm;
+ _ZNK7android6VectorINS_12ProcessState12handle_entryEE8do_splatEPvPKvm;
+ _ZNK7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEE10do_destroyEPvm;
+ _ZNK7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEE12do_constructEPvm;
+ _ZNK7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEE15do_move_forwardEPvPKvm;
+ _ZNK7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEE16do_move_backwardEPvPKvm;
+ _ZNK7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEE7do_copyEPvPKvm;
+ _ZNK7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEE8do_splatEPvPKvm;
+ _ZNK7android6VectorINS_8BpBinder8ObituaryEE10do_destroyEPvm;
+ _ZNK7android6VectorINS_8BpBinder8ObituaryEE12do_constructEPvm;
+ _ZNK7android6VectorINS_8BpBinder8ObituaryEE15do_move_forwardEPvPKvm;
+ _ZNK7android6VectorINS_8BpBinder8ObituaryEE16do_move_backwardEPvPKvm;
+ _ZNK7android6VectorINS_8BpBinder8ObituaryEE7do_copyEPvPKvm;
+ _ZNK7android6VectorINS_8BpBinder8ObituaryEE8do_splatEPvPKvm;
+ _ZNK7android6VectorINS_8String16EE10do_destroyEPvm;
+ _ZNK7android6VectorINS_8String16EE12do_constructEPvm;
+ _ZNK7android6VectorINS_8String16EE15do_move_forwardEPvPKvm;
+ _ZNK7android6VectorINS_8String16EE16do_move_backwardEPvPKvm;
+ _ZNK7android6VectorINS_8String16EE7do_copyEPvPKvm;
+ _ZNK7android6VectorINS_8String16EE8do_splatEPvPKvm;
+ _ZNK7android6VectorIPNS_7BBinderEE10do_destroyEPvm;
+ _ZNK7android6VectorIPNS_7BBinderEE12do_constructEPvm;
+ _ZNK7android6VectorIPNS_7BBinderEE15do_move_forwardEPvPKvm;
+ _ZNK7android6VectorIPNS_7BBinderEE16do_move_backwardEPvPKvm;
+ _ZNK7android6VectorIPNS_7BBinderEE7do_copyEPvPKvm;
+ _ZNK7android6VectorIPNS_7BBinderEE8do_splatEPvPKvm;
+ _ZNK7android6VectorIPNS_7RefBase12weakref_typeEE10do_destroyEPvm;
+ _ZNK7android6VectorIPNS_7RefBase12weakref_typeEE12do_constructEPvm;
+ _ZNK7android6VectorIPNS_7RefBase12weakref_typeEE15do_move_forwardEPvPKvm;
+ _ZNK7android6VectorIPNS_7RefBase12weakref_typeEE16do_move_backwardEPvPKvm;
+ _ZNK7android6VectorIPNS_7RefBase12weakref_typeEE7do_copyEPvPKvm;
+ _ZNK7android6VectorIPNS_7RefBase12weakref_typeEE8do_splatEPvPKvm;
+ _ZNK7android6VectorIPNS_7RefBaseEE10do_destroyEPvm;
+ _ZNK7android6VectorIPNS_7RefBaseEE12do_constructEPvm;
+ _ZNK7android6VectorIPNS_7RefBaseEE15do_move_forwardEPvPKvm;
+ _ZNK7android6VectorIPNS_7RefBaseEE16do_move_backwardEPvPKvm;
+ _ZNK7android6VectorIPNS_7RefBaseEE7do_copyEPvPKvm;
+ _ZNK7android6VectorIPNS_7RefBaseEE8do_splatEPvPKvm;
+ _ZNK7android7BBinder10findObjectEPKv;
+ _ZNK7android7BBinder13isBinderAliveEv;
+ _ZNK7android7BBinder22getInterfaceDescriptorEv;
+ _ZNK7android7content2pm18PackageChangeEvent13writeToParcelEPNS_6ParcelE;
+ _ZNK7android7content2pm21IPackageManagerNative22getInterfaceDescriptorEv;
+ _ZNK7android7content2pm22IPackageChangeObserver22getInterfaceDescriptorEv;
+ _ZNK7android7IBinder13checkSubclassEPKv;
+ _ZNK7android7IMemory11fastPointerERKNS_2spINS_7IBinderEEEl;
+ _ZNK7android7IMemory15unsecurePointerEv;
+ _ZNK7android7IMemory22getInterfaceDescriptorEv;
+ _ZNK7android7IMemory4sizeEv;
+ _ZNK7android7IMemory6offsetEv;
+ _ZNK7android7IMemory7pointerEv;
+ _ZNK7android8BpBinder10findObjectEPKv;
+ _ZNK7android8BpBinder10rpcAddressEv;
+ _ZNK7android8BpBinder10rpcSessionEv;
+ _ZNK7android8BpBinder11isRpcBinderEv;
+ _ZNK7android8BpBinder12binderHandleEv;
+ _ZNK7android8BpBinder13isBinderAliveEv;
+ _ZNK7android8BpBinder13ObjectManager4findEPKv;
+ _ZNK7android8BpBinder18isDescriptorCachedEv;
+ _ZNK7android8BpBinder22getInterfaceDescriptorEv;
+ _ZNK7android8BpMemory9getMemoryEPlPm;
+ _ZNKSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE3strEv;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ElEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE4findIS3_EENS_21__tree_const_iteratorIS6_PNS_11__tree_nodeIS6_PvEElEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIlNS_9allocatorIlEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEERKT_;
+ _ZNKSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEERKT_;
+ _ZNSt3__111__sift_downIRNS_4lessIN7android8RpcState10BinderNode9AsyncTodoEEENS_11__wrap_iterIPS5_EEEEvT0_SB_T_NS_15iterator_traitsISB_E15difference_typeESB_;
+ _ZNSt3__111unique_lockINS_5mutexEE6unlockEv;
+ _ZNSt3__112__hash_tableINS_17__hash_value_typeIijEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE14__erase_uniqueIiEEmRKT_;
+ _ZNSt3__112__hash_tableINS_17__hash_value_typeIijEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE25__emplace_unique_key_argsIiJRKNS_21piecewise_construct_tENS_5tupleIJRKiEEENSI_IJEEEEEENS_4pairINS_15__hash_iteratorIPNS_11__hash_nodeIS2_PvEEEEbEERKT_DpOT0_;
+ _ZNSt3__112__hash_tableINS_17__hash_value_typeIijEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE6rehashEm;
+ _ZNSt3__112__hash_tableINS_17__hash_value_typeIijEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE6removeENS_21__hash_const_iteratorIPNS_11__hash_nodeIS2_PvEEEE;
+ _ZNSt3__112__hash_tableINS_17__hash_value_typeIijEENS_22__unordered_map_hasherIiS2_NS_4hashIiEELb1EEENS_21__unordered_map_equalIiS2_NS_8equal_toIiEELb1EEENS_9allocatorIS2_EEE8__rehashEm;
+ _ZNSt3__113__tree_removeIPNS_16__tree_node_baseIPvEEEEvT_S5_;
+ _ZNSt3__114__copy_alignedINS_6vectorIbNS_9allocatorIbEEEELb0EEENS_14__bit_iteratorIT_Lb0EXLi0EEEENS5_IS6_XT0_EXLi0EEEES8_S7_;
+ _ZNSt3__114__copy_alignedINS_6vectorIbNS_9allocatorIbEEEELb1EEENS_14__bit_iteratorIT_Lb0EXLi0EEEENS5_IS6_XT0_EXLi0EEEES8_S7_;
+ _ZNSt3__114__thread_proxyINS_5tupleIJNS_10unique_ptrINS_15__thread_structENS_14default_deleteIS3_EEEEMN7android9RpcServerEFvONS7_2spIS8_EENS7_4base14unique_fd_implINSC_13DefaultCloserEEEEPS8_SA_SF_EEEEEPvSK_;
+ _ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE7seekoffExNS_8ios_base7seekdirEj;
+ _ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE8overflowEi;
+ _ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE9pbackfailEi;
+ _ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE9underflowEv;
+ _ZNSt3__116__copy_unalignedINS_6vectorIbNS_9allocatorIbEEEELb0EEENS_14__bit_iteratorIT_Lb0EXLi0EEEENS5_IS6_XT0_EXLi0EEEES8_S7_;
+ _ZNSt3__116__copy_unalignedINS_6vectorIbNS_9allocatorIbEEEELb1EEENS_14__bit_iteratorIT_Lb0EXLi0EEEENS5_IS6_XT0_EXLi0EEEES8_S7_;
+ _ZNSt3__120__shared_ptr_emplaceIN7android14RpcWireAddressENS_9allocatorIS2_EEE16__on_zero_sharedEv;
+ _ZNSt3__120__shared_ptr_emplaceIN7android14RpcWireAddressENS_9allocatorIS2_EEE21__on_zero_shared_weakEv;
+ _ZNSt3__120__shared_ptr_emplaceIN7android6binder8internal21ClientCounterCallbackENS_9allocatorIS4_EEE16__on_zero_sharedEv;
+ _ZNSt3__120__shared_ptr_emplaceIN7android6binder8internal21ClientCounterCallbackENS_9allocatorIS4_EEE21__on_zero_shared_weakEv;
+ _ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m;
+ _ZNSt3__127__tree_balance_after_insertIPNS_16__tree_node_baseIPvEEEEvT_S5_;
+ _ZNSt3__16__treeIN7android8String16ENS_4lessIS2_EENS_9allocatorIS2_EEE12__find_equalIS2_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISC_EERKT_;
+ _ZNSt3__16__treeIN7android8String16ENS_4lessIS2_EENS_9allocatorIS2_EEE25__emplace_unique_key_argsIS2_JRKS2_EEENS_4pairINS_15__tree_iteratorIS2_PNS_11__tree_nodeIS2_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeIN7android8String16ENS_4lessIS2_EENS_9allocatorIS2_EEE7destroyEPNS_11__tree_nodeIS2_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIiN7android2spINS2_10RpcSessionEEEEENS_19__map_value_compareIiS6_NS_4lessIiEELb1EEENS_9allocatorIS6_EEE5eraseENS_21__tree_const_iteratorIS6_PNS_11__tree_nodeIS6_PvEElEE;
+ _ZNSt3__16__treeINS_12__value_typeIiN7android2spINS2_10RpcSessionEEEEENS_19__map_value_compareIiS6_NS_4lessIiEELb1EEENS_9allocatorIS6_EEE7destroyEPNS_11__tree_nodeIS6_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android10RpcAddressENS2_8RpcState10BinderNodeEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE25__emplace_unique_key_argsIS3_JNS_4pairIKS3_S5_EEEEENSF_INS_15__tree_iteratorIS6_PNS_11__tree_nodeIS6_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android10RpcAddressENS2_8RpcState10BinderNodeEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE7destroyEPNS_11__tree_nodeIS6_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_SE_EElEERPNS_15__tree_end_nodeISG_EESH_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISG_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE14__assign_multiINS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEEEvT_SJ_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE15__emplace_multiIJRKNS_4pairIKS3_bEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSG_IJEEEEEENS_4pairINS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_bEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEENS_21__tree_const_iteratorIS4_SM_lEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EbEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE7destroyEPNS_11__tree_nodeIS4_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_SE_EElEERPNS_15__tree_end_nodeISG_EESH_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISG_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE14__assign_multiINS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEEEvT_SJ_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE15__emplace_multiIJRKNS_4pairIKS3_dEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSG_IJEEEEEENS_4pairINS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_dEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEENS_21__tree_const_iteratorIS4_SM_lEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EdEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE7destroyEPNS_11__tree_nodeIS4_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_SE_EElEERPNS_15__tree_end_nodeISG_EESH_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISG_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE14__assign_multiINS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEEEvT_SJ_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE15__emplace_multiIJRKNS_4pairIKS3_iEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSG_IJEEEEEENS_4pairINS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_iEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEENS_21__tree_const_iteratorIS4_SM_lEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16EiEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE7destroyEPNS_11__tree_nodeIS4_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ElEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_SE_EElEERPNS_15__tree_end_nodeISG_EESH_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ElEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISG_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ElEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE14__assign_multiINS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEEEvT_SJ_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ElEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE15__emplace_multiIJRKNS_4pairIKS3_lEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ElEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSG_IJEEEEEENS_4pairINS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ElEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_lEEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEENS_21__tree_const_iteratorIS4_SM_lEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ElEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ElEENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE7destroyEPNS_11__tree_nodeIS4_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS6_PNS_11__tree_nodeIS6_SG_EElEERPNS_15__tree_end_nodeISI_EESJ_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISI_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE14__assign_multiINS_21__tree_const_iteratorIS6_PNS_11__tree_nodeIS6_PvEElEEEEvT_SL_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE14__erase_uniqueIS3_EEmRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE15__emplace_multiIJRKNS_4pairIKS3_S5_EEEEENS_15__tree_iteratorIS6_PNS_11__tree_nodeIS6_PvEElEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSI_IJEEEEEENS_4pairINS_15__tree_iteratorIS6_PNS_11__tree_nodeIS6_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S5_EEEEENS_15__tree_iteratorIS6_PNS_11__tree_nodeIS6_PvEElEENS_21__tree_const_iteratorIS6_SO_lEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE4findIS3_EENS_15__tree_iteratorIS6_PNS_11__tree_nodeIS6_PvEElEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE5eraseENS_21__tree_const_iteratorIS6_PNS_11__tree_nodeIS6_PvEElEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS2_2os17PersistableBundleEEENS_19__map_value_compareIS3_S6_NS_4lessIS3_EELb1EEENS_9allocatorIS6_EEE7destroyEPNS_11__tree_nodeIS6_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_SH_EElEERPNS_15__tree_end_nodeISJ_EESK_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISJ_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__assign_multiINS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEEEvT_SM_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__erase_uniqueIS3_EEmRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE15__emplace_multiIJRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE16__construct_nodeIJRKNS_4pairIKS3_S7_EEEEENS_10unique_ptrINS_11__tree_nodeIS8_PvEENS_22__tree_node_destructorINS5_ISO_EEEEEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSJ_IJEEEEEENS_4pairINS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEENS_21__tree_const_iteratorIS8_SP_lEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE5eraseENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIbNS_9allocatorIbEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE7destroyEPNS_11__tree_nodeIS8_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_SH_EElEERPNS_15__tree_end_nodeISJ_EESK_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISJ_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__assign_multiINS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEEEvT_SM_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__erase_uniqueIS3_EEmRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE15__emplace_multiIJRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSJ_IJEEEEEENS_4pairINS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEENS_21__tree_const_iteratorIS8_SP_lEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE5eraseENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIdNS_9allocatorIdEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE7destroyEPNS_11__tree_nodeIS8_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_SH_EElEERPNS_15__tree_end_nodeISJ_EESK_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISJ_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__assign_multiINS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEEEvT_SM_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__erase_uniqueIS3_EEmRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE15__emplace_multiIJRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSJ_IJEEEEEENS_4pairINS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEENS_21__tree_const_iteratorIS8_SP_lEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE5eraseENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIiNS_9allocatorIiEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE7destroyEPNS_11__tree_nodeIS8_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIlNS_9allocatorIlEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_SH_EElEERPNS_15__tree_end_nodeISJ_EESK_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIlNS_9allocatorIlEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISJ_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIlNS_9allocatorIlEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__assign_multiINS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEEEvT_SM_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIlNS_9allocatorIlEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__erase_uniqueIS3_EEmRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIlNS_9allocatorIlEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE15__emplace_multiIJRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIlNS_9allocatorIlEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSJ_IJEEEEEENS_4pairINS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIlNS_9allocatorIlEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEENS_21__tree_const_iteratorIS8_SP_lEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIlNS_9allocatorIlEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIlNS_9allocatorIlEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE5eraseENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIlNS_9allocatorIlEEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE7destroyEPNS_11__tree_nodeIS8_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_SH_EElEERPNS_15__tree_end_nodeISJ_EESK_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISJ_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__assign_multiINS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEEEvT_SM_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE14__erase_uniqueIS3_EEmRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE15__emplace_multiIJRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE16__construct_nodeIJRKNS_4pairIKS3_S7_EEEEENS_10unique_ptrINS_11__tree_nodeIS8_PvEENS_22__tree_node_destructorINS5_ISO_EEEEEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSJ_IJEEEEEENS_4pairINS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEENS_21__tree_const_iteratorIS8_SP_lEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE4findIS3_EENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE5eraseENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ENS_6vectorIS3_NS_9allocatorIS3_EEEEEENS_19__map_value_compareIS3_S8_NS_4lessIS3_EELb1EEENS5_IS8_EEE7destroyEPNS_11__tree_nodeIS8_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_SE_EElEERPNS_15__tree_end_nodeISG_EESH_RKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISG_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE14__assign_multiINS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEEEvT_SJ_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE14__erase_uniqueIS3_EEmRKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE15__emplace_multiIJRKNS_4pairIKS3_S3_EEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEDpOT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE25__emplace_unique_key_argsIS3_JRKNS_21piecewise_construct_tENS_5tupleIJRKS3_EEENSG_IJEEEEEENS_4pairINS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S3_EEEEENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEENS_21__tree_const_iteratorIS4_SM_lEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE4findIS3_EENS_15__tree_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEERKT_;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE5eraseENS_21__tree_const_iteratorIS4_PNS_11__tree_nodeIS4_PvEElEE;
+ _ZNSt3__16__treeINS_12__value_typeIN7android8String16ES3_EENS_19__map_value_compareIS3_S4_NS_4lessIS3_EELb1EEENS_9allocatorIS4_EEE7destroyEPNS_11__tree_nodeIS4_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeINS_11__thread_idENS_6threadEEENS_19__map_value_compareIS2_S4_NS_4lessIS2_EELb1EEENS_9allocatorIS4_EEE7destroyEPNS_11__tree_nodeIS4_PvEE;
+ _ZNSt3__16__treeINS_12__value_typeINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEN7android6binder8internal25ClientCounterCallbackImpl7ServiceEEENS_19__map_value_compareIS7_SD_NS_4lessIS7_EELb1EEENS5_ISD_EEE12__find_equalIS7_EERPNS_16__tree_node_baseIPvEERPNS_15__tree_end_nodeISO_EERKT_;
+ _ZNSt3__16__treeINS_12__value_typeINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEN7android6binder8internal25ClientCounterCallbackImpl7ServiceEEENS_19__map_value_compareIS7_SD_NS_4lessIS7_EELb1EEENS5_ISD_EEE25__emplace_unique_key_argsIS7_JRKNS_21piecewise_construct_tENS_5tupleIJRKS7_EEENSO_IJEEEEEENS_4pairINS_15__tree_iteratorISD_PNS_11__tree_nodeISD_PvEElEEbEERKT_DpOT0_;
+ _ZNSt3__16__treeINS_12__value_typeINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEN7android6binder8internal25ClientCounterCallbackImpl7ServiceEEENS_19__map_value_compareIS7_SD_NS_4lessIS7_EELb1EEENS5_ISD_EEE7destroyEPNS_11__tree_nodeISD_PvEE;
+ _ZNSt3__16vectorIaNS_9allocatorIaEEE6insertIPKaEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIaNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPaEEE4typeENSC_IS6_EES8_S8_;
+ _ZNSt3__16vectorIbNS_9allocatorIbEEE18__construct_at_endINS_14__bit_iteratorIS3_Lb0ELm0EEEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeES8_S8_;
+ _ZNSt3__16vectorIbNS_9allocatorIbEEE18__construct_at_endINS_14__bit_iteratorIS3_Lb1ELm0EEEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeES8_S8_;
+ _ZNSt3__16vectorIbNS_9allocatorIbEEE7reserveEm;
+ _ZNSt3__16vectorIbNS_9allocatorIbEEE9push_backERKb;
+ _ZNSt3__16vectorIbNS_9allocatorIbEEEaSERKS3_;
+ _ZNSt3__16vectorIdNS_9allocatorIdEEE6assignIPdEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIdNS_15iterator_traitsIS7_E9referenceEEE5valueEvE4typeES7_S7_;
+ _ZNSt3__16vectorIdNS_9allocatorIdEEE6insertIPKdEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIdNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPdEEE4typeENSC_IS6_EES8_S8_;
+ _ZNSt3__16vectorIDsNS_9allocatorIDsEEE24__emplace_back_slow_pathIJDsEEEvDpOT_;
+ _ZNSt3__16vectorIDsNS_9allocatorIDsEEE7reserveEm;
+ _ZNSt3__16vectorIfNS_9allocatorIfEEE6insertIPKfEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIfNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPfEEE4typeENSC_IS6_EES8_S8_;
+ _ZNSt3__16vectorIhNS_9allocatorIhEEE6insertIPKhEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIhNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPhEEE4typeENSC_IS6_EES8_S8_;
+ _ZNSt3__16vectorIiNS_9allocatorIiEEE6assignIPiEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIiNS_15iterator_traitsIS7_E9referenceEEE5valueEvE4typeES7_S7_;
+ _ZNSt3__16vectorIiNS_9allocatorIiEEE6insertIPKiEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIiNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPiEEE4typeENSC_IS6_EES8_S8_;
+ _ZNSt3__16vectorIlNS_9allocatorIlEEE6assignIPlEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIlNS_15iterator_traitsIS7_E9referenceEEE5valueEvE4typeES7_S7_;
+ _ZNSt3__16vectorImNS_9allocatorImEEE6insertIPKmEENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleImNS_15iterator_traitsIS8_E9referenceEEE5valueENS_11__wrap_iterIPmEEE4typeENSC_IS6_EES8_S8_;
+ _ZNSt3__16vectorIN7android2os16ServiceDebugInfoENS_9allocatorIS3_EEE8__appendEm;
+ _ZNSt3__16vectorIN7android2spINS1_10RpcSession13RpcConnectionEEENS_9allocatorIS5_EEE21__push_back_slow_pathIRKS5_EEvOT_;
+ _ZNSt3__16vectorIN7android2spINS1_10RpcSessionEEENS_9allocatorIS4_EEE21__push_back_slow_pathIRKS4_EEvOT_;
+ _ZNSt3__16vectorIN7android2spINS1_7IBinderEEENS_9allocatorIS4_EEE21__push_back_slow_pathIRKS4_EEvOT_;
+ _ZNSt3__16vectorIN7android2spINS1_7IBinderEEENS_9allocatorIS4_EEE8__appendEm;
+ _ZNSt3__16vectorIN7android4base14unique_fd_implINS2_13DefaultCloserEEENS_9allocatorIS5_EEE8__appendEm;
+ _ZNSt3__16vectorIN7android8RpcState10BinderNode9AsyncTodoENS_9allocatorIS4_EEE21__push_back_slow_pathIS4_EEvOT_;
+ _ZNSt3__16vectorIN7android8String16ENS_9allocatorIS2_EEE6assignIPS2_EENS_9enable_ifIXaasr21__is_forward_iteratorIT_EE5valuesr16is_constructibleIS2_NS_15iterator_traitsIS9_E9referenceEEE5valueEvE4typeES9_S9_;
+ _ZNSt3__16vectorIN7android8String16ENS_9allocatorIS2_EEE8__appendEm;
+ _ZNSt3__16vectorINS_10unique_ptrIN7android8String16ENS_14default_deleteIS3_EEEENS_9allocatorIS6_EEE8__appendEm;
+ _ZNSt3__16vectorINS_10unique_ptrINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS_14default_deleteIS7_EEEENS5_ISA_EEE8__appendEm;
+ _ZNSt3__16vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEE8__appendEm;
+ _ZNSt3__16vectorINS_8optionalIN7android8String16EEENS_9allocatorIS4_EEE8__appendEm;
+ _ZNSt3__16vectorINS_8optionalINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEENS5_IS8_EEE8__appendEm;
+ _ZTCN7android10AllocationE0_NS_10IInterfaceE;
+ _ZTCN7android10AllocationE0_NS_10MemoryBaseE;
+ _ZTCN7android10AllocationE0_NS_11BnInterfaceINS_7IMemoryEEE;
+ _ZTCN7android10AllocationE0_NS_7IMemoryE;
+ _ZTCN7android10AllocationE0_NS_8BnMemoryE;
+ _ZTCN7android10AllocationE8_NS_7BBinderE;
+ _ZTCN7android10AllocationE8_NS_7IBinderE;
+ _ZTCN7android10MemoryBaseE0_NS_10IInterfaceE;
+ _ZTCN7android10MemoryBaseE0_NS_11BnInterfaceINS_7IMemoryEEE;
+ _ZTCN7android10MemoryBaseE0_NS_7IMemoryE;
+ _ZTCN7android10MemoryBaseE0_NS_8BnMemoryE;
+ _ZTCN7android10MemoryBaseE8_NS_7BBinderE;
+ _ZTCN7android10MemoryBaseE8_NS_7IBinderE;
+ _ZTCN7android10PoolThreadE0_NS_6ThreadE;
+ _ZTCN7android11IMemoryHeapE0_NS_10IInterfaceE;
+ _ZTCN7android12BnMemoryHeapE0_NS_10IInterfaceE;
+ _ZTCN7android12BnMemoryHeapE0_NS_11BnInterfaceINS_11IMemoryHeapEEE;
+ _ZTCN7android12BnMemoryHeapE0_NS_11IMemoryHeapE;
+ _ZTCN7android12BnMemoryHeapE8_NS_7BBinderE;
+ _ZTCN7android12BnMemoryHeapE8_NS_7IBinderE;
+ _ZTCN7android12BpMemoryHeapE0_NS_10IInterfaceE;
+ _ZTCN7android12BpMemoryHeapE0_NS_11BpInterfaceINS_11IMemoryHeapEEE;
+ _ZTCN7android12BpMemoryHeapE0_NS_11IMemoryHeapE;
+ _ZTCN7android12BpMemoryHeapE8_NS_9BpRefBaseE;
+ _ZTCN7android14IShellCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android14MemoryHeapBaseE64_NS_10IInterfaceE;
+ _ZTCN7android14MemoryHeapBaseE64_NS_11BnInterfaceINS_11IMemoryHeapEEE;
+ _ZTCN7android14MemoryHeapBaseE64_NS_11IMemoryHeapE;
+ _ZTCN7android14MemoryHeapBaseE64_NS_12BnMemoryHeapE;
+ _ZTCN7android14MemoryHeapBaseE72_NS_7BBinderE;
+ _ZTCN7android14MemoryHeapBaseE72_NS_7IBinderE;
+ _ZTCN7android15BnShellCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android15BnShellCallbackE0_NS_11BnInterfaceINS_14IShellCallbackEEE;
+ _ZTCN7android15BnShellCallbackE0_NS_14IShellCallbackE;
+ _ZTCN7android15BnShellCallbackE8_NS_7BBinderE;
+ _ZTCN7android15BnShellCallbackE8_NS_7IBinderE;
+ _ZTCN7android15BpShellCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android15BpShellCallbackE0_NS_11BpInterfaceINS_14IShellCallbackEEE;
+ _ZTCN7android15BpShellCallbackE0_NS_14IShellCallbackE;
+ _ZTCN7android15BpShellCallbackE8_NS_9BpRefBaseE;
+ _ZTCN7android15IResultReceiverE0_NS_10IInterfaceE;
+ _ZTCN7android15IServiceManagerE0_NS_10IInterfaceE;
+ _ZTCN7android16BnResultReceiverE0_NS_10IInterfaceE;
+ _ZTCN7android16BnResultReceiverE0_NS_11BnInterfaceINS_15IResultReceiverEEE;
+ _ZTCN7android16BnResultReceiverE0_NS_15IResultReceiverE;
+ _ZTCN7android16BnResultReceiverE8_NS_7BBinderE;
+ _ZTCN7android16BnResultReceiverE8_NS_7IBinderE;
+ _ZTCN7android16BpResultReceiverE0_NS_10IInterfaceE;
+ _ZTCN7android16BpResultReceiverE0_NS_11BpInterfaceINS_15IResultReceiverEEE;
+ _ZTCN7android16BpResultReceiverE0_NS_15IResultReceiverE;
+ _ZTCN7android16BpResultReceiverE8_NS_9BpRefBaseE;
+ _ZTCN7android18ServiceManagerShimE0_NS_10IInterfaceE;
+ _ZTCN7android18ServiceManagerShimE0_NS_15IServiceManagerE;
+ _ZTCN7android2os15IClientCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android2os15IServiceManagerE0_NS_10IInterfaceE;
+ _ZTCN7android2os16BnClientCallbackE0_NS0_15IClientCallbackE;
+ _ZTCN7android2os16BnClientCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android2os16BnClientCallbackE0_NS_11BnInterfaceINS0_15IClientCallbackEEE;
+ _ZTCN7android2os16BnClientCallbackE8_NS_7BBinderE;
+ _ZTCN7android2os16BnClientCallbackE8_NS_7IBinderE;
+ _ZTCN7android2os16BnServiceManagerE0_NS0_15IServiceManagerE;
+ _ZTCN7android2os16BnServiceManagerE0_NS_10IInterfaceE;
+ _ZTCN7android2os16BnServiceManagerE0_NS_11BnInterfaceINS0_15IServiceManagerEEE;
+ _ZTCN7android2os16BnServiceManagerE8_NS_7BBinderE;
+ _ZTCN7android2os16BnServiceManagerE8_NS_7IBinderE;
+ _ZTCN7android2os16BpClientCallbackE0_NS0_15IClientCallbackE;
+ _ZTCN7android2os16BpClientCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android2os16BpClientCallbackE0_NS_11BpInterfaceINS0_15IClientCallbackEEE;
+ _ZTCN7android2os16BpClientCallbackE8_NS_9BpRefBaseE;
+ _ZTCN7android2os16BpServiceManagerE0_NS0_15IServiceManagerE;
+ _ZTCN7android2os16BpServiceManagerE0_NS_10IInterfaceE;
+ _ZTCN7android2os16BpServiceManagerE0_NS_11BpInterfaceINS0_15IServiceManagerEEE;
+ _ZTCN7android2os16BpServiceManagerE8_NS_9BpRefBaseE;
+ _ZTCN7android2os16IServiceCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android2os17BnServiceCallbackE0_NS0_16IServiceCallbackE;
+ _ZTCN7android2os17BnServiceCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android2os17BnServiceCallbackE0_NS_11BnInterfaceINS0_16IServiceCallbackEEE;
+ _ZTCN7android2os17BnServiceCallbackE8_NS_7BBinderE;
+ _ZTCN7android2os17BnServiceCallbackE8_NS_7IBinderE;
+ _ZTCN7android2os17BpServiceCallbackE0_NS0_16IServiceCallbackE;
+ _ZTCN7android2os17BpServiceCallbackE0_NS_10IInterfaceE;
+ _ZTCN7android2os17BpServiceCallbackE0_NS_11BpInterfaceINS0_16IServiceCallbackEEE;
+ _ZTCN7android2os17BpServiceCallbackE8_NS_9BpRefBaseE;
+ _ZTCN7android6binder8internal25ClientCounterCallbackImplE0_NS_10IInterfaceE;
+ _ZTCN7android6binder8internal25ClientCounterCallbackImplE0_NS_11BnInterfaceINS_2os15IClientCallbackEEE;
+ _ZTCN7android6binder8internal25ClientCounterCallbackImplE0_NS_2os15IClientCallbackE;
+ _ZTCN7android6binder8internal25ClientCounterCallbackImplE0_NS_2os16BnClientCallbackE;
+ _ZTCN7android6binder8internal25ClientCounterCallbackImplE8_NS_7BBinderE;
+ _ZTCN7android6binder8internal25ClientCounterCallbackImplE8_NS_7IBinderE;
+ _ZTCN7android7BBinderE0_NS_7IBinderE;
+ _ZTCN7android7content2pm21IPackageManagerNativeE0_NS_10IInterfaceE;
+ _ZTCN7android7content2pm22BnPackageManagerNativeE0_NS_10IInterfaceE;
+ _ZTCN7android7content2pm22BnPackageManagerNativeE0_NS_11BnInterfaceINS1_21IPackageManagerNativeEEE;
+ _ZTCN7android7content2pm22BnPackageManagerNativeE0_NS1_21IPackageManagerNativeE;
+ _ZTCN7android7content2pm22BnPackageManagerNativeE8_NS_7BBinderE;
+ _ZTCN7android7content2pm22BnPackageManagerNativeE8_NS_7IBinderE;
+ _ZTCN7android7content2pm22BpPackageManagerNativeE0_NS_10IInterfaceE;
+ _ZTCN7android7content2pm22BpPackageManagerNativeE0_NS_11BpInterfaceINS1_21IPackageManagerNativeEEE;
+ _ZTCN7android7content2pm22BpPackageManagerNativeE0_NS1_21IPackageManagerNativeE;
+ _ZTCN7android7content2pm22BpPackageManagerNativeE8_NS_9BpRefBaseE;
+ _ZTCN7android7content2pm22IPackageChangeObserverE0_NS_10IInterfaceE;
+ _ZTCN7android7content2pm23BnPackageChangeObserverE0_NS_10IInterfaceE;
+ _ZTCN7android7content2pm23BnPackageChangeObserverE0_NS_11BnInterfaceINS1_22IPackageChangeObserverEEE;
+ _ZTCN7android7content2pm23BnPackageChangeObserverE0_NS1_22IPackageChangeObserverE;
+ _ZTCN7android7content2pm23BnPackageChangeObserverE8_NS_7BBinderE;
+ _ZTCN7android7content2pm23BnPackageChangeObserverE8_NS_7IBinderE;
+ _ZTCN7android7content2pm23BpPackageChangeObserverE0_NS_10IInterfaceE;
+ _ZTCN7android7content2pm23BpPackageChangeObserverE0_NS_11BpInterfaceINS1_22IPackageChangeObserverEEE;
+ _ZTCN7android7content2pm23BpPackageChangeObserverE0_NS1_22IPackageChangeObserverE;
+ _ZTCN7android7content2pm23BpPackageChangeObserverE8_NS_9BpRefBaseE;
+ _ZTCN7android7IMemoryE0_NS_10IInterfaceE;
+ _ZTCN7android8BnMemoryE0_NS_10IInterfaceE;
+ _ZTCN7android8BnMemoryE0_NS_11BnInterfaceINS_7IMemoryEEE;
+ _ZTCN7android8BnMemoryE0_NS_7IMemoryE;
+ _ZTCN7android8BnMemoryE8_NS_7BBinderE;
+ _ZTCN7android8BnMemoryE8_NS_7IBinderE;
+ _ZTCN7android8BpBinderE0_NS_7IBinderE;
+ _ZTCN7android8BpMemoryE0_NS_10IInterfaceE;
+ _ZTCN7android8BpMemoryE0_NS_11BpInterfaceINS_7IMemoryEEE;
+ _ZTCN7android8BpMemoryE0_NS_7IMemoryE;
+ _ZTCN7android8BpMemoryE8_NS_9BpRefBaseE;
+ _ZTCN7android9HeapCacheE0_NS_7IBinder14DeathRecipientE;
+ _ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE0_NS_13basic_istreamIcS2_EE;
+ _ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE0_NS_14basic_iostreamIcS2_EE;
+ _ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE16_NS_13basic_ostreamIcS2_EE;
+ _ZThn8_N7android10AllocationD0Ev;
+ _ZThn8_N7android10AllocationD1Ev;
+ _ZThn8_N7android10MemoryBaseD0Ev;
+ _ZThn8_N7android10MemoryBaseD1Ev;
+ _ZThn8_N7android12BnMemoryHeap10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZThn8_N7android12BnMemoryHeapD0Ev;
+ _ZThn8_N7android12BnMemoryHeapD1Ev;
+ _ZThn8_N7android12BpMemoryHeapD0Ev;
+ _ZThn8_N7android12BpMemoryHeapD1Ev;
+ _ZThn8_N7android15BnShellCallback10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZThn8_N7android16BnResultReceiver10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZThn8_N7android2os16BnClientCallback10onTransactEjRKNS_6ParcelEPS2_j;
+ _ZThn8_N7android2os16BnServiceManager10onTransactEjRKNS_6ParcelEPS2_j;
+ _ZThn8_N7android2os17BnServiceCallback10onTransactEjRKNS_6ParcelEPS2_j;
+ _ZThn8_N7android7content2pm22BnPackageManagerNative10onTransactEjRKNS_6ParcelEPS3_j;
+ _ZThn8_N7android7content2pm23BnPackageChangeObserver10onTransactEjRKNS_6ParcelEPS3_j;
+ _ZThn8_N7android8BnMemory10onTransactEjRKNS_6ParcelEPS1_j;
+ _ZThn8_N7android8BnMemoryD0Ev;
+ _ZThn8_N7android8BnMemoryD1Ev;
+ _ZThn8_N7android8BpMemoryD0Ev;
+ _ZThn8_N7android8BpMemoryD1Ev;
+ _ZTTN7android10AllocationE;
+ _ZTTN7android10IInterfaceE;
+ _ZTTN7android10MemoryBaseE;
+ _ZTTN7android10PoolThreadE;
+ _ZTTN7android10RpcSessionE;
+ _ZTTN7android11IMemoryHeapE;
+ _ZTTN7android12BnMemoryHeapE;
+ _ZTTN7android12BpMemoryHeapE;
+ _ZTTN7android12ProcessStateE;
+ _ZTTN7android14IShellCallbackE;
+ _ZTTN7android14MemoryHeapBaseE;
+ _ZTTN7android15BnShellCallbackE;
+ _ZTTN7android15BpShellCallbackE;
+ _ZTTN7android15IResultReceiverE;
+ _ZTTN7android15IServiceManagerE;
+ _ZTTN7android16BnResultReceiverE;
+ _ZTTN7android16BpResultReceiverE;
+ _ZTTN7android18ServiceManagerShimE;
+ _ZTTN7android2os15IClientCallbackE;
+ _ZTTN7android2os15IServiceManagerE;
+ _ZTTN7android2os16BnClientCallbackE;
+ _ZTTN7android2os16BnServiceManagerE;
+ _ZTTN7android2os16BpClientCallbackE;
+ _ZTTN7android2os16BpServiceManagerE;
+ _ZTTN7android2os16IServiceCallbackE;
+ _ZTTN7android2os17BnServiceCallbackE;
+ _ZTTN7android2os17BpServiceCallbackE;
+ _ZTTN7android6binder8internal25ClientCounterCallbackImplE;
+ _ZTTN7android7BBinderE;
+ _ZTTN7android7content2pm21IPackageManagerNativeE;
+ _ZTTN7android7content2pm22BnPackageManagerNativeE;
+ _ZTTN7android7content2pm22BpPackageManagerNativeE;
+ _ZTTN7android7content2pm22IPackageChangeObserverE;
+ _ZTTN7android7content2pm23BnPackageChangeObserverE;
+ _ZTTN7android7content2pm23BpPackageChangeObserverE;
+ _ZTTN7android7IBinderE;
+ _ZTTN7android7IMemoryE;
+ _ZTTN7android8BnMemoryE;
+ _ZTTN7android8BpBinderE;
+ _ZTTN7android8BpMemoryE;
+ _ZTTN7android9BpRefBaseE;
+ _ZTTN7android9HeapCacheE;
+ _ZTTN7android9RpcServerE;
+ _ZTTNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE;
+ _ZTv0_n24_N7android10AllocationD0Ev;
+ _ZTv0_n24_N7android10AllocationD1Ev;
+ _ZTv0_n24_N7android10IInterfaceD0Ev;
+ _ZTv0_n24_N7android10IInterfaceD1Ev;
+ _ZTv0_n24_N7android10MemoryBaseD0Ev;
+ _ZTv0_n24_N7android10MemoryBaseD1Ev;
+ _ZTv0_n24_N7android10RpcSessionD0Ev;
+ _ZTv0_n24_N7android10RpcSessionD1Ev;
+ _ZTv0_n24_N7android11IMemoryHeapD0Ev;
+ _ZTv0_n24_N7android11IMemoryHeapD1Ev;
+ _ZTv0_n24_N7android12BnMemoryHeapD0Ev;
+ _ZTv0_n24_N7android12BnMemoryHeapD1Ev;
+ _ZTv0_n24_N7android12BpMemoryHeapD0Ev;
+ _ZTv0_n24_N7android12BpMemoryHeapD1Ev;
+ _ZTv0_n24_N7android12ProcessStateD0Ev;
+ _ZTv0_n24_N7android12ProcessStateD1Ev;
+ _ZTv0_n24_N7android14IShellCallbackD0Ev;
+ _ZTv0_n24_N7android14IShellCallbackD1Ev;
+ _ZTv0_n24_N7android14MemoryHeapBaseD0Ev;
+ _ZTv0_n24_N7android14MemoryHeapBaseD1Ev;
+ _ZTv0_n24_N7android15IResultReceiverD0Ev;
+ _ZTv0_n24_N7android15IResultReceiverD1Ev;
+ _ZTv0_n24_N7android15IServiceManagerD0Ev;
+ _ZTv0_n24_N7android15IServiceManagerD1Ev;
+ _ZTv0_n24_N7android2os15IClientCallbackD0Ev;
+ _ZTv0_n24_N7android2os15IClientCallbackD1Ev;
+ _ZTv0_n24_N7android2os15IServiceManagerD0Ev;
+ _ZTv0_n24_N7android2os15IServiceManagerD1Ev;
+ _ZTv0_n24_N7android2os16IServiceCallbackD0Ev;
+ _ZTv0_n24_N7android2os16IServiceCallbackD1Ev;
+ _ZTv0_n24_N7android7BBinderD0Ev;
+ _ZTv0_n24_N7android7BBinderD1Ev;
+ _ZTv0_n24_N7android7content2pm21IPackageManagerNativeD0Ev;
+ _ZTv0_n24_N7android7content2pm21IPackageManagerNativeD1Ev;
+ _ZTv0_n24_N7android7content2pm22IPackageChangeObserverD0Ev;
+ _ZTv0_n24_N7android7content2pm22IPackageChangeObserverD1Ev;
+ _ZTv0_n24_N7android7IBinderD0Ev;
+ _ZTv0_n24_N7android7IBinderD1Ev;
+ _ZTv0_n24_N7android7IMemoryD0Ev;
+ _ZTv0_n24_N7android7IMemoryD1Ev;
+ _ZTv0_n24_N7android8BnMemoryD0Ev;
+ _ZTv0_n24_N7android8BnMemoryD1Ev;
+ _ZTv0_n24_N7android8BpBinderD0Ev;
+ _ZTv0_n24_N7android8BpBinderD1Ev;
+ _ZTv0_n24_N7android8BpMemoryD0Ev;
+ _ZTv0_n24_N7android8BpMemoryD1Ev;
+ _ZTv0_n24_N7android9BpRefBaseD0Ev;
+ _ZTv0_n24_N7android9BpRefBaseD1Ev;
+ _ZTv0_n24_N7android9HeapCacheD0Ev;
+ _ZTv0_n24_N7android9HeapCacheD1Ev;
+ _ZTv0_n24_N7android9RpcServerD0Ev;
+ _ZTv0_n24_N7android9RpcServerD1Ev;
+ _ZTv0_n32_N7android14MemoryHeapBaseD0Ev;
+ _ZTv0_n32_N7android14MemoryHeapBaseD1Ev;
+ _ZTv0_n32_N7android8BpBinder10onFirstRefEv;
+ _ZTv0_n32_N7android9BpRefBase10onFirstRefEv;
+ _ZTv0_n40_N7android8BpBinder15onLastStrongRefEPKv;
+ _ZTv0_n40_N7android9BpRefBase15onLastStrongRefEPKv;
+ _ZTv0_n48_N7android8BpBinder20onIncStrongAttemptedEjPKv;
+ _ZTv0_n48_N7android9BpRefBase20onIncStrongAttemptedEjPKv;
+ _ZTv0_n56_NK7android14MemoryHeapBase9getHeapIDEv;
+ _ZTv0_n64_NK7android14MemoryHeapBase7getBaseEv;
+ _ZTv0_n72_NK7android14MemoryHeapBase7getSizeEv;
+ _ZTv0_n80_NK7android14MemoryHeapBase8getFlagsEv;
+ _ZTv0_n88_NK7android14MemoryHeapBase9getOffsetEv;
+ _ZTVN7android10AllocationE;
+ _ZTVN7android10IInterfaceE;
+ _ZTVN7android10MemoryBaseE;
+ _ZTVN7android10PoolThreadE;
+ _ZTVN7android10RpcSession13RpcConnectionE;
+ _ZTVN7android10RpcSessionE;
+ _ZTVN7android10TextOutputE;
+ _ZTVN7android11IMemoryHeapE;
+ _ZTVN7android12BnMemoryHeapE;
+ _ZTVN7android12BpMemoryHeapE;
+ _ZTVN7android12FdTextOutputE;
+ _ZTVN7android12MemoryDealerE;
+ _ZTVN7android12ProcessStateE;
+ _ZTVN7android12SortedVectorINS_16key_value_pair_tINS_2wpINS_7IBinderEEENS_9HeapCache11heap_info_tEEEEE;
+ _ZTVN7android12SortedVectorINS_16key_value_pair_tIPKvNS_8BpBinder13ObjectManager7entry_tEEEEE;
+ _ZTVN7android13LogTextOutputE;
+ _ZTVN7android14IShellCallbackE;
+ _ZTVN7android14MemoryHeapBaseE;
+ _ZTVN7android15BnShellCallbackE;
+ _ZTVN7android15BpShellCallbackE;
+ _ZTVN7android15IResultReceiverE;
+ _ZTVN7android15IServiceManagerE;
+ _ZTVN7android16BnResultReceiverE;
+ _ZTVN7android16BpResultReceiverE;
+ _ZTVN7android17InetSocketAddressE;
+ _ZTVN7android17UnixSocketAddressE;
+ _ZTVN7android18BufferedTextOutput11BufferStateE;
+ _ZTVN7android18BufferedTextOutputE;
+ _ZTVN7android18ServiceManagerShimE;
+ _ZTVN7android18VsockSocketAddressE;
+ _ZTVN7android2os15IClientCallbackE;
+ _ZTVN7android2os15IServiceManagerE;
+ _ZTVN7android2os16BnClientCallbackE;
+ _ZTVN7android2os16BnServiceManagerE;
+ _ZTVN7android2os16BpClientCallbackE;
+ _ZTVN7android2os16BpServiceManagerE;
+ _ZTVN7android2os16IServiceCallbackE;
+ _ZTVN7android2os16ParcelableHolderE;
+ _ZTVN7android2os16ServiceDebugInfoE;
+ _ZTVN7android2os17BnServiceCallbackE;
+ _ZTVN7android2os17BpServiceCallbackE;
+ _ZTVN7android2os17PersistableBundleE;
+ _ZTVN7android2os20ParcelFileDescriptorE;
+ _ZTVN7android6binder8internal25ClientCounterCallbackImplE;
+ _ZTVN7android6VectorIiEE;
+ _ZTVN7android6VectorINS_12ProcessState12handle_entryEEE;
+ _ZTVN7android6VectorINS_2spINS_18BufferedTextOutput11BufferStateEEEEE;
+ _ZTVN7android6VectorINS_8BpBinder8ObituaryEEE;
+ _ZTVN7android6VectorINS_8String16EEE;
+ _ZTVN7android6VectorIPNS_7BBinderEEE;
+ _ZTVN7android6VectorIPNS_7RefBase12weakref_typeEEE;
+ _ZTVN7android6VectorIPNS_7RefBaseEEE;
+ _ZTVN7android7BBinderE;
+ _ZTVN7android7content2pm18PackageChangeEventE;
+ _ZTVN7android7content2pm21IPackageManagerNativeE;
+ _ZTVN7android7content2pm22BnPackageManagerNativeE;
+ _ZTVN7android7content2pm22BpPackageManagerNativeE;
+ _ZTVN7android7content2pm22IPackageChangeObserverE;
+ _ZTVN7android7content2pm23BnPackageChangeObserverE;
+ _ZTVN7android7content2pm23BpPackageChangeObserverE;
+ _ZTVN7android7IBinderE;
+ _ZTVN7android7IMemoryE;
+ _ZTVN7android8BnMemoryE;
+ _ZTVN7android8BpBinderE;
+ _ZTVN7android8BpMemoryE;
+ _ZTVN7android9BpRefBaseE;
+ _ZTVN7android9HeapCacheE;
+ _ZTVN7android9RpcServerE;
+ _ZTvn8_n32_N7android14MemoryHeapBaseD0Ev;
+ _ZTvn8_n32_N7android14MemoryHeapBaseD1Ev;
+ _ZTVNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEEE;
+ _ZTVNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE;
+ _ZTVNSt3__120__shared_ptr_emplaceIN7android14RpcWireAddressENS_9allocatorIS2_EEEE;
+ _ZTVNSt3__120__shared_ptr_emplaceIN7android6binder8internal21ClientCounterCallbackENS_9allocatorIS4_EEEE;
+ local:
+ *;
+};
diff --git a/libs/binder/libbinder.map b/libs/binder/libbinder.map
deleted file mode 100644
index 9ca14bc..0000000
--- a/libs/binder/libbinder.map
+++ /dev/null
@@ -1,5 +0,0 @@
-# b/190148312: Populate with correct list of ABI symbols
-LIBBINDER {
- global:
- *;
-};
diff --git a/libs/binder/rust/src/native.rs b/libs/binder/rust/src/native.rs
index 3b3fd08..3920129 100644
--- a/libs/binder/rust/src/native.rs
+++ b/libs/binder/rust/src/native.rs
@@ -24,7 +24,6 @@
use std::ffi::{c_void, CString};
use std::mem::ManuallyDrop;
use std::ops::Deref;
-use std::ptr;
/// Rust wrapper around Binder remotable objects.
///
@@ -273,7 +272,7 @@
/// Must be called with a valid pointer to a `T` object. After this call,
/// the pointer will be invalid and should not be dereferenced.
unsafe extern "C" fn on_destroy(object: *mut c_void) {
- ptr::drop_in_place(object as *mut T)
+ Box::from_raw(object as *mut T);
}
/// Called whenever a new, local `AIBinder` object is needed of a specific
diff --git a/libs/binder/tests/Android.bp b/libs/binder/tests/Android.bp
index ec231b2..fb84f04 100644
--- a/libs/binder/tests/Android.bp
+++ b/libs/binder/tests/Android.bp
@@ -156,6 +156,10 @@
],
test_suites: ["general-tests"],
require_root: true,
+ // Prevent the unit test target from running on sc-dev as it's not ready.
+ test_options: {
+ unit_test: false,
+ },
}
cc_benchmark {
diff --git a/libs/gui/BLASTBufferQueue.cpp b/libs/gui/BLASTBufferQueue.cpp
index 430f971..dc943a5 100644
--- a/libs/gui/BLASTBufferQueue.cpp
+++ b/libs/gui/BLASTBufferQueue.cpp
@@ -29,9 +29,10 @@
#include <gui/IProducerListener.h>
#include <gui/Surface.h>
#include <utils/Singleton.h>
-
#include <utils/Trace.h>
+#include <private/gui/ComposerService.h>
+
#include <chrono>
using namespace std::chrono_literals;
@@ -159,6 +160,9 @@
mBufferItemConsumer->setDefaultBufferFormat(convertBufferFormat(format));
mBufferItemConsumer->setBlastBufferQueue(this);
+ ComposerService::getComposerService()->getMaxAcquiredBufferCount(&mMaxAcquiredBuffers);
+ mBufferItemConsumer->setMaxAcquiredBufferCount(mMaxAcquiredBuffers);
+
mTransformHint = mSurfaceControl->getTransformHint();
mBufferItemConsumer->setTransformHint(mTransformHint);
SurfaceComposerClient::Transaction()
@@ -302,35 +306,60 @@
// So we pass in a weak pointer to the BBQ and if it still alive, then we release the buffer.
// Otherwise, this is a no-op.
static void releaseBufferCallbackThunk(wp<BLASTBufferQueue> context, uint64_t graphicBufferId,
- const sp<Fence>& releaseFence) {
+ const sp<Fence>& releaseFence, uint32_t transformHint,
+ uint32_t currentMaxAcquiredBufferCount) {
sp<BLASTBufferQueue> blastBufferQueue = context.promote();
ALOGV("releaseBufferCallbackThunk graphicBufferId=%" PRIu64 " blastBufferQueue=%s",
graphicBufferId, blastBufferQueue ? "alive" : "dead");
if (blastBufferQueue) {
- blastBufferQueue->releaseBufferCallback(graphicBufferId, releaseFence);
+ blastBufferQueue->releaseBufferCallback(graphicBufferId, releaseFence, transformHint,
+ currentMaxAcquiredBufferCount);
}
}
void BLASTBufferQueue::releaseBufferCallback(uint64_t graphicBufferId,
- const sp<Fence>& releaseFence) {
+ const sp<Fence>& releaseFence, uint32_t transformHint,
+ uint32_t currentMaxAcquiredBufferCount) {
ATRACE_CALL();
std::unique_lock _lock{mMutex};
BQA_LOGV("releaseBufferCallback graphicBufferId=%" PRIu64, graphicBufferId);
if (mSurfaceControl != nullptr) {
- mTransformHint = mSurfaceControl->getTransformHint();
+ mTransformHint = transformHint;
+ mSurfaceControl->setTransformHint(transformHint);
mBufferItemConsumer->setTransformHint(mTransformHint);
}
- auto it = mSubmitted.find(graphicBufferId);
- if (it == mSubmitted.end()) {
- BQA_LOGE("ERROR: releaseBufferCallback without corresponding submitted buffer %" PRIu64,
- graphicBufferId);
- return;
+ // Calculate how many buffers we need to hold before we release them back
+ // to the buffer queue. This will prevent higher latency when we are running
+ // on a lower refresh rate than the max supported. We only do that for EGL
+ // clients as others don't care about latency
+ const bool isEGL = [&] {
+ const auto it = mSubmitted.find(graphicBufferId);
+ return it != mSubmitted.end() && it->second.mApi == NATIVE_WINDOW_API_EGL;
+ }();
+
+ const auto numPendingBuffersToHold =
+ isEGL ? std::max(0u, mMaxAcquiredBuffers - currentMaxAcquiredBufferCount) : 0;
+ mPendingRelease.emplace_back(ReleasedBuffer{graphicBufferId, releaseFence});
+
+ // Release all buffers that are beyond the ones that we need to hold
+ while (mPendingRelease.size() > numPendingBuffersToHold) {
+ const auto releaseBuffer = mPendingRelease.front();
+ mPendingRelease.pop_front();
+ auto it = mSubmitted.find(releaseBuffer.bufferId);
+ if (it == mSubmitted.end()) {
+ BQA_LOGE("ERROR: releaseBufferCallback without corresponding submitted buffer %" PRIu64,
+ graphicBufferId);
+ return;
+ }
+
+ mBufferItemConsumer->releaseBuffer(it->second, releaseBuffer.releaseFence);
+ mSubmitted.erase(it);
}
- mBufferItemConsumer->releaseBuffer(it->second, releaseFence);
- mSubmitted.erase(it);
+ ATRACE_INT("PendingRelease", mPendingRelease.size());
+
mNumAcquired--;
ATRACE_INT(mPendingBufferTrace.c_str(), mNumFrameAvailable + mNumAcquired);
processNextBufferLocked(false /* useNextTransaction */);
@@ -413,7 +442,8 @@
auto releaseBufferCallback =
std::bind(releaseBufferCallbackThunk, wp<BLASTBufferQueue>(this) /* callbackContext */,
- std::placeholders::_1, std::placeholders::_2);
+ std::placeholders::_1, std::placeholders::_2, std::placeholders::_3,
+ std::placeholders::_4);
t->setBuffer(mSurfaceControl, buffer, releaseBufferCallback);
t->setDataspace(mSurfaceControl, static_cast<ui::Dataspace>(bufferItem.mDataSpace));
t->setHdrMetadata(mSurfaceControl, bufferItem.mHdrMetadata);
@@ -567,7 +597,7 @@
// includeExtraAcquire is true to include this buffer to the count. Since this depends on the state
// of the buffer, the next acquire may return with NO_BUFFER_AVAILABLE.
bool BLASTBufferQueue::maxBuffersAcquired(bool includeExtraAcquire) const {
- int maxAcquiredBuffers = MAX_ACQUIRED_BUFFERS + (includeExtraAcquire ? 2 : 1);
+ int maxAcquiredBuffers = mMaxAcquiredBuffers + (includeExtraAcquire ? 2 : 1);
return mNumAcquired == maxAcquiredBuffers;
}
diff --git a/libs/gui/ISurfaceComposer.cpp b/libs/gui/ISurfaceComposer.cpp
index 71e18a9..0d7795e 100644
--- a/libs/gui/ISurfaceComposer.cpp
+++ b/libs/gui/ISurfaceComposer.cpp
@@ -1215,16 +1215,17 @@
return reply.readInt32();
}
- status_t getExtraBufferCount(int* extraBuffers) const override {
+ status_t getMaxAcquiredBufferCount(int* buffers) const override {
Parcel data, reply;
data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor());
- status_t err = remote()->transact(BnSurfaceComposer::GET_EXTRA_BUFFER_COUNT, data, &reply);
+ status_t err =
+ remote()->transact(BnSurfaceComposer::GET_MAX_ACQUIRED_BUFFER_COUNT, data, &reply);
if (err != NO_ERROR) {
- ALOGE("getExtraBufferCount failed to read data: %s (%d)", strerror(-err), err);
+ ALOGE("getMaxAcquiredBufferCount failed to read data: %s (%d)", strerror(-err), err);
return err;
}
- return reply.readInt32(extraBuffers);
+ return reply.readInt32(buffers);
}
};
@@ -2069,14 +2070,14 @@
SAFE_PARCEL(reply->writeInt32, priority);
return NO_ERROR;
}
- case GET_EXTRA_BUFFER_COUNT: {
+ case GET_MAX_ACQUIRED_BUFFER_COUNT: {
CHECK_INTERFACE(ISurfaceComposer, data, reply);
- int extraBuffers = 0;
- int err = getExtraBufferCount(&extraBuffers);
+ int buffers = 0;
+ int err = getMaxAcquiredBufferCount(&buffers);
if (err != NO_ERROR) {
return err;
}
- SAFE_PARCEL(reply->writeInt32, extraBuffers);
+ SAFE_PARCEL(reply->writeInt32, buffers);
return NO_ERROR;
}
case OVERRIDE_HDR_TYPES: {
diff --git a/libs/gui/ITransactionCompletedListener.cpp b/libs/gui/ITransactionCompletedListener.cpp
index f74f91e..17499ec 100644
--- a/libs/gui/ITransactionCompletedListener.cpp
+++ b/libs/gui/ITransactionCompletedListener.cpp
@@ -119,6 +119,7 @@
SAFE_PARCEL(output->writeBool, false);
}
SAFE_PARCEL(output->writeUint32, transformHint);
+ SAFE_PARCEL(output->writeUint32, currentMaxAcquiredBufferCount);
SAFE_PARCEL(output->writeParcelable, eventStats);
SAFE_PARCEL(output->writeInt32, static_cast<int32_t>(jankData.size()));
for (const auto& data : jankData) {
@@ -138,6 +139,7 @@
SAFE_PARCEL(input->read, *previousReleaseFence);
}
SAFE_PARCEL(input->readUint32, &transformHint);
+ SAFE_PARCEL(input->readUint32, ¤tMaxAcquiredBufferCount);
SAFE_PARCEL(input->readParcelable, &eventStats);
int32_t jankData_size = 0;
@@ -251,10 +253,13 @@
stats);
}
- void onReleaseBuffer(uint64_t graphicBufferId, sp<Fence> releaseFence) override {
+ void onReleaseBuffer(uint64_t graphicBufferId, sp<Fence> releaseFence, uint32_t transformHint,
+ uint32_t currentMaxAcquiredBufferCount) override {
callRemoteAsync<decltype(
&ITransactionCompletedListener::onReleaseBuffer)>(Tag::ON_RELEASE_BUFFER,
- graphicBufferId, releaseFence);
+ graphicBufferId, releaseFence,
+ transformHint,
+ currentMaxAcquiredBufferCount);
}
};
diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp
index e117d11..821ec16 100644
--- a/libs/gui/Surface.cpp
+++ b/libs/gui/Surface.cpp
@@ -1501,9 +1501,6 @@
case NATIVE_WINDOW_SET_FRAME_TIMELINE_INFO:
res = dispatchSetFrameTimelineInfo(args);
break;
- case NATIVE_WINDOW_GET_EXTRA_BUFFER_COUNT:
- res = dispatchGetExtraBufferCount(args);
- break;
default:
res = NAME_NOT_FOUND;
break;
@@ -1853,14 +1850,6 @@
return setFrameTimelineInfo({frameTimelineVsyncId, inputEventId});
}
-int Surface::dispatchGetExtraBufferCount(va_list args) {
- ATRACE_CALL();
- auto extraBuffers = static_cast<int*>(va_arg(args, int*));
-
- ALOGV("Surface::dispatchGetExtraBufferCount");
- return getExtraBufferCount(extraBuffers);
-}
-
bool Surface::transformToDisplayInverse() const {
return (mTransform & NATIVE_WINDOW_TRANSFORM_INVERSE_DISPLAY) ==
NATIVE_WINDOW_TRANSFORM_INVERSE_DISPLAY;
@@ -2632,8 +2621,4 @@
return composerService()->setFrameTimelineInfo(mGraphicBufferProducer, frameTimelineInfo);
}
-status_t Surface::getExtraBufferCount(int* extraBuffers) const {
- return composerService()->getExtraBufferCount(extraBuffers);
-}
-
}; // namespace android
diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp
index 371454a..c69435d 100644
--- a/libs/gui/SurfaceComposerClient.cpp
+++ b/libs/gui/SurfaceComposerClient.cpp
@@ -182,12 +182,12 @@
void TransactionCompletedListener::addJankListener(const sp<JankDataListener>& listener,
sp<SurfaceControl> surfaceControl) {
- std::lock_guard<std::mutex> lock(mMutex);
+ std::scoped_lock<std::recursive_mutex> lock(mJankListenerMutex);
mJankListeners.insert({surfaceControl->getHandle(), listener});
}
void TransactionCompletedListener::removeJankListener(const sp<JankDataListener>& listener) {
- std::lock_guard<std::mutex> lock(mMutex);
+ std::scoped_lock<std::recursive_mutex> lock(mJankListenerMutex);
for (auto it = mJankListeners.begin(); it != mJankListeners.end();) {
if (it->second == listener) {
it = mJankListeners.erase(it);
@@ -210,13 +210,13 @@
void TransactionCompletedListener::addSurfaceStatsListener(void* context, void* cookie,
sp<SurfaceControl> surfaceControl, SurfaceStatsCallback listener) {
- std::lock_guard<std::mutex> lock(mMutex);
+ std::scoped_lock<std::recursive_mutex> lock(mSurfaceStatsListenerMutex);
mSurfaceStatsListeners.insert({surfaceControl->getHandle(),
SurfaceStatsCallbackEntry(context, cookie, listener)});
}
void TransactionCompletedListener::removeSurfaceStatsListener(void* context, void* cookie) {
- std::lock_guard<std::mutex> lock(mMutex);
+ std::scoped_lock<std::recursive_mutex> lock(mSurfaceStatsListenerMutex);
for (auto it = mSurfaceStatsListeners.begin(); it != mSurfaceStatsListeners.end();) {
auto [itContext, itCookie, itListener] = it->second;
if (itContext == context && itCookie == cookie) {
@@ -242,8 +242,6 @@
void TransactionCompletedListener::onTransactionCompleted(ListenerStats listenerStats) {
std::unordered_map<CallbackId, CallbackTranslation, CallbackIdHash> callbacksMap;
- std::multimap<sp<IBinder>, sp<JankDataListener>> jankListenersMap;
- std::multimap<sp<IBinder>, SurfaceStatsCallbackEntry> surfaceListeners;
{
std::lock_guard<std::mutex> lock(mMutex);
@@ -259,8 +257,6 @@
* sp<SurfaceControl> that could possibly exist for the callbacks.
*/
callbacksMap = mCallbacks;
- jankListenersMap = mJankListeners;
- surfaceListeners = mSurfaceStatsListeners;
for (const auto& transactionStats : listenerStats.transactionStats) {
for (auto& callbackId : transactionStats.callbackIds) {
mCallbacks.erase(callbackId);
@@ -331,7 +327,9 @@
callback(surfaceStats.previousBufferId,
surfaceStats.previousReleaseFence
? surfaceStats.previousReleaseFence
- : Fence::NO_FENCE);
+ : Fence::NO_FENCE,
+ surfaceStats.transformHint,
+ surfaceStats.currentMaxAcquiredBufferCount);
}
}
}
@@ -340,15 +338,26 @@
surfaceControlStats);
}
for (const auto& surfaceStats : transactionStats.surfaceStats) {
- auto listenerRange = surfaceListeners.equal_range(surfaceStats.surfaceControl);
- for (auto it = listenerRange.first; it != listenerRange.second; it++) {
- auto entry = it->second;
- entry.callback(entry.context, transactionStats.latchTime,
- transactionStats.presentFence, surfaceStats);
+ {
+ // Acquire surface stats listener lock such that we guarantee that after calling
+ // unregister, there won't be any further callback.
+ std::scoped_lock<std::recursive_mutex> lock(mSurfaceStatsListenerMutex);
+ auto listenerRange = mSurfaceStatsListeners.equal_range(
+ surfaceStats.surfaceControl);
+ for (auto it = listenerRange.first; it != listenerRange.second; it++) {
+ auto entry = it->second;
+ entry.callback(entry.context, transactionStats.latchTime,
+ transactionStats.presentFence, surfaceStats);
+ }
}
if (surfaceStats.jankData.empty()) continue;
- auto jankRange = jankListenersMap.equal_range(surfaceStats.surfaceControl);
+
+ // Acquire jank listener lock such that we guarantee that after calling unregister,
+ // there won't be any further callback.
+ std::scoped_lock<std::recursive_mutex> lock(mJankListenerMutex);
+ auto copy = mJankListeners;
+ auto jankRange = copy.equal_range(surfaceStats.surfaceControl);
for (auto it = jankRange.first; it != jankRange.second; it++) {
it->second->onJankDataAvailable(surfaceStats.jankData);
}
@@ -356,8 +365,9 @@
}
}
-void TransactionCompletedListener::onReleaseBuffer(uint64_t graphicBufferId,
- sp<Fence> releaseFence) {
+void TransactionCompletedListener::onReleaseBuffer(uint64_t graphicBufferId, sp<Fence> releaseFence,
+ uint32_t transformHint,
+ uint32_t currentMaxAcquiredBufferCount) {
ReleaseBufferCallback callback;
{
std::scoped_lock<std::mutex> lock(mMutex);
@@ -367,7 +377,7 @@
ALOGE("Could not call release buffer callback, buffer not found %" PRIu64, graphicBufferId);
return;
}
- callback(graphicBufferId, releaseFence);
+ callback(graphicBufferId, releaseFence, transformHint, currentMaxAcquiredBufferCount);
}
ReleaseBufferCallback TransactionCompletedListener::popReleaseBufferCallbackLocked(
diff --git a/libs/gui/SurfaceControl.cpp b/libs/gui/SurfaceControl.cpp
index d7c07b9..6529a4e 100644
--- a/libs/gui/SurfaceControl.cpp
+++ b/libs/gui/SurfaceControl.cpp
@@ -139,7 +139,7 @@
ISurfaceComposerClient::eOpaque);
mBbqChild = mClient->createSurface(String8("bbq-wrapper"), 0, 0, mFormat,
flags, mHandle, {}, &ignore);
- mBbq = new BLASTBufferQueue("bbq-adapter", mBbqChild, mWidth, mHeight, mFormat);
+ mBbq = sp<BLASTBufferQueue>::make("bbq-adapter", mBbqChild, mWidth, mHeight, mFormat);
// This surface is always consumed by SurfaceFlinger, so the
// producerControlledByApp value doesn't matter; using false.
diff --git a/libs/gui/include/gui/BLASTBufferQueue.h b/libs/gui/include/gui/BLASTBufferQueue.h
index 2ff78e9..cb0e65e 100644
--- a/libs/gui/include/gui/BLASTBufferQueue.h
+++ b/libs/gui/include/gui/BLASTBufferQueue.h
@@ -89,7 +89,8 @@
void transactionCallback(nsecs_t latchTime, const sp<Fence>& presentFence,
const std::vector<SurfaceControlStats>& stats);
- void releaseBufferCallback(uint64_t graphicBufferId, const sp<Fence>& releaseFence);
+ void releaseBufferCallback(uint64_t graphicBufferId, const sp<Fence>& releaseFence,
+ uint32_t transformHint, uint32_t currentMaxAcquiredBufferCount);
void setNextTransaction(SurfaceComposerClient::Transaction *t);
void mergeWithNextTransaction(SurfaceComposerClient::Transaction* t, uint64_t frameNumber);
void setTransactionCompleteCallback(uint64_t frameNumber,
@@ -132,7 +133,7 @@
// BufferQueue internally allows 1 more than
// the max to be acquired
- static const int MAX_ACQUIRED_BUFFERS = 1;
+ int32_t mMaxAcquiredBuffers = 1;
int32_t mNumFrameAvailable GUARDED_BY(mMutex);
int32_t mNumAcquired GUARDED_BY(mMutex);
@@ -141,6 +142,15 @@
// buffer or the buffer has been presented and a new buffer is ready to be presented.
std::unordered_map<uint64_t /* bufferId */, BufferItem> mSubmitted GUARDED_BY(mMutex);
+ // Keep a queue of the released buffers instead of immediately releasing
+ // the buffers back to the buffer queue. This would be controlled by SF
+ // setting the max acquired buffer count.
+ struct ReleasedBuffer {
+ uint64_t bufferId;
+ sp<Fence> releaseFence;
+ };
+ std::deque<ReleasedBuffer> mPendingRelease GUARDED_BY(mMutex);
+
ui::Size mSize GUARDED_BY(mMutex);
ui::Size mRequestedSize GUARDED_BY(mMutex);
int32_t mFormat GUARDED_BY(mMutex);
diff --git a/libs/gui/include/gui/ISurfaceComposer.h b/libs/gui/include/gui/ISurfaceComposer.h
index 439d90a..2a3f6a4 100644
--- a/libs/gui/include/gui/ISurfaceComposer.h
+++ b/libs/gui/include/gui/ISurfaceComposer.h
@@ -537,22 +537,21 @@
virtual int getGPUContextPriority() = 0;
/**
- * Gets the extra buffers a client would need to allocate if it passes
- * the Choreographer#getVsyncId with its buffers.
- *
- * When Choreographer#getVsyncId is passed to SurfaceFlinger, it is used
- * as an indication of when to latch the buffer. SurfaceFlinger will make
- * sure that it will give the app at least the time configured as the
- * 'appDuration' before trying to latch the buffer.
+ * Gets the number of buffers SurfaceFlinger would need acquire. This number
+ * would be propagated to the client via MIN_UNDEQUEUED_BUFFERS so that the
+ * client could allocate enough buffers to match SF expectations of the
+ * pipeline depth. SurfaceFlinger will make sure that it will give the app at
+ * least the time configured as the 'appDuration' before trying to latch
+ * the buffer.
*
* The total buffers needed for a given configuration is basically the
* numbers of vsyncs a single buffer is used across the stack. For the default
* configuration a buffer is held ~1 vsync by the app, ~1 vsync by SurfaceFlinger
* and 1 vsync by the display. The extra buffers are calculated as the
- * number of additional buffers on top of the 3 buffers already allocated
- * by the app.
+ * number of additional buffers on top of the 2 buffers already present
+ * in MIN_UNDEQUEUED_BUFFERS.
*/
- virtual status_t getExtraBufferCount(int* extraBuffers) const = 0;
+ virtual status_t getMaxAcquiredBufferCount(int* buffers) const = 0;
};
// ----------------------------------------------------------------------------
@@ -615,7 +614,7 @@
SET_FRAME_TIMELINE_INFO,
ADD_TRANSACTION_TRACE_LISTENER,
GET_GPU_CONTEXT_PRIORITY,
- GET_EXTRA_BUFFER_COUNT,
+ GET_MAX_ACQUIRED_BUFFER_COUNT,
GET_DYNAMIC_DISPLAY_INFO,
ADD_FPS_LISTENER,
REMOVE_FPS_LISTENER,
diff --git a/libs/gui/include/gui/ITransactionCompletedListener.h b/libs/gui/include/gui/ITransactionCompletedListener.h
index 2d71194..d286c34 100644
--- a/libs/gui/include/gui/ITransactionCompletedListener.h
+++ b/libs/gui/include/gui/ITransactionCompletedListener.h
@@ -101,12 +101,14 @@
SurfaceStats() = default;
SurfaceStats(const sp<IBinder>& sc, nsecs_t time, const sp<Fence>& prevReleaseFence,
- uint32_t hint, FrameEventHistoryStats frameEventStats,
- std::vector<JankData> jankData, uint64_t previousBufferId)
+ uint32_t hint, uint32_t currentMaxAcquiredBuffersCount,
+ FrameEventHistoryStats frameEventStats, std::vector<JankData> jankData,
+ uint64_t previousBufferId)
: surfaceControl(sc),
acquireTime(time),
previousReleaseFence(prevReleaseFence),
transformHint(hint),
+ currentMaxAcquiredBufferCount(currentMaxAcquiredBuffersCount),
eventStats(frameEventStats),
jankData(std::move(jankData)),
previousBufferId(previousBufferId) {}
@@ -115,6 +117,7 @@
nsecs_t acquireTime = -1;
sp<Fence> previousReleaseFence;
uint32_t transformHint = 0;
+ uint32_t currentMaxAcquiredBufferCount = 0;
FrameEventHistoryStats eventStats;
std::vector<JankData> jankData;
uint64_t previousBufferId;
@@ -158,7 +161,9 @@
virtual void onTransactionCompleted(ListenerStats stats) = 0;
- virtual void onReleaseBuffer(uint64_t graphicBufferId, sp<Fence> releaseFence) = 0;
+ virtual void onReleaseBuffer(uint64_t graphicBufferId, sp<Fence> releaseFence,
+ uint32_t transformHint,
+ uint32_t currentMaxAcquiredBufferCount) = 0;
};
class BnTransactionCompletedListener : public SafeBnInterface<ITransactionCompletedListener> {
diff --git a/libs/gui/include/gui/Surface.h b/libs/gui/include/gui/Surface.h
index 48885eb..7e4143b 100644
--- a/libs/gui/include/gui/Surface.h
+++ b/libs/gui/include/gui/Surface.h
@@ -190,7 +190,6 @@
virtual status_t setFrameRate(float frameRate, int8_t compatibility,
int8_t changeFrameRateStrategy);
virtual status_t setFrameTimelineInfo(const FrameTimelineInfo& info);
- virtual status_t getExtraBufferCount(int* extraBuffers) const;
protected:
virtual ~Surface();
@@ -278,7 +277,6 @@
int dispatchGetLastQueuedBuffer(va_list args);
int dispatchGetLastQueuedBuffer2(va_list args);
int dispatchSetFrameTimelineInfo(va_list args);
- int dispatchGetExtraBufferCount(va_list args);
protected:
virtual int dequeueBuffer(ANativeWindowBuffer** buffer, int* fenceFd);
diff --git a/libs/gui/include/gui/SurfaceComposerClient.h b/libs/gui/include/gui/SurfaceComposerClient.h
index 2582882..fa91bfa 100644
--- a/libs/gui/include/gui/SurfaceComposerClient.h
+++ b/libs/gui/include/gui/SurfaceComposerClient.h
@@ -82,7 +82,8 @@
std::function<void(nsecs_t /*latchTime*/, const sp<Fence>& /*presentFence*/,
const std::vector<SurfaceControlStats>& /*stats*/)>;
using ReleaseBufferCallback =
- std::function<void(uint64_t /* graphicsBufferId */, const sp<Fence>& /*releaseFence*/)>;
+ std::function<void(uint64_t /* graphicsBufferId */, const sp<Fence>& /*releaseFence*/,
+ uint32_t transformHint, uint32_t currentMaxAcquiredBufferCount)>;
using SurfaceStatsCallback =
std::function<void(void* /*context*/, nsecs_t /*latchTime*/,
@@ -651,6 +652,12 @@
std::mutex mMutex;
+ // This lock needs to be recursive so we can unregister a callback from within that callback.
+ std::recursive_mutex mJankListenerMutex;
+
+ // This lock needs to be recursive so we can unregister a callback from within that callback.
+ std::recursive_mutex mSurfaceStatsListenerMutex;
+
bool mListening GUARDED_BY(mMutex) = false;
int64_t mCallbackIdCounter GUARDED_BY(mMutex) = 1;
@@ -673,11 +680,16 @@
std::unordered_map<CallbackId, CallbackTranslation, CallbackIdHash> mCallbacks
GUARDED_BY(mMutex);
- std::multimap<sp<IBinder>, sp<JankDataListener>> mJankListeners GUARDED_BY(mMutex);
+
+ // This is protected by mJankListenerMutex, but GUARDED_BY isn't supported for
+ // std::recursive_mutex
+ std::multimap<sp<IBinder>, sp<JankDataListener>> mJankListeners;
std::unordered_map<uint64_t /* graphicsBufferId */, ReleaseBufferCallback>
mReleaseBufferCallbacks GUARDED_BY(mMutex);
- std::multimap<sp<IBinder>, SurfaceStatsCallbackEntry>
- mSurfaceStatsListeners GUARDED_BY(mMutex);
+
+ // This is protected by mSurfaceStatsListenerMutex, but GUARDED_BY isn't supported for
+ // std::recursive_mutex
+ std::multimap<sp<IBinder>, SurfaceStatsCallbackEntry> mSurfaceStatsListeners;
public:
static sp<TransactionCompletedListener> getInstance();
@@ -716,7 +728,8 @@
// BnTransactionCompletedListener overrides
void onTransactionCompleted(ListenerStats stats) override;
- void onReleaseBuffer(uint64_t /* graphicsBufferId */, sp<Fence> releaseFence) override;
+ void onReleaseBuffer(uint64_t /* graphicsBufferId */, sp<Fence> releaseFence,
+ uint32_t transformHint, uint32_t currentMaxAcquiredBufferCount) override;
private:
ReleaseBufferCallback popReleaseBufferCallbackLocked(uint64_t /* graphicsBufferId */);
diff --git a/libs/gui/tests/BLASTBufferQueue_test.cpp b/libs/gui/tests/BLASTBufferQueue_test.cpp
index 5a5da97..06660b8 100644
--- a/libs/gui/tests/BLASTBufferQueue_test.cpp
+++ b/libs/gui/tests/BLASTBufferQueue_test.cpp
@@ -394,7 +394,11 @@
setUpProducer(adapter, igbProducer);
std::vector<std::pair<int, sp<Fence>>> allocated;
- for (int i = 0; i < 3; i++) {
+ int minUndequeuedBuffers = 0;
+ ASSERT_EQ(OK, igbProducer->query(NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS, &minUndequeuedBuffers));
+ const auto bufferCount = minUndequeuedBuffers + 2;
+
+ for (int i = 0; i < bufferCount; i++) {
int slot;
sp<Fence> fence;
sp<GraphicBuffer> buf;
diff --git a/libs/gui/tests/Surface_test.cpp b/libs/gui/tests/Surface_test.cpp
index b8d34c3..59b0c04 100644
--- a/libs/gui/tests/Surface_test.cpp
+++ b/libs/gui/tests/Surface_test.cpp
@@ -902,7 +902,7 @@
int getGPUContextPriority() override { return 0; };
- status_t getExtraBufferCount(int* /*extraBuffers*/) const override { return NO_ERROR; }
+ status_t getMaxAcquiredBufferCount(int* /*buffers*/) const override { return NO_ERROR; }
protected:
IBinder* onAsBinder() override { return nullptr; }
diff --git a/libs/input/InputDevice.cpp b/libs/input/InputDevice.cpp
index 61d72ad..30c42a3 100644
--- a/libs/input/InputDevice.cpp
+++ b/libs/input/InputDevice.cpp
@@ -247,36 +247,22 @@
mLights.insert_or_assign(info.id, info);
}
-const std::vector<InputDeviceSensorType> InputDeviceInfo::getSensorTypes() {
- std::vector<InputDeviceSensorType> types;
+std::vector<InputDeviceSensorInfo> InputDeviceInfo::getSensors() {
+ std::vector<InputDeviceSensorInfo> infos;
+ infos.reserve(mSensors.size());
for (const auto& [type, info] : mSensors) {
- types.push_back(type);
+ infos.push_back(info);
}
- return types;
+ return infos;
}
-const InputDeviceSensorInfo* InputDeviceInfo::getSensorInfo(InputDeviceSensorType type) {
- auto it = mSensors.find(type);
- if (it == mSensors.end()) {
- return nullptr;
- }
- return &it->second;
-}
-
-const std::vector<int32_t> InputDeviceInfo::getLightIds() {
- std::vector<int32_t> ids;
+std::vector<InputDeviceLightInfo> InputDeviceInfo::getLights() {
+ std::vector<InputDeviceLightInfo> infos;
+ infos.reserve(mLights.size());
for (const auto& [id, info] : mLights) {
- ids.push_back(id);
+ infos.push_back(info);
}
- return ids;
-}
-
-const InputDeviceLightInfo* InputDeviceInfo::getLightInfo(int32_t id) {
- auto it = mLights.find(id);
- if (it == mLights.end()) {
- return nullptr;
- }
- return &it->second;
+ return infos;
}
} // namespace android
diff --git a/libs/input/android/os/IInputConstants.aidl b/libs/input/android/os/IInputConstants.aidl
index 4b90844..3038d9d 100644
--- a/libs/input/android/os/IInputConstants.aidl
+++ b/libs/input/android/os/IInputConstants.aidl
@@ -40,4 +40,18 @@
* available.
*/
const int INVALID_INPUT_EVENT_ID = 0;
+
+ /**
+ * The injected event was originally sent from InputDispatcher. Most likely, the journey of the
+ * event looked as follows:
+ * InputDispatcherPolicyInterface::filterInputEvent -> InputFilter.java::onInputEvent ->
+ * InputFilter.java::sendInputEvent -> InputDispatcher::injectInputEvent, without being modified
+ * along the way.
+ */
+ const int POLICY_FLAG_INPUTFILTER_TRUSTED = 0x10000;
+
+ /**
+ * The input event was injected from accessibility
+ */
+ const int POLICY_FLAG_INJECTED_FROM_ACCESSIBILITY = 0x20000;
}
diff --git a/libs/nativewindow/include/system/window.h b/libs/nativewindow/include/system/window.h
index 935eded..7f01135 100644
--- a/libs/nativewindow/include/system/window.h
+++ b/libs/nativewindow/include/system/window.h
@@ -256,8 +256,7 @@
NATIVE_WINDOW_GET_LAST_QUEUED_BUFFER = 46, /* private */
NATIVE_WINDOW_SET_QUERY_INTERCEPTOR = 47, /* private */
NATIVE_WINDOW_SET_FRAME_TIMELINE_INFO = 48, /* private */
- NATIVE_WINDOW_GET_EXTRA_BUFFER_COUNT = 49, /* private */
- NATIVE_WINDOW_GET_LAST_QUEUED_BUFFER2 = 50, /* private */
+ NATIVE_WINDOW_GET_LAST_QUEUED_BUFFER2 = 49, /* private */
// clang-format on
};
@@ -1032,11 +1031,6 @@
frameTimelineVsyncId, inputEventId);
}
-static inline int native_window_get_extra_buffer_count(
- struct ANativeWindow* window, int* extraBuffers) {
- return window->perform(window, NATIVE_WINDOW_GET_EXTRA_BUFFER_COUNT, extraBuffers);
-}
-
// ------------------------------------------------------------------------------------------------
// Candidates for APEX visibility
// These functions are planned to be made stable for APEX modules, but have not
diff --git a/libs/permission/android/permission/PermissionChecker.cpp b/libs/permission/android/permission/PermissionChecker.cpp
index 008afad..66526f9 100644
--- a/libs/permission/android/permission/PermissionChecker.cpp
+++ b/libs/permission/android/permission/PermissionChecker.cpp
@@ -82,6 +82,14 @@
/*startDataDelivery*/ true, /*fromDatasource*/ true, attributedOpCode);
}
+PermissionChecker::PermissionResult PermissionChecker::checkPermissionForPreflight(
+ const String16& permission, const AttributionSourceState& attributionSource,
+ const String16& message, int32_t attributedOpCode)
+{
+ return checkPermission(permission, attributionSource, message, /*forDataDelivery*/ false,
+ /*startDataDelivery*/ false, /*fromDatasource*/ false, attributedOpCode);
+}
+
PermissionChecker::PermissionResult PermissionChecker::checkPermissionForPreflightFromDatasource(
const String16& permission, const AttributionSourceState& attributionSource,
const String16& message, int32_t attributedOpCode)
diff --git a/libs/permission/include/android/permission/PermissionChecker.h b/libs/permission/include/android/permission/PermissionChecker.h
index 308d794..21515e3 100644
--- a/libs/permission/include/android/permission/PermissionChecker.h
+++ b/libs/permission/include/android/permission/PermissionChecker.h
@@ -101,6 +101,29 @@
* has a given permission and whether the app op that corresponds to this permission
* is allowed. The app ops are not noted/started.
*
+ * NOTE: Use this method only for permission checks at the preflight point where you
+ * will not deliver the permission protected data to clients but schedule permission
+ * data delivery, apps register listeners, etc.
+ *
+ * @param permission The permission to check.
+ * @param attributionSource The attribution chain to check.
+ * @param message A message describing the reason the permission was checked.
+ * @param attributedOpCode The op code towards which to blame the access. If this
+ * is a valid app op the op corresponding to the checked permission (if such)
+ * would only be checked to ensure it is allowed and if that succeeds the
+ * starting would be against the attributed op.
+ * @return The permission check result which is either PERMISSION_GRANTED,
+ * or PERMISSION_SOFT_DENIED or PERMISSION_HARD_DENIED.
+ */
+ PermissionResult checkPermissionForPreflight(
+ const String16& permission, const AttributionSourceState& attributionSource,
+ const String16& message, int32_t attributedOpCode);
+
+ /**
+ * Checks whether a given data access chain described by the given attribution source
+ * has a given permission and whether the app op that corresponds to this permission
+ * is allowed. The app ops are not noted/started.
+ *
* NOTE: The attribution source should be for yourself with its next attribution
* source being the app that would receive the data from you.
*
diff --git a/libs/renderengine/gl/GLESRenderEngine.cpp b/libs/renderengine/gl/GLESRenderEngine.cpp
index 3c58238..b5dd8ac 100644
--- a/libs/renderengine/gl/GLESRenderEngine.cpp
+++ b/libs/renderengine/gl/GLESRenderEngine.cpp
@@ -515,9 +515,10 @@
return mDrawingBuffer.get();
}
-void GLESRenderEngine::primeCache() {
+std::future<void> GLESRenderEngine::primeCache() {
ProgramCache::getInstance().primeCache(mInProtectedContext ? mProtectedEGLContext : mEGLContext,
mUseColorManagement, mPrecacheToneMapperShaderOnly);
+ return {};
}
base::unique_fd GLESRenderEngine::flush() {
@@ -969,37 +970,17 @@
glBindFramebuffer(GL_FRAMEBUFFER, 0);
}
-bool GLESRenderEngine::cleanupPostRender(CleanupMode mode) {
+bool GLESRenderEngine::canSkipPostRenderCleanup() const {
+ return mPriorResourcesCleaned ||
+ (mLastDrawFence != nullptr && mLastDrawFence->getStatus() != Fence::Status::Signaled);
+}
+
+void GLESRenderEngine::cleanupPostRender() {
ATRACE_CALL();
- if (mPriorResourcesCleaned ||
- (mLastDrawFence != nullptr && mLastDrawFence->getStatus() != Fence::Status::Signaled)) {
+ if (canSkipPostRenderCleanup()) {
// If we don't have a prior frame needing cleanup, then don't do anything.
- return false;
- }
-
- // This is a bit of a band-aid fix for FrameCaptureProcessor, as we should
- // not need to keep memory around if we don't need to do so.
- if (mode == CleanupMode::CLEAN_ALL) {
- // TODO: SurfaceFlinger memory utilization may benefit from resetting
- // texture bindings as well. Assess if it does and there's no performance regression
- // when rebinding the same image data to the same texture, and if so then its mode
- // behavior can be tweaked.
- if (mPlaceholderImage != EGL_NO_IMAGE_KHR) {
- for (auto [textureName, bufferId] : mTextureView) {
- if (bufferId && mPlaceholderImage != EGL_NO_IMAGE_KHR) {
- glBindTexture(GL_TEXTURE_EXTERNAL_OES, textureName);
- glEGLImageTargetTexture2DOES(GL_TEXTURE_EXTERNAL_OES,
- static_cast<GLeglImageOES>(mPlaceholderImage));
- mTextureView[textureName] = std::nullopt;
- checkErrors();
- }
- }
- }
- {
- std::lock_guard<std::mutex> lock(mRenderingMutex);
- mImageCache.clear();
- }
+ return;
}
// Bind the texture to placeholder so that backing image data can be freed.
@@ -1010,7 +991,6 @@
// we could no-op repeated calls of this method instead.
mLastDrawFence = nullptr;
mPriorResourcesCleaned = true;
- return true;
}
void GLESRenderEngine::cleanFramebufferCache() {
diff --git a/libs/renderengine/gl/GLESRenderEngine.h b/libs/renderengine/gl/GLESRenderEngine.h
index e7ed9c0..915dba3 100644
--- a/libs/renderengine/gl/GLESRenderEngine.h
+++ b/libs/renderengine/gl/GLESRenderEngine.h
@@ -57,7 +57,7 @@
EGLSurface protectedStub);
~GLESRenderEngine() override EXCLUDES(mRenderingMutex);
- void primeCache() override;
+ std::future<void> primeCache() override;
void genTextures(size_t count, uint32_t* names) override;
void deleteTextures(size_t count, uint32_t const* names) override;
bool isProtected() const override { return mInProtectedContext; }
@@ -68,7 +68,7 @@
const std::shared_ptr<ExternalTexture>& buffer,
const bool useFramebufferCache, base::unique_fd&& bufferFence,
base::unique_fd* drawFence) override;
- bool cleanupPostRender(CleanupMode mode) override;
+ void cleanupPostRender() override;
int getContextPriority() override;
bool supportsBackgroundBlur() override { return mBlurFilter != nullptr; }
void onPrimaryDisplaySizeChanged(ui::Size size) override {}
@@ -106,6 +106,7 @@
void mapExternalTextureBuffer(const sp<GraphicBuffer>& buffer, bool isRenderable)
EXCLUDES(mRenderingMutex);
void unmapExternalTextureBuffer(const sp<GraphicBuffer>& buffer) EXCLUDES(mRenderingMutex);
+ bool canSkipPostRenderCleanup() const override;
private:
friend class BindNativeBufferAsFramebuffer;
diff --git a/libs/renderengine/include/renderengine/RenderEngine.h b/libs/renderengine/include/renderengine/RenderEngine.h
index d1bbcc5..ac0affb 100644
--- a/libs/renderengine/include/renderengine/RenderEngine.h
+++ b/libs/renderengine/include/renderengine/RenderEngine.h
@@ -29,6 +29,7 @@
#include <ui/GraphicTypes.h>
#include <ui/Transform.h>
+#include <future>
#include <memory>
/**
@@ -48,6 +49,11 @@
*/
#define PROPERTY_DEBUG_RENDERENGINE_CAPTURE_FILENAME "debug.renderengine.capture_filename"
+/**
+ * Allows recording of Skia drawing commands with systrace.
+ */
+#define PROPERTY_SKIA_ATRACE_ENABLED "debug.renderengine.skia_atrace_enabled"
+
struct ANativeWindowBuffer;
namespace android {
@@ -94,17 +100,13 @@
static std::unique_ptr<RenderEngine> create(const RenderEngineCreationArgs& args);
- RenderEngine() : RenderEngine(RenderEngineType::GLES) {}
-
- RenderEngine(RenderEngineType type) : mRenderEngineType(type) {}
-
virtual ~RenderEngine() = 0;
// ----- BEGIN DEPRECATED INTERFACE -----
// This interface, while still in use until a suitable replacement is built,
// should be considered deprecated, minus some methods which still may be
// used to support legacy behavior.
- virtual void primeCache() = 0;
+ virtual std::future<void> primeCache() = 0;
// dump the extension strings. always call the base class.
virtual void dump(std::string& result) = 0;
@@ -112,25 +114,6 @@
virtual void genTextures(size_t count, uint32_t* names) = 0;
virtual void deleteTextures(size_t count, uint32_t const* names) = 0;
- enum class CleanupMode {
- CLEAN_OUTPUT_RESOURCES,
- CLEAN_ALL,
- };
- // Clean-up method that should be called on the main thread after the
- // drawFence returned by drawLayers fires. This method will free up
- // resources used by the most recently drawn frame. If the frame is still
- // being drawn, then this call is silently ignored.
- //
- // If mode is CLEAN_OUTPUT_RESOURCES, then only resources related to the
- // output framebuffer are cleaned up, including the sibling texture.
- //
- // If mode is CLEAN_ALL, then we also cleanup resources related to any input
- // buffers.
- //
- // Returns true if resources were cleaned up, and false if we didn't need to
- // do any work.
- virtual bool cleanupPostRender(CleanupMode mode = CleanupMode::CLEAN_OUTPUT_RESOURCES) = 0;
-
// queries that are required to be thread safe
virtual size_t getMaxTextureSize() const = 0;
virtual size_t getMaxViewportDims() const = 0;
@@ -184,6 +167,13 @@
const std::shared_ptr<ExternalTexture>& buffer,
const bool useFramebufferCache, base::unique_fd&& bufferFence,
base::unique_fd* drawFence) = 0;
+
+ // Clean-up method that should be called on the main thread after the
+ // drawFence returned by drawLayers fires. This method will free up
+ // resources used by the most recently drawn frame. If the frame is still
+ // being drawn, then the implementation is free to silently ignore this call.
+ virtual void cleanupPostRender() = 0;
+
virtual void cleanFramebufferCache() = 0;
// Returns the priority this context was actually created with. Note: this may not be
// the same as specified at context creation time, due to implementation limits on the
@@ -204,6 +194,10 @@
static void validateOutputBufferUsage(const sp<GraphicBuffer>&);
protected:
+ RenderEngine() : RenderEngine(RenderEngineType::GLES) {}
+
+ RenderEngine(RenderEngineType type) : mRenderEngineType(type) {}
+
// Maps GPU resources for this buffer.
// Note that work may be deferred to an additional thread, i.e. this call
// is made asynchronously, but the caller can expect that map/unmap calls
@@ -228,8 +222,15 @@
// that's conflict serializable, i.e. unmap a buffer should never occur before binding the
// buffer if the caller called mapExternalTextureBuffer before calling unmap.
virtual void unmapExternalTextureBuffer(const sp<GraphicBuffer>& buffer) = 0;
+
+ // A thread safe query to determine if any post rendering cleanup is necessary. Returning true
+ // is a signal that calling the postRenderCleanup method would be a no-op and that callers can
+ // avoid any thread synchronization that may be required by directly calling postRenderCleanup.
+ virtual bool canSkipPostRenderCleanup() const = 0;
+
friend class ExternalTexture;
friend class threaded::RenderEngineThreaded;
+ friend class RenderEngineTest_cleanupPostRender_cleansUpOnce_Test;
const RenderEngineType mRenderEngineType;
};
diff --git a/libs/renderengine/include/renderengine/mock/RenderEngine.h b/libs/renderengine/include/renderengine/mock/RenderEngine.h
index 27dbd1e..0175af3 100644
--- a/libs/renderengine/include/renderengine/mock/RenderEngine.h
+++ b/libs/renderengine/include/renderengine/mock/RenderEngine.h
@@ -35,7 +35,7 @@
RenderEngine();
~RenderEngine() override;
- MOCK_METHOD0(primeCache, void());
+ MOCK_METHOD0(primeCache, std::future<void>());
MOCK_METHOD1(dump, void(std::string&));
MOCK_METHOD2(genTextures, void(size_t, uint32_t*));
MOCK_METHOD2(deleteTextures, void(size_t, uint32_t const*));
@@ -45,7 +45,8 @@
MOCK_CONST_METHOD0(isProtected, bool());
MOCK_CONST_METHOD0(supportsProtectedContent, bool());
MOCK_METHOD1(useProtectedContext, bool(bool));
- MOCK_METHOD1(cleanupPostRender, bool(CleanupMode mode));
+ MOCK_METHOD0(cleanupPostRender, void());
+ MOCK_CONST_METHOD0(canSkipPostRenderCleanup, bool());
MOCK_METHOD6(drawLayers,
status_t(const DisplaySettings&, const std::vector<const LayerSettings*>&,
const std::shared_ptr<ExternalTexture>&, const bool, base::unique_fd&&,
diff --git a/libs/renderengine/skia/AutoBackendTexture.cpp b/libs/renderengine/skia/AutoBackendTexture.cpp
index 8356005..5c122d4 100644
--- a/libs/renderengine/skia/AutoBackendTexture.cpp
+++ b/libs/renderengine/skia/AutoBackendTexture.cpp
@@ -29,8 +29,8 @@
namespace skia {
AutoBackendTexture::AutoBackendTexture(GrDirectContext* context, AHardwareBuffer* buffer,
- bool isOutputBuffer)
- : mIsOutputBuffer(isOutputBuffer) {
+ bool isOutputBuffer, CleanupManager& cleanupMgr)
+ : mCleanupMgr(cleanupMgr), mIsOutputBuffer(isOutputBuffer) {
ATRACE_CALL();
AHardwareBuffer_Desc desc;
AHardwareBuffer_describe(buffer, &desc);
@@ -49,6 +49,13 @@
this, desc.width, desc.height, createProtectedImage, isOutputBuffer, desc.format);
}
+AutoBackendTexture::~AutoBackendTexture() {
+ if (mBackendTexture.isValid()) {
+ mDeleteProc(mImageCtx);
+ mBackendTexture = {};
+ }
+}
+
void AutoBackendTexture::unref(bool releaseLocalResources) {
if (releaseLocalResources) {
mSurface = nullptr;
@@ -57,11 +64,7 @@
mUsageCount--;
if (mUsageCount <= 0) {
- if (mBackendTexture.isValid()) {
- mDeleteProc(mImageCtx);
- mBackendTexture = {};
- }
- delete this;
+ mCleanupMgr.add(this);
}
}
diff --git a/libs/renderengine/skia/AutoBackendTexture.h b/libs/renderengine/skia/AutoBackendTexture.h
index a9e8430..00b901b 100644
--- a/libs/renderengine/skia/AutoBackendTexture.h
+++ b/libs/renderengine/skia/AutoBackendTexture.h
@@ -25,6 +25,9 @@
#include "android-base/macros.h"
+#include <mutex>
+#include <vector>
+
namespace android {
namespace renderengine {
namespace skia {
@@ -36,13 +39,50 @@
*/
class AutoBackendTexture {
public:
+ // Manager class that is responsible for the immediate or deferred cleanup
+ // of AutoBackendTextures. Clients of AutoBackendTexture are responsible for
+ // ensuring that access to this class is thread safe. Clients also control when
+ // the resources are reclaimed by setting the manager into deferred mode.
+ class CleanupManager {
+ public:
+ CleanupManager() = default;
+ void add(AutoBackendTexture* abt) {
+ if (mDeferCleanup) {
+ mCleanupList.push_back(abt);
+ } else {
+ delete abt;
+ }
+ }
+
+ void setDeferredStatus(bool enabled) { mDeferCleanup = enabled; }
+
+ bool isEmpty() const { return mCleanupList.empty(); }
+
+ // If any AutoBackedTextures were added while in deferred mode this method
+ // will ensure they are deleted before returning. It must only be called
+ // on the thread where the GPU context that created the AutoBackedTexture
+ // is active.
+ void cleanup() {
+ for (auto abt : mCleanupList) {
+ delete abt;
+ }
+ mCleanupList.clear();
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(CleanupManager);
+ bool mDeferCleanup = false;
+ std::vector<AutoBackendTexture*> mCleanupList;
+ };
+
// Local reference that supports RAII-style management of an AutoBackendTexture
// AutoBackendTexture by itself can't be managed in a similar fashion because
// of shared ownership with Skia objects, so we wrap it here instead.
class LocalRef {
public:
- LocalRef(GrDirectContext* context, AHardwareBuffer* buffer, bool isOutputBuffer) {
- mTexture = new AutoBackendTexture(context, buffer, isOutputBuffer);
+ LocalRef(GrDirectContext* context, AHardwareBuffer* buffer, bool isOutputBuffer,
+ CleanupManager& cleanupMgr) {
+ mTexture = new AutoBackendTexture(context, buffer, isOutputBuffer, cleanupMgr);
mTexture->ref();
}
@@ -75,10 +115,11 @@
private:
// Creates a GrBackendTexture whose contents come from the provided buffer.
- AutoBackendTexture(GrDirectContext* context, AHardwareBuffer* buffer, bool isOutputBuffer);
+ AutoBackendTexture(GrDirectContext* context, AHardwareBuffer* buffer, bool isOutputBuffer,
+ CleanupManager& cleanupMgr);
// The only way to invoke dtor is with unref, when mUsageCount is 0.
- ~AutoBackendTexture() {}
+ ~AutoBackendTexture();
void ref() { mUsageCount++; }
@@ -100,6 +141,8 @@
GrAHardwareBufferUtils::UpdateImageProc mUpdateProc;
GrAHardwareBufferUtils::TexImageCtx mImageCtx;
+ CleanupManager& mCleanupMgr;
+
static void releaseSurfaceProc(SkSurface::ReleaseContext releaseContext);
static void releaseImageProc(SkImage::ReleaseContext releaseContext);
diff --git a/libs/renderengine/skia/Cache.cpp b/libs/renderengine/skia/Cache.cpp
index 61c297c..b3975b0 100644
--- a/libs/renderengine/skia/Cache.cpp
+++ b/libs/renderengine/skia/Cache.cpp
@@ -149,6 +149,7 @@
PixelSource{
.solidColor = half3(0.1f, 0.2f, 0.3f),
},
+ .alpha = 0.5,
};
auto layers = std::vector<const LayerSettings*>{&layer};
@@ -291,7 +292,11 @@
drawSolidLayers(renderengine, display, dstTexture);
drawShadowLayers(renderengine, display, srcTexture);
- drawBlurLayers(renderengine, display, dstTexture);
+
+ if (renderengine->supportsBackgroundBlur()) {
+ drawBlurLayers(renderengine, display, dstTexture);
+ }
+
// The majority of shaders are related to sampling images.
drawImageLayers(renderengine, display, dstTexture, srcTexture);
diff --git a/libs/renderengine/skia/SkiaGLRenderEngine.cpp b/libs/renderengine/skia/SkiaGLRenderEngine.cpp
index 2d80c46..cb80ef4 100644
--- a/libs/renderengine/skia/SkiaGLRenderEngine.cpp
+++ b/libs/renderengine/skia/SkiaGLRenderEngine.cpp
@@ -36,6 +36,7 @@
#include <SkSurface.h>
#include <android-base/stringprintf.h>
#include <gl/GrGLInterface.h>
+#include <gui/TraceUtils.h>
#include <sync/sync.h>
#include <ui/BlurRegion.h>
#include <ui/DebugUtils.h>
@@ -234,8 +235,9 @@
return engine;
}
-void SkiaGLRenderEngine::primeCache() {
+std::future<void> SkiaGLRenderEngine::primeCache() {
Cache::primeShaderCache(this);
+ return {};
}
EGLConfig SkiaGLRenderEngine::chooseEglConfig(EGLDisplay display, int format, bool logConfig) {
@@ -315,6 +317,7 @@
GrContextOptions options;
options.fDisableDriverCorrectnessWorkarounds = true;
options.fDisableDistanceFieldPaths = true;
+ options.fReducedShaderVariations = true;
options.fPersistentCache = &mSkSLCacheMonitor;
mGrContext = GrDirectContext::MakeGL(glInterface, options);
if (useProtectedContext(true)) {
@@ -506,17 +509,18 @@
return;
}
// We currently don't attempt to map a buffer if the buffer contains protected content
- // or we are using a protected context because GPU resources for protected buffers is
- // much more limited.
+ // because GPU resources for protected buffers is much more limited.
const bool isProtectedBuffer = buffer->getUsage() & GRALLOC_USAGE_PROTECTED;
- if (isProtectedBuffer || mInProtectedContext) {
+ if (isProtectedBuffer) {
return;
}
ATRACE_CALL();
- // If we were to support caching protected buffers then we will need to switch the currently
- // bound context if we are not already using the protected context (and subsequently switch
- // back after the buffer is cached).
+ // If we were to support caching protected buffers then we will need to switch the
+ // currently bound context if we are not already using the protected context (and subsequently
+ // switch back after the buffer is cached). However, for non-protected content we can bind
+ // the texture in either GL context because they are initialized with the same share_context
+ // which allows the texture state to be shared between them.
auto grContext = getActiveGrContext();
auto& cache = mTextureCache;
@@ -527,7 +531,7 @@
std::shared_ptr<AutoBackendTexture::LocalRef> imageTextureRef =
std::make_shared<AutoBackendTexture::LocalRef>(grContext,
buffer->toAHardwareBuffer(),
- isRenderable);
+ isRenderable, mTextureCleanupMgr);
cache.insert({buffer->getId(), imageTextureRef});
}
}
@@ -548,14 +552,53 @@
iter->second--;
+ // Swap contexts if needed prior to deleting this buffer
+ // See Issue 1 of
+ // https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_protected_content.txt: even
+ // when a protected context and an unprotected context are part of the same share group,
+ // protected surfaces may not be accessed by an unprotected context, implying that protected
+ // surfaces may only be freed when a protected context is active.
+ const bool inProtected = mInProtectedContext;
+ useProtectedContext(buffer->getUsage() & GRALLOC_USAGE_PROTECTED);
+
if (iter->second == 0) {
mTextureCache.erase(buffer->getId());
- mProtectedTextureCache.erase(buffer->getId());
mGraphicBufferExternalRefs.erase(buffer->getId());
}
+
+ // Swap back to the previous context so that cached values of isProtected in SurfaceFlinger
+ // are up-to-date.
+ if (inProtected != mInProtectedContext) {
+ useProtectedContext(inProtected);
+ }
}
}
+bool SkiaGLRenderEngine::canSkipPostRenderCleanup() const {
+ std::lock_guard<std::mutex> lock(mRenderingMutex);
+ return mTextureCleanupMgr.isEmpty();
+}
+
+void SkiaGLRenderEngine::cleanupPostRender() {
+ ATRACE_CALL();
+ std::lock_guard<std::mutex> lock(mRenderingMutex);
+ mTextureCleanupMgr.cleanup();
+}
+
+// Helper class intended to be used on the stack to ensure that texture cleanup
+// is deferred until after this class goes out of scope.
+class DeferTextureCleanup final {
+public:
+ DeferTextureCleanup(AutoBackendTexture::CleanupManager& mgr) : mMgr(mgr) {
+ mMgr.setDeferredStatus(true);
+ }
+ ~DeferTextureCleanup() { mMgr.setDeferredStatus(false); }
+
+private:
+ DISALLOW_COPY_AND_ASSIGN(DeferTextureCleanup);
+ AutoBackendTexture::CleanupManager& mMgr;
+};
+
sk_sp<SkShader> SkiaGLRenderEngine::createRuntimeEffectShader(
sk_sp<SkShader> shader,
const LayerSettings* layer, const DisplaySettings& display, bool undoPremultipliedAlpha,
@@ -702,7 +745,10 @@
validateOutputBufferUsage(buffer->getBuffer());
auto grContext = getActiveGrContext();
- auto& cache = mInProtectedContext ? mProtectedTextureCache : mTextureCache;
+ auto& cache = mTextureCache;
+
+ // any AutoBackendTexture deletions will now be deferred until cleanupPostRender is called
+ DeferTextureCleanup dtc(mTextureCleanupMgr);
std::shared_ptr<AutoBackendTexture::LocalRef> surfaceTextureRef;
if (const auto& it = cache.find(buffer->getBuffer()->getId()); it != cache.end()) {
@@ -712,7 +758,7 @@
std::make_shared<AutoBackendTexture::LocalRef>(grContext,
buffer->getBuffer()
->toAHardwareBuffer(),
- true);
+ true, mTextureCleanupMgr);
}
const ui::Dataspace dstDataspace =
@@ -792,7 +838,7 @@
}
for (const auto& layer : layers) {
- ATRACE_NAME("DrawLayer");
+ ATRACE_FORMAT("DrawLayer: %s", layer->name.c_str());
if (kPrintLayerSettings) {
std::stringstream ls;
@@ -968,7 +1014,7 @@
imageTextureRef = std::make_shared<
AutoBackendTexture::LocalRef>(grContext,
item.buffer->getBuffer()->toAHardwareBuffer(),
- false);
+ false, mTextureCleanupMgr);
}
// isOpaque means we need to ignore the alpha in the image,
@@ -1445,12 +1491,6 @@
StringAppendF(&result, "Skia's Protected Wrapped Objects:\n");
gpuProtectedReporter.logOutput(result, true);
- StringAppendF(&result, "RenderEngine protected AHB/BackendTexture cache size: %zu\n",
- mProtectedTextureCache.size());
- StringAppendF(&result, "Dumping buffer ids...\n");
- for (const auto& [id, unused] : mProtectedTextureCache) {
- StringAppendF(&result, "- 0x%" PRIx64 "\n", id);
- }
StringAppendF(&result, "\n");
StringAppendF(&result, "RenderEngine runtime effects: %zu\n", mRuntimeEffects.size());
for (const auto& [linearEffect, unused] : mRuntimeEffects) {
diff --git a/libs/renderengine/skia/SkiaGLRenderEngine.h b/libs/renderengine/skia/SkiaGLRenderEngine.h
index 97d3b72..b30355b 100644
--- a/libs/renderengine/skia/SkiaGLRenderEngine.h
+++ b/libs/renderengine/skia/SkiaGLRenderEngine.h
@@ -53,13 +53,14 @@
EGLSurface protectedPlaceholder);
~SkiaGLRenderEngine() override EXCLUDES(mRenderingMutex);
- void primeCache() override;
+ std::future<void> primeCache() override;
status_t drawLayers(const DisplaySettings& display,
const std::vector<const LayerSettings*>& layers,
const std::shared_ptr<ExternalTexture>& buffer,
const bool useFramebufferCache, base::unique_fd&& bufferFence,
base::unique_fd* drawFence) override;
- void cleanFramebufferCache() override {}
+ void cleanupPostRender() override;
+ void cleanFramebufferCache() override{};
int getContextPriority() override;
bool isProtected() const override { return mInProtectedContext; }
bool supportsProtectedContent() const override;
@@ -75,6 +76,7 @@
size_t getMaxViewportDims() const override;
void mapExternalTextureBuffer(const sp<GraphicBuffer>& buffer, bool isRenderable) override;
void unmapExternalTextureBuffer(const sp<GraphicBuffer>& buffer) override;
+ bool canSkipPostRenderCleanup() const override;
private:
static EGLConfig chooseEglConfig(EGLDisplay display, int format, bool logConfig);
@@ -126,19 +128,18 @@
// Number of external holders of ExternalTexture references, per GraphicBuffer ID.
std::unordered_map<GraphicBufferId, int32_t> mGraphicBufferExternalRefs
GUARDED_BY(mRenderingMutex);
- // Cache of GL textures that we'll store per GraphicBuffer ID, sliced by GPU context.
+ // Cache of GL textures that we'll store per GraphicBuffer ID, shared between GPU contexts.
std::unordered_map<GraphicBufferId, std::shared_ptr<AutoBackendTexture::LocalRef>> mTextureCache
GUARDED_BY(mRenderingMutex);
- std::unordered_map<GraphicBufferId, std::shared_ptr<AutoBackendTexture::LocalRef>>
- mProtectedTextureCache GUARDED_BY(mRenderingMutex);
std::unordered_map<LinearEffect, sk_sp<SkRuntimeEffect>, LinearEffectHasher> mRuntimeEffects;
+ AutoBackendTexture::CleanupManager mTextureCleanupMgr GUARDED_BY(mRenderingMutex);
StretchShaderFactory mStretchShaderFactory;
// Mutex guarding rendering operations, so that:
// 1. GL operations aren't interleaved, and
// 2. Internal state related to rendering that is potentially modified by
// multiple threads is guaranteed thread-safe.
- std::mutex mRenderingMutex;
+ mutable std::mutex mRenderingMutex;
sp<Fence> mLastDrawFence;
diff --git a/libs/renderengine/skia/SkiaRenderEngine.cpp b/libs/renderengine/skia/SkiaRenderEngine.cpp
index 81f0b6f..29175a2 100644
--- a/libs/renderengine/skia/SkiaRenderEngine.cpp
+++ b/libs/renderengine/skia/SkiaRenderEngine.cpp
@@ -14,13 +14,22 @@
* limitations under the License.
*/
-//#define LOG_NDEBUG 0
#undef LOG_TAG
#define LOG_TAG "RenderEngine"
#define ATRACE_TAG ATRACE_TAG_GRAPHICS
+#include "SkiaRenderEngine.h"
+
+#include <android-base/properties.h>
+#include <src/core/SkTraceEventCommon.h>
+
namespace android {
namespace renderengine {
-namespace skia {} // namespace skia
+namespace skia {
+SkiaRenderEngine::SkiaRenderEngine(RenderEngineType type) : RenderEngine(type) {
+ SkAndroidFrameworkTraceUtil::setEnableTracing(
+ base::GetBoolProperty(PROPERTY_SKIA_ATRACE_ENABLED, false));
+}
+} // namespace skia
} // namespace renderengine
-} // namespace android
\ No newline at end of file
+} // namespace android
diff --git a/libs/renderengine/skia/SkiaRenderEngine.h b/libs/renderengine/skia/SkiaRenderEngine.h
index 308c5ff..31ad63e 100644
--- a/libs/renderengine/skia/SkiaRenderEngine.h
+++ b/libs/renderengine/skia/SkiaRenderEngine.h
@@ -36,10 +36,10 @@
class SkiaRenderEngine : public RenderEngine {
public:
static std::unique_ptr<SkiaRenderEngine> create(const RenderEngineCreationArgs& args);
- SkiaRenderEngine(RenderEngineType type) : RenderEngine(type) {}
+ SkiaRenderEngine(RenderEngineType type);
~SkiaRenderEngine() override {}
- virtual void primeCache() override{};
+ virtual std::future<void> primeCache() override { return {}; };
virtual void genTextures(size_t /*count*/, uint32_t* /*names*/) override{};
virtual void deleteTextures(size_t /*count*/, uint32_t const* /*names*/) override{};
virtual bool isProtected() const override { return false; } // mInProtectedContext; }
@@ -53,15 +53,14 @@
base::unique_fd* /*drawFence*/) override {
return 0;
};
- virtual bool cleanupPostRender(CleanupMode) override { return true; };
virtual int getContextPriority() override { return 0; }
virtual void assertShadersCompiled(int numShaders) {}
virtual int reportShadersCompiled() { return 0; }
protected:
virtual void mapExternalTextureBuffer(const sp<GraphicBuffer>& /*buffer*/,
- bool /*isRenderable*/) override;
- virtual void unmapExternalTextureBuffer(const sp<GraphicBuffer>& /*buffer*/) override;
+ bool /*isRenderable*/) override = 0;
+ virtual void unmapExternalTextureBuffer(const sp<GraphicBuffer>& /*buffer*/) override = 0;
};
} // namespace skia
diff --git a/libs/renderengine/tests/RenderEngineTest.cpp b/libs/renderengine/tests/RenderEngineTest.cpp
index dfab6e8..e258741 100644
--- a/libs/renderengine/tests/RenderEngineTest.cpp
+++ b/libs/renderengine/tests/RenderEngineTest.cpp
@@ -43,6 +43,7 @@
constexpr bool WRITE_BUFFER_TO_FILE_ON_FAILURE = false;
namespace android {
+namespace renderengine {
class RenderEngineFactory {
public:
@@ -1779,13 +1780,6 @@
}
TEST_P(RenderEngineTest, cleanupPostRender_cleansUpOnce) {
- const auto& renderEngineFactory = GetParam();
-
- if (renderEngineFactory->type() != renderengine::RenderEngine::RenderEngineType::GLES) {
- // GLES-specific test
- return;
- }
-
initializeRenderEngine();
renderengine::DisplaySettings settings;
@@ -1810,53 +1804,9 @@
sync_wait(fd, -1);
}
// Only cleanup the first time.
- EXPECT_TRUE(mRE->cleanupPostRender(
- renderengine::RenderEngine::CleanupMode::CLEAN_OUTPUT_RESOURCES));
- EXPECT_FALSE(mRE->cleanupPostRender(
- renderengine::RenderEngine::CleanupMode::CLEAN_OUTPUT_RESOURCES));
-}
-
-TEST_P(RenderEngineTest, cleanupPostRender_whenCleaningAll_replacesTextureMemory) {
- const auto& renderEngineFactory = GetParam();
-
- if (renderEngineFactory->type() != renderengine::RenderEngine::RenderEngineType::GLES) {
- // GLES-specific test
- return;
- }
-
- initializeRenderEngine();
-
- renderengine::DisplaySettings settings;
- settings.outputDataspace = ui::Dataspace::V0_SRGB_LINEAR;
- settings.physicalDisplay = fullscreenRect();
- settings.clip = fullscreenRect();
-
- std::vector<const renderengine::LayerSettings*> layers;
- renderengine::LayerSettings layer;
- layer.geometry.boundaries = fullscreenRect().toFloatRect();
- BufferSourceVariant<ForceOpaqueBufferVariant>::fillColor(layer, 1.0f, 0.0f, 0.0f, this);
- layer.alpha = 1.0;
- layers.push_back(&layer);
-
- base::unique_fd fence;
- mRE->drawLayers(settings, layers, mBuffer, true, base::unique_fd(), &fence);
-
- const int fd = fence.get();
- if (fd >= 0) {
- sync_wait(fd, -1);
- }
-
- uint64_t bufferId = layer.source.buffer.buffer->getBuffer()->getId();
- uint32_t texName = layer.source.buffer.textureName;
- EXPECT_TRUE(mGLESRE->isImageCachedForTesting(bufferId));
- EXPECT_EQ(bufferId, mGLESRE->getBufferIdForTextureNameForTesting(texName));
-
- EXPECT_TRUE(mRE->cleanupPostRender(renderengine::RenderEngine::CleanupMode::CLEAN_ALL));
-
- // Now check that our view of memory is good.
- EXPECT_FALSE(mGLESRE->isImageCachedForTesting(bufferId));
- EXPECT_EQ(std::nullopt, mGLESRE->getBufferIdForTextureNameForTesting(bufferId));
- EXPECT_TRUE(mGLESRE->isTextureNameKnownForTesting(texName));
+ EXPECT_FALSE(mRE->canSkipPostRenderCleanup());
+ mRE->cleanupPostRender();
+ EXPECT_TRUE(mRE->canSkipPostRenderCleanup());
}
TEST_P(RenderEngineTest, testRoundedCornersCrop) {
@@ -2080,6 +2030,7 @@
expectBufferColor(rect, 0, 255, 0, 255);
}
}
+} // namespace renderengine
} // namespace android
// TODO(b/129481165): remove the #pragma below and fix conversion issues
diff --git a/libs/renderengine/tests/RenderEngineThreadedTest.cpp b/libs/renderengine/tests/RenderEngineThreadedTest.cpp
index e3917cc..c65e731 100644
--- a/libs/renderengine/tests/RenderEngineThreadedTest.cpp
+++ b/libs/renderengine/tests/RenderEngineThreadedTest.cpp
@@ -130,22 +130,22 @@
ASSERT_EQ(true, result);
}
-TEST_F(RenderEngineThreadedTest, cleanupPostRender_returnsFalse) {
- EXPECT_CALL(*mRenderEngine,
- cleanupPostRender(renderengine::RenderEngine::CleanupMode::CLEAN_ALL))
- .WillOnce(Return(false));
- status_t result =
- mThreadedRE->cleanupPostRender(renderengine::RenderEngine::CleanupMode::CLEAN_ALL);
- ASSERT_EQ(false, result);
+TEST_F(RenderEngineThreadedTest, PostRenderCleanup_skipped) {
+ EXPECT_CALL(*mRenderEngine, canSkipPostRenderCleanup()).WillOnce(Return(true));
+ EXPECT_CALL(*mRenderEngine, cleanupPostRender()).Times(0);
+ mThreadedRE->cleanupPostRender();
+
+ // call ANY synchronous function to ensure that cleanupPostRender has completed.
+ mThreadedRE->getContextPriority();
}
-TEST_F(RenderEngineThreadedTest, cleanupPostRender_returnsTrue) {
- EXPECT_CALL(*mRenderEngine,
- cleanupPostRender(renderengine::RenderEngine::CleanupMode::CLEAN_ALL))
- .WillOnce(Return(true));
- status_t result =
- mThreadedRE->cleanupPostRender(renderengine::RenderEngine::CleanupMode::CLEAN_ALL);
- ASSERT_EQ(true, result);
+TEST_F(RenderEngineThreadedTest, PostRenderCleanup_notSkipped) {
+ EXPECT_CALL(*mRenderEngine, canSkipPostRenderCleanup()).WillOnce(Return(false));
+ EXPECT_CALL(*mRenderEngine, cleanupPostRender()).WillOnce(Return());
+ mThreadedRE->cleanupPostRender();
+
+ // call ANY synchronous function to ensure that cleanupPostRender has completed.
+ mThreadedRE->getContextPriority();
}
TEST_F(RenderEngineThreadedTest, supportsBackgroundBlur_returnsFalse) {
diff --git a/libs/renderengine/threaded/RenderEngineThreaded.cpp b/libs/renderengine/threaded/RenderEngineThreaded.cpp
index 9009ce4..ea3871f 100644
--- a/libs/renderengine/threaded/RenderEngineThreaded.cpp
+++ b/libs/renderengine/threaded/RenderEngineThreaded.cpp
@@ -24,6 +24,7 @@
#include <android-base/stringprintf.h>
#include <private/gui/SyncFeatures.h>
+#include <processgroup/processgroup.h>
#include <utils/Trace.h>
#include "gl/GLESRenderEngine.h"
@@ -48,44 +49,74 @@
}
RenderEngineThreaded::~RenderEngineThreaded() {
- {
- std::lock_guard lock(mThreadMutex);
- mRunning = false;
- mCondition.notify_one();
- }
+ mRunning = false;
+ mCondition.notify_one();
if (mThread.joinable()) {
mThread.join();
}
}
+status_t RenderEngineThreaded::setSchedFifo(bool enabled) {
+ static constexpr int kFifoPriority = 2;
+ static constexpr int kOtherPriority = 0;
+
+ struct sched_param param = {0};
+ int sched_policy;
+ if (enabled) {
+ sched_policy = SCHED_FIFO;
+ param.sched_priority = kFifoPriority;
+ } else {
+ sched_policy = SCHED_OTHER;
+ param.sched_priority = kOtherPriority;
+ }
+
+ if (sched_setscheduler(0, sched_policy, ¶m) != 0) {
+ return -errno;
+ }
+ return NO_ERROR;
+}
+
// NO_THREAD_SAFETY_ANALYSIS is because std::unique_lock presently lacks thread safety annotations.
void RenderEngineThreaded::threadMain(CreateInstanceFactory factory) NO_THREAD_SAFETY_ANALYSIS {
ATRACE_CALL();
- struct sched_param param = {0};
- param.sched_priority = 2;
- if (sched_setscheduler(0, SCHED_FIFO, ¶m) != 0) {
- ALOGE("Couldn't set SCHED_FIFO");
+ if (!SetTaskProfiles(0, {"SFRenderEnginePolicy"})) {
+ ALOGW("Failed to set render-engine task profile!");
+ }
+
+ if (setSchedFifo(true) != NO_ERROR) {
+ ALOGW("Couldn't set SCHED_FIFO");
}
mRenderEngine = factory();
- std::unique_lock<std::mutex> lock(mThreadMutex);
pthread_setname_np(pthread_self(), mThreadName);
{
- std::unique_lock<std::mutex> lock(mInitializedMutex);
+ std::scoped_lock lock(mInitializedMutex);
mIsInitialized = true;
}
mInitializedCondition.notify_all();
while (mRunning) {
- if (!mFunctionCalls.empty()) {
- auto task = mFunctionCalls.front();
- mFunctionCalls.pop();
- task(*mRenderEngine);
+ const auto getNextTask = [this]() -> std::optional<Work> {
+ std::scoped_lock lock(mThreadMutex);
+ if (!mFunctionCalls.empty()) {
+ Work task = mFunctionCalls.front();
+ mFunctionCalls.pop();
+ return std::make_optional<Work>(task);
+ }
+ return std::nullopt;
+ };
+
+ const auto task = getNextTask();
+
+ if (task) {
+ (*task)(*mRenderEngine);
}
+
+ std::unique_lock<std::mutex> lock(mThreadMutex);
mCondition.wait(lock, [this]() REQUIRES(mThreadMutex) {
return !mRunning || !mFunctionCalls.empty();
});
@@ -100,18 +131,31 @@
mInitializedCondition.wait(lock, [=] { return mIsInitialized; });
}
-void RenderEngineThreaded::primeCache() {
+std::future<void> RenderEngineThreaded::primeCache() {
+ const auto resultPromise = std::make_shared<std::promise<void>>();
+ std::future<void> resultFuture = resultPromise->get_future();
ATRACE_CALL();
// This function is designed so it can run asynchronously, so we do not need to wait
// for the futures.
{
std::lock_guard lock(mThreadMutex);
- mFunctionCalls.push([](renderengine::RenderEngine& instance) {
+ mFunctionCalls.push([resultPromise](renderengine::RenderEngine& instance) {
ATRACE_NAME("REThreaded::primeCache");
+ if (setSchedFifo(false) != NO_ERROR) {
+ ALOGW("Couldn't set SCHED_OTHER for primeCache");
+ }
+
instance.primeCache();
+ resultPromise->set_value();
+
+ if (setSchedFifo(true) != NO_ERROR) {
+ ALOGW("Couldn't set SCHED_FIFO for primeCache");
+ }
});
}
mCondition.notify_one();
+
+ return resultFuture;
}
void RenderEngineThreaded::dump(std::string& result) {
@@ -231,19 +275,26 @@
return resultFuture.get();
}
-bool RenderEngineThreaded::cleanupPostRender(CleanupMode mode) {
- std::promise<bool> resultPromise;
- std::future<bool> resultFuture = resultPromise.get_future();
+void RenderEngineThreaded::cleanupPostRender() {
+ if (canSkipPostRenderCleanup()) {
+ return;
+ }
+
+ // This function is designed so it can run asynchronously, so we do not need to wait
+ // for the futures.
{
std::lock_guard lock(mThreadMutex);
- mFunctionCalls.push([&resultPromise, mode](renderengine::RenderEngine& instance) {
- ATRACE_NAME("REThreaded::cleanupPostRender");
- bool returnValue = instance.cleanupPostRender(mode);
- resultPromise.set_value(returnValue);
+ mFunctionCalls.push([=](renderengine::RenderEngine& instance) {
+ ATRACE_NAME("REThreaded::unmapExternalTextureBuffer");
+ instance.cleanupPostRender();
});
}
mCondition.notify_one();
- return resultFuture.get();
+}
+
+bool RenderEngineThreaded::canSkipPostRenderCleanup() const {
+ waitUntilInitialized();
+ return mRenderEngine->canSkipPostRenderCleanup();
}
status_t RenderEngineThreaded::drawLayers(const DisplaySettings& display,
diff --git a/libs/renderengine/threaded/RenderEngineThreaded.h b/libs/renderengine/threaded/RenderEngineThreaded.h
index eb6098e..9b523b2 100644
--- a/libs/renderengine/threaded/RenderEngineThreaded.h
+++ b/libs/renderengine/threaded/RenderEngineThreaded.h
@@ -42,7 +42,7 @@
RenderEngineThreaded(CreateInstanceFactory factory, RenderEngineType type);
~RenderEngineThreaded() override;
- void primeCache() override;
+ std::future<void> primeCache() override;
void dump(std::string& result) override;
@@ -54,7 +54,7 @@
bool isProtected() const override;
bool supportsProtectedContent() const override;
bool useProtectedContext(bool useProtectedContext) override;
- bool cleanupPostRender(CleanupMode mode) override;
+ void cleanupPostRender() override;
status_t drawLayers(const DisplaySettings& display,
const std::vector<const LayerSettings*>& layers,
@@ -70,10 +70,12 @@
protected:
void mapExternalTextureBuffer(const sp<GraphicBuffer>& buffer, bool isRenderable) override;
void unmapExternalTextureBuffer(const sp<GraphicBuffer>& buffer) override;
+ bool canSkipPostRenderCleanup() const override;
private:
void threadMain(CreateInstanceFactory factory);
void waitUntilInitialized() const;
+ static status_t setSchedFifo(bool enabled);
/* ------------------------------------------------------------------------
* Threading
@@ -82,9 +84,10 @@
// Protects the creation and destruction of mThread.
mutable std::mutex mThreadMutex;
std::thread mThread GUARDED_BY(mThreadMutex);
- bool mRunning GUARDED_BY(mThreadMutex) = true;
- mutable std::queue<std::function<void(renderengine::RenderEngine& instance)>> mFunctionCalls
- GUARDED_BY(mThreadMutex);
+ std::atomic<bool> mRunning = true;
+
+ using Work = std::function<void(renderengine::RenderEngine&)>;
+ mutable std::queue<Work> mFunctionCalls GUARDED_BY(mThreadMutex);
mutable std::condition_variable mCondition;
// Used to allow select thread safe methods to be accessed without requiring the
diff --git a/opengl/libs/EGL/egl_object.cpp b/opengl/libs/EGL/egl_object.cpp
index 847b351..efbe613 100644
--- a/opengl/libs/EGL/egl_object.cpp
+++ b/opengl/libs/EGL/egl_object.cpp
@@ -82,9 +82,13 @@
void egl_surface_t::disconnect() {
if (win != nullptr && connected) {
- native_window_set_buffers_format(win, 0);
- if (native_window_api_disconnect(win, NATIVE_WINDOW_API_EGL)) {
- ALOGW("EGLNativeWindowType %p disconnect failed", win);
+ // NOTE: When using Vulkan backend, the Vulkan runtime makes all the
+ // native_window_* calls, so don't do them here.
+ if (!cnx->useAngle) {
+ native_window_set_buffers_format(win, 0);
+ if (native_window_api_disconnect(win, NATIVE_WINDOW_API_EGL)) {
+ ALOGW("EGLNativeWindowType %p disconnect failed", win);
+ }
}
connected = false;
}
diff --git a/services/inputflinger/dispatcher/InputDispatcher.cpp b/services/inputflinger/dispatcher/InputDispatcher.cpp
index cf433c0..d2b8739 100644
--- a/services/inputflinger/dispatcher/InputDispatcher.cpp
+++ b/services/inputflinger/dispatcher/InputDispatcher.cpp
@@ -3787,7 +3787,7 @@
if (shouldSendKeyToInputFilterLocked(args)) {
mLock.unlock();
- policyFlags |= POLICY_FLAG_FILTERED;
+ policyFlags |= POLICY_FLAG_FILTERED | POLICY_FLAG_INPUTFILTER_TRUSTED;
if (!mPolicy->filterInputEvent(&event, policyFlags)) {
return; // event was consumed by the filter
}
@@ -4009,6 +4009,19 @@
policyFlags |= POLICY_FLAG_TRUSTED;
}
+ // For all injected events, set device id = VIRTUAL_KEYBOARD_ID. The only exception is events
+ // that have gone through the InputFilter. If the event passed through the InputFilter,
+ // but did not get modified, assign the provided device id. If the InputFilter modifies the
+ // events in any way, it is responsible for removing this flag.
+ // If the injected event originated from accessibility, assign the accessibility device id,
+ // so that it can be distinguished from regular injected events.
+ int32_t resolvedDeviceId = VIRTUAL_KEYBOARD_ID;
+ if (policyFlags & POLICY_FLAG_INPUTFILTER_TRUSTED) {
+ resolvedDeviceId = event->getDeviceId();
+ } else if (policyFlags & POLICY_FLAG_INJECTED_FROM_ACCESSIBILITY) {
+ resolvedDeviceId = ACCESSIBILITY_DEVICE_ID;
+ }
+
std::queue<std::unique_ptr<EventEntry>> injectedEntries;
switch (event->getType()) {
case AINPUT_EVENT_TYPE_KEY: {
@@ -4021,10 +4034,10 @@
int32_t flags = incomingKey.getFlags();
int32_t keyCode = incomingKey.getKeyCode();
int32_t metaState = incomingKey.getMetaState();
- accelerateMetaShortcuts(VIRTUAL_KEYBOARD_ID, action,
+ accelerateMetaShortcuts(resolvedDeviceId, action,
/*byref*/ keyCode, /*byref*/ metaState);
KeyEvent keyEvent;
- keyEvent.initialize(incomingKey.getId(), VIRTUAL_KEYBOARD_ID, incomingKey.getSource(),
+ keyEvent.initialize(incomingKey.getId(), resolvedDeviceId, incomingKey.getSource(),
incomingKey.getDisplayId(), INVALID_HMAC, action, flags, keyCode,
incomingKey.getScanCode(), metaState, incomingKey.getRepeatCount(),
incomingKey.getDownTime(), incomingKey.getEventTime());
@@ -4045,7 +4058,7 @@
mLock.lock();
std::unique_ptr<KeyEntry> injectedEntry =
std::make_unique<KeyEntry>(incomingKey.getId(), incomingKey.getEventTime(),
- VIRTUAL_KEYBOARD_ID, incomingKey.getSource(),
+ resolvedDeviceId, incomingKey.getSource(),
incomingKey.getDisplayId(), policyFlags, action,
flags, keyCode, incomingKey.getScanCode(), metaState,
incomingKey.getRepeatCount(),
@@ -4055,18 +4068,18 @@
}
case AINPUT_EVENT_TYPE_MOTION: {
- const MotionEvent* motionEvent = static_cast<const MotionEvent*>(event);
- int32_t action = motionEvent->getAction();
- size_t pointerCount = motionEvent->getPointerCount();
- const PointerProperties* pointerProperties = motionEvent->getPointerProperties();
- int32_t actionButton = motionEvent->getActionButton();
- int32_t displayId = motionEvent->getDisplayId();
+ const MotionEvent& motionEvent = static_cast<const MotionEvent&>(*event);
+ int32_t action = motionEvent.getAction();
+ size_t pointerCount = motionEvent.getPointerCount();
+ const PointerProperties* pointerProperties = motionEvent.getPointerProperties();
+ int32_t actionButton = motionEvent.getActionButton();
+ int32_t displayId = motionEvent.getDisplayId();
if (!validateMotionEvent(action, actionButton, pointerCount, pointerProperties)) {
return InputEventInjectionResult::FAILED;
}
if (!(policyFlags & POLICY_FLAG_FILTERED)) {
- nsecs_t eventTime = motionEvent->getEventTime();
+ nsecs_t eventTime = motionEvent.getEventTime();
android::base::Timer t;
mPolicy->interceptMotionBeforeQueueing(displayId, eventTime, /*byref*/ policyFlags);
if (t.duration() > SLOW_INTERCEPTION_THRESHOLD) {
@@ -4076,47 +4089,46 @@
}
mLock.lock();
- const nsecs_t* sampleEventTimes = motionEvent->getSampleEventTimes();
- const PointerCoords* samplePointerCoords = motionEvent->getSamplePointerCoords();
+ const nsecs_t* sampleEventTimes = motionEvent.getSampleEventTimes();
+ const PointerCoords* samplePointerCoords = motionEvent.getSamplePointerCoords();
std::unique_ptr<MotionEntry> injectedEntry =
- std::make_unique<MotionEntry>(motionEvent->getId(), *sampleEventTimes,
- VIRTUAL_KEYBOARD_ID, motionEvent->getSource(),
- motionEvent->getDisplayId(), policyFlags, action,
- actionButton, motionEvent->getFlags(),
- motionEvent->getMetaState(),
- motionEvent->getButtonState(),
- motionEvent->getClassification(),
- motionEvent->getEdgeFlags(),
- motionEvent->getXPrecision(),
- motionEvent->getYPrecision(),
- motionEvent->getRawXCursorPosition(),
- motionEvent->getRawYCursorPosition(),
- motionEvent->getDownTime(),
- uint32_t(pointerCount), pointerProperties,
- samplePointerCoords, motionEvent->getXOffset(),
- motionEvent->getYOffset());
+ std::make_unique<MotionEntry>(motionEvent.getId(), *sampleEventTimes,
+ resolvedDeviceId, motionEvent.getSource(),
+ motionEvent.getDisplayId(), policyFlags, action,
+ actionButton, motionEvent.getFlags(),
+ motionEvent.getMetaState(),
+ motionEvent.getButtonState(),
+ motionEvent.getClassification(),
+ motionEvent.getEdgeFlags(),
+ motionEvent.getXPrecision(),
+ motionEvent.getYPrecision(),
+ motionEvent.getRawXCursorPosition(),
+ motionEvent.getRawYCursorPosition(),
+ motionEvent.getDownTime(), uint32_t(pointerCount),
+ pointerProperties, samplePointerCoords,
+ motionEvent.getXOffset(),
+ motionEvent.getYOffset());
injectedEntries.push(std::move(injectedEntry));
- for (size_t i = motionEvent->getHistorySize(); i > 0; i--) {
+ for (size_t i = motionEvent.getHistorySize(); i > 0; i--) {
sampleEventTimes += 1;
samplePointerCoords += pointerCount;
std::unique_ptr<MotionEntry> nextInjectedEntry =
- std::make_unique<MotionEntry>(motionEvent->getId(), *sampleEventTimes,
- VIRTUAL_KEYBOARD_ID, motionEvent->getSource(),
- motionEvent->getDisplayId(), policyFlags,
- action, actionButton, motionEvent->getFlags(),
- motionEvent->getMetaState(),
- motionEvent->getButtonState(),
- motionEvent->getClassification(),
- motionEvent->getEdgeFlags(),
- motionEvent->getXPrecision(),
- motionEvent->getYPrecision(),
- motionEvent->getRawXCursorPosition(),
- motionEvent->getRawYCursorPosition(),
- motionEvent->getDownTime(),
+ std::make_unique<MotionEntry>(motionEvent.getId(), *sampleEventTimes,
+ resolvedDeviceId, motionEvent.getSource(),
+ motionEvent.getDisplayId(), policyFlags,
+ action, actionButton, motionEvent.getFlags(),
+ motionEvent.getMetaState(),
+ motionEvent.getButtonState(),
+ motionEvent.getClassification(),
+ motionEvent.getEdgeFlags(),
+ motionEvent.getXPrecision(),
+ motionEvent.getYPrecision(),
+ motionEvent.getRawXCursorPosition(),
+ motionEvent.getRawYCursorPosition(),
+ motionEvent.getDownTime(),
uint32_t(pointerCount), pointerProperties,
- samplePointerCoords,
- motionEvent->getXOffset(),
- motionEvent->getYOffset());
+ samplePointerCoords, motionEvent.getXOffset(),
+ motionEvent.getYOffset());
injectedEntries.push(std::move(nextInjectedEntry));
}
break;
diff --git a/services/inputflinger/include/InputReaderBase.h b/services/inputflinger/include/InputReaderBase.h
index 19abfd9..7fdbbfd 100644
--- a/services/inputflinger/include/InputReaderBase.h
+++ b/services/inputflinger/include/InputReaderBase.h
@@ -113,9 +113,9 @@
/* Get battery status of a particular input device. */
virtual std::optional<int32_t> getBatteryStatus(int32_t deviceId) = 0;
- virtual std::vector<int32_t> getLightIds(int32_t deviceId) = 0;
+ virtual std::vector<InputDeviceLightInfo> getLights(int32_t deviceId) = 0;
- virtual const InputDeviceLightInfo* getLightInfo(int32_t deviceId, int32_t lightId) = 0;
+ virtual std::vector<InputDeviceSensorInfo> getSensors(int32_t deviceId) = 0;
/* Return true if the device can send input events to the specified display. */
virtual bool canDispatchToDisplay(int32_t deviceId, int32_t displayId) = 0;
diff --git a/services/inputflinger/reader/EventHub.cpp b/services/inputflinger/reader/EventHub.cpp
index e3e6c12..b19b419 100644
--- a/services/inputflinger/reader/EventHub.cpp
+++ b/services/inputflinger/reader/EventHub.cpp
@@ -67,6 +67,8 @@
// v4l2 devices go directly into /dev
static const char* VIDEO_DEVICE_PATH = "/dev";
+static constexpr size_t OBFUSCATED_LENGTH = 8;
+
static constexpr int32_t FF_STRONG_MAGNITUDE_CHANNEL_IDX = 0;
static constexpr int32_t FF_WEAK_MAGNITUDE_CHANNEL_IDX = 1;
@@ -1828,9 +1830,21 @@
void EventHub::reportDeviceAddedForStatisticsLocked(const InputDeviceIdentifier& identifier,
Flags<InputDeviceClass> classes) {
+ SHA256_CTX ctx;
+ SHA256_Init(&ctx);
+ SHA256_Update(&ctx, reinterpret_cast<const uint8_t*>(identifier.uniqueId.c_str()),
+ identifier.uniqueId.size());
+ std::array<uint8_t, SHA256_DIGEST_LENGTH> digest;
+ SHA256_Final(digest.data(), &ctx);
+
+ std::string obfuscatedId;
+ for (size_t i = 0; i < OBFUSCATED_LENGTH; i++) {
+ obfuscatedId += StringPrintf("%02x", digest[i]);
+ }
+
android::util::stats_write(android::util::INPUTDEVICE_REGISTERED, identifier.name.c_str(),
identifier.vendor, identifier.product, identifier.version,
- identifier.bus, identifier.uniqueId.c_str(), classes.get());
+ identifier.bus, obfuscatedId.c_str(), classes.get());
}
void EventHub::openDeviceLocked(const std::string& devicePath) {
diff --git a/services/inputflinger/reader/InputDevice.cpp b/services/inputflinger/reader/InputDevice.cpp
index ad503fd..7af014c 100644
--- a/services/inputflinger/reader/InputDevice.cpp
+++ b/services/inputflinger/reader/InputDevice.cpp
@@ -89,8 +89,7 @@
}
void InputDevice::dump(std::string& dump, const std::string& eventHubDevStr) {
- InputDeviceInfo deviceInfo;
- getDeviceInfo(&deviceInfo);
+ InputDeviceInfo deviceInfo = getDeviceInfo();
dump += StringPrintf(INDENT "Device %d: %s\n", deviceInfo.getId(),
deviceInfo.getDisplayName().c_str());
@@ -417,15 +416,17 @@
for_each_mapper([state](InputMapper& mapper) { mapper.updateExternalStylusState(state); });
}
-void InputDevice::getDeviceInfo(InputDeviceInfo* outDeviceInfo) {
- outDeviceInfo->initialize(mId, mGeneration, mControllerNumber, mIdentifier, mAlias, mIsExternal,
- mHasMic);
+InputDeviceInfo InputDevice::getDeviceInfo() {
+ InputDeviceInfo outDeviceInfo;
+ outDeviceInfo.initialize(mId, mGeneration, mControllerNumber, mIdentifier, mAlias, mIsExternal,
+ mHasMic);
for_each_mapper(
- [outDeviceInfo](InputMapper& mapper) { mapper.populateDeviceInfo(outDeviceInfo); });
+ [&outDeviceInfo](InputMapper& mapper) { mapper.populateDeviceInfo(&outDeviceInfo); });
if (mController) {
- mController->populateDeviceInfo(outDeviceInfo);
+ mController->populateDeviceInfo(&outDeviceInfo);
}
+ return outDeviceInfo;
}
int32_t InputDevice::getKeyCodeState(uint32_t sourceMask, int32_t keyCode) {
diff --git a/services/inputflinger/reader/InputReader.cpp b/services/inputflinger/reader/InputReader.cpp
index e91f84e..10c04f6 100644
--- a/services/inputflinger/reader/InputReader.cpp
+++ b/services/inputflinger/reader/InputReader.cpp
@@ -406,9 +406,7 @@
for (auto& devicePair : mDevices) {
std::shared_ptr<InputDevice>& device = devicePair.second;
if (device->getClasses().test(InputDeviceClass::EXTERNAL_STYLUS) && !device->isIgnored()) {
- InputDeviceInfo info;
- device->getDeviceInfo(&info);
- outDevices.push_back(info);
+ outDevices.push_back(device->getDeviceInfo());
}
}
}
@@ -498,9 +496,7 @@
for (const auto& [device, eventHubIds] : mDeviceToEventHubIdsMap) {
if (!device->isIgnored()) {
- InputDeviceInfo info;
- device->getDeviceInfo(&info);
- outInputDevices.push_back(info);
+ outInputDevices.push_back(device->getDeviceInfo());
}
}
return outInputDevices;
@@ -695,28 +691,26 @@
return std::nullopt;
}
-std::vector<int32_t> InputReader::getLightIds(int32_t deviceId) {
+std::vector<InputDeviceLightInfo> InputReader::getLights(int32_t deviceId) {
std::scoped_lock _l(mLock);
InputDevice* device = findInputDeviceLocked(deviceId);
- if (device) {
- InputDeviceInfo info;
- device->getDeviceInfo(&info);
- return info.getLightIds();
+ if (device == nullptr) {
+ return {};
}
- return {};
+
+ return device->getDeviceInfo().getLights();
}
-const InputDeviceLightInfo* InputReader::getLightInfo(int32_t deviceId, int32_t lightId) {
+std::vector<InputDeviceSensorInfo> InputReader::getSensors(int32_t deviceId) {
std::scoped_lock _l(mLock);
InputDevice* device = findInputDeviceLocked(deviceId);
- if (device) {
- InputDeviceInfo info;
- device->getDeviceInfo(&info);
- return info.getLightInfo(lightId);
+ if (device == nullptr) {
+ return {};
}
- return nullptr;
+
+ return device->getDeviceInfo().getSensors();
}
bool InputReader::setLightColor(int32_t deviceId, int32_t lightId, int32_t color) {
diff --git a/services/inputflinger/reader/TouchVideoDevice.cpp b/services/inputflinger/reader/TouchVideoDevice.cpp
index c075078..c7c8e28 100644
--- a/services/inputflinger/reader/TouchVideoDevice.cpp
+++ b/services/inputflinger/reader/TouchVideoDevice.cpp
@@ -169,8 +169,9 @@
mFrames.insert(mFrames.end(), std::make_move_iterator(frames.begin()),
std::make_move_iterator(frames.end()));
if (mFrames.size() > MAX_QUEUE_SIZE) {
- ALOGE("More than %zu frames have been accumulated. Dropping %zu frames", MAX_QUEUE_SIZE,
- mFrames.size() - MAX_QUEUE_SIZE);
+ // A user-space grip suppression process may be processing the video frames, and holding
+ // back the input events. This could result in video frames being produced without the
+ // matching input events. Drop the oldest frame here to prepare for the next input event.
mFrames.erase(mFrames.begin(), mFrames.end() - MAX_QUEUE_SIZE);
}
return numFrames;
diff --git a/services/inputflinger/reader/include/InputDevice.h b/services/inputflinger/reader/include/InputDevice.h
index 291f105..2f2eba7 100644
--- a/services/inputflinger/reader/include/InputDevice.h
+++ b/services/inputflinger/reader/include/InputDevice.h
@@ -80,7 +80,7 @@
void timeoutExpired(nsecs_t when);
void updateExternalStylusState(const StylusState& state);
- void getDeviceInfo(InputDeviceInfo* outDeviceInfo);
+ InputDeviceInfo getDeviceInfo();
int32_t getKeyCodeState(uint32_t sourceMask, int32_t keyCode);
int32_t getScanCodeState(uint32_t sourceMask, int32_t scanCode);
int32_t getSwitchState(uint32_t sourceMask, int32_t switchCode);
diff --git a/services/inputflinger/reader/include/InputReader.h b/services/inputflinger/reader/include/InputReader.h
index bc79ccf..a00c5af 100644
--- a/services/inputflinger/reader/include/InputReader.h
+++ b/services/inputflinger/reader/include/InputReader.h
@@ -99,9 +99,9 @@
std::optional<int32_t> getBatteryStatus(int32_t deviceId) override;
- std::vector<int32_t> getLightIds(int32_t deviceId) override;
+ std::vector<InputDeviceLightInfo> getLights(int32_t deviceId) override;
- const InputDeviceLightInfo* getLightInfo(int32_t deviceId, int32_t lightId) override;
+ std::vector<InputDeviceSensorInfo> getSensors(int32_t deviceId) override;
bool setLightColor(int32_t deviceId, int32_t lightId, int32_t color) override;
@@ -130,24 +130,24 @@
// lock is already held by the input loop
void updateGlobalMetaState() NO_THREAD_SAFETY_ANALYSIS override;
int32_t getGlobalMetaState() NO_THREAD_SAFETY_ANALYSIS override;
- void disableVirtualKeysUntil(nsecs_t time) NO_THREAD_SAFETY_ANALYSIS override;
- bool shouldDropVirtualKey(nsecs_t now, int32_t keyCode,
- int32_t scanCode) NO_THREAD_SAFETY_ANALYSIS override;
- void fadePointer() NO_THREAD_SAFETY_ANALYSIS override;
+ void disableVirtualKeysUntil(nsecs_t time) REQUIRES(mReader->mLock) override;
+ bool shouldDropVirtualKey(nsecs_t now, int32_t keyCode, int32_t scanCode)
+ REQUIRES(mReader->mLock) override;
+ void fadePointer() REQUIRES(mReader->mLock) override;
std::shared_ptr<PointerControllerInterface> getPointerController(int32_t deviceId)
- NO_THREAD_SAFETY_ANALYSIS override;
- void requestTimeoutAtTime(nsecs_t when) NO_THREAD_SAFETY_ANALYSIS override;
+ REQUIRES(mReader->mLock) override;
+ void requestTimeoutAtTime(nsecs_t when) REQUIRES(mReader->mLock) override;
int32_t bumpGeneration() NO_THREAD_SAFETY_ANALYSIS override;
void getExternalStylusDevices(std::vector<InputDeviceInfo>& outDevices)
- NO_THREAD_SAFETY_ANALYSIS override;
+ REQUIRES(mReader->mLock) override;
void dispatchExternalStylusState(const StylusState& outState)
- NO_THREAD_SAFETY_ANALYSIS override;
- InputReaderPolicyInterface* getPolicy() NO_THREAD_SAFETY_ANALYSIS override;
- InputListenerInterface* getListener() NO_THREAD_SAFETY_ANALYSIS override;
- EventHubInterface* getEventHub() NO_THREAD_SAFETY_ANALYSIS override;
+ REQUIRES(mReader->mLock) override;
+ InputReaderPolicyInterface* getPolicy() REQUIRES(mReader->mLock) override;
+ InputListenerInterface* getListener() REQUIRES(mReader->mLock) override;
+ EventHubInterface* getEventHub() REQUIRES(mReader->mLock) override;
int32_t getNextId() NO_THREAD_SAFETY_ANALYSIS override;
- void updateLedMetaState(int32_t metaState) NO_THREAD_SAFETY_ANALYSIS override;
- int32_t getLedMetaState() NO_THREAD_SAFETY_ANALYSIS override;
+ void updateLedMetaState(int32_t metaState) REQUIRES(mReader->mLock) override;
+ int32_t getLedMetaState() REQUIRES(mReader->mLock) REQUIRES(mLock) override;
} mContext;
friend class ContextImpl;
diff --git a/services/inputflinger/tests/InputDispatcher_test.cpp b/services/inputflinger/tests/InputDispatcher_test.cpp
index 93aa6ac..d51acce 100644
--- a/services/inputflinger/tests/InputDispatcher_test.cpp
+++ b/services/inputflinger/tests/InputDispatcher_test.cpp
@@ -473,6 +473,7 @@
const sp<InputWindowHandle>& focusedWindow = nullptr) {
FocusRequest request;
request.token = window->getToken();
+ request.windowName = window->getName();
if (focusedWindow) {
request.focusedToken = focusedWindow->getToken();
}
@@ -1085,6 +1086,20 @@
return mInputReceiver->consume();
}
+ MotionEvent* consumeMotion() {
+ InputEvent* event = consume();
+ if (event == nullptr) {
+ ADD_FAILURE() << "Consume failed : no event";
+ return nullptr;
+ }
+ if (event->getType() != AINPUT_EVENT_TYPE_MOTION) {
+ ADD_FAILURE() << "Instead of motion event, got "
+ << inputEventTypeToString(event->getType());
+ return nullptr;
+ }
+ return static_cast<MotionEvent*>(event);
+ }
+
void assertNoEvents() {
if (mInputReceiver == nullptr &&
mInfo.inputFeatures.test(InputWindowInfo::Feature::NO_INPUT_CHANNEL)) {
@@ -2446,13 +2461,10 @@
generateMotionArgs(AMOTION_EVENT_ACTION_MOVE, source, ADISPLAY_ID_DEFAULT);
mDispatcher->notifyMotion(&motionArgs);
- InputEvent* event = window->consume();
+ MotionEvent* event = window->consumeMotion();
ASSERT_NE(event, nullptr);
- ASSERT_EQ(AINPUT_EVENT_TYPE_MOTION, event->getType())
- << name.c_str() << "expected " << inputEventTypeToString(AINPUT_EVENT_TYPE_MOTION)
- << " event, got " << inputEventTypeToString(event->getType()) << " event";
- const MotionEvent& motionEvent = static_cast<const MotionEvent&>(*event);
+ const MotionEvent& motionEvent = *event;
EXPECT_EQ(AMOTION_EVENT_ACTION_MOVE, motionEvent.getAction());
EXPECT_EQ(motionArgs.pointerCount, motionEvent.getPointerCount());
@@ -3118,6 +3130,70 @@
testNotifyKey(/*expectToBeFiltered*/ false);
}
+class InputFilterInjectionPolicyTest : public InputDispatcherTest {
+protected:
+ virtual void SetUp() override {
+ InputDispatcherTest::SetUp();
+
+ /**
+ * We don't need to enable input filter to test the injected event policy, but we enabled it
+ * here to make the tests more realistic, since this policy only matters when inputfilter is
+ * on.
+ */
+ mDispatcher->setInputFilterEnabled(true);
+
+ std::shared_ptr<InputApplicationHandle> application =
+ std::make_shared<FakeApplicationHandle>();
+ mWindow =
+ new FakeWindowHandle(application, mDispatcher, "Test Window", ADISPLAY_ID_DEFAULT);
+
+ mDispatcher->setFocusedApplication(ADISPLAY_ID_DEFAULT, application);
+ mWindow->setFocusable(true);
+ mDispatcher->setInputWindows({{ADISPLAY_ID_DEFAULT, {mWindow}}});
+ setFocusedWindow(mWindow);
+ mWindow->consumeFocusEvent(true);
+ }
+
+ void testInjectedKey(int32_t policyFlags, int32_t injectedDeviceId, int32_t resolvedDeviceId) {
+ KeyEvent event;
+
+ const nsecs_t eventTime = systemTime(SYSTEM_TIME_MONOTONIC);
+ event.initialize(InputEvent::nextId(), injectedDeviceId, AINPUT_SOURCE_KEYBOARD,
+ ADISPLAY_ID_NONE, INVALID_HMAC, AKEY_EVENT_ACTION_DOWN, 0, AKEYCODE_A,
+ KEY_A, AMETA_NONE, 0 /*repeatCount*/, eventTime, eventTime);
+ const int32_t additionalPolicyFlags =
+ POLICY_FLAG_PASS_TO_USER | POLICY_FLAG_DISABLE_KEY_REPEAT;
+ ASSERT_EQ(InputEventInjectionResult::SUCCEEDED,
+ mDispatcher->injectInputEvent(&event, INJECTOR_PID, INJECTOR_UID,
+ InputEventInjectionSync::WAIT_FOR_RESULT, 10ms,
+ policyFlags | additionalPolicyFlags));
+
+ InputEvent* received = mWindow->consume();
+ ASSERT_NE(nullptr, received);
+ ASSERT_EQ(resolvedDeviceId, received->getDeviceId());
+ }
+
+private:
+ sp<FakeWindowHandle> mWindow;
+};
+
+TEST_F(InputFilterInjectionPolicyTest, TrustedFilteredEvents_KeepOriginalDeviceId) {
+ // We don't need POLICY_FLAG_FILTERED here, but it will be set in practice, so keep it to make
+ // the test more closely resemble the real usage
+ testInjectedKey(POLICY_FLAG_FILTERED | POLICY_FLAG_INPUTFILTER_TRUSTED, 3 /*injectedDeviceId*/,
+ 3 /*resolvedDeviceId*/);
+}
+
+TEST_F(InputFilterInjectionPolicyTest, EventsInjectedFromAccessibility_HaveAccessibilityDeviceId) {
+ testInjectedKey(POLICY_FLAG_FILTERED | POLICY_FLAG_INJECTED_FROM_ACCESSIBILITY,
+ 3 /*injectedDeviceId*/, ACCESSIBILITY_DEVICE_ID /*resolvedDeviceId*/);
+}
+
+TEST_F(InputFilterInjectionPolicyTest, RegularInjectedEvents_ReceiveVirtualDeviceId) {
+ testInjectedKey(0 /*policyFlags*/, 3 /*injectedDeviceId*/,
+ VIRTUAL_KEYBOARD_ID /*resolvedDeviceId*/);
+}
+
class InputDispatcherOnPointerDownOutsideFocus : public InputDispatcherTest {
virtual void SetUp() override {
InputDispatcherTest::SetUp();
diff --git a/services/inputflinger/tests/InputReader_test.cpp b/services/inputflinger/tests/InputReader_test.cpp
index 7a11ca7..73198bc 100644
--- a/services/inputflinger/tests/InputReader_test.cpp
+++ b/services/inputflinger/tests/InputReader_test.cpp
@@ -1524,20 +1524,6 @@
}
};
-TEST_F(InputReaderTest, ReaderGetInputDevices) {
- ASSERT_NO_FATAL_FAILURE(addDevice(1, "keyboard", InputDeviceClass::KEYBOARD, nullptr));
- ASSERT_NO_FATAL_FAILURE(addDevice(2, "ignored", Flags<InputDeviceClass>(0),
- nullptr)); // no classes so device will be ignored
-
- const std::vector<InputDeviceInfo> inputDevices = mReader->getInputDevices();
- ASSERT_EQ(1U, inputDevices.size());
- ASSERT_EQ(END_RESERVED_ID + 1, inputDevices[0].getId());
- ASSERT_STREQ("keyboard", inputDevices[0].getIdentifier().name.c_str());
- ASSERT_EQ(AINPUT_KEYBOARD_TYPE_NON_ALPHABETIC, inputDevices[0].getKeyboardType());
- ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, inputDevices[0].getSources());
- ASSERT_EQ(size_t(0), inputDevices[0].getMotionRanges().size());
-}
-
TEST_F(InputReaderTest, PolicyGetInputDevices) {
ASSERT_NO_FATAL_FAILURE(addDevice(1, "keyboard", InputDeviceClass::KEYBOARD, nullptr));
ASSERT_NO_FATAL_FAILURE(addDevice(2, "ignored", Flags<InputDeviceClass>(0),
@@ -1550,7 +1536,7 @@
ASSERT_STREQ("keyboard", inputDevices[0].getIdentifier().name.c_str());
ASSERT_EQ(AINPUT_KEYBOARD_TYPE_NON_ALPHABETIC, inputDevices[0].getKeyboardType());
ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, inputDevices[0].getSources());
- ASSERT_EQ(size_t(0), inputDevices[0].getMotionRanges().size());
+ ASSERT_EQ(0U, inputDevices[0].getMotionRanges().size());
}
TEST_F(InputReaderTest, GetMergedInputDevices) {
@@ -1571,7 +1557,7 @@
addDevice(eventHubIds[1], "fake2", InputDeviceClass::KEYBOARD, nullptr));
// Two devices will be merged to one input device as they have same identifier
- ASSERT_EQ(1U, mReader->getInputDevices().size());
+ ASSERT_EQ(1U, mFakePolicy->getInputDevices().size());
}
TEST_F(InputReaderTest, GetMergedInputDevicesEnabled) {
@@ -2189,7 +2175,7 @@
ASSERT_EQ(initialNumDevices + 1, mFakePolicy->getInputDevices().size());
// Find the test device by its name.
- const std::vector<InputDeviceInfo> inputDevices = mReader->getInputDevices();
+ const std::vector<InputDeviceInfo> inputDevices = mFakePolicy->getInputDevices();
const auto& it =
std::find_if(inputDevices.begin(), inputDevices.end(),
[&keyboard](const InputDeviceInfo& info) {
@@ -2463,8 +2449,7 @@
ASSERT_TRUE(mDevice->isIgnored());
ASSERT_EQ(AINPUT_SOURCE_UNKNOWN, mDevice->getSources());
- InputDeviceInfo info;
- mDevice->getDeviceInfo(&info);
+ InputDeviceInfo info = mDevice->getDeviceInfo();
ASSERT_EQ(DEVICE_ID, info.getId());
ASSERT_STREQ(DEVICE_NAME, info.getIdentifier().name.c_str());
ASSERT_EQ(AINPUT_KEYBOARD_TYPE_NONE, info.getKeyboardType());
@@ -2533,8 +2518,7 @@
ASSERT_FALSE(mDevice->isIgnored());
ASSERT_EQ(uint32_t(AINPUT_SOURCE_KEYBOARD | AINPUT_SOURCE_TOUCHSCREEN), mDevice->getSources());
- InputDeviceInfo info;
- mDevice->getDeviceInfo(&info);
+ InputDeviceInfo info = mDevice->getDeviceInfo();
ASSERT_EQ(DEVICE_ID, info.getId());
ASSERT_STREQ(DEVICE_NAME, info.getIdentifier().name.c_str());
ASSERT_EQ(AINPUT_KEYBOARD_TYPE_ALPHABETIC, info.getKeyboardType());
@@ -8444,8 +8428,7 @@
ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyDeviceResetWasCalled(&resetArgs));
ASSERT_EQ(AINPUT_SOURCE_TOUCHPAD, mapper.getSources());
- InputDeviceInfo deviceInfo;
- mDevice->getDeviceInfo(&deviceInfo);
+ InputDeviceInfo deviceInfo = mDevice->getDeviceInfo();
const InputDeviceInfo::MotionRange* relRangeX =
deviceInfo.getMotionRange(AMOTION_EVENT_AXIS_RELATIVE_X, AINPUT_SOURCE_TOUCHPAD);
@@ -8755,12 +8738,12 @@
PeripheralController& controller = addControllerAndConfigure<PeripheralController>();
InputDeviceInfo info;
controller.populateDeviceInfo(&info);
- const auto& ids = info.getLightIds();
- ASSERT_EQ(1UL, ids.size());
- ASSERT_EQ(InputDeviceLightType::MONO, info.getLightInfo(ids[0])->type);
+ std::vector<InputDeviceLightInfo> lights = info.getLights();
+ ASSERT_EQ(1U, lights.size());
+ ASSERT_EQ(InputDeviceLightType::MONO, lights[0].type);
- ASSERT_TRUE(controller.setLightColor(ids[0], LIGHT_BRIGHTNESS));
- ASSERT_EQ(controller.getLightColor(ids[0]).value_or(-1), LIGHT_BRIGHTNESS);
+ ASSERT_TRUE(controller.setLightColor(lights[0].id, LIGHT_BRIGHTNESS));
+ ASSERT_EQ(controller.getLightColor(lights[0].id).value_or(-1), LIGHT_BRIGHTNESS);
}
TEST_F(LightControllerTest, RGBLight) {
@@ -8786,12 +8769,12 @@
PeripheralController& controller = addControllerAndConfigure<PeripheralController>();
InputDeviceInfo info;
controller.populateDeviceInfo(&info);
- const auto& ids = info.getLightIds();
- ASSERT_EQ(1UL, ids.size());
- ASSERT_EQ(InputDeviceLightType::RGB, info.getLightInfo(ids[0])->type);
+ std::vector<InputDeviceLightInfo> lights = info.getLights();
+ ASSERT_EQ(1U, lights.size());
+ ASSERT_EQ(InputDeviceLightType::RGB, lights[0].type);
- ASSERT_TRUE(controller.setLightColor(ids[0], LIGHT_COLOR));
- ASSERT_EQ(controller.getLightColor(ids[0]).value_or(-1), LIGHT_COLOR);
+ ASSERT_TRUE(controller.setLightColor(lights[0].id, LIGHT_COLOR));
+ ASSERT_EQ(controller.getLightColor(lights[0].id).value_or(-1), LIGHT_COLOR);
}
TEST_F(LightControllerTest, MultiColorRGBLight) {
@@ -8808,12 +8791,12 @@
PeripheralController& controller = addControllerAndConfigure<PeripheralController>();
InputDeviceInfo info;
controller.populateDeviceInfo(&info);
- const auto& ids = info.getLightIds();
- ASSERT_EQ(1UL, ids.size());
- ASSERT_EQ(InputDeviceLightType::MULTI_COLOR, info.getLightInfo(ids[0])->type);
+ std::vector<InputDeviceLightInfo> lights = info.getLights();
+ ASSERT_EQ(1U, lights.size());
+ ASSERT_EQ(InputDeviceLightType::MULTI_COLOR, lights[0].type);
- ASSERT_TRUE(controller.setLightColor(ids[0], LIGHT_COLOR));
- ASSERT_EQ(controller.getLightColor(ids[0]).value_or(-1), LIGHT_COLOR);
+ ASSERT_TRUE(controller.setLightColor(lights[0].id, LIGHT_COLOR));
+ ASSERT_EQ(controller.getLightColor(lights[0].id).value_or(-1), LIGHT_COLOR);
}
TEST_F(LightControllerTest, PlayerIdLight) {
@@ -8845,13 +8828,13 @@
PeripheralController& controller = addControllerAndConfigure<PeripheralController>();
InputDeviceInfo info;
controller.populateDeviceInfo(&info);
- const auto& ids = info.getLightIds();
- ASSERT_EQ(1UL, ids.size());
- ASSERT_EQ(InputDeviceLightType::PLAYER_ID, info.getLightInfo(ids[0])->type);
+ std::vector<InputDeviceLightInfo> lights = info.getLights();
+ ASSERT_EQ(1U, lights.size());
+ ASSERT_EQ(InputDeviceLightType::PLAYER_ID, lights[0].type);
- ASSERT_FALSE(controller.setLightColor(ids[0], LIGHT_COLOR));
- ASSERT_TRUE(controller.setLightPlayerId(ids[0], LIGHT_PLAYER_ID));
- ASSERT_EQ(controller.getLightPlayerId(ids[0]).value_or(-1), LIGHT_PLAYER_ID);
+ ASSERT_FALSE(controller.setLightColor(lights[0].id, LIGHT_COLOR));
+ ASSERT_TRUE(controller.setLightPlayerId(lights[0].id, LIGHT_PLAYER_ID));
+ ASSERT_EQ(controller.getLightPlayerId(lights[0].id).value_or(-1), LIGHT_PLAYER_ID);
}
} // namespace android
diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp
index 9df020d..2281721 100644
--- a/services/sensorservice/SensorService.cpp
+++ b/services/sensorservice/SensorService.cpp
@@ -1626,19 +1626,17 @@
}
void SensorService::notifyProximityStateLocked(
- const std::vector<sp<ProximityActiveListener>>& listnrs) {
- std::async(
- std::launch::async,
- [](uint64_t mySeq, bool isActive, std::vector<sp<ProximityActiveListener>> listeners) {
- while (completedCallbackSeq.load() != mySeq - 1)
- std::this_thread::sleep_for(1ms);
- for (auto& listener : listeners)
- listener->onProximityActive(isActive);
- completedCallbackSeq++;
- },
- ++curProxCallbackSeq, mProximityActiveCount > 0,
- listnrs /* (this is meant to be a copy) */
- );
+ const std::vector<sp<ProximityActiveListener>>& listeners) {
+ const bool isActive = mProximityActiveCount > 0;
+ const uint64_t mySeq = ++curProxCallbackSeq;
+ std::thread t([isActive, mySeq, listenersCopy = listeners]() {
+ while (completedCallbackSeq.load() != mySeq - 1)
+ std::this_thread::sleep_for(1ms);
+ for (auto& listener : listenersCopy)
+ listener->onProximityActive(isActive);
+ completedCallbackSeq++;
+ });
+ t.detach();
}
status_t SensorService::addProximityActiveListener(const sp<ProximityActiveListener>& callback) {
@@ -2172,6 +2170,13 @@
return true;
}
+/**
+ * Checks if a sensor should be capped according to HIGH_SAMPLING_RATE_SENSORS
+ * permission.
+ *
+ * This needs to be kept in sync with the list defined on the Java side
+ * in frameworks/base/core/java/android/hardware/SystemSensorManager.java
+ */
bool SensorService::isSensorInCappedSet(int sensorType) {
return (sensorType == SENSOR_TYPE_ACCELEROMETER
|| sensorType == SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED
diff --git a/services/surfaceflinger/BufferLayer.cpp b/services/surfaceflinger/BufferLayer.cpp
index cacad52..23779be 100644
--- a/services/surfaceflinger/BufferLayer.cpp
+++ b/services/surfaceflinger/BufferLayer.cpp
@@ -425,7 +425,8 @@
mFlinger->mTimeStats->setPresentFence(layerId, mCurrentFrameNumber, presentFence,
refreshRate, renderRate,
frameRateToSetFrameRateVotePayload(
- mDrawingState.frameRate));
+ mDrawingState.frameRate),
+ getGameMode());
mFlinger->mFrameTracer->traceFence(layerId, getCurrentBufferId(), mCurrentFrameNumber,
presentFence, FrameTracer::FrameEvent::PRESENT_FENCE);
mFrameTracker.setActualPresentFence(std::shared_ptr<FenceTime>(presentFence));
@@ -439,7 +440,8 @@
mFlinger->mTimeStats->setPresentTime(layerId, mCurrentFrameNumber, actualPresentTime,
refreshRate, renderRate,
frameRateToSetFrameRateVotePayload(
- mDrawingState.frameRate));
+ mDrawingState.frameRate),
+ getGameMode());
mFlinger->mFrameTracer->traceTimestamp(layerId, getCurrentBufferId(), mCurrentFrameNumber,
actualPresentTime,
FrameTracer::FrameEvent::PRESENT_FENCE);
diff --git a/services/surfaceflinger/BufferQueueLayer.cpp b/services/surfaceflinger/BufferQueueLayer.cpp
index e7f373f..c64371b 100644
--- a/services/surfaceflinger/BufferQueueLayer.cpp
+++ b/services/surfaceflinger/BufferQueueLayer.cpp
@@ -223,7 +223,7 @@
// buffer mode.
bool queuedBuffer = false;
const int32_t layerId = getSequence();
- LayerRejecter r(mDrawingState, getCurrentState(), recomputeVisibleRegions,
+ LayerRejecter r(mDrawingState, getDrawingState(), recomputeVisibleRegions,
getProducerStickyTransform() != 0, mName,
getTransformToDisplayInverse());
diff --git a/services/surfaceflinger/BufferStateLayer.cpp b/services/surfaceflinger/BufferStateLayer.cpp
index 54daa10..a3b7b13 100644
--- a/services/surfaceflinger/BufferStateLayer.cpp
+++ b/services/surfaceflinger/BufferStateLayer.cpp
@@ -33,6 +33,7 @@
#include <gui/BufferQueue.h>
#include <private/gui/SyncFeatures.h>
#include <renderengine/Image.h>
+#include "TunnelModeEnabledReporter.h"
#include "EffectLayer.h"
#include "FrameTracer/FrameTracer.h"
@@ -43,11 +44,13 @@
using PresentState = frametimeline::SurfaceFrame::PresentState;
namespace {
void callReleaseBufferCallback(const sp<ITransactionCompletedListener>& listener,
- const sp<GraphicBuffer>& buffer, const sp<Fence>& releaseFence) {
+ const sp<GraphicBuffer>& buffer, const sp<Fence>& releaseFence,
+ uint32_t transformHint, uint32_t currentMaxAcquiredBufferCount) {
if (!listener) {
return;
}
- listener->onReleaseBuffer(buffer->getId(), releaseFence ? releaseFence : Fence::NO_FENCE);
+ listener->onReleaseBuffer(buffer->getId(), releaseFence ? releaseFence : Fence::NO_FENCE,
+ transformHint, currentMaxAcquiredBufferCount);
}
} // namespace
@@ -62,7 +65,7 @@
BufferStateLayer::BufferStateLayer(const LayerCreationArgs& args)
: BufferLayer(args), mHwcSlotGenerator(new HwcSlotGenerator()) {
- mCurrentState.dataspace = ui::Dataspace::V0_SRGB;
+ mDrawingState.dataspace = ui::Dataspace::V0_SRGB;
}
BufferStateLayer::~BufferStateLayer() {
@@ -72,7 +75,10 @@
// issue with the clone layer trying to use the texture.
if (mBufferInfo.mBuffer != nullptr && !isClone()) {
callReleaseBufferCallback(mDrawingState.releaseBufferListener,
- mBufferInfo.mBuffer->getBuffer(), mBufferInfo.mFence);
+ mBufferInfo.mBuffer->getBuffer(), mBufferInfo.mFence,
+ mTransformHint,
+ mFlinger->getMaxAcquiredBufferCountForCurrentRefreshRate(
+ mOwnerUid));
}
}
@@ -196,6 +202,8 @@
for (const auto& handle : mDrawingState.callbackHandles) {
handle->transformHint = mTransformHint;
handle->dequeueReadyTime = dequeueReadyTime;
+ handle->currentMaxAcquiredBufferCount =
+ mFlinger->getMaxAcquiredBufferCountForCurrentRefreshRate(mOwnerUid);
}
// If there are multiple transactions in this frame, set the previous id on the earliest
@@ -249,8 +257,8 @@
bool BufferStateLayer::willPresentCurrentTransaction() const {
// Returns true if the most recent Transaction applied to CurrentState will be presented.
return (getSidebandStreamChanged() || getAutoRefresh() ||
- (mCurrentState.modified &&
- (mCurrentState.buffer != nullptr || mCurrentState.bgColorLayer != nullptr)));
+ (mDrawingState.modified &&
+ (mDrawingState.buffer != nullptr || mDrawingState.bgColorLayer != nullptr)));
}
Rect BufferStateLayer::getCrop(const Layer::State& s) const {
@@ -258,65 +266,72 @@
}
bool BufferStateLayer::setTransform(uint32_t transform) {
- if (mCurrentState.bufferTransform == transform) return false;
- mCurrentState.bufferTransform = transform;
- mCurrentState.modified = true;
+ if (mDrawingState.bufferTransform == transform) return false;
+ mDrawingState.bufferTransform = transform;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
bool BufferStateLayer::setTransformToDisplayInverse(bool transformToDisplayInverse) {
- if (mCurrentState.transformToDisplayInverse == transformToDisplayInverse) return false;
- mCurrentState.sequence++;
- mCurrentState.transformToDisplayInverse = transformToDisplayInverse;
- mCurrentState.modified = true;
+ if (mDrawingState.transformToDisplayInverse == transformToDisplayInverse) return false;
+ mDrawingState.sequence++;
+ mDrawingState.transformToDisplayInverse = transformToDisplayInverse;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
bool BufferStateLayer::setCrop(const Rect& crop) {
- if (mCurrentState.crop == crop) return false;
- mCurrentState.sequence++;
- mCurrentState.crop = crop;
+ if (mDrawingState.crop == crop) return false;
+ mDrawingState.sequence++;
+ mDrawingState.crop = crop;
- mCurrentState.modified = true;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
bool BufferStateLayer::setBufferCrop(const Rect& bufferCrop) {
- if (mCurrentState.bufferCrop == bufferCrop) return false;
+ if (mDrawingState.bufferCrop == bufferCrop) return false;
- mCurrentState.sequence++;
- mCurrentState.bufferCrop = bufferCrop;
+ mDrawingState.sequence++;
+ mDrawingState.bufferCrop = bufferCrop;
- mCurrentState.modified = true;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
bool BufferStateLayer::setDestinationFrame(const Rect& destinationFrame) {
- if (mCurrentState.destinationFrame == destinationFrame) return false;
+ if (mDrawingState.destinationFrame == destinationFrame) return false;
- mCurrentState.sequence++;
- mCurrentState.destinationFrame = destinationFrame;
+ mDrawingState.sequence++;
+ mDrawingState.destinationFrame = destinationFrame;
- mCurrentState.modified = true;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
+static bool assignTransform(ui::Transform* dst, ui::Transform& from) {
+ if (*dst == from) {
+ return false;
+ }
+ *dst = from;
+ return true;
+}
+
// Translate destination frame into scale and position. If a destination frame is not set, use the
// provided scale and position
-void BufferStateLayer::updateGeometry() {
- if (mCurrentState.destinationFrame.isEmpty()) {
+bool BufferStateLayer::updateGeometry() {
+ if (mDrawingState.destinationFrame.isEmpty()) {
// If destination frame is not set, use the requested transform set via
// BufferStateLayer::setPosition and BufferStateLayer::setMatrix.
- mCurrentState.transform = mRequestedTransform;
- return;
+ return assignTransform(&mDrawingState.transform, mRequestedTransform);
}
- Rect destRect = mCurrentState.destinationFrame;
+ Rect destRect = mDrawingState.destinationFrame;
int32_t destW = destRect.width();
int32_t destH = destRect.height();
if (destRect.left < 0) {
@@ -328,21 +343,20 @@
destRect.bottom = destH;
}
- if (!mCurrentState.buffer) {
+ if (!mDrawingState.buffer) {
ui::Transform t;
t.set(destRect.left, destRect.top);
- mCurrentState.transform = t;
- return;
+ return assignTransform(&mDrawingState.transform, t);
}
- uint32_t bufferWidth = mCurrentState.buffer->getBuffer()->getWidth();
- uint32_t bufferHeight = mCurrentState.buffer->getBuffer()->getHeight();
+ uint32_t bufferWidth = mDrawingState.buffer->getBuffer()->getWidth();
+ uint32_t bufferHeight = mDrawingState.buffer->getBuffer()->getHeight();
// Undo any transformations on the buffer.
- if (mCurrentState.bufferTransform & ui::Transform::ROT_90) {
+ if (mDrawingState.bufferTransform & ui::Transform::ROT_90) {
std::swap(bufferWidth, bufferHeight);
}
uint32_t invTransform = DisplayDevice::getPrimaryDisplayRotationFlags();
- if (mCurrentState.transformToDisplayInverse) {
+ if (mDrawingState.transformToDisplayInverse) {
if (invTransform & ui::Transform::ROT_90) {
std::swap(bufferWidth, bufferHeight);
}
@@ -353,8 +367,7 @@
ui::Transform t;
t.set(sx, 0, 0, sy);
t.set(destRect.left, destRect.top);
- mCurrentState.transform = t;
- return;
+ return assignTransform(&mDrawingState.transform, t);
}
bool BufferStateLayer::setMatrix(const layer_state_t::matrix22_t& matrix,
@@ -375,8 +388,8 @@
mRequestedTransform.set(matrix.dsdx, matrix.dtdy, matrix.dtdx, matrix.dsdy);
- mCurrentState.sequence++;
- mCurrentState.modified = true;
+ mDrawingState.sequence++;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
@@ -389,8 +402,8 @@
mRequestedTransform.set(x, y);
- mCurrentState.sequence++;
- mCurrentState.modified = true;
+ mDrawingState.sequence++;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
@@ -402,7 +415,7 @@
mAcquireTimeline.updateSignalTimes();
std::shared_ptr<FenceTime> acquireFenceTime =
std::make_shared<FenceTime>((acquireFence ? acquireFence : Fence::NO_FENCE));
- NewFrameEventsEntry newTimestamps = {mCurrentState.frameNumber, postedTime, desiredPresentTime,
+ NewFrameEventsEntry newTimestamps = {mDrawingState.frameNumber, postedTime, desiredPresentTime,
acquireFenceTime};
mFrameEventHistory.setProducerWantsEvents();
mFrameEventHistory.addQueue(newTimestamps);
@@ -417,36 +430,39 @@
const sp<ITransactionCompletedListener>& releaseBufferListener) {
ATRACE_CALL();
- if (mCurrentState.buffer) {
+ if (mDrawingState.buffer) {
mReleasePreviousBuffer = true;
- if (!mDrawingState.buffer ||
- mCurrentState.buffer->getBuffer() != mDrawingState.buffer->getBuffer()) {
- // If mCurrentState has a buffer, and we are about to update again
+ if (mDrawingState.buffer != mBufferInfo.mBuffer) {
+ // If mDrawingState has a buffer, and we are about to update again
// before swapping to drawing state, then the first buffer will be
// dropped and we should decrement the pending buffer count and
// call any release buffer callbacks if set.
- callReleaseBufferCallback(mCurrentState.releaseBufferListener,
- mCurrentState.buffer->getBuffer(),
- mCurrentState.acquireFence);
+ callReleaseBufferCallback(mDrawingState.releaseBufferListener,
+ mDrawingState.buffer->getBuffer(), mDrawingState.acquireFence,
+ mTransformHint,
+ mFlinger->getMaxAcquiredBufferCountForCurrentRefreshRate(
+ mOwnerUid));
decrementPendingBufferCount();
- if (mCurrentState.bufferSurfaceFrameTX != nullptr) {
- addSurfaceFrameDroppedForBuffer(mCurrentState.bufferSurfaceFrameTX);
- mCurrentState.bufferSurfaceFrameTX.reset();
+ if (mDrawingState.bufferSurfaceFrameTX != nullptr &&
+ mDrawingState.bufferSurfaceFrameTX->getPresentState() != PresentState::Presented) {
+ addSurfaceFrameDroppedForBuffer(mDrawingState.bufferSurfaceFrameTX);
+ mDrawingState.bufferSurfaceFrameTX.reset();
}
}
}
- mCurrentState.frameNumber = frameNumber;
- mCurrentState.releaseBufferListener = releaseBufferListener;
- mCurrentState.buffer = buffer;
- mCurrentState.clientCacheId = clientCacheId;
- mCurrentState.modified = true;
+
+ mDrawingState.frameNumber = frameNumber;
+ mDrawingState.releaseBufferListener = releaseBufferListener;
+ mDrawingState.buffer = buffer;
+ mDrawingState.clientCacheId = clientCacheId;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
const int32_t layerId = getSequence();
- mFlinger->mTimeStats->setPostTime(layerId, mCurrentState.frameNumber, getName().c_str(),
- mOwnerUid, postTime);
- mCurrentState.desiredPresentTime = desiredPresentTime;
- mCurrentState.isAutoTimestamp = isAutoTimestamp;
+ mFlinger->mTimeStats->setPostTime(layerId, mDrawingState.frameNumber, getName().c_str(),
+ mOwnerUid, postTime, getGameMode());
+ mDrawingState.desiredPresentTime = desiredPresentTime;
+ mDrawingState.isAutoTimestamp = isAutoTimestamp;
const nsecs_t presentTime = [&] {
if (!isAutoTimestamp) return desiredPresentTime;
@@ -473,59 +489,59 @@
FrameTracer::FrameEvent::QUEUE);
}
- mCurrentState.width = mCurrentState.buffer->getBuffer()->getWidth();
- mCurrentState.height = mCurrentState.buffer->getBuffer()->getHeight();
+ mDrawingState.width = mDrawingState.buffer->getBuffer()->getWidth();
+ mDrawingState.height = mDrawingState.buffer->getBuffer()->getHeight();
return true;
}
bool BufferStateLayer::setAcquireFence(const sp<Fence>& fence) {
- mCurrentState.acquireFence = fence;
- mCurrentState.acquireFenceTime = std::make_unique<FenceTime>(fence);
+ mDrawingState.acquireFence = fence;
+ mDrawingState.acquireFenceTime = std::make_unique<FenceTime>(fence);
// The acquire fences of BufferStateLayers have already signaled before they are set
- mCallbackHandleAcquireTime = mCurrentState.acquireFenceTime->getSignalTime();
+ mCallbackHandleAcquireTime = mDrawingState.acquireFenceTime->getSignalTime();
- mCurrentState.modified = true;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
bool BufferStateLayer::setDataspace(ui::Dataspace dataspace) {
- if (mCurrentState.dataspace == dataspace) return false;
- mCurrentState.dataspace = dataspace;
- mCurrentState.modified = true;
+ if (mDrawingState.dataspace == dataspace) return false;
+ mDrawingState.dataspace = dataspace;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
bool BufferStateLayer::setHdrMetadata(const HdrMetadata& hdrMetadata) {
- if (mCurrentState.hdrMetadata == hdrMetadata) return false;
- mCurrentState.hdrMetadata = hdrMetadata;
- mCurrentState.modified = true;
+ if (mDrawingState.hdrMetadata == hdrMetadata) return false;
+ mDrawingState.hdrMetadata = hdrMetadata;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
bool BufferStateLayer::setSurfaceDamageRegion(const Region& surfaceDamage) {
- mCurrentState.surfaceDamageRegion = surfaceDamage;
- mCurrentState.modified = true;
+ mDrawingState.surfaceDamageRegion = surfaceDamage;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
bool BufferStateLayer::setApi(int32_t api) {
- if (mCurrentState.api == api) return false;
- mCurrentState.api = api;
- mCurrentState.modified = true;
+ if (mDrawingState.api == api) return false;
+ mDrawingState.api = api;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
bool BufferStateLayer::setSidebandStream(const sp<NativeHandle>& sidebandStream) {
- if (mCurrentState.sidebandStream == sidebandStream) return false;
- mCurrentState.sidebandStream = sidebandStream;
- mCurrentState.modified = true;
+ if (mDrawingState.sidebandStream == sidebandStream) return false;
+ mDrawingState.sidebandStream = sidebandStream;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
if (!mSidebandStreamChanged.exchange(true)) {
@@ -553,14 +569,14 @@
if (willPresent) {
// If this transaction set an acquire fence on this layer, set its acquire time
handle->acquireTime = mCallbackHandleAcquireTime;
- handle->frameNumber = mCurrentState.frameNumber;
+ handle->frameNumber = mDrawingState.frameNumber;
// Notify the transaction completed thread that there is a pending latched callback
// handle
mFlinger->getTransactionCallbackInvoker().registerPendingCallbackHandle(handle);
// Store so latched time and release fence can be set
- mCurrentState.callbackHandles.push_back(handle);
+ mDrawingState.callbackHandles.push_back(handle);
} else { // If this layer will NOT need to be relatched and presented this frame
// Notify the transaction completed thread this handle is done
@@ -575,8 +591,8 @@
}
bool BufferStateLayer::setTransparentRegionHint(const Region& transparent) {
- mCurrentState.transparentRegionHint = transparent;
- mCurrentState.modified = true;
+ mDrawingState.transparentRegionHint = transparent;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
@@ -635,7 +651,7 @@
return true;
}
- return mCurrentState.isAutoTimestamp || mCurrentState.desiredPresentTime <= expectedPresentTime;
+ return mDrawingState.isAutoTimestamp || mDrawingState.desiredPresentTime <= expectedPresentTime;
}
bool BufferStateLayer::onPreComposition(nsecs_t refreshStartTime) {
@@ -664,7 +680,7 @@
* }
* Now imagine getHeadFrameNumber returned mDrawingState.mFrameNumber (or mCurrentFrameNumber).
* Prior to doTransaction SurfaceFlinger will call notifyAvailableFrames, but because we
- * haven't swapped mCurrentState to mDrawingState yet we will think the sync point
+ * haven't swapped mDrawingState to mDrawingState yet we will think the sync point
* is not ready. So we will return false from applyPendingState and not swap
* current state to drawing state. But because we don't swap current state
* to drawing state the number will never update and we will be stuck. This way
@@ -672,7 +688,7 @@
* to apply.
*/
uint64_t BufferStateLayer::getHeadFrameNumber(nsecs_t /* expectedPresentTime */) const {
- return mCurrentState.frameNumber;
+ return mDrawingState.frameNumber;
}
void BufferStateLayer::setAutoRefresh(bool autoRefresh) {
@@ -702,8 +718,8 @@
}
bool BufferStateLayer::hasFrameUpdate() const {
- const State& c(getCurrentState());
- return mCurrentStateModified && (c.buffer != nullptr || c.bgColorLayer != nullptr);
+ const State& c(getDrawingState());
+ return mDrawingStateModified && (c.buffer != nullptr || c.bgColorLayer != nullptr);
}
status_t BufferStateLayer::updateTexImage(bool& /*recomputeVisibleRegions*/, nsecs_t latchTime,
@@ -746,6 +762,7 @@
addSurfaceFramePresentedForBuffer(bufferSurfaceFrame,
mDrawingState.acquireFenceTime->getSignalTime(),
latchTime);
+ mDrawingState.bufferSurfaceFrameTX.reset();
}
std::deque<sp<CallbackHandle>> remainingHandles;
@@ -753,7 +770,7 @@
.finalizeOnCommitCallbackHandles(mDrawingState.callbackHandles, remainingHandles);
mDrawingState.callbackHandles = remainingHandles;
- mCurrentStateModified = false;
+ mDrawingStateModified = false;
return NO_ERROR;
}
@@ -946,7 +963,10 @@
// then we will drop a buffer and should decrement the pending buffer count and
// call any release buffer callbacks if set.
callReleaseBufferCallback(mDrawingState.releaseBufferListener,
- mDrawingState.buffer->getBuffer(), mDrawingState.acquireFence);
+ mDrawingState.buffer->getBuffer(), mDrawingState.acquireFence,
+ mTransformHint,
+ mFlinger->getMaxAcquiredBufferCountForCurrentRefreshRate(
+ mOwnerUid));
decrementPendingBufferCount();
}
}
diff --git a/services/surfaceflinger/BufferStateLayer.h b/services/surfaceflinger/BufferStateLayer.h
index 2e48452..2747018 100644
--- a/services/surfaceflinger/BufferStateLayer.h
+++ b/services/surfaceflinger/BufferStateLayer.h
@@ -47,10 +47,6 @@
bool isBufferDue(nsecs_t /*expectedPresentTime*/) const override { return true; }
- uint32_t doTransactionResize(uint32_t flags, Layer::State* /*stateToCommit*/) override {
- return flags;
- }
-
Region getActiveTransparentRegion(const Layer::State& s) const override {
return s.transparentRegionHint;
}
@@ -87,7 +83,7 @@
bool setBufferCrop(const Rect& bufferCrop) override;
bool setDestinationFrame(const Rect& destinationFrame) override;
- void updateGeometry() override;
+ bool updateGeometry() override;
// -----------------------------------------------------------------------
diff --git a/services/surfaceflinger/CompositionEngine/Android.bp b/services/surfaceflinger/CompositionEngine/Android.bp
index 08147ed..d738ccd 100644
--- a/services/surfaceflinger/CompositionEngine/Android.bp
+++ b/services/surfaceflinger/CompositionEngine/Android.bp
@@ -57,6 +57,7 @@
"src/planner/LayerState.cpp",
"src/planner/Planner.cpp",
"src/planner/Predictor.cpp",
+ "src/planner/TexturePool.cpp",
"src/ClientCompositionRequestCache.cpp",
"src/CompositionEngine.cpp",
"src/Display.cpp",
@@ -107,6 +108,7 @@
"tests/planner/FlattenerTest.cpp",
"tests/planner/LayerStateTest.cpp",
"tests/planner/PredictorTest.cpp",
+ "tests/planner/TexturePoolTest.cpp",
"tests/CompositionEngineTest.cpp",
"tests/DisplayColorProfileTest.cpp",
"tests/DisplayTest.cpp",
diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/CompositionRefreshArgs.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/CompositionRefreshArgs.h
index 289cb11..29937fb 100644
--- a/services/surfaceflinger/CompositionEngine/include/compositionengine/CompositionRefreshArgs.h
+++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/CompositionRefreshArgs.h
@@ -82,6 +82,9 @@
// The earliest time to send the present command to the HAL
std::chrono::steady_clock::time_point earliestPresentTime;
+
+ // The predicted next invalidation time
+ std::optional<std::chrono::steady_clock::time_point> nextInvalidateTime;
};
} // namespace android::compositionengine
diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/Output.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/Output.h
index 257974f..1416b1e 100644
--- a/services/surfaceflinger/CompositionEngine/include/compositionengine/Output.h
+++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/Output.h
@@ -286,7 +286,7 @@
virtual std::optional<base::unique_fd> composeSurfaces(
const Region&, const compositionengine::CompositionRefreshArgs& refreshArgs) = 0;
virtual void postFramebuffer() = 0;
- virtual void renderCachedSets() = 0;
+ virtual void renderCachedSets(const CompositionRefreshArgs&) = 0;
virtual void chooseCompositionStrategy() = 0;
virtual bool getSkipColorTransform() const = 0;
virtual FrameFences presentAndGetFrameFences() = 0;
diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/Output.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/Output.h
index f10ff25..f832084 100644
--- a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/Output.h
+++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/Output.h
@@ -93,7 +93,7 @@
std::optional<base::unique_fd> composeSurfaces(
const Region&, const compositionengine::CompositionRefreshArgs& refreshArgs) override;
void postFramebuffer() override;
- void renderCachedSets() override;
+ void renderCachedSets(const CompositionRefreshArgs&) override;
void cacheClientCompositionRequests(uint32_t) override;
// Testing
diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayer.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayer.h
index 2ffd472..244f8ab 100644
--- a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayer.h
+++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayer.h
@@ -73,10 +73,11 @@
void writeOutputIndependentGeometryStateToHWC(HWC2::Layer*, const LayerFECompositionState&,
bool skipLayer);
void writeOutputDependentPerFrameStateToHWC(HWC2::Layer*);
- void writeOutputIndependentPerFrameStateToHWC(HWC2::Layer*, const LayerFECompositionState&);
+ void writeOutputIndependentPerFrameStateToHWC(HWC2::Layer*, const LayerFECompositionState&,
+ bool skipLayer);
void writeSolidColorStateToHWC(HWC2::Layer*, const LayerFECompositionState&);
void writeSidebandStateToHWC(HWC2::Layer*, const LayerFECompositionState&);
- void writeBufferStateToHWC(HWC2::Layer*, const LayerFECompositionState&);
+ void writeBufferStateToHWC(HWC2::Layer*, const LayerFECompositionState&, bool skipLayer);
void writeCompositionTypeToHWC(HWC2::Layer*, Hwc2::IComposerClient::Composition,
bool isPeekingThrough, bool skipLayer);
void detectDisallowedCompositionTypeChange(Hwc2::IComposerClient::Composition from,
diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/CachedSet.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/CachedSet.h
index 269ddd5..7cb0f6b 100644
--- a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/CachedSet.h
+++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/CachedSet.h
@@ -19,6 +19,7 @@
#include <compositionengine/Output.h>
#include <compositionengine/ProjectionSpace.h>
#include <compositionengine/impl/planner/LayerState.h>
+#include <compositionengine/impl/planner/TexturePool.h>
#include <renderengine/RenderEngine.h>
#include <chrono>
@@ -64,9 +65,12 @@
size_t getLayerCount() const { return mLayers.size(); }
const Layer& getFirstLayer() const { return mLayers[0]; }
const Rect& getBounds() const { return mBounds; }
+ Rect getTextureBounds() const { return mOutputSpace.content; }
const Region& getVisibleRegion() const { return mVisibleRegion; }
size_t getAge() const { return mAge; }
- const std::shared_ptr<renderengine::ExternalTexture>& getBuffer() const { return mTexture; }
+ std::shared_ptr<renderengine::ExternalTexture> getBuffer() const {
+ return mTexture ? mTexture->get() : nullptr;
+ }
const sp<Fence>& getDrawFence() const { return mDrawFence; }
const ProjectionSpace& getOutputSpace() const { return mOutputSpace; }
ui::Dataspace getOutputDataspace() const { return mOutputDataspace; }
@@ -89,10 +93,12 @@
void setLastUpdate(std::chrono::steady_clock::time_point now) { mLastUpdate = now; }
void append(const CachedSet& other) {
- mTexture = nullptr;
+ mTexture.reset();
mOutputDataspace = ui::Dataspace::UNKNOWN;
mDrawFence = nullptr;
mBlurLayer = nullptr;
+ mHolePunchLayer = nullptr;
+ mSkipCount = 0;
mLayers.insert(mLayers.end(), other.mLayers.cbegin(), other.mLayers.cend());
Region boundingRegion;
@@ -102,9 +108,12 @@
mVisibleRegion.orSelf(other.mVisibleRegion);
}
void incrementAge() { ++mAge; }
+ void incrementSkipCount() { mSkipCount++; }
+ size_t getSkipCount() { return mSkipCount; }
// Renders the cached set with the supplied output composition state.
- void render(renderengine::RenderEngine& re, const OutputCompositionState& outputState);
+ void render(renderengine::RenderEngine& re, TexturePool& texturePool,
+ const OutputCompositionState& outputState);
void dump(std::string& result) const;
@@ -132,6 +141,10 @@
compositionengine::OutputLayer* getBlurLayer() const;
+ bool hasHdrLayers() const;
+
+ bool hasProtectedLayers() const;
+
private:
CachedSet() = default;
@@ -145,8 +158,11 @@
Rect mBounds = Rect::EMPTY_RECT;
Region mVisibleRegion;
size_t mAge = 0;
+ size_t mSkipCount = 0;
- std::shared_ptr<renderengine::ExternalTexture> mTexture;
+ // TODO(b/190411067): This is a shared pointer only because CachedSets are copied into different
+ // containers in the Flattener. Logically this should have unique ownership otherwise.
+ std::shared_ptr<TexturePool::AutoTexture> mTexture;
sp<Fence> mDrawFence;
ProjectionSpace mOutputSpace;
ui::Dataspace mOutputDataspace;
diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/Flattener.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/Flattener.h
index ca1d69d..7534548 100644
--- a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/Flattener.h
+++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/Flattener.h
@@ -20,6 +20,7 @@
#include <compositionengine/impl/planner/CachedSet.h>
#include <compositionengine/impl/planner/LayerState.h>
+#include <chrono>
#include <numeric>
#include <vector>
@@ -37,25 +38,53 @@
class Flattener {
public:
- Flattener(bool enableHolePunch = false) : mEnableHolePunch(enableHolePunch) {}
+ struct CachedSetRenderSchedulingTunables {
+ // This default assumes that rendering a cached set takes about 3ms. That time is then cut
+ // in half - the next frame using the cached set would have the same workload, meaning that
+ // composition cost is the same. This is best illustrated with the following example:
+ //
+ // Suppose we're at a 120hz cadence so SurfaceFlinger is budgeted 8.3ms per-frame. If
+ // renderCachedSets costs 3ms, then two consecutive frames have timings:
+ //
+ // First frame: Start at 0ms, end at 6.8ms.
+ // renderCachedSets: Start at 6.8ms, end at 9.8ms.
+ // Second frame: Start at 9.8ms, end at 16.6ms.
+ //
+ // Now the second frame won't render a cached set afterwards, but the first frame didn't
+ // really steal time from the second frame.
+ static const constexpr std::chrono::nanoseconds kDefaultCachedSetRenderDuration = 1500us;
- void setDisplaySize(ui::Size size) { mDisplaySize = size; }
+ static const constexpr size_t kDefaultMaxDeferRenderAttempts = 240;
+
+ // Duration allocated for rendering a cached set. If we don't have enough time for rendering
+ // a cached set, then rendering is deferred to another frame.
+ const std::chrono::nanoseconds cachedSetRenderDuration;
+ // Maximum of times that we defer rendering a cached set. If we defer rendering a cached set
+ // too many times, then render it anyways so that future frames would benefit from the
+ // flattened cached set.
+ const size_t maxDeferRenderAttempts;
+ };
+ Flattener(renderengine::RenderEngine& renderEngine, bool enableHolePunch = false,
+ std::optional<CachedSetRenderSchedulingTunables> cachedSetRenderSchedulingTunables =
+ std::nullopt);
+
+ void setDisplaySize(ui::Size size) {
+ mDisplaySize = size;
+ mTexturePool.setDisplaySize(size);
+ }
NonBufferHash flattenLayers(const std::vector<const LayerState*>& layers, NonBufferHash,
std::chrono::steady_clock::time_point now);
// Renders the newest cached sets with the supplied output composition state
- void renderCachedSets(renderengine::RenderEngine& re,
- const OutputCompositionState& outputState);
+ void renderCachedSets(const OutputCompositionState& outputState,
+ std::optional<std::chrono::steady_clock::time_point> renderDeadline);
void dump(std::string& result) const;
void dumpLayers(std::string& result) const;
const std::optional<CachedSet>& getNewCachedSetForTesting() const { return mNewCachedSet; }
-protected:
- std::optional<CachedSet> mNewCachedSet;
-
private:
size_t calculateDisplayCost(const std::vector<const LayerState*>& layers) const;
@@ -145,8 +174,17 @@
void buildCachedSets(std::chrono::steady_clock::time_point now);
+ renderengine::RenderEngine& mRenderEngine;
const bool mEnableHolePunch;
+ const std::optional<CachedSetRenderSchedulingTunables> mCachedSetRenderSchedulingTunables;
+ TexturePool mTexturePool;
+
+protected:
+ // mNewCachedSet must be destroyed before mTexturePool is.
+ std::optional<CachedSet> mNewCachedSet;
+
+private:
ui::Size mDisplaySize;
NonBufferHash mCurrentGeometry;
@@ -162,6 +200,7 @@
size_t mCachedSetCreationCount = 0;
size_t mCachedSetCreationCost = 0;
std::unordered_map<size_t, size_t> mInvalidatedCachedSetAges;
+ std::chrono::nanoseconds mActiveLayerTimeout = kActiveLayerTimeout;
static constexpr auto kActiveLayerTimeout = std::chrono::nanoseconds(150ms);
};
diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/LayerState.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/LayerState.h
index 0b78cb8..a20d7b3 100644
--- a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/LayerState.h
+++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/LayerState.h
@@ -240,6 +240,19 @@
void resetFramesSinceBufferUpdate() { mFramesSinceBufferUpdate = 0; }
int64_t getFramesSinceBufferUpdate() const { return mFramesSinceBufferUpdate; }
+ ui::Dataspace getDataspace() const { return mOutputDataspace.get(); }
+
+ bool isHdr() const {
+ const ui::Dataspace transfer =
+ static_cast<ui::Dataspace>(getDataspace() & ui::Dataspace::TRANSFER_MASK);
+ return (transfer == ui::Dataspace::TRANSFER_ST2084 ||
+ transfer == ui::Dataspace::TRANSFER_HLG);
+ }
+
+ bool isProtected() const {
+ return getOutputLayer()->getLayerFE().getCompositionState()->hasProtectedContent;
+ }
+
void dump(std::string& result) const;
std::optional<std::string> compare(const LayerState& other) const;
diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/Planner.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/Planner.h
index 4365b93..be34153 100644
--- a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/Planner.h
+++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/Planner.h
@@ -41,7 +41,7 @@
// as a more efficient representation of parts of the layer stack.
class Planner {
public:
- Planner();
+ Planner(renderengine::RenderEngine& renderengine);
void setDisplaySize(ui::Size);
@@ -58,9 +58,11 @@
void reportFinalPlan(
compositionengine::Output::OutputLayersEnumerator<compositionengine::Output>&& layers);
- // The planner will call to the Flattener to render any pending cached set
- void renderCachedSets(renderengine::RenderEngine& re,
- const OutputCompositionState& outputState);
+ // The planner will call to the Flattener to render any pending cached set.
+ // Rendering a pending cached set is optional: if the renderDeadline is not far enough in the
+ // future then the planner may opt to skip rendering the cached set.
+ void renderCachedSets(const OutputCompositionState& outputState,
+ std::optional<std::chrono::steady_clock::time_point> renderDeadline);
void dump(const Vector<String16>& args, std::string&);
diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/TexturePool.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/TexturePool.h
new file mode 100644
index 0000000..fb53ee0
--- /dev/null
+++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/TexturePool.h
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <compositionengine/Output.h>
+#include <compositionengine/ProjectionSpace.h>
+#include <compositionengine/impl/planner/LayerState.h>
+#include <renderengine/RenderEngine.h>
+
+#include <renderengine/ExternalTexture.h>
+#include <chrono>
+#include "android-base/macros.h"
+
+namespace android::compositionengine::impl::planner {
+
+// A pool of textures that only manages textures of a single size.
+// While it is possible to define a texture pool supporting variable-sized textures to save on
+// memory, it is a simpler implementation to only manage screen-sized textures. The texture pool is
+// unbounded - there are a minimum number of textures preallocated. Under heavy system load, new
+// textures may be allocated, but only a maximum number of retained once those textures are no
+// longer necessary.
+class TexturePool {
+public:
+ // RAII class helping with managing textures from the texture pool
+ // Textures once they're no longer used should be returned to the pool instead of outright
+ // deleted.
+ class AutoTexture {
+ public:
+ AutoTexture(TexturePool& texturePool,
+ std::shared_ptr<renderengine::ExternalTexture> texture, const sp<Fence>& fence)
+ : mTexturePool(texturePool), mTexture(texture), mFence(fence) {}
+
+ ~AutoTexture() { mTexturePool.returnTexture(std::move(mTexture), mFence); }
+
+ sp<Fence> getReadyFence() { return mFence; }
+
+ void setReadyFence(const sp<Fence>& fence) { mFence = fence; }
+
+ // Disable copying and assigning
+ AutoTexture(const AutoTexture&) = delete;
+ AutoTexture& operator=(const AutoTexture&) = delete;
+
+ // Gets a pointer to the underlying external texture
+ const std::shared_ptr<renderengine::ExternalTexture>& get() const { return mTexture; }
+
+ private:
+ TexturePool& mTexturePool;
+ std::shared_ptr<renderengine::ExternalTexture> mTexture;
+ sp<Fence> mFence;
+ };
+
+ TexturePool(renderengine::RenderEngine& renderEngine) : mRenderEngine(renderEngine) {}
+
+ virtual ~TexturePool() = default;
+
+ // Sets the display size for the texture pool.
+ // This will trigger a reallocation for all remaining textures in the pool.
+ // setDisplaySize must be called for the texture pool to be used.
+ void setDisplaySize(ui::Size size);
+
+ // Borrows a new texture from the pool.
+ // If the pool is currently starved of textures, then a new texture is generated.
+ // When the AutoTexture object is destroyed, the scratch texture is automatically returned
+ // to the pool.
+ std::shared_ptr<AutoTexture> borrowTexture();
+
+protected:
+ // Proteted visibility so that they can be used for testing
+ const static constexpr size_t kMinPoolSize = 3;
+ const static constexpr size_t kMaxPoolSize = 4;
+
+ struct Entry {
+ std::shared_ptr<renderengine::ExternalTexture> texture;
+ sp<Fence> fence;
+ };
+
+ std::deque<Entry> mPool;
+
+private:
+ std::shared_ptr<renderengine::ExternalTexture> genTexture();
+ // Returns a previously borrowed texture to the pool.
+ void returnTexture(std::shared_ptr<renderengine::ExternalTexture>&& texture,
+ const sp<Fence>& fence);
+ renderengine::RenderEngine& mRenderEngine;
+ ui::Size mSize;
+};
+
+} // namespace android::compositionengine::impl::planner
diff --git a/services/surfaceflinger/CompositionEngine/include/compositionengine/mock/Output.h b/services/surfaceflinger/CompositionEngine/include/compositionengine/mock/Output.h
index 4b4d375..8e777e3 100644
--- a/services/surfaceflinger/CompositionEngine/include/compositionengine/mock/Output.h
+++ b/services/surfaceflinger/CompositionEngine/include/compositionengine/mock/Output.h
@@ -109,7 +109,7 @@
MOCK_CONST_METHOD0(getSkipColorTransform, bool());
MOCK_METHOD0(postFramebuffer, void());
- MOCK_METHOD0(renderCachedSets, void());
+ MOCK_METHOD1(renderCachedSets, void(const CompositionRefreshArgs&));
MOCK_METHOD0(presentAndGetFrameFences, compositionengine::Output::FrameFences());
MOCK_METHOD3(generateClientCompositionRequests,
diff --git a/services/surfaceflinger/CompositionEngine/src/Output.cpp b/services/surfaceflinger/CompositionEngine/src/Output.cpp
index e9a8b91..67bb149 100644
--- a/services/surfaceflinger/CompositionEngine/src/Output.cpp
+++ b/services/surfaceflinger/CompositionEngine/src/Output.cpp
@@ -129,7 +129,7 @@
}
if (enabled) {
- mPlanner = std::make_unique<planner::Planner>();
+ mPlanner = std::make_unique<planner::Planner>(getCompositionEngine().getRenderEngine());
if (mRenderSurface) {
mPlanner->setDisplaySize(mRenderSurface->getSize());
}
@@ -434,7 +434,7 @@
devOptRepaintFlash(refreshArgs);
finishFrame(refreshArgs);
postFramebuffer();
- renderCachedSets();
+ renderCachedSets(refreshArgs);
}
void Output::rebuildLayerStacks(const compositionengine::CompositionRefreshArgs& refreshArgs,
@@ -1312,9 +1312,9 @@
mReleasedLayers.clear();
}
-void Output::renderCachedSets() {
+void Output::renderCachedSets(const CompositionRefreshArgs& refreshArgs) {
if (mPlanner) {
- mPlanner->renderCachedSets(getCompositionEngine().getRenderEngine(), getState());
+ mPlanner->renderCachedSets(getState(), refreshArgs.nextInvalidateTime);
}
}
diff --git a/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp b/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp
index cd14327..e4e46a7 100644
--- a/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp
+++ b/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp
@@ -349,7 +349,7 @@
}
writeOutputDependentPerFrameStateToHWC(hwcLayer.get());
- writeOutputIndependentPerFrameStateToHWC(hwcLayer.get(), *outputIndependentState);
+ writeOutputIndependentPerFrameStateToHWC(hwcLayer.get(), *outputIndependentState, skipLayer);
writeCompositionTypeToHWC(hwcLayer.get(), requestedCompositionType, isPeekingThrough,
skipLayer);
@@ -471,7 +471,8 @@
}
void OutputLayer::writeOutputIndependentPerFrameStateToHWC(
- HWC2::Layer* hwcLayer, const LayerFECompositionState& outputIndependentState) {
+ HWC2::Layer* hwcLayer, const LayerFECompositionState& outputIndependentState,
+ bool skipLayer) {
switch (auto error = hwcLayer->setColorTransform(outputIndependentState.colorTransform)) {
case hal::Error::NONE:
break;
@@ -504,7 +505,7 @@
break;
case hal::Composition::CURSOR:
case hal::Composition::DEVICE:
- writeBufferStateToHWC(hwcLayer, outputIndependentState);
+ writeBufferStateToHWC(hwcLayer, outputIndependentState, skipLayer);
break;
case hal::Composition::INVALID:
case hal::Composition::CLIENT:
@@ -541,7 +542,8 @@
}
void OutputLayer::writeBufferStateToHWC(HWC2::Layer* hwcLayer,
- const LayerFECompositionState& outputIndependentState) {
+ const LayerFECompositionState& outputIndependentState,
+ bool skipLayer) {
auto supportedPerFrameMetadata =
getOutput().getDisplayColorProfile()->getSupportedPerFrameMetadata();
if (auto error = hwcLayer->setPerFrameMetadata(supportedPerFrameMetadata,
@@ -554,7 +556,7 @@
sp<GraphicBuffer> buffer = outputIndependentState.buffer;
sp<Fence> acquireFence = outputIndependentState.acquireFence;
int slot = outputIndependentState.bufferSlot;
- if (getState().overrideInfo.buffer != nullptr) {
+ if (getState().overrideInfo.buffer != nullptr && !skipLayer) {
buffer = getState().overrideInfo.buffer->getBuffer();
acquireFence = getState().overrideInfo.acquireFence;
slot = HwcBufferCache::FLATTENER_CACHING_SLOT;
diff --git a/services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp b/services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp
index 3cfb211..acc7ed2 100644
--- a/services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp
+++ b/services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp
@@ -134,7 +134,7 @@
}
bool CachedSet::hasReadyBuffer() const {
- return mTexture != nullptr && mDrawFence->getStatus() == Fence::Status::Signaled;
+ return mTexture && mDrawFence->getStatus() == Fence::Status::Signaled;
}
std::vector<CachedSet> CachedSet::decompose() const {
@@ -156,7 +156,7 @@
}
}
-void CachedSet::render(renderengine::RenderEngine& renderEngine,
+void CachedSet::render(renderengine::RenderEngine& renderEngine, TexturePool& texturePool,
const OutputCompositionState& outputState) {
ATRACE_CALL();
const Rect& viewport = outputState.layerStackSpace.content;
@@ -165,10 +165,7 @@
ui::Transform::toRotationFlags(outputState.framebufferSpace.orientation);
renderengine::DisplaySettings displaySettings{
- .physicalDisplay = Rect(-mBounds.left + outputState.framebufferSpace.content.left,
- -mBounds.top + outputState.framebufferSpace.content.top,
- -mBounds.left + outputState.framebufferSpace.content.right,
- -mBounds.top + outputState.framebufferSpace.content.bottom),
+ .physicalDisplay = outputState.framebufferSpace.content,
.clip = viewport,
.outputDataspace = outputDataspace,
.orientation = orientation,
@@ -228,7 +225,6 @@
// Assume that the final layer contains the buffer that we want to
// replace with a hole punch.
holePunchSettings = clientCompositionList.back();
- LOG_ALWAYS_FATAL_IF(!holePunchSettings.source.buffer.buffer, "Expected to have a buffer!");
// This mimics Layer::prepareClearClientComposition
holePunchSettings.source.buffer.buffer = nullptr;
holePunchSettings.source.solidColor = half3(0.0f, 0.0f, 0.0f);
@@ -256,30 +252,34 @@
layerSettingsPointers.emplace_back(&highlight);
}
- const uint64_t usageFlags = GraphicBuffer::USAGE_HW_RENDER | GraphicBuffer::USAGE_HW_COMPOSER |
- GraphicBuffer::USAGE_HW_TEXTURE;
- sp<GraphicBuffer> buffer = new GraphicBuffer(static_cast<uint32_t>(mBounds.getWidth()),
- static_cast<uint32_t>(mBounds.getHeight()),
- HAL_PIXEL_FORMAT_RGBA_8888, 1, usageFlags);
- const auto texture = std::make_shared<
- renderengine::ExternalTexture>(buffer, renderEngine,
- renderengine::ExternalTexture::Usage::READABLE |
- renderengine::ExternalTexture::Usage::WRITEABLE);
- LOG_ALWAYS_FATAL_IF(buffer->initCheck() != OK);
- base::unique_fd drawFence;
+ auto texture = texturePool.borrowTexture();
+ LOG_ALWAYS_FATAL_IF(texture->get()->getBuffer()->initCheck() != OK);
- status_t result = renderEngine.drawLayers(displaySettings, layerSettingsPointers, texture,
- false, base::unique_fd(), &drawFence);
+ base::unique_fd bufferFence;
+ if (texture->getReadyFence()) {
+ // Bail out if the buffer is not ready, because there is some pending GPU work left.
+ if (texture->getReadyFence()->getStatus() != Fence::Status::Signaled) {
+ return;
+ }
+ bufferFence.reset(texture->getReadyFence()->dup());
+ }
+
+ base::unique_fd drawFence;
+ status_t result =
+ renderEngine.drawLayers(displaySettings, layerSettingsPointers, texture->get(), false,
+ std::move(bufferFence), &drawFence);
if (result == NO_ERROR) {
mDrawFence = new Fence(drawFence.release());
mOutputSpace = outputState.framebufferSpace;
- mTexture = std::move(texture);
+ mTexture = texture;
+ mTexture->setReadyFence(mDrawFence);
mOutputSpace.orientation = outputState.framebufferSpace.orientation;
mOutputDataspace = outputDataspace;
mOrientation = orientation;
+ mSkipCount = 0;
} else {
- mTexture = nullptr;
+ mTexture.reset();
}
}
@@ -295,6 +295,12 @@
return false;
}
+ // Do not use a hole punch with an HDR layer; this should be done in client
+ // composition to properly mix HDR with SDR.
+ if (hasHdrLayers()) {
+ return false;
+ }
+
const auto& layerFE = mLayers[0].getState()->getOutputLayer()->getLayerFE();
if (layerFE.getCompositionState()->forceClientComposition) {
return false;
@@ -346,6 +352,16 @@
return mBlurLayer ? mBlurLayer->getOutputLayer() : nullptr;
}
+bool CachedSet::hasHdrLayers() const {
+ return std::any_of(mLayers.cbegin(), mLayers.cend(),
+ [](const Layer& layer) { return layer.getState()->isHdr(); });
+}
+
+bool CachedSet::hasProtectedLayers() const {
+ return std::any_of(mLayers.cbegin(), mLayers.cend(),
+ [](const Layer& layer) { return layer.getState()->isProtected(); });
+}
+
void CachedSet::dump(std::string& result) const {
const auto now = std::chrono::steady_clock::now();
@@ -354,7 +370,7 @@
base::StringAppendF(&result, " + Fingerprint %016zx, last update %sago, age %zd\n",
mFingerprint, durationString(lastUpdate).c_str(), mAge);
{
- const auto b = mTexture ? mTexture->getBuffer().get() : nullptr;
+ const auto b = mTexture ? mTexture->get()->getBuffer().get() : nullptr;
base::StringAppendF(&result, " Override buffer: %p\n", b);
}
base::StringAppendF(&result, " HolePunchLayer: %p\n", mHolePunchLayer);
diff --git a/services/surfaceflinger/CompositionEngine/src/planner/Flattener.cpp b/services/surfaceflinger/CompositionEngine/src/planner/Flattener.cpp
index ef46335..2bcaf60 100644
--- a/services/surfaceflinger/CompositionEngine/src/planner/Flattener.cpp
+++ b/services/surfaceflinger/CompositionEngine/src/planner/Flattener.cpp
@@ -19,10 +19,11 @@
// #define LOG_NDEBUG 0
#define ATRACE_TAG ATRACE_TAG_GRAPHICS
+#include <android-base/properties.h>
#include <compositionengine/impl/planner/Flattener.h>
#include <compositionengine/impl/planner/LayerState.h>
-#include <utils/Trace.h>
+#include <gui/TraceUtils.h>
using time_point = std::chrono::steady_clock::time_point;
using namespace std::chrono_literals;
@@ -59,6 +60,20 @@
} // namespace
+Flattener::Flattener(
+ renderengine::RenderEngine& renderEngine, bool enableHolePunch,
+ std::optional<CachedSetRenderSchedulingTunables> cachedSetRenderSchedulingTunables)
+ : mRenderEngine(renderEngine),
+ mEnableHolePunch(enableHolePunch),
+ mCachedSetRenderSchedulingTunables(cachedSetRenderSchedulingTunables),
+ mTexturePool(mRenderEngine) {
+ const int timeoutInMs =
+ base::GetIntProperty(std::string("debug.sf.layer_caching_active_layer_timeout_ms"), 0);
+ if (timeoutInMs != 0) {
+ mActiveLayerTimeout = std::chrono::milliseconds(timeoutInMs);
+ }
+}
+
NonBufferHash Flattener::flattenLayers(const std::vector<const LayerState*>& layers,
NonBufferHash hash, time_point now) {
ATRACE_CALL();
@@ -93,14 +108,46 @@
return hash;
}
-void Flattener::renderCachedSets(renderengine::RenderEngine& renderEngine,
- const OutputCompositionState& outputState) {
+void Flattener::renderCachedSets(
+ const OutputCompositionState& outputState,
+ std::optional<std::chrono::steady_clock::time_point> renderDeadline) {
ATRACE_CALL();
- if (!mNewCachedSet || mNewCachedSet->hasRenderedBuffer()) {
+
+ if (!mNewCachedSet) {
return;
}
- mNewCachedSet->render(renderEngine, outputState);
+ // Ensure that a cached set has a valid buffer first
+ if (mNewCachedSet->hasRenderedBuffer()) {
+ ATRACE_NAME("mNewCachedSet->hasRenderedBuffer()");
+ return;
+ }
+
+ const auto now = std::chrono::steady_clock::now();
+
+ // If we have a render deadline, and the flattener is configured to skip rendering if we don't
+ // have enough time, then we skip rendering the cached set if we think that we'll steal too much
+ // time from the next frame.
+ if (renderDeadline && mCachedSetRenderSchedulingTunables) {
+ if (const auto estimatedRenderFinish =
+ now + mCachedSetRenderSchedulingTunables->cachedSetRenderDuration;
+ estimatedRenderFinish > *renderDeadline) {
+ mNewCachedSet->incrementSkipCount();
+
+ if (mNewCachedSet->getSkipCount() <=
+ mCachedSetRenderSchedulingTunables->maxDeferRenderAttempts) {
+ ATRACE_FORMAT("DeadlinePassed: exceeded deadline by: %d us",
+ std::chrono::duration_cast<std::chrono::microseconds>(
+ estimatedRenderFinish - *renderDeadline)
+ .count());
+ return;
+ } else {
+ ATRACE_NAME("DeadlinePassed: exceeded max skips");
+ }
+ }
+ }
+
+ mNewCachedSet->render(mRenderEngine, mTexturePool, outputState);
}
void Flattener::dumpLayers(std::string& result) const {
@@ -231,6 +278,7 @@
return false;
}
+ // the compiler should strip out the following no-op loops when ALOGV is off
ALOGV("[%s] Incoming layers:", __func__);
for (const LayerState* layer : layers) {
ALOGV("%s", layer->getName().c_str());
@@ -238,9 +286,12 @@
ALOGV("[%s] Current layers:", __func__);
for (const CachedSet& layer : mLayers) {
- std::string dump;
- layer.dump(dump);
- ALOGV("%s", dump.c_str());
+ const auto dumper = [&] {
+ std::string dump;
+ layer.dump(dump);
+ return dump;
+ };
+ ALOGV("%s", dumper().c_str());
}
auto currentLayerIter = mLayers.begin();
@@ -272,7 +323,7 @@
state.overrideInfo = {
.buffer = mNewCachedSet->getBuffer(),
.acquireFence = mNewCachedSet->getDrawFence(),
- .displayFrame = mNewCachedSet->getBounds(),
+ .displayFrame = mNewCachedSet->getTextureBounds(),
.dataspace = mNewCachedSet->getOutputDataspace(),
.displaySpace = mNewCachedSet->getOutputSpace(),
.damageRegion = Region::INVALID_REGION,
@@ -312,7 +363,7 @@
state.overrideInfo = {
.buffer = currentLayerIter->getBuffer(),
.acquireFence = currentLayerIter->getDrawFence(),
- .displayFrame = currentLayerIter->getBounds(),
+ .displayFrame = currentLayerIter->getTextureBounds(),
.dataspace = currentLayerIter->getOutputDataspace(),
.displaySpace = currentLayerIter->getOutputSpace(),
.damageRegion = Region(),
@@ -366,9 +417,10 @@
bool runHasFirstLayer = false;
for (auto currentSet = mLayers.cbegin(); currentSet != mLayers.cend(); ++currentSet) {
- const bool layerIsInactive = now - currentSet->getLastUpdate() > kActiveLayerTimeout;
+ const bool layerIsInactive = now - currentSet->getLastUpdate() > mActiveLayerTimeout;
const bool layerHasBlur = currentSet->hasBlurBehind();
- if (layerIsInactive && (firstLayer || runHasFirstLayer || !layerHasBlur)) {
+ if (layerIsInactive && (firstLayer || runHasFirstLayer || !layerHasBlur) &&
+ !currentSet->hasHdrLayers() && !currentSet->hasProtectedLayers()) {
if (isPartOfRun) {
builder.append(currentSet->getLayerCount());
} else {
@@ -472,9 +524,14 @@
++mCachedSetCreationCount;
mCachedSetCreationCost += mNewCachedSet->getCreationCost();
- std::string setDump;
- mNewCachedSet->dump(setDump);
- ALOGV("[%s] Added new cached set:\n%s", __func__, setDump.c_str());
+
+ // note the compiler should strip the follow no-op statements when ALOGV is off
+ const auto dumper = [&] {
+ std::string setDump;
+ mNewCachedSet->dump(setDump);
+ return setDump;
+ };
+ ALOGV("[%s] Added new cached set:\n%s", __func__, dumper().c_str());
}
} // namespace android::compositionengine::impl::planner
diff --git a/services/surfaceflinger/CompositionEngine/src/planner/Planner.cpp b/services/surfaceflinger/CompositionEngine/src/planner/Planner.cpp
index 297c0b2..be2510f 100644
--- a/services/surfaceflinger/CompositionEngine/src/planner/Planner.cpp
+++ b/services/surfaceflinger/CompositionEngine/src/planner/Planner.cpp
@@ -26,15 +26,43 @@
#include <compositionengine/impl/planner/Planner.h>
#include <utils/Trace.h>
+#include <chrono>
namespace android::compositionengine::impl::planner {
-Planner::Planner()
+namespace {
+
+std::optional<Flattener::CachedSetRenderSchedulingTunables> buildFlattenerTuneables() {
+ if (!base::GetBoolProperty(std::string("debug.sf.enable_cached_set_render_scheduling"), true)) {
+ return std::nullopt;
+ }
+
+ auto renderDuration = std::chrono::nanoseconds(
+ base::GetUintProperty<uint64_t>(std::string("debug.sf.cached_set_render_duration_ns"),
+ Flattener::CachedSetRenderSchedulingTunables::
+ kDefaultCachedSetRenderDuration.count()));
+
+ auto maxDeferRenderAttempts = base::GetUintProperty<
+ size_t>(std::string("debug.sf.cached_set_max_defer_render_attmpts"),
+ Flattener::CachedSetRenderSchedulingTunables::kDefaultMaxDeferRenderAttempts);
+
+ return std::make_optional<Flattener::CachedSetRenderSchedulingTunables>(
+ Flattener::CachedSetRenderSchedulingTunables{
+ .cachedSetRenderDuration = renderDuration,
+ .maxDeferRenderAttempts = maxDeferRenderAttempts,
+ });
+}
+
+} // namespace
+
+Planner::Planner(renderengine::RenderEngine& renderEngine)
// Implicitly, layer caching must also be enabled for the hole punch or
// predictor to have any effect.
// E.g., setprop debug.sf.enable_layer_caching 1, or
// adb shell service call SurfaceFlinger 1040 i32 1 [i64 <display ID>]
- : mFlattener(base::GetBoolProperty(std::string("debug.sf.enable_hole_punch_pip"), true)) {
+ : mFlattener(renderEngine,
+ base::GetBoolProperty(std::string("debug.sf.enable_hole_punch_pip"), true),
+ buildFlattenerTuneables()) {
mPredictorEnabled =
base::GetBoolProperty(std::string("debug.sf.enable_planner_prediction"), false);
}
@@ -160,10 +188,11 @@
finalPlan);
}
-void Planner::renderCachedSets(renderengine::RenderEngine& renderEngine,
- const OutputCompositionState& outputState) {
+void Planner::renderCachedSets(
+ const OutputCompositionState& outputState,
+ std::optional<std::chrono::steady_clock::time_point> renderDeadline) {
ATRACE_CALL();
- mFlattener.renderCachedSets(renderEngine, outputState);
+ mFlattener.renderCachedSets(outputState, renderDeadline);
}
void Planner::dump(const Vector<String16>& args, std::string& result) {
diff --git a/services/surfaceflinger/CompositionEngine/src/planner/TexturePool.cpp b/services/surfaceflinger/CompositionEngine/src/planner/TexturePool.cpp
new file mode 100644
index 0000000..e3772a2
--- /dev/null
+++ b/services/surfaceflinger/CompositionEngine/src/planner/TexturePool.cpp
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// #define LOG_NDEBUG 0
+
+#undef LOG_TAG
+#define LOG_TAG "Planner"
+
+#include <compositionengine/impl/planner/TexturePool.h>
+#include <utils/Log.h>
+
+namespace android::compositionengine::impl::planner {
+
+void TexturePool::setDisplaySize(ui::Size size) {
+ if (mSize == size) {
+ return;
+ }
+ mSize = size;
+ mPool.clear();
+ mPool.resize(kMinPoolSize);
+ std::generate_n(mPool.begin(), kMinPoolSize, [&]() { return Entry{genTexture(), nullptr}; });
+}
+
+std::shared_ptr<TexturePool::AutoTexture> TexturePool::borrowTexture() {
+ if (mPool.empty()) {
+ return std::make_shared<AutoTexture>(*this, genTexture(), nullptr);
+ }
+
+ const auto entry = mPool.front();
+ mPool.pop_front();
+ return std::make_shared<AutoTexture>(*this, entry.texture, entry.fence);
+}
+
+void TexturePool::returnTexture(std::shared_ptr<renderengine::ExternalTexture>&& texture,
+ const sp<Fence>& fence) {
+ // Drop the texture on the floor if the pool is no longer tracking textures of the same size.
+ if (static_cast<int32_t>(texture->getBuffer()->getWidth()) != mSize.getWidth() ||
+ static_cast<int32_t>(texture->getBuffer()->getHeight()) != mSize.getHeight()) {
+ ALOGV("Deallocating texture from Planner's pool - display size changed (previous: (%dx%d), "
+ "current: (%dx%d))",
+ texture->getBuffer()->getWidth(), texture->getBuffer()->getHeight(), mSize.getWidth(),
+ mSize.getHeight());
+ return;
+ }
+
+ // Also ensure the pool does not grow beyond a maximum size.
+ if (mPool.size() == kMaxPoolSize) {
+ ALOGD("Deallocating texture from Planner's pool - max size [%" PRIu64 "] reached",
+ static_cast<uint64_t>(kMaxPoolSize));
+ return;
+ }
+
+ mPool.push_back({std::move(texture), fence});
+}
+
+std::shared_ptr<renderengine::ExternalTexture> TexturePool::genTexture() {
+ LOG_ALWAYS_FATAL_IF(!mSize.isValid(), "Attempted to generate texture with invalid size");
+ return std::make_shared<
+ renderengine::ExternalTexture>(sp<GraphicBuffer>::
+ make(mSize.getWidth(), mSize.getHeight(),
+ HAL_PIXEL_FORMAT_RGBA_8888, 1,
+ GraphicBuffer::USAGE_HW_RENDER |
+ GraphicBuffer::USAGE_HW_COMPOSER |
+ GraphicBuffer::USAGE_HW_TEXTURE,
+ "Planner"),
+ mRenderEngine,
+ renderengine::ExternalTexture::Usage::READABLE |
+ renderengine::ExternalTexture::Usage::WRITEABLE);
+}
+
+} // namespace android::compositionengine::impl::planner
\ No newline at end of file
diff --git a/services/surfaceflinger/CompositionEngine/tests/OutputLayerTest.cpp b/services/surfaceflinger/CompositionEngine/tests/OutputLayerTest.cpp
index 5bd1216..e9ecf3e 100644
--- a/services/surfaceflinger/CompositionEngine/tests/OutputLayerTest.cpp
+++ b/services/surfaceflinger/CompositionEngine/tests/OutputLayerTest.cpp
@@ -699,6 +699,7 @@
Hwc2::IComposerClient::BlendMode::PREMULTIPLIED;
static constexpr float kAlpha = 51.f;
static constexpr float kOverrideAlpha = 1.f;
+ static constexpr float kSkipAlpha = 0.f;
static constexpr ui::Dataspace kDataspace = static_cast<ui::Dataspace>(71);
static constexpr ui::Dataspace kOverrideDataspace = static_cast<ui::Dataspace>(72);
static constexpr int kSupportedPerFrameMetadata = 101;
@@ -1055,6 +1056,22 @@
/*zIsOverridden*/ false, /*isPeekingThrough*/ false);
}
+TEST_F(OutputLayerWriteStateToHWCTest, overriddenSkipLayerDoesNotSendBuffer) {
+ mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::DEVICE;
+ includeOverrideInfo();
+
+ expectGeometryCommonCalls(kOverrideDisplayFrame, kOverrideSourceCrop, kOverrideBufferTransform,
+ kOverrideBlendMode, kSkipAlpha);
+ expectPerFrameCommonCalls(SimulateUnsupported::None, kOverrideDataspace, kOverrideVisibleRegion,
+ kOverrideSurfaceDamage);
+ expectSetHdrMetadataAndBufferCalls();
+ expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::DEVICE);
+ EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillRepeatedly(Return(false));
+
+ mOutputLayer.writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ true, 0,
+ /*zIsOverridden*/ false, /*isPeekingThrough*/ false);
+}
+
TEST_F(OutputLayerWriteStateToHWCTest, includesOverrideInfoIfPresent) {
mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::DEVICE;
includeOverrideInfo();
diff --git a/services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp b/services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp
index 52e0428..742b155 100644
--- a/services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp
+++ b/services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp
@@ -143,6 +143,7 @@
mOutput->setRenderSurfaceForTest(std::unique_ptr<RenderSurface>(mRenderSurface));
mOutput->editState().displaySpace.bounds = kDefaultDisplaySize;
+ EXPECT_CALL(mCompositionEngine, getRenderEngine()).WillRepeatedly(ReturnRef(mRenderEngine));
}
void injectOutputLayer(InjectedLayer& layer) {
@@ -156,6 +157,7 @@
static const Rect kDefaultDisplaySize;
StrictMock<mock::CompositionEngine> mCompositionEngine;
+ StrictMock<renderengine::mock::RenderEngine> mRenderEngine;
mock::DisplayColorProfile* mDisplayColorProfile = new StrictMock<mock::DisplayColorProfile>();
mock::RenderSurface* mRenderSurface = new StrictMock<mock::RenderSurface>();
std::shared_ptr<Output> mOutput = createOutput(mCompositionEngine);
@@ -1765,7 +1767,7 @@
MOCK_METHOD1(devOptRepaintFlash, void(const compositionengine::CompositionRefreshArgs&));
MOCK_METHOD1(finishFrame, void(const compositionengine::CompositionRefreshArgs&));
MOCK_METHOD0(postFramebuffer, void());
- MOCK_METHOD0(renderCachedSets, void());
+ MOCK_METHOD1(renderCachedSets, void(const compositionengine::CompositionRefreshArgs&));
};
StrictMock<OutputPartialMock> mOutput;
@@ -1785,7 +1787,7 @@
EXPECT_CALL(mOutput, devOptRepaintFlash(Ref(args)));
EXPECT_CALL(mOutput, finishFrame(Ref(args)));
EXPECT_CALL(mOutput, postFramebuffer());
- EXPECT_CALL(mOutput, renderCachedSets());
+ EXPECT_CALL(mOutput, renderCachedSets(Ref(args)));
mOutput.present(args);
}
diff --git a/services/surfaceflinger/CompositionEngine/tests/planner/CachedSetTest.cpp b/services/surfaceflinger/CompositionEngine/tests/planner/CachedSetTest.cpp
index 591f981..0acc317 100644
--- a/services/surfaceflinger/CompositionEngine/tests/planner/CachedSetTest.cpp
+++ b/services/surfaceflinger/CompositionEngine/tests/planner/CachedSetTest.cpp
@@ -40,6 +40,7 @@
using impl::planner::CachedSet;
using impl::planner::LayerState;
using impl::planner::LayerStateField;
+using impl::planner::TexturePool;
namespace {
@@ -50,6 +51,7 @@
return expectedBlurSetting == arg.blurSetting;
}
+static const ui::Size kOutputSize = ui::Size(1, 1);
class CachedSetTest : public testing::Test {
public:
@@ -76,9 +78,11 @@
impl::OutputCompositionState mOutputState;
android::renderengine::mock::RenderEngine mRenderEngine;
+ TexturePool mTexturePool = TexturePool(mRenderEngine);
};
void CachedSetTest::SetUp() {
+ mTexturePool.setDisplaySize(kOutputSize);
for (size_t i = 0; i < kNumLayers; i++) {
auto testLayer = std::make_unique<TestLayer>();
auto pos = static_cast<int32_t>(i);
@@ -219,6 +223,16 @@
EXPECT_EQ(2u, cachedSet.getAge());
}
+TEST_F(CachedSetTest, incrementSkipCount) {
+ CachedSet::Layer& layer = *mTestLayers[0]->cachedSetLayer.get();
+ CachedSet cachedSet(layer);
+ EXPECT_EQ(0u, cachedSet.getSkipCount());
+ cachedSet.incrementSkipCount();
+ EXPECT_EQ(1u, cachedSet.getSkipCount());
+ cachedSet.incrementSkipCount();
+ EXPECT_EQ(2u, cachedSet.getSkipCount());
+}
+
TEST_F(CachedSetTest, hasBufferUpdate_NoUpdate) {
CachedSet::Layer& layer1 = *mTestLayers[0]->cachedSetLayer.get();
CachedSet::Layer& layer2 = *mTestLayers[1]->cachedSetLayer.get();
@@ -253,6 +267,8 @@
CachedSet cachedSet1(layer1);
CachedSet cachedSet2(layer2);
cachedSet1.addLayer(layer3.getState(), kStartTime + 10ms);
+ cachedSet1.incrementSkipCount();
+ EXPECT_EQ(1u, cachedSet1.getSkipCount());
cachedSet1.append(cachedSet2);
EXPECT_EQ(kStartTime, cachedSet1.getLastUpdate());
@@ -264,6 +280,8 @@
EXPECT_TRUE(cachedSet1.getVisibleRegion().hasSameRects(expectedRegion));
EXPECT_EQ(3u, cachedSet1.getLayerCount());
EXPECT_EQ(0u, cachedSet1.getAge());
+ EXPECT_EQ(0u, cachedSet1.getSkipCount());
+
expectNoBuffer(cachedSet1);
// TODO(b/181192080): check that getNonBufferHash returns the correct hash value
// EXPECT_EQ(android::hashCombine(layer1.getHash(), layer2.getHash()),
@@ -319,7 +337,7 @@
const std::vector<const renderengine::LayerSettings*>& layers,
const std::shared_ptr<renderengine::ExternalTexture>&, const bool,
base::unique_fd&&, base::unique_fd*) -> size_t {
- EXPECT_EQ(Rect(-1, -1, 9, 4), displaySettings.physicalDisplay);
+ EXPECT_EQ(mOutputState.framebufferSpace.content, displaySettings.physicalDisplay);
EXPECT_EQ(mOutputState.layerStackSpace.content, displaySettings.clip);
EXPECT_EQ(ui::Transform::toRotationFlags(mOutputState.framebufferSpace.orientation),
displaySettings.orientation);
@@ -333,10 +351,11 @@
EXPECT_CALL(*layerFE1, prepareClientCompositionList(_)).WillOnce(Return(clientCompList1));
EXPECT_CALL(*layerFE2, prepareClientCompositionList(_)).WillOnce(Return(clientCompList2));
EXPECT_CALL(mRenderEngine, drawLayers(_, _, _, _, _, _)).WillOnce(Invoke(drawLayers));
- cachedSet.render(mRenderEngine, mOutputState);
+ cachedSet.render(mRenderEngine, mTexturePool, mOutputState);
expectReadyBuffer(cachedSet);
EXPECT_EQ(mOutputState.framebufferSpace, cachedSet.getOutputSpace());
+ EXPECT_EQ(mOutputState.framebufferSpace.content, cachedSet.getTextureBounds());
// Now check that appending a new cached set properly cleans up RenderEngine resources.
CachedSet::Layer& layer3 = *mTestLayers[2]->cachedSetLayer.get();
@@ -367,7 +386,7 @@
const std::vector<const renderengine::LayerSettings*>& layers,
const std::shared_ptr<renderengine::ExternalTexture>&, const bool,
base::unique_fd&&, base::unique_fd*) -> size_t {
- EXPECT_EQ(Rect(1, 2, 9, 4), displaySettings.physicalDisplay);
+ EXPECT_EQ(mOutputState.framebufferSpace.content, displaySettings.physicalDisplay);
EXPECT_EQ(mOutputState.layerStackSpace.content, displaySettings.clip);
EXPECT_EQ(ui::Transform::toRotationFlags(mOutputState.framebufferSpace.orientation),
displaySettings.orientation);
@@ -381,7 +400,7 @@
EXPECT_CALL(*layerFE1, prepareClientCompositionList(_)).WillOnce(Return(clientCompList1));
EXPECT_CALL(*layerFE2, prepareClientCompositionList(_)).WillOnce(Return(clientCompList2));
EXPECT_CALL(mRenderEngine, drawLayers(_, _, _, _, _, _)).WillOnce(Invoke(drawLayers));
- cachedSet.render(mRenderEngine, mOutputState);
+ cachedSet.render(mRenderEngine, mTexturePool, mOutputState);
expectReadyBuffer(cachedSet);
EXPECT_EQ(mOutputState.framebufferSpace, cachedSet.getOutputSpace());
@@ -424,6 +443,20 @@
EXPECT_FALSE(cachedSet.requiresHolePunch());
}
+TEST_F(CachedSetTest, holePunch_requiresNonHdr) {
+ mTestLayers[0]->outputLayerCompositionState.dataspace = ui::Dataspace::BT2020_PQ;
+ mTestLayers[0]->layerState->update(&mTestLayers[0]->outputLayer);
+
+ CachedSet::Layer& layer = *mTestLayers[0]->cachedSetLayer.get();
+ mTestLayers[0]->layerFECompositionState.buffer = sp<GraphicBuffer>::make();
+ sp<mock::LayerFE> layerFE = mTestLayers[0]->layerFE;
+
+ CachedSet cachedSet(layer);
+ EXPECT_CALL(*layerFE, hasRoundedCorners()).WillRepeatedly(Return(true));
+
+ EXPECT_FALSE(cachedSet.requiresHolePunch());
+}
+
TEST_F(CachedSetTest, requiresHolePunch) {
CachedSet::Layer& layer = *mTestLayers[0]->cachedSetLayer.get();
mTestLayers[0]->layerFECompositionState.buffer = sp<GraphicBuffer>::make();
@@ -554,7 +587,76 @@
};
EXPECT_CALL(mRenderEngine, drawLayers(_, _, _, _, _, _)).WillOnce(Invoke(drawLayers));
- cachedSet.render(mRenderEngine, mOutputState);
+ cachedSet.render(mRenderEngine, mTexturePool, mOutputState);
+}
+
+TEST_F(CachedSetTest, addHolePunch_noBuffer) {
+ // Same as addHolePunch, except that clientCompList3 does not contain a
+ // buffer. This imitates the case where the buffer had protected content, so
+ // BufferLayer did not add it to the LayerSettings. This should not assert.
+ mTestLayers[0]->outputLayerCompositionState.displayFrame = Rect(0, 0, 5, 5);
+ CachedSet::Layer& layer1 = *mTestLayers[0]->cachedSetLayer.get();
+ sp<mock::LayerFE> layerFE1 = mTestLayers[0]->layerFE;
+
+ CachedSet::Layer& layer2 = *mTestLayers[1]->cachedSetLayer.get();
+ sp<mock::LayerFE> layerFE2 = mTestLayers[1]->layerFE;
+
+ CachedSet::Layer& layer3 = *mTestLayers[2]->cachedSetLayer.get();
+ sp<mock::LayerFE> layerFE3 = mTestLayers[2]->layerFE;
+
+ CachedSet cachedSet(layer1);
+ cachedSet.addLayer(layer2.getState(), kStartTime + 10ms);
+
+ cachedSet.addHolePunchLayerIfFeasible(layer3, true);
+
+ std::vector<compositionengine::LayerFE::LayerSettings> clientCompList1;
+ clientCompList1.push_back({});
+ std::vector<compositionengine::LayerFE::LayerSettings> clientCompList2;
+ clientCompList2.push_back({});
+ std::vector<compositionengine::LayerFE::LayerSettings> clientCompList3;
+ clientCompList3.push_back({});
+
+ EXPECT_CALL(*layerFE1, prepareClientCompositionList(_)).WillOnce(Return(clientCompList1));
+ EXPECT_CALL(*layerFE2, prepareClientCompositionList(_)).WillOnce(Return(clientCompList2));
+ EXPECT_CALL(*layerFE3, prepareClientCompositionList(_)).WillOnce(Return(clientCompList3));
+
+ const auto drawLayers = [&](const renderengine::DisplaySettings&,
+ const std::vector<const renderengine::LayerSettings*>& layers,
+ const std::shared_ptr<renderengine::ExternalTexture>&, const bool,
+ base::unique_fd&&, base::unique_fd*) -> size_t {
+ // If the highlight layer is enabled, it will increase the size by 1.
+ // We're interested in the third layer either way.
+ EXPECT_GE(layers.size(), 3u);
+ const auto* holePunchSettings = layers[2];
+ EXPECT_EQ(nullptr, holePunchSettings->source.buffer.buffer);
+ EXPECT_EQ(half3(0.0f, 0.0f, 0.0f), holePunchSettings->source.solidColor);
+ EXPECT_TRUE(holePunchSettings->disableBlending);
+ EXPECT_EQ(0.0f, holePunchSettings->alpha);
+
+ return NO_ERROR;
+ };
+
+ EXPECT_CALL(mRenderEngine, drawLayers(_, _, _, _, _, _)).WillOnce(Invoke(drawLayers));
+ cachedSet.render(mRenderEngine, mTexturePool, mOutputState);
+}
+
+TEST_F(CachedSetTest, append_removesHolePunch) {
+ mTestLayers[0]->outputLayerCompositionState.displayFrame = Rect(0, 0, 5, 5);
+ mTestLayers[0]->layerFECompositionState.isOpaque = true;
+ CachedSet::Layer& layer1 = *mTestLayers[0]->cachedSetLayer.get();
+ CachedSet::Layer& layer2 = *mTestLayers[1]->cachedSetLayer.get();
+ CachedSet::Layer& layer3 = *mTestLayers[2]->cachedSetLayer.get();
+
+ CachedSet cachedSet(layer1);
+ cachedSet.addLayer(layer2.getState(), kStartTime + 10ms);
+
+ cachedSet.addHolePunchLayerIfFeasible(layer3, false);
+
+ ASSERT_EQ(&mTestLayers[2]->outputLayer, cachedSet.getHolePunchLayer());
+
+ CachedSet cachedSet3(layer3);
+ cachedSet.append(cachedSet3);
+ ASSERT_EQ(nullptr, cachedSet.getHolePunchLayer());
}
TEST_F(CachedSetTest, decompose_removesHolePunch) {
@@ -672,7 +774,7 @@
};
EXPECT_CALL(mRenderEngine, drawLayers(_, _, _, _, _, _)).WillOnce(Invoke(drawLayers));
- cachedSet.render(mRenderEngine, mOutputState);
+ cachedSet.render(mRenderEngine, mTexturePool, mOutputState);
}
} // namespace
diff --git a/services/surfaceflinger/CompositionEngine/tests/planner/FlattenerTest.cpp b/services/surfaceflinger/CompositionEngine/tests/planner/FlattenerTest.cpp
index 8b03964..334b855 100644
--- a/services/surfaceflinger/CompositionEngine/tests/planner/FlattenerTest.cpp
+++ b/services/surfaceflinger/CompositionEngine/tests/planner/FlattenerTest.cpp
@@ -24,6 +24,7 @@
#include <renderengine/ExternalTexture.h>
#include <renderengine/LayerSettings.h>
#include <renderengine/mock/RenderEngine.h>
+#include <chrono>
namespace android::compositionengine {
using namespace std::chrono_literals;
@@ -46,21 +47,28 @@
class TestableFlattener : public Flattener {
public:
- TestableFlattener(bool enableHolePunch) : Flattener(enableHolePunch) {}
+ TestableFlattener(renderengine::RenderEngine& renderEngine, bool enableHolePunch,
+ std::optional<Flattener::CachedSetRenderSchedulingTunables>
+ cachedSetRenderSchedulingTunables = std::nullopt)
+ : Flattener(renderEngine, enableHolePunch, cachedSetRenderSchedulingTunables) {}
const std::optional<CachedSet>& getNewCachedSetForTesting() const { return mNewCachedSet; }
};
class FlattenerTest : public testing::Test {
public:
- FlattenerTest() : mFlattener(std::make_unique<TestableFlattener>(true)) {}
+ FlattenerTest() : FlattenerTest(std::nullopt) {}
void SetUp() override;
protected:
+ FlattenerTest(std::optional<Flattener::CachedSetRenderSchedulingTunables>
+ cachedSetRenderSchedulingTunables)
+ : mFlattener(std::make_unique<TestableFlattener>(mRenderEngine, true,
+ cachedSetRenderSchedulingTunables)) {}
void initializeOverrideBuffer(const std::vector<const LayerState*>& layers);
void initializeFlattener(const std::vector<const LayerState*>& layers);
void expectAllLayersFlattened(const std::vector<const LayerState*>& layers);
- // mRenderEngine may be held as a pointer to mFlattener, so mFlattener must be destroyed first.
+ // mRenderEngine is held as a reference in mFlattener, so explicitly destroy mFlattener first.
renderengine::mock::RenderEngine mRenderEngine;
std::unique_ptr<TestableFlattener> mFlattener;
@@ -84,6 +92,7 @@
};
void FlattenerTest::SetUp() {
+ mFlattener->setDisplaySize({1, 1});
for (size_t i = 0; i < kNumLayers; i++) {
auto testLayer = std::make_unique<TestLayer>();
auto pos = static_cast<int32_t>(i);
@@ -146,13 +155,13 @@
initializeOverrideBuffer(layers);
EXPECT_EQ(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
// same geometry, update the internal layer stack
initializeOverrideBuffer(layers);
EXPECT_EQ(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
}
void FlattenerTest::expectAllLayersFlattened(const std::vector<const LayerState*>& layers) {
@@ -162,7 +171,7 @@
initializeOverrideBuffer(layers);
EXPECT_EQ(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
for (const auto layer : layers) {
EXPECT_EQ(nullptr, layer->getOutputLayer()->getState().overrideInfo.buffer);
@@ -172,7 +181,7 @@
initializeOverrideBuffer(layers);
EXPECT_NE(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
const auto buffer = layers[0]->getOutputLayer()->getState().overrideInfo.buffer;
EXPECT_NE(nullptr, buffer);
@@ -207,7 +216,7 @@
initializeOverrideBuffer(layers);
EXPECT_EQ(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
}
TEST_F(FlattenerTest, flattenLayers_basicFlatten) {
@@ -253,7 +262,7 @@
initializeOverrideBuffer(layers);
EXPECT_NE(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
EXPECT_NE(nullptr, overrideBuffer1);
EXPECT_EQ(overrideBuffer1, overrideBuffer2);
@@ -358,7 +367,7 @@
initializeOverrideBuffer(layers);
EXPECT_EQ(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
EXPECT_EQ(nullptr, overrideBuffer1);
EXPECT_EQ(nullptr, overrideBuffer2);
@@ -395,7 +404,7 @@
initializeOverrideBuffer(layers);
EXPECT_EQ(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
EXPECT_EQ(nullptr, overrideBuffer1);
EXPECT_EQ(nullptr, overrideBuffer2);
@@ -404,7 +413,7 @@
initializeOverrideBuffer(layers);
EXPECT_NE(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
EXPECT_EQ(nullptr, overrideBuffer1);
EXPECT_NE(nullptr, overrideBuffer2);
@@ -417,7 +426,7 @@
initializeOverrideBuffer(layers);
EXPECT_NE(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
EXPECT_EQ(nullptr, overrideBuffer1);
EXPECT_NE(nullptr, overrideBuffer2);
@@ -426,7 +435,7 @@
initializeOverrideBuffer(layers);
EXPECT_NE(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
EXPECT_NE(nullptr, overrideBuffer1);
EXPECT_EQ(overrideBuffer1, overrideBuffer2);
@@ -468,7 +477,7 @@
initializeOverrideBuffer(layers);
EXPECT_EQ(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
EXPECT_EQ(nullptr, overrideBuffer1);
EXPECT_EQ(nullptr, overrideBuffer2);
@@ -482,7 +491,7 @@
EXPECT_NE(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
mOutputState.framebufferSpace.orientation = ui::ROTATION_90;
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
EXPECT_NE(nullptr, overrideBuffer1);
EXPECT_EQ(overrideBuffer1, overrideBuffer2);
@@ -495,7 +504,7 @@
EXPECT_NE(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
mOutputState.framebufferSpace.orientation = ui::ROTATION_180;
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
EXPECT_NE(nullptr, overrideBuffer1);
EXPECT_EQ(overrideBuffer1, overrideBuffer2);
@@ -510,7 +519,7 @@
initializeOverrideBuffer(layers);
EXPECT_NE(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
EXPECT_NE(nullptr, overrideBuffer1);
EXPECT_EQ(overrideBuffer1, overrideBuffer2);
@@ -522,7 +531,7 @@
EXPECT_NE(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
mOutputState.framebufferSpace.orientation = ui::ROTATION_270;
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
EXPECT_NE(nullptr, overrideBuffer1);
EXPECT_EQ(overrideBuffer1, overrideBuffer2);
@@ -561,7 +570,7 @@
// This will render a CachedSet.
EXPECT_CALL(mRenderEngine, drawLayers(_, _, _, _, _, _)).WillOnce(Return(NO_ERROR));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
// We've rendered a CachedSet, but we haven't merged it in.
EXPECT_EQ(nullptr, overrideBuffer1);
@@ -574,7 +583,7 @@
initializeOverrideBuffer(layers);
EXPECT_NE(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
EXPECT_NE(nullptr, overrideBuffer1);
EXPECT_EQ(overrideBuffer1, overrideBuffer2);
@@ -623,7 +632,7 @@
// This will render a CachedSet.
EXPECT_CALL(mRenderEngine, drawLayers(_, _, _, _, _, _)).WillOnce(Return(NO_ERROR));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
// We've rendered a CachedSet, but we haven't merged it in.
EXPECT_EQ(nullptr, overrideBuffer1);
@@ -636,7 +645,7 @@
initializeOverrideBuffer(layers);
EXPECT_NE(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
EXPECT_NE(nullptr, overrideBuffer1);
EXPECT_EQ(overrideBuffer1, overrideBuffer2);
@@ -680,7 +689,7 @@
initializeOverrideBuffer(layers);
EXPECT_EQ(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
for (const auto layer : layers) {
EXPECT_EQ(nullptr, layer->getOutputLayer()->getState().overrideInfo.buffer);
@@ -690,7 +699,7 @@
initializeOverrideBuffer(layers);
EXPECT_NE(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
EXPECT_NE(nullptr, overrideBuffer1);
EXPECT_EQ(overrideBuffer1, overrideBuffer2);
EXPECT_EQ(nullptr, overrideBuffer3);
@@ -724,7 +733,7 @@
initializeOverrideBuffer(layers);
EXPECT_EQ(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
for (const auto layer : layers) {
EXPECT_EQ(nullptr, layer->getOutputLayer()->getState().overrideInfo.buffer);
@@ -735,7 +744,7 @@
initializeOverrideBuffer(layers);
EXPECT_EQ(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
for (const auto layer : layers) {
EXPECT_EQ(nullptr, layer->getOutputLayer()->getState().overrideInfo.buffer);
}
@@ -776,7 +785,7 @@
initializeOverrideBuffer(layers);
EXPECT_EQ(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
for (const auto layer : layers) {
EXPECT_EQ(nullptr, layer->getOutputLayer()->getState().overrideInfo.buffer);
@@ -786,7 +795,7 @@
initializeOverrideBuffer(layers);
EXPECT_NE(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
EXPECT_EQ(nullptr, overrideBuffer1);
EXPECT_EQ(nullptr, blurOverrideBuffer);
EXPECT_NE(nullptr, overrideBuffer3);
@@ -823,7 +832,7 @@
initializeOverrideBuffer(layers);
EXPECT_EQ(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
const auto& cachedSet = mFlattener->getNewCachedSetForTesting();
ASSERT_NE(std::nullopt, cachedSet);
@@ -837,7 +846,7 @@
initializeOverrideBuffer(layers);
EXPECT_NE(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
EXPECT_NE(nullptr, overrideBuffer1);
EXPECT_EQ(overrideBuffer2, overrideBuffer1);
EXPECT_EQ(nullptr, blurOverrideBuffer);
@@ -864,7 +873,7 @@
initializeOverrideBuffer(layers);
EXPECT_EQ(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
EXPECT_EQ(nullptr, overrideBuffer1);
EXPECT_EQ(nullptr, overrideBuffer2);
@@ -872,16 +881,61 @@
// Simulate attempting to render prior to merging the new cached set with the layer stack.
// Here we should not try to re-render.
EXPECT_CALL(mRenderEngine, drawLayers(_, _, _, _, _, _)).Times(0);
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
// We provide the override buffer now that it's rendered
EXPECT_NE(getNonBufferHash(layers),
mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
- mFlattener->renderCachedSets(mRenderEngine, mOutputState);
+ mFlattener->renderCachedSets(mOutputState, std::nullopt);
EXPECT_NE(nullptr, overrideBuffer1);
EXPECT_EQ(overrideBuffer2, overrideBuffer1);
}
+const constexpr std::chrono::nanoseconds kCachedSetRenderDuration = 0ms;
+const constexpr size_t kMaxDeferRenderAttempts = 2;
+
+class FlattenerRenderSchedulingTest : public FlattenerTest {
+public:
+ FlattenerRenderSchedulingTest()
+ : FlattenerTest(
+ Flattener::CachedSetRenderSchedulingTunables{.cachedSetRenderDuration =
+ kCachedSetRenderDuration,
+ .maxDeferRenderAttempts =
+ kMaxDeferRenderAttempts}) {
+ }
+};
+
+TEST_F(FlattenerRenderSchedulingTest, flattenLayers_renderCachedSets_defersUpToMaxAttempts) {
+ auto& layerState1 = mTestLayers[0]->layerState;
+ auto& layerState2 = mTestLayers[1]->layerState;
+
+ const std::vector<const LayerState*> layers = {
+ layerState1.get(),
+ layerState2.get(),
+ };
+
+ initializeFlattener(layers);
+
+ // Mark the layers inactive
+ mTime += 200ms;
+
+ initializeOverrideBuffer(layers);
+ EXPECT_EQ(getNonBufferHash(layers),
+ mFlattener->flattenLayers(layers, getNonBufferHash(layers), mTime));
+
+ for (size_t i = 0; i < kMaxDeferRenderAttempts; i++) {
+ EXPECT_CALL(mRenderEngine, drawLayers(_, _, _, _, _, _)).Times(0);
+ mFlattener->renderCachedSets(mOutputState,
+ std::chrono::steady_clock::now() -
+ (kCachedSetRenderDuration + 10ms));
+ }
+
+ EXPECT_CALL(mRenderEngine, drawLayers(_, _, _, _, _, _)).WillOnce(Return(NO_ERROR));
+ mFlattener->renderCachedSets(mOutputState,
+ std::chrono::steady_clock::now() -
+ (kCachedSetRenderDuration + 10ms));
+}
+
} // namespace
} // namespace android::compositionengine
diff --git a/services/surfaceflinger/CompositionEngine/tests/planner/TexturePoolTest.cpp b/services/surfaceflinger/CompositionEngine/tests/planner/TexturePoolTest.cpp
new file mode 100644
index 0000000..b802e51
--- /dev/null
+++ b/services/surfaceflinger/CompositionEngine/tests/planner/TexturePoolTest.cpp
@@ -0,0 +1,134 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#undef LOG_TAG
+#define LOG_TAG "TexturePoolTest"
+
+#include <compositionengine/impl/planner/TexturePool.h>
+#include <gtest/gtest.h>
+#include <log/log.h>
+#include <renderengine/mock/RenderEngine.h>
+
+namespace android::compositionengine::impl::planner {
+namespace {
+
+const ui::Size kDisplaySize(1, 1);
+const ui::Size kDisplaySizeTwo(2, 2);
+
+class TestableTexturePool : public TexturePool {
+public:
+ TestableTexturePool(renderengine::RenderEngine& renderEngine) : TexturePool(renderEngine) {}
+
+ size_t getMinPoolSize() const { return kMinPoolSize; }
+ size_t getMaxPoolSize() const { return kMaxPoolSize; }
+ size_t getPoolSize() const { return mPool.size(); }
+};
+
+struct TexturePoolTest : public testing::Test {
+ TexturePoolTest() {
+ const ::testing::TestInfo* const test_info =
+ ::testing::UnitTest::GetInstance()->current_test_info();
+ ALOGD("**** Setting up for %s.%s\n", test_info->test_case_name(), test_info->name());
+ mTexturePool.setDisplaySize(kDisplaySize);
+ }
+
+ ~TexturePoolTest() {
+ const ::testing::TestInfo* const test_info =
+ ::testing::UnitTest::GetInstance()->current_test_info();
+ ALOGD("**** Tearing down after %s.%s\n", test_info->test_case_name(), test_info->name());
+ }
+
+ renderengine::mock::RenderEngine mRenderEngine;
+ TestableTexturePool mTexturePool = TestableTexturePool(mRenderEngine);
+};
+
+TEST_F(TexturePoolTest, preallocatesMinPool) {
+ EXPECT_EQ(mTexturePool.getMinPoolSize(), mTexturePool.getPoolSize());
+}
+
+TEST_F(TexturePoolTest, doesNotAllocateBeyondMinPool) {
+ for (size_t i = 0; i < mTexturePool.getMinPoolSize() + 1; i++) {
+ auto texture = mTexturePool.borrowTexture();
+ }
+
+ EXPECT_EQ(mTexturePool.getMinPoolSize(), mTexturePool.getPoolSize());
+}
+
+TEST_F(TexturePoolTest, cyclesUpToMaxPoolSize) {
+ std::unordered_set<uint64_t> bufferIds;
+ std::deque<std::shared_ptr<TexturePool::AutoTexture>> textures;
+ for (size_t i = 0; i < mTexturePool.getMaxPoolSize(); i++) {
+ textures.emplace_back(mTexturePool.borrowTexture());
+ bufferIds.insert(textures.back()->get()->getBuffer()->getId());
+ }
+
+ EXPECT_EQ(mTexturePool.getMaxPoolSize(), bufferIds.size());
+
+ for (size_t i = 0; i < 3; i++) {
+ textures.pop_front();
+ textures.emplace_back(mTexturePool.borrowTexture());
+ bufferIds.insert(textures.back()->get()->getBuffer()->getId());
+ }
+
+ EXPECT_EQ(mTexturePool.getMaxPoolSize(), bufferIds.size());
+}
+
+TEST_F(TexturePoolTest, goesPastMaxSizeAndRebounds) {
+ std::unordered_set<uint64_t> bufferIds;
+ std::vector<std::shared_ptr<TexturePool::AutoTexture>> textures;
+ for (size_t i = 0; i < mTexturePool.getMaxPoolSize() + 2; i++) {
+ textures.emplace_back(mTexturePool.borrowTexture());
+ bufferIds.insert(textures.back()->get()->getBuffer()->getId());
+ }
+
+ EXPECT_EQ(mTexturePool.getMaxPoolSize() + 2, bufferIds.size());
+
+ // Return the textures to the pool.
+ // Now when we cycle through the pool it's again bounded by max textures.
+ textures.clear();
+
+ std::unordered_set<uint64_t> newBufferIds;
+ for (size_t i = 0; i < 2 * mTexturePool.getMaxPoolSize(); i++) {
+ auto texture = mTexturePool.borrowTexture();
+ newBufferIds.insert(texture->get()->getBuffer()->getId());
+ }
+
+ EXPECT_EQ(mTexturePool.getMaxPoolSize(), newBufferIds.size());
+}
+
+TEST_F(TexturePoolTest, reallocatesWhenDisplaySizeChanges) {
+ auto texture = mTexturePool.borrowTexture();
+
+ EXPECT_EQ(kDisplaySize.getWidth(),
+ static_cast<int32_t>(texture->get()->getBuffer()->getWidth()));
+ EXPECT_EQ(kDisplaySize.getHeight(),
+ static_cast<int32_t>(texture->get()->getBuffer()->getHeight()));
+ mTexturePool.setDisplaySize(kDisplaySizeTwo);
+
+ EXPECT_EQ(mTexturePool.getMinPoolSize(), mTexturePool.getPoolSize());
+ texture.reset();
+ // When the texture is returned to the pool, the pool now destroys it.
+ EXPECT_EQ(mTexturePool.getMinPoolSize(), mTexturePool.getPoolSize());
+
+ texture = mTexturePool.borrowTexture();
+ EXPECT_EQ(kDisplaySizeTwo.getWidth(),
+ static_cast<int32_t>(texture->get()->getBuffer()->getWidth()));
+ EXPECT_EQ(kDisplaySizeTwo.getHeight(),
+ static_cast<int32_t>(texture->get()->getBuffer()->getHeight()));
+}
+
+} // namespace
+} // namespace android::compositionengine::impl::planner
diff --git a/services/surfaceflinger/EffectLayer.cpp b/services/surfaceflinger/EffectLayer.cpp
index 0cc5f33..86c6b21 100644
--- a/services/surfaceflinger/EffectLayer.cpp
+++ b/services/surfaceflinger/EffectLayer.cpp
@@ -78,28 +78,28 @@
}
bool EffectLayer::setColor(const half3& color) {
- if (mCurrentState.color.r == color.r && mCurrentState.color.g == color.g &&
- mCurrentState.color.b == color.b) {
+ if (mDrawingState.color.r == color.r && mDrawingState.color.g == color.g &&
+ mDrawingState.color.b == color.b) {
return false;
}
- mCurrentState.sequence++;
- mCurrentState.color.r = color.r;
- mCurrentState.color.g = color.g;
- mCurrentState.color.b = color.b;
- mCurrentState.modified = true;
+ mDrawingState.sequence++;
+ mDrawingState.color.r = color.r;
+ mDrawingState.color.g = color.g;
+ mDrawingState.color.b = color.b;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
bool EffectLayer::setDataspace(ui::Dataspace dataspace) {
- if (mCurrentState.dataspace == dataspace) {
+ if (mDrawingState.dataspace == dataspace) {
return false;
}
- mCurrentState.sequence++;
- mCurrentState.dataspace = dataspace;
- mCurrentState.modified = true;
+ mDrawingState.sequence++;
+ mDrawingState.dataspace = dataspace;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
diff --git a/services/surfaceflinger/FpsReporter.cpp b/services/surfaceflinger/FpsReporter.cpp
index 23db805..e12835f 100644
--- a/services/surfaceflinger/FpsReporter.cpp
+++ b/services/surfaceflinger/FpsReporter.cpp
@@ -55,7 +55,7 @@
std::vector<std::pair<TrackedListener, sp<Layer>>> listenersAndLayersToReport;
mFlinger.mCurrentState.traverse([&](Layer* layer) {
- auto& currentState = layer->getCurrentState();
+ auto& currentState = layer->getDrawingState();
if (currentState.metadata.has(METADATA_TASK_ID)) {
int32_t taskId = currentState.metadata.getInt32(METADATA_TASK_ID, 0);
if (seenTasks.count(taskId) == 0) {
@@ -100,4 +100,4 @@
mListeners.erase(wp<IBinder>(IInterface::asBinder(listener)));
}
-} // namespace android
\ No newline at end of file
+} // namespace android
diff --git a/services/surfaceflinger/FrameTimeline/FrameTimeline.cpp b/services/surfaceflinger/FrameTimeline/FrameTimeline.cpp
index 9b03287..c294ff2 100644
--- a/services/surfaceflinger/FrameTimeline/FrameTimeline.cpp
+++ b/services/surfaceflinger/FrameTimeline/FrameTimeline.cpp
@@ -304,7 +304,7 @@
frametimeline::TimelineItem&& predictions,
std::shared_ptr<TimeStats> timeStats,
JankClassificationThresholds thresholds,
- TraceCookieCounter* traceCookieCounter, bool isBuffer)
+ TraceCookieCounter* traceCookieCounter, bool isBuffer, int32_t gameMode)
: mToken(frameTimelineInfo.vsyncId),
mInputEventId(frameTimelineInfo.inputEventId),
mOwnerPid(ownerPid),
@@ -319,7 +319,8 @@
mTimeStats(timeStats),
mJankClassificationThresholds(thresholds),
mTraceCookieCounter(*traceCookieCounter),
- mIsBuffer(isBuffer) {}
+ mIsBuffer(isBuffer),
+ mGameMode(gameMode) {}
void SurfaceFrame::setActualStartTime(nsecs_t actualStartTime) {
std::scoped_lock lock(mMutex);
@@ -607,8 +608,8 @@
if (mPredictionState != PredictionState::None) {
// Only update janky frames if the app used vsync predictions
mTimeStats->incrementJankyFrames({refreshRate, mRenderRate, mOwnerUid, mLayerName,
- mJankType, displayDeadlineDelta, displayPresentDelta,
- deadlineDelta});
+ mGameMode, mJankType, displayDeadlineDelta,
+ displayPresentDelta, deadlineDelta});
}
}
@@ -692,6 +693,7 @@
actualSurfaceFrameStartEvent->set_gpu_composition(mGpuComposition);
actualSurfaceFrameStartEvent->set_jank_type(jankTypeBitmaskToProto(mJankType));
actualSurfaceFrameStartEvent->set_prediction_type(toProto(mPredictionState));
+ actualSurfaceFrameStartEvent->set_is_buffer(mIsBuffer);
});
// Actual timeline end
@@ -776,14 +778,14 @@
std::shared_ptr<SurfaceFrame> FrameTimeline::createSurfaceFrameForToken(
const FrameTimelineInfo& frameTimelineInfo, pid_t ownerPid, uid_t ownerUid, int32_t layerId,
- std::string layerName, std::string debugName, bool isBuffer) {
+ std::string layerName, std::string debugName, bool isBuffer, int32_t gameMode) {
ATRACE_CALL();
if (frameTimelineInfo.vsyncId == FrameTimelineInfo::INVALID_VSYNC_ID) {
return std::make_shared<SurfaceFrame>(frameTimelineInfo, ownerPid, ownerUid, layerId,
std::move(layerName), std::move(debugName),
PredictionState::None, TimelineItem(), mTimeStats,
mJankClassificationThresholds, &mTraceCookieCounter,
- isBuffer);
+ isBuffer, gameMode);
}
std::optional<TimelineItem> predictions =
mTokenManager.getPredictionsForToken(frameTimelineInfo.vsyncId);
@@ -792,13 +794,13 @@
std::move(layerName), std::move(debugName),
PredictionState::Valid, std::move(*predictions),
mTimeStats, mJankClassificationThresholds,
- &mTraceCookieCounter, isBuffer);
+ &mTraceCookieCounter, isBuffer, gameMode);
}
return std::make_shared<SurfaceFrame>(frameTimelineInfo, ownerPid, ownerUid, layerId,
std::move(layerName), std::move(debugName),
PredictionState::Expired, TimelineItem(), mTimeStats,
mJankClassificationThresholds, &mTraceCookieCounter,
- isBuffer);
+ isBuffer, gameMode);
}
FrameTimeline::DisplayFrame::DisplayFrame(std::shared_ptr<TimeStats> timeStats,
diff --git a/services/surfaceflinger/FrameTimeline/FrameTimeline.h b/services/surfaceflinger/FrameTimeline/FrameTimeline.h
index 42be55a..15ecf13 100644
--- a/services/surfaceflinger/FrameTimeline/FrameTimeline.h
+++ b/services/surfaceflinger/FrameTimeline/FrameTimeline.h
@@ -154,7 +154,7 @@
int32_t layerId, std::string layerName, std::string debugName,
PredictionState predictionState, TimelineItem&& predictions,
std::shared_ptr<TimeStats> timeStats, JankClassificationThresholds thresholds,
- TraceCookieCounter* traceCookieCounter, bool isBuffer);
+ TraceCookieCounter* traceCookieCounter, bool isBuffer, int32_t gameMode);
~SurfaceFrame() = default;
// Returns std::nullopt if the frame hasn't been classified yet.
@@ -259,6 +259,8 @@
// Tells if the SurfaceFrame is representing a buffer or a transaction without a
// buffer(animations)
bool mIsBuffer;
+ // GameMode from the layer. Used in metrics.
+ int32_t mGameMode = 0;
};
/*
@@ -278,7 +280,8 @@
// Debug name is the human-readable debugging string for dumpsys.
virtual std::shared_ptr<SurfaceFrame> createSurfaceFrameForToken(
const FrameTimelineInfo& frameTimelineInfo, pid_t ownerPid, uid_t ownerUid,
- int32_t layerId, std::string layerName, std::string debugName, bool isBuffer) = 0;
+ int32_t layerId, std::string layerName, std::string debugName, bool isBuffer,
+ int32_t gameMode) = 0;
// Adds a new SurfaceFrame to the current DisplayFrame. Frames from multiple layers can be
// composited into one display frame.
@@ -437,7 +440,8 @@
frametimeline::TokenManager* getTokenManager() override { return &mTokenManager; }
std::shared_ptr<SurfaceFrame> createSurfaceFrameForToken(
const FrameTimelineInfo& frameTimelineInfo, pid_t ownerPid, uid_t ownerUid,
- int32_t layerId, std::string layerName, std::string debugName, bool isBuffer) override;
+ int32_t layerId, std::string layerName, std::string debugName, bool isBuffer,
+ int32_t gameMode) override;
void addSurfaceFrame(std::shared_ptr<frametimeline::SurfaceFrame> surfaceFrame) override;
void setSfWakeUp(int64_t token, nsecs_t wakeupTime, Fps refreshRate) override;
void setSfPresent(nsecs_t sfPresentTime, const std::shared_ptr<FenceTime>& presentFence,
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index 9fcc17c..b819dbe 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -98,52 +98,49 @@
if (args.flags & ISurfaceComposerClient::eSkipScreenshot)
layerFlags |= layer_state_t::eLayerSkipScreenshot;
- mCurrentState.active_legacy.w = args.w;
- mCurrentState.active_legacy.h = args.h;
- mCurrentState.flags = layerFlags;
- mCurrentState.active_legacy.transform.set(0, 0);
- mCurrentState.crop.makeInvalid();
- mCurrentState.requestedCrop = mCurrentState.crop;
- mCurrentState.z = 0;
- mCurrentState.color.a = 1.0f;
- mCurrentState.layerStack = 0;
- mCurrentState.sequence = 0;
- mCurrentState.requested_legacy = mCurrentState.active_legacy;
- mCurrentState.width = UINT32_MAX;
- mCurrentState.height = UINT32_MAX;
- mCurrentState.transform.set(0, 0);
- mCurrentState.frameNumber = 0;
- mCurrentState.bufferTransform = 0;
- mCurrentState.transformToDisplayInverse = false;
- mCurrentState.crop.makeInvalid();
- mCurrentState.acquireFence = sp<Fence>::make(-1);
- mCurrentState.acquireFenceTime = std::make_shared<FenceTime>(mCurrentState.acquireFence);
- mCurrentState.dataspace = ui::Dataspace::UNKNOWN;
- mCurrentState.hdrMetadata.validTypes = 0;
- mCurrentState.surfaceDamageRegion = Region::INVALID_REGION;
- mCurrentState.cornerRadius = 0.0f;
- mCurrentState.backgroundBlurRadius = 0;
- mCurrentState.api = -1;
- mCurrentState.hasColorTransform = false;
- mCurrentState.colorSpaceAgnostic = false;
- mCurrentState.frameRateSelectionPriority = PRIORITY_UNSET;
- mCurrentState.metadata = args.metadata;
- mCurrentState.shadowRadius = 0.f;
- mCurrentState.fixedTransformHint = ui::Transform::ROT_INVALID;
- mCurrentState.frameTimelineInfo = {};
- mCurrentState.postTime = -1;
- mCurrentState.destinationFrame.makeInvalid();
+ mDrawingState.active_legacy.w = args.w;
+ mDrawingState.active_legacy.h = args.h;
+ mDrawingState.flags = layerFlags;
+ mDrawingState.active_legacy.transform.set(0, 0);
+ mDrawingState.crop.makeInvalid();
+ mDrawingState.requestedCrop = mDrawingState.crop;
+ mDrawingState.z = 0;
+ mDrawingState.color.a = 1.0f;
+ mDrawingState.layerStack = 0;
+ mDrawingState.sequence = 0;
+ mDrawingState.requested_legacy = mDrawingState.active_legacy;
+ mDrawingState.width = UINT32_MAX;
+ mDrawingState.height = UINT32_MAX;
+ mDrawingState.transform.set(0, 0);
+ mDrawingState.frameNumber = 0;
+ mDrawingState.bufferTransform = 0;
+ mDrawingState.transformToDisplayInverse = false;
+ mDrawingState.crop.makeInvalid();
+ mDrawingState.acquireFence = sp<Fence>::make(-1);
+ mDrawingState.acquireFenceTime = std::make_shared<FenceTime>(mDrawingState.acquireFence);
+ mDrawingState.dataspace = ui::Dataspace::UNKNOWN;
+ mDrawingState.hdrMetadata.validTypes = 0;
+ mDrawingState.surfaceDamageRegion = Region::INVALID_REGION;
+ mDrawingState.cornerRadius = 0.0f;
+ mDrawingState.backgroundBlurRadius = 0;
+ mDrawingState.api = -1;
+ mDrawingState.hasColorTransform = false;
+ mDrawingState.colorSpaceAgnostic = false;
+ mDrawingState.frameRateSelectionPriority = PRIORITY_UNSET;
+ mDrawingState.metadata = args.metadata;
+ mDrawingState.shadowRadius = 0.f;
+ mDrawingState.fixedTransformHint = ui::Transform::ROT_INVALID;
+ mDrawingState.frameTimelineInfo = {};
+ mDrawingState.postTime = -1;
+ mDrawingState.destinationFrame.makeInvalid();
if (args.flags & ISurfaceComposerClient::eNoColorFill) {
// Set an invalid color so there is no color fill.
- mCurrentState.color.r = -1.0_hf;
- mCurrentState.color.g = -1.0_hf;
- mCurrentState.color.b = -1.0_hf;
+ mDrawingState.color.r = -1.0_hf;
+ mDrawingState.color.g = -1.0_hf;
+ mDrawingState.color.b = -1.0_hf;
}
- // drawing state & current state are identical
- mDrawingState = mCurrentState;
-
CompositorTiming compositorTiming;
args.flinger->getCompositorTiming(&compositorTiming);
mFrameEventHistory.initializeCompositorTiming(compositorTiming);
@@ -203,11 +200,11 @@
void Layer::onLayerDisplayed(const sp<Fence>& /*releaseFence*/) {}
void Layer::removeRelativeZ(const std::vector<Layer*>& layersInTree) {
- if (mCurrentState.zOrderRelativeOf == nullptr) {
+ if (mDrawingState.zOrderRelativeOf == nullptr) {
return;
}
- sp<Layer> strongRelative = mCurrentState.zOrderRelativeOf.promote();
+ sp<Layer> strongRelative = mDrawingState.zOrderRelativeOf.promote();
if (strongRelative == nullptr) {
setZOrderRelativeOf(nullptr);
return;
@@ -221,8 +218,8 @@
}
void Layer::removeFromCurrentState() {
- if (!mRemovedFromCurrentState) {
- mRemovedFromCurrentState = true;
+ if (!mRemovedFromDrawingState) {
+ mRemovedFromDrawingState = true;
mFlinger->mScheduler->deregisterLayer(this);
}
@@ -249,8 +246,8 @@
}
void Layer::addToCurrentState() {
- if (mRemovedFromCurrentState) {
- mRemovedFromCurrentState = false;
+ if (mRemovedFromDrawingState) {
+ mRemovedFromDrawingState = false;
mFlinger->mScheduler->registerLayer(this);
}
@@ -679,78 +676,6 @@
// transaction
// ----------------------------------------------------------------------------
-uint32_t Layer::doTransactionResize(uint32_t flags, State* stateToCommit) {
- const State& s(getDrawingState());
-
- const bool sizeChanged = (stateToCommit->requested_legacy.w != s.requested_legacy.w) ||
- (stateToCommit->requested_legacy.h != s.requested_legacy.h);
-
- if (sizeChanged) {
- // the size changed, we need to ask our client to request a new buffer
- ALOGD_IF(DEBUG_RESIZE,
- "doTransaction: geometry (layer=%p '%s'), tr=%02x, scalingMode=%d\n"
- " current={ active ={ wh={%4u,%4u} crop={%4d,%4d,%4d,%4d} (%4d,%4d) }\n"
- " requested={ wh={%4u,%4u} }}\n"
- " drawing={ active ={ wh={%4u,%4u} crop={%4d,%4d,%4d,%4d} (%4d,%4d) }\n"
- " requested={ wh={%4u,%4u} }}\n",
- this, getName().c_str(), getBufferTransform(), getEffectiveScalingMode(),
- stateToCommit->active_legacy.w, stateToCommit->active_legacy.h,
- stateToCommit->crop.left, stateToCommit->crop.top, stateToCommit->crop.right,
- stateToCommit->crop.bottom, stateToCommit->crop.getWidth(),
- stateToCommit->crop.getHeight(), stateToCommit->requested_legacy.w,
- stateToCommit->requested_legacy.h, s.active_legacy.w, s.active_legacy.h,
- s.crop.left, s.crop.top, s.crop.right, s.crop.bottom, s.crop.getWidth(),
- s.crop.getHeight(), s.requested_legacy.w, s.requested_legacy.h);
- }
-
- // Don't let Layer::doTransaction update the drawing state
- // if we have a pending resize, unless we are in fixed-size mode.
- // the drawing state will be updated only once we receive a buffer
- // with the correct size.
- //
- // In particular, we want to make sure the clip (which is part
- // of the geometry state) is latched together with the size but is
- // latched immediately when no resizing is involved.
- //
- // If a sideband stream is attached, however, we want to skip this
- // optimization so that transactions aren't missed when a buffer
- // never arrives
- //
- // In the case that we don't have a buffer we ignore other factors
- // and avoid entering the resizePending state. At a high level the
- // resizePending state is to avoid applying the state of the new buffer
- // to the old buffer. However in the state where we don't have an old buffer
- // there is no such concern but we may still be being used as a parent layer.
- const bool resizePending =
- ((stateToCommit->requested_legacy.w != stateToCommit->active_legacy.w) ||
- (stateToCommit->requested_legacy.h != stateToCommit->active_legacy.h)) &&
- (getBuffer() != nullptr);
- if (!isFixedSize()) {
- if (resizePending && mSidebandStream == nullptr) {
- flags |= eDontUpdateGeometryState;
- }
- }
-
- // Here we apply various requested geometry states, depending on our
- // latching configuration. See Layer.h for a detailed discussion of
- // how geometry latching is controlled.
- if (!(flags & eDontUpdateGeometryState)) {
- State& editCurrentState(getCurrentState());
-
- // There is an awkward asymmetry in the handling of the crop states in the position
- // states, as can be seen below. Largely this arises from position and transform
- // being stored in the same data structure while having different latching rules.
- // b/38182305
- //
- // Careful that "stateToCommit" and editCurrentState may not begin as equivalent due to
- // applyPendingStates in the presence of deferred transactions.
- editCurrentState.active_legacy = editCurrentState.requested_legacy;
- stateToCommit->active_legacy = stateToCommit->requested_legacy;
- }
-
- return flags;
-}
-
uint32_t Layer::doTransaction(uint32_t flags) {
ATRACE_CALL();
@@ -760,77 +685,37 @@
}
// TODO: This is unfortunate.
- mCurrentStateModified = mCurrentState.modified;
- mCurrentState.modified = false;
-
- flags = doTransactionResize(flags, &mCurrentState);
+ mDrawingStateModified = mDrawingState.modified;
+ mDrawingState.modified = false;
const State& s(getDrawingState());
- State& c(getCurrentState());
- // Translates dest frame into scale and position updates. This helps align geometry calculations
- // for BufferStateLayer with other layers. This should ideally happen in the client once client
- // has the display orientation details from WM.
- updateGeometry();
-
- if (c.width != s.width || c.height != s.height || !(c.transform == s.transform)) {
+ if (updateGeometry()) {
// invalidate and recompute the visible regions if needed
flags |= Layer::eVisibleRegion;
}
- if (c.sequence != s.sequence) {
+ if (s.sequence != mLastCommittedTxSequence) {
// invalidate and recompute the visible regions if needed
+ mLastCommittedTxSequence = s.sequence;
flags |= eVisibleRegion;
this->contentDirty = true;
// we may use linear filtering, if the matrix scales us
- mNeedsFiltering = getActiveTransform(c).needsBilinearFiltering();
+ mNeedsFiltering = getActiveTransform(s).needsBilinearFiltering();
}
- if (mCurrentState.inputInfoChanged) {
+ if (mDrawingState.inputInfoChanged) {
flags |= eInputInfoChanged;
- mCurrentState.inputInfoChanged = false;
+ mDrawingState.inputInfoChanged = false;
}
- // Add the callbacks from the drawing state into the current state. This is so when the current
- // state gets copied to drawing, we don't lose the callback handles that are still in drawing.
- for (auto& handle : s.callbackHandles) {
- c.callbackHandles.push_back(handle);
- }
-
- // Allow BufferStateLayer to release any unlatched buffers in drawing state.
- bufferMayChange(c.buffer->getBuffer());
-
- // Commit the transaction
- commitTransaction(c);
- mCurrentState.callbackHandles = {};
+ commitTransaction(mDrawingState);
return flags;
}
-void Layer::commitTransaction(State& stateToCommit) {
- if (auto& bufferSurfaceFrame = mDrawingState.bufferSurfaceFrameTX;
- ((mDrawingState.buffer && stateToCommit.buffer &&
- mDrawingState.buffer->getBuffer() != stateToCommit.buffer->getBuffer()) ||
- (mDrawingState.buffer && !stateToCommit.buffer) ||
- (!mDrawingState.buffer && stateToCommit.buffer)) &&
- bufferSurfaceFrame != nullptr &&
- bufferSurfaceFrame->getPresentState() != PresentState::Presented) {
- // If the previous buffer was committed but not latched (refreshPending - happens during
- // back to back invalidates), it gets silently dropped here. Mark the corresponding
- // SurfaceFrame as dropped to prevent it from getting stuck in the pending classification
- // list.
- addSurfaceFrameDroppedForBuffer(bufferSurfaceFrame);
- }
- const bool frameRateVoteChanged =
- mDrawingState.frameRateForLayerTree != stateToCommit.frameRateForLayerTree;
- mDrawingState = stateToCommit;
-
- if (frameRateVoteChanged) {
- mFlinger->mScheduler->recordLayerHistory(this, systemTime(),
- LayerHistory::LayerUpdateType::SetFrameRate);
- }
-
+void Layer::commitTransaction(State&) {
// Set the present state for all bufferlessSurfaceFramesTX to Presented. The
// bufferSurfaceFrameTX will be presented in latchBuffer.
for (auto& [token, surfaceFrame] : mDrawingState.bufferlessSurfaceFramesTX) {
@@ -841,34 +726,25 @@
mFlinger->mFrameTimeline->addSurfaceFrame(surfaceFrame);
}
}
- // Clear the surfaceFrames from the old state now that it has been copied into DrawingState.
- stateToCommit.bufferSurfaceFrameTX.reset();
- stateToCommit.bufferlessSurfaceFramesTX.clear();
+ mDrawingState.bufferlessSurfaceFramesTX.clear();
}
uint32_t Layer::getTransactionFlags(uint32_t flags) {
- return mTransactionFlags.fetch_and(~flags) & flags;
+ auto ret = mTransactionFlags & flags;
+ mTransactionFlags &= ~flags;
+ return ret;
}
uint32_t Layer::setTransactionFlags(uint32_t flags) {
- return mTransactionFlags.fetch_or(flags);
+ return mTransactionFlags |= flags;
}
bool Layer::setPosition(float x, float y) {
- if (mCurrentState.transform.tx() == x && mCurrentState.transform.ty() == y) return false;
- mCurrentState.sequence++;
+ if (mDrawingState.transform.tx() == x && mDrawingState.transform.ty() == y) return false;
+ mDrawingState.sequence++;
+ mDrawingState.transform.set(x, y);
- // We update the requested and active position simultaneously because
- // we want to apply the position portion of the transform matrix immediately,
- // but still delay scaling when resizing a SCALING_MODE_FREEZE layer.
- mCurrentState.transform.set(x, y);
- // Here we directly update the active state
- // unlike other setters, because we store it within
- // the transform, but use different latching rules.
- // b/38182305
- mCurrentState.transform.set(x, y);
-
- mCurrentState.modified = true;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
@@ -901,14 +777,14 @@
}
bool Layer::setLayer(int32_t z) {
- if (mCurrentState.z == z && !usingRelativeZ(LayerVector::StateSet::Current)) return false;
- mCurrentState.sequence++;
- mCurrentState.z = z;
- mCurrentState.modified = true;
+ if (mDrawingState.z == z && !usingRelativeZ(LayerVector::StateSet::Current)) return false;
+ mDrawingState.sequence++;
+ mDrawingState.z = z;
+ mDrawingState.modified = true;
// Discard all relative layering.
- if (mCurrentState.zOrderRelativeOf != nullptr) {
- sp<Layer> strongRelative = mCurrentState.zOrderRelativeOf.promote();
+ if (mDrawingState.zOrderRelativeOf != nullptr) {
+ sp<Layer> strongRelative = mDrawingState.zOrderRelativeOf.promote();
if (strongRelative != nullptr) {
strongRelative->removeZOrderRelative(this);
}
@@ -919,24 +795,24 @@
}
void Layer::removeZOrderRelative(const wp<Layer>& relative) {
- mCurrentState.zOrderRelatives.remove(relative);
- mCurrentState.sequence++;
- mCurrentState.modified = true;
+ mDrawingState.zOrderRelatives.remove(relative);
+ mDrawingState.sequence++;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
}
void Layer::addZOrderRelative(const wp<Layer>& relative) {
- mCurrentState.zOrderRelatives.add(relative);
- mCurrentState.modified = true;
- mCurrentState.sequence++;
+ mDrawingState.zOrderRelatives.add(relative);
+ mDrawingState.modified = true;
+ mDrawingState.sequence++;
setTransactionFlags(eTransactionNeeded);
}
void Layer::setZOrderRelativeOf(const wp<Layer>& relativeOf) {
- mCurrentState.zOrderRelativeOf = relativeOf;
- mCurrentState.sequence++;
- mCurrentState.modified = true;
- mCurrentState.isRelativeOf = relativeOf != nullptr;
+ mDrawingState.zOrderRelativeOf = relativeOf;
+ mDrawingState.sequence++;
+ mDrawingState.modified = true;
+ mDrawingState.isRelativeOf = relativeOf != nullptr;
setTransactionFlags(eTransactionNeeded);
}
@@ -951,16 +827,16 @@
return false;
}
- if (mCurrentState.z == relativeZ && usingRelativeZ(LayerVector::StateSet::Current) &&
- mCurrentState.zOrderRelativeOf == relative) {
+ if (mDrawingState.z == relativeZ && usingRelativeZ(LayerVector::StateSet::Current) &&
+ mDrawingState.zOrderRelativeOf == relative) {
return false;
}
- mCurrentState.sequence++;
- mCurrentState.modified = true;
- mCurrentState.z = relativeZ;
+ mDrawingState.sequence++;
+ mDrawingState.modified = true;
+ mDrawingState.z = relativeZ;
- auto oldZOrderRelativeOf = mCurrentState.zOrderRelativeOf.promote();
+ auto oldZOrderRelativeOf = mDrawingState.zOrderRelativeOf.promote();
if (oldZOrderRelativeOf != nullptr) {
oldZOrderRelativeOf->removeZOrderRelative(this);
}
@@ -973,82 +849,82 @@
}
bool Layer::setSize(uint32_t w, uint32_t h) {
- if (mCurrentState.requested_legacy.w == w && mCurrentState.requested_legacy.h == h)
+ if (mDrawingState.requested_legacy.w == w && mDrawingState.requested_legacy.h == h)
return false;
- mCurrentState.requested_legacy.w = w;
- mCurrentState.requested_legacy.h = h;
- mCurrentState.modified = true;
+ mDrawingState.requested_legacy.w = w;
+ mDrawingState.requested_legacy.h = h;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
// record the new size, from this point on, when the client request
// a buffer, it'll get the new size.
- setDefaultBufferSize(mCurrentState.requested_legacy.w, mCurrentState.requested_legacy.h);
+ setDefaultBufferSize(mDrawingState.requested_legacy.w, mDrawingState.requested_legacy.h);
return true;
}
bool Layer::setAlpha(float alpha) {
- if (mCurrentState.color.a == alpha) return false;
- mCurrentState.sequence++;
- mCurrentState.color.a = alpha;
- mCurrentState.modified = true;
+ if (mDrawingState.color.a == alpha) return false;
+ mDrawingState.sequence++;
+ mDrawingState.color.a = alpha;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
bool Layer::setBackgroundColor(const half3& color, float alpha, ui::Dataspace dataspace) {
- if (!mCurrentState.bgColorLayer && alpha == 0) {
+ if (!mDrawingState.bgColorLayer && alpha == 0) {
return false;
}
- mCurrentState.sequence++;
- mCurrentState.modified = true;
+ mDrawingState.sequence++;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
- if (!mCurrentState.bgColorLayer && alpha != 0) {
+ if (!mDrawingState.bgColorLayer && alpha != 0) {
// create background color layer if one does not yet exist
uint32_t flags = ISurfaceComposerClient::eFXSurfaceEffect;
std::string name = mName + "BackgroundColorLayer";
- mCurrentState.bgColorLayer = mFlinger->getFactory().createEffectLayer(
+ mDrawingState.bgColorLayer = mFlinger->getFactory().createEffectLayer(
LayerCreationArgs(mFlinger.get(), nullptr, std::move(name), 0, 0, flags,
LayerMetadata()));
// add to child list
- addChild(mCurrentState.bgColorLayer);
+ addChild(mDrawingState.bgColorLayer);
mFlinger->mLayersAdded = true;
// set up SF to handle added color layer
if (isRemovedFromCurrentState()) {
- mCurrentState.bgColorLayer->onRemovedFromCurrentState();
+ mDrawingState.bgColorLayer->onRemovedFromCurrentState();
}
mFlinger->setTransactionFlags(eTransactionNeeded);
- } else if (mCurrentState.bgColorLayer && alpha == 0) {
- mCurrentState.bgColorLayer->reparent(nullptr);
- mCurrentState.bgColorLayer = nullptr;
+ } else if (mDrawingState.bgColorLayer && alpha == 0) {
+ mDrawingState.bgColorLayer->reparent(nullptr);
+ mDrawingState.bgColorLayer = nullptr;
return true;
}
- mCurrentState.bgColorLayer->setColor(color);
- mCurrentState.bgColorLayer->setLayer(std::numeric_limits<int32_t>::min());
- mCurrentState.bgColorLayer->setAlpha(alpha);
- mCurrentState.bgColorLayer->setDataspace(dataspace);
+ mDrawingState.bgColorLayer->setColor(color);
+ mDrawingState.bgColorLayer->setLayer(std::numeric_limits<int32_t>::min());
+ mDrawingState.bgColorLayer->setAlpha(alpha);
+ mDrawingState.bgColorLayer->setDataspace(dataspace);
return true;
}
bool Layer::setCornerRadius(float cornerRadius) {
- if (mCurrentState.cornerRadius == cornerRadius) return false;
+ if (mDrawingState.cornerRadius == cornerRadius) return false;
- mCurrentState.sequence++;
- mCurrentState.cornerRadius = cornerRadius;
- mCurrentState.modified = true;
+ mDrawingState.sequence++;
+ mDrawingState.cornerRadius = cornerRadius;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
bool Layer::setBackgroundBlurRadius(int backgroundBlurRadius) {
- if (mCurrentState.backgroundBlurRadius == backgroundBlurRadius) return false;
+ if (mDrawingState.backgroundBlurRadius == backgroundBlurRadius) return false;
- mCurrentState.sequence++;
- mCurrentState.backgroundBlurRadius = backgroundBlurRadius;
- mCurrentState.modified = true;
+ mDrawingState.sequence++;
+ mDrawingState.backgroundBlurRadius = backgroundBlurRadius;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
@@ -1063,81 +939,82 @@
"ROTATE_SURFACE_FLINGER ignored");
return false;
}
- mCurrentState.sequence++;
- mCurrentState.transform.set(matrix.dsdx, matrix.dtdy, matrix.dtdx, matrix.dsdy);
- mCurrentState.modified = true;
+ mDrawingState.sequence++;
+ mDrawingState.transform.set(matrix.dsdx, matrix.dtdy, matrix.dtdx, matrix.dsdy);
+ mDrawingState.modified = true;
+
setTransactionFlags(eTransactionNeeded);
return true;
}
bool Layer::setTransparentRegionHint(const Region& transparent) {
- mCurrentState.requestedTransparentRegion_legacy = transparent;
- mCurrentState.modified = true;
+ mDrawingState.requestedTransparentRegion_legacy = transparent;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
bool Layer::setBlurRegions(const std::vector<BlurRegion>& blurRegions) {
- mCurrentState.sequence++;
- mCurrentState.blurRegions = blurRegions;
- mCurrentState.modified = true;
+ mDrawingState.sequence++;
+ mDrawingState.blurRegions = blurRegions;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
bool Layer::setFlags(uint32_t flags, uint32_t mask) {
- const uint32_t newFlags = (mCurrentState.flags & ~mask) | (flags & mask);
- if (mCurrentState.flags == newFlags) return false;
- mCurrentState.sequence++;
- mCurrentState.flags = newFlags;
- mCurrentState.modified = true;
+ const uint32_t newFlags = (mDrawingState.flags & ~mask) | (flags & mask);
+ if (mDrawingState.flags == newFlags) return false;
+ mDrawingState.sequence++;
+ mDrawingState.flags = newFlags;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
bool Layer::setCrop(const Rect& crop) {
- if (mCurrentState.requestedCrop == crop) return false;
- mCurrentState.sequence++;
- mCurrentState.requestedCrop = crop;
- mCurrentState.crop = crop;
+ if (mDrawingState.requestedCrop == crop) return false;
+ mDrawingState.sequence++;
+ mDrawingState.requestedCrop = crop;
+ mDrawingState.crop = crop;
- mCurrentState.modified = true;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
bool Layer::setMetadata(const LayerMetadata& data) {
- if (!mCurrentState.metadata.merge(data, true /* eraseEmpty */)) return false;
- mCurrentState.modified = true;
+ if (!mDrawingState.metadata.merge(data, true /* eraseEmpty */)) return false;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
bool Layer::setLayerStack(uint32_t layerStack) {
- if (mCurrentState.layerStack == layerStack) return false;
- mCurrentState.sequence++;
- mCurrentState.layerStack = layerStack;
- mCurrentState.modified = true;
+ if (mDrawingState.layerStack == layerStack) return false;
+ mDrawingState.sequence++;
+ mDrawingState.layerStack = layerStack;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
bool Layer::setColorSpaceAgnostic(const bool agnostic) {
- if (mCurrentState.colorSpaceAgnostic == agnostic) {
+ if (mDrawingState.colorSpaceAgnostic == agnostic) {
return false;
}
- mCurrentState.sequence++;
- mCurrentState.colorSpaceAgnostic = agnostic;
- mCurrentState.modified = true;
+ mDrawingState.sequence++;
+ mDrawingState.colorSpaceAgnostic = agnostic;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
bool Layer::setFrameRateSelectionPriority(int32_t priority) {
- if (mCurrentState.frameRateSelectionPriority == priority) return false;
- mCurrentState.frameRateSelectionPriority = priority;
- mCurrentState.sequence++;
- mCurrentState.modified = true;
+ if (mDrawingState.frameRateSelectionPriority == priority) return false;
+ mDrawingState.frameRateSelectionPriority = priority;
+ mDrawingState.sequence++;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
@@ -1169,25 +1046,25 @@
}
bool Layer::setShadowRadius(float shadowRadius) {
- if (mCurrentState.shadowRadius == shadowRadius) {
+ if (mDrawingState.shadowRadius == shadowRadius) {
return false;
}
- mCurrentState.sequence++;
- mCurrentState.shadowRadius = shadowRadius;
- mCurrentState.modified = true;
+ mDrawingState.sequence++;
+ mDrawingState.shadowRadius = shadowRadius;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
bool Layer::setFixedTransformHint(ui::Transform::RotationFlags fixedTransformHint) {
- if (mCurrentState.fixedTransformHint == fixedTransformHint) {
+ if (mDrawingState.fixedTransformHint == fixedTransformHint) {
return false;
}
- mCurrentState.sequence++;
- mCurrentState.fixedTransformHint = fixedTransformHint;
- mCurrentState.modified = true;
+ mDrawingState.sequence++;
+ mDrawingState.fixedTransformHint = fixedTransformHint;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
@@ -1195,12 +1072,12 @@
bool Layer::setStretchEffect(const StretchEffect& effect) {
StretchEffect temp = effect;
temp.sanitize();
- if (mCurrentState.stretchEffect == temp) {
+ if (mDrawingState.stretchEffect == temp) {
return false;
}
- mCurrentState.sequence++;
- mCurrentState.stretchEffect = temp;
- mCurrentState.modified = true;
+ mDrawingState.sequence++;
+ mDrawingState.stretchEffect = temp;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
@@ -1237,12 +1114,12 @@
int layersWithVote = 0;
traverseTree([&layersWithVote](Layer* layer) {
const auto layerVotedWithDefaultCompatibility =
- layer->mCurrentState.frameRate.rate.isValid() &&
- layer->mCurrentState.frameRate.type == FrameRateCompatibility::Default;
+ layer->mDrawingState.frameRate.rate.isValid() &&
+ layer->mDrawingState.frameRate.type == FrameRateCompatibility::Default;
const auto layerVotedWithNoVote =
- layer->mCurrentState.frameRate.type == FrameRateCompatibility::NoVote;
+ layer->mDrawingState.frameRate.type == FrameRateCompatibility::NoVote;
const auto layerVotedWithExactCompatibility =
- layer->mCurrentState.frameRate.type == FrameRateCompatibility::Exact;
+ layer->mDrawingState.frameRate.type == FrameRateCompatibility::Exact;
// We do not count layers that are ExactOrMultiple for the same reason
// we are allowing touch boost for those layers. See
@@ -1256,6 +1133,7 @@
// Now we can update the tree frame rate vote for each layer in the tree
const bool treeHasFrameRateVote = layersWithVote > 0;
bool transactionNeeded = false;
+
traverseTree([treeHasFrameRateVote, &transactionNeeded](Layer* layer) {
transactionNeeded = layer->updateFrameRateForLayerTree(treeHasFrameRateVote);
});
@@ -1269,13 +1147,13 @@
if (!mFlinger->useFrameRateApi) {
return false;
}
- if (mCurrentState.frameRate == frameRate) {
+ if (mDrawingState.frameRate == frameRate) {
return false;
}
- mCurrentState.sequence++;
- mCurrentState.frameRate = frameRate;
- mCurrentState.modified = true;
+ mDrawingState.sequence++;
+ mDrawingState.frameRate = frameRate;
+ mDrawingState.modified = true;
updateTreeHasFrameRateVote();
@@ -1285,33 +1163,33 @@
void Layer::setFrameTimelineVsyncForBufferTransaction(const FrameTimelineInfo& info,
nsecs_t postTime) {
- mCurrentState.postTime = postTime;
+ mDrawingState.postTime = postTime;
// Check if one of the bufferlessSurfaceFramesTX contains the same vsyncId. This can happen if
// there are two transactions with the same token, the first one without a buffer and the
// second one with a buffer. We promote the bufferlessSurfaceFrame to a bufferSurfaceFrameTX
// in that case.
- auto it = mCurrentState.bufferlessSurfaceFramesTX.find(info.vsyncId);
- if (it != mCurrentState.bufferlessSurfaceFramesTX.end()) {
+ auto it = mDrawingState.bufferlessSurfaceFramesTX.find(info.vsyncId);
+ if (it != mDrawingState.bufferlessSurfaceFramesTX.end()) {
// Promote the bufferlessSurfaceFrame to a bufferSurfaceFrameTX
- mCurrentState.bufferSurfaceFrameTX = it->second;
- mCurrentState.bufferlessSurfaceFramesTX.erase(it);
- mCurrentState.bufferSurfaceFrameTX->promoteToBuffer();
- mCurrentState.bufferSurfaceFrameTX->setActualQueueTime(postTime);
+ mDrawingState.bufferSurfaceFrameTX = it->second;
+ mDrawingState.bufferlessSurfaceFramesTX.erase(it);
+ mDrawingState.bufferSurfaceFrameTX->promoteToBuffer();
+ mDrawingState.bufferSurfaceFrameTX->setActualQueueTime(postTime);
} else {
- mCurrentState.bufferSurfaceFrameTX =
+ mDrawingState.bufferSurfaceFrameTX =
createSurfaceFrameForBuffer(info, postTime, mTransactionName);
}
}
void Layer::setFrameTimelineVsyncForBufferlessTransaction(const FrameTimelineInfo& info,
nsecs_t postTime) {
- mCurrentState.frameTimelineInfo = info;
- mCurrentState.postTime = postTime;
- mCurrentState.modified = true;
+ mDrawingState.frameTimelineInfo = info;
+ mDrawingState.postTime = postTime;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
- if (const auto& bufferSurfaceFrameTX = mCurrentState.bufferSurfaceFrameTX;
+ if (const auto& bufferSurfaceFrameTX = mDrawingState.bufferSurfaceFrameTX;
bufferSurfaceFrameTX != nullptr) {
if (bufferSurfaceFrameTX->getToken() == info.vsyncId) {
// BufferSurfaceFrame takes precedence over BufferlessSurfaceFrame. If the same token is
@@ -1322,10 +1200,10 @@
// For Transactions without a buffer, we create only one SurfaceFrame per vsyncId. If multiple
// transactions use the same vsyncId, we just treat them as one SurfaceFrame (unless they are
// targeting different vsyncs).
- auto it = mCurrentState.bufferlessSurfaceFramesTX.find(info.vsyncId);
- if (it == mCurrentState.bufferlessSurfaceFramesTX.end()) {
+ auto it = mDrawingState.bufferlessSurfaceFramesTX.find(info.vsyncId);
+ if (it == mDrawingState.bufferlessSurfaceFramesTX.end()) {
auto surfaceFrame = createSurfaceFrameForTransaction(info, postTime);
- mCurrentState.bufferlessSurfaceFramesTX[info.vsyncId] = surfaceFrame;
+ mDrawingState.bufferlessSurfaceFramesTX[info.vsyncId] = surfaceFrame;
} else {
if (it->second->getPresentState() == PresentState::Presented) {
// If the SurfaceFrame was already presented, its safe to overwrite it since it must
@@ -1357,7 +1235,7 @@
mFlinger->mFrameTimeline->createSurfaceFrameForToken(info, mOwnerPid, mOwnerUid,
getSequence(), mName,
mTransactionName,
- /*isBuffer*/ false);
+ /*isBuffer*/ false, getGameMode());
// For Transactions, the post time is considered to be both queue and acquire fence time.
surfaceFrame->setActualQueueTime(postTime);
surfaceFrame->setAcquireFenceTime(postTime);
@@ -1374,7 +1252,7 @@
auto surfaceFrame =
mFlinger->mFrameTimeline->createSurfaceFrameForToken(info, mOwnerPid, mOwnerUid,
getSequence(), mName, debugName,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, getGameMode());
// For buffers, acquire fence time will set during latch.
surfaceFrame->setActualQueueTime(queueTime);
const auto fps = mFlinger->mScheduler->getFrameRateOverride(getOwnerUid());
@@ -1387,36 +1265,41 @@
}
bool Layer::updateFrameRateForLayerTree(bool treeHasFrameRateVote) {
- const auto updateCurrentState = [&](FrameRate frameRate) {
- if (mCurrentState.frameRateForLayerTree == frameRate) {
+ const auto updateDrawingState = [&](FrameRate frameRate) {
+ if (mDrawingState.frameRateForLayerTree == frameRate) {
return false;
}
- mCurrentState.frameRateForLayerTree = frameRate;
- mCurrentState.sequence++;
- mCurrentState.modified = true;
+
+ mDrawingState.frameRateForLayerTree = frameRate;
+ mDrawingState.sequence++;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
+
+ mFlinger->mScheduler->recordLayerHistory(this, systemTime(),
+ LayerHistory::LayerUpdateType::SetFrameRate);
+
return true;
};
- const auto frameRate = mCurrentState.frameRate;
+ const auto frameRate = mDrawingState.frameRate;
if (frameRate.rate.isValid() || frameRate.type == FrameRateCompatibility::NoVote) {
- return updateCurrentState(frameRate);
+ return updateDrawingState(frameRate);
}
// This layer doesn't have a frame rate. Check if its ancestors have a vote
for (sp<Layer> parent = getParent(); parent; parent = parent->getParent()) {
- if (parent->mCurrentState.frameRate.rate.isValid()) {
- return updateCurrentState(parent->mCurrentState.frameRate);
+ if (parent->mDrawingState.frameRate.rate.isValid()) {
+ return updateDrawingState(parent->mDrawingState.frameRate);
}
}
// This layer and its ancestors don't have a frame rate. If one of successors
// has a vote, return a NoVote for successors to set the vote
if (treeHasFrameRateVote) {
- return updateCurrentState(FrameRate(Fps(0.0f), FrameRateCompatibility::NoVote));
+ return updateDrawingState(FrameRate(Fps(0.0f), FrameRateCompatibility::NoVote));
}
- return updateCurrentState(frameRate);
+ return updateDrawingState(frameRate);
}
Layer::FrameRate Layer::getFrameRateForLayerTree() const {
@@ -1635,7 +1518,8 @@
FrameEventHistoryDelta* outDelta) {
if (newTimestamps) {
mFlinger->mTimeStats->setPostTime(getSequence(), newTimestamps->frameNumber,
- getName().c_str(), mOwnerUid, newTimestamps->postedTime);
+ getName().c_str(), mOwnerUid, newTimestamps->postedTime,
+ getGameMode());
mFlinger->mTimeStats->setAcquireFence(getSequence(), newTimestamps->frameNumber,
newTimestamps->acquireFence);
}
@@ -1667,7 +1551,7 @@
void Layer::setGameModeForTree(int parentGameMode) {
int gameMode = parentGameMode;
- auto& currentState = getCurrentState();
+ auto& currentState = getDrawingState();
if (currentState.metadata.has(METADATA_GAME_MODE)) {
gameMode = currentState.metadata.getInt32(METADATA_GAME_MODE, 0);
}
@@ -1746,13 +1630,13 @@
bool Layer::setColorTransform(const mat4& matrix) {
static const mat4 identityMatrix = mat4();
- if (mCurrentState.colorTransform == matrix) {
+ if (mDrawingState.colorTransform == matrix) {
return false;
}
- ++mCurrentState.sequence;
- mCurrentState.colorTransform = matrix;
- mCurrentState.hasColorTransform = matrix != identityMatrix;
- mCurrentState.modified = true;
+ ++mDrawingState.sequence;
+ mDrawingState.colorTransform = matrix;
+ mDrawingState.hasColorTransform = matrix != identityMatrix;
+ mDrawingState.modified = true;
setTransactionFlags(eTransactionNeeded);
return true;
}
@@ -1784,15 +1668,13 @@
mCurrentParent = layer;
}
-int32_t Layer::getZ(LayerVector::StateSet stateSet) const {
- const bool useDrawing = stateSet == LayerVector::StateSet::Drawing;
- const State& state = useDrawing ? mDrawingState : mCurrentState;
- return state.z;
+int32_t Layer::getZ(LayerVector::StateSet) const {
+ return mDrawingState.z;
}
bool Layer::usingRelativeZ(LayerVector::StateSet stateSet) const {
const bool useDrawing = stateSet == LayerVector::StateSet::Drawing;
- const State& state = useDrawing ? mDrawingState : mCurrentState;
+ const State& state = useDrawing ? mDrawingState : mDrawingState;
return state.isRelativeOf;
}
@@ -1802,7 +1684,7 @@
"makeTraversalList received invalid stateSet");
const bool useDrawing = stateSet == LayerVector::StateSet::Drawing;
const LayerVector& children = useDrawing ? mDrawingChildren : mCurrentChildren;
- const State& state = useDrawing ? mDrawingState : mCurrentState;
+ const State& state = useDrawing ? mDrawingState : mDrawingState;
if (state.zOrderRelatives.size() == 0) {
*outSkipRelativeZUsers = true;
@@ -1901,7 +1783,7 @@
void Layer::traverse(LayerVector::StateSet state, const LayerVector::Visitor& visitor) {
visitor(this);
const LayerVector& children =
- state == LayerVector::StateSet::Drawing ? mDrawingChildren : mCurrentChildren;
+ state == LayerVector::StateSet::Drawing ? mDrawingChildren : mCurrentChildren;
for (const sp<Layer>& child : children) {
child->traverse(state, visitor);
}
@@ -1913,7 +1795,7 @@
"makeTraversalList received invalid stateSet");
const bool useDrawing = stateSet == LayerVector::StateSet::Drawing;
const LayerVector& children = useDrawing ? mDrawingChildren : mCurrentChildren;
- const State& state = useDrawing ? mDrawingState : mCurrentState;
+ const State& state = useDrawing ? mDrawingState : mDrawingState;
LayerVector traverse(stateSet);
for (const wp<Layer>& weakRelative : state.zOrderRelatives) {
@@ -1926,7 +1808,7 @@
}
for (const sp<Layer>& child : children) {
- const State& childState = useDrawing ? child->mDrawingState : child->mCurrentState;
+ const State& childState = useDrawing ? child->mDrawingState : child->mDrawingState;
// If a layer has a relativeOf layer, only ignore if the layer it's relative to is a
// descendent of the top most parent of the tree. If it's not a descendent, then just add
// the child here since it won't be added later as a relative.
@@ -1994,7 +1876,7 @@
}
ui::Transform::RotationFlags Layer::getFixedTransformHint() const {
- ui::Transform::RotationFlags fixedTransformHint = mCurrentState.fixedTransformHint;
+ ui::Transform::RotationFlags fixedTransformHint = mDrawingState.fixedTransformHint;
if (fixedTransformHint != ui::Transform::ROT_INVALID) {
return fixedTransformHint;
}
@@ -2017,7 +1899,7 @@
const std::vector<BlurRegion> Layer::getBlurRegions() const {
auto regionsCopy(getDrawingState().blurRegions);
- int layerAlpha = getAlpha();
+ float layerAlpha = getAlpha();
for (auto& region : regionsCopy) {
region.alpha = region.alpha * layerAlpha;
}
@@ -2106,10 +1988,10 @@
}
void Layer::setInputInfo(const InputWindowInfo& info) {
- mCurrentState.inputInfo = info;
- mCurrentState.touchableRegionCrop = extractLayerFromBinder(info.touchableRegionCropHandle);
- mCurrentState.modified = true;
- mCurrentState.inputInfoChanged = true;
+ mDrawingState.inputInfo = info;
+ mDrawingState.touchableRegionCrop = extractLayerFromBinder(info.touchableRegionCropHandle);
+ mDrawingState.modified = true;
+ mDrawingState.inputInfoChanged = true;
setTransactionFlags(eTransactionNeeded);
}
@@ -2187,7 +2069,7 @@
uint32_t traceFlags) {
const bool useDrawing = stateSet == LayerVector::StateSet::Drawing;
const LayerVector& children = useDrawing ? mDrawingChildren : mCurrentChildren;
- const State& state = useDrawing ? mDrawingState : mCurrentState;
+ const State& state = useDrawing ? mDrawingState : mDrawingState;
ui::Transform requestedTransform = state.transform;
@@ -2275,7 +2157,7 @@
}
bool Layer::isRemovedFromCurrentState() const {
- return mRemovedFromCurrentState;
+ return mRemovedFromDrawingState;
}
ui::Transform Layer::getInputTransform() const {
@@ -2381,6 +2263,16 @@
info.touchableRegion = inputTransform.transform(info.touchableRegion);
}
+void Layer::fillTouchOcclusionMode(InputWindowInfo& info) {
+ sp<Layer> p = this;
+ while (p != nullptr && !p->hasInputInfo()) {
+ p = p->mDrawingParent.promote();
+ }
+ if (p != nullptr) {
+ info.touchOcclusionMode = p->mDrawingState.inputInfo.touchOcclusionMode;
+ }
+}
+
InputWindowInfo Layer::fillInputInfo(const sp<DisplayDevice>& display) {
if (!hasInputInfo()) {
mDrawingState.inputInfo.name = getName();
@@ -2418,6 +2310,7 @@
// anything.
info.visible = hasInputInfo() ? canReceiveInput() : isVisible();
info.alpha = getAlpha();
+ fillTouchOcclusionMode(info);
auto cropLayer = mDrawingState.touchableRegionCrop.promote();
if (info.replaceTouchableRegionWithCrop) {
diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h
index af26045..9b30fcb 100644
--- a/services/surfaceflinger/Layer.h
+++ b/services/surfaceflinger/Layer.h
@@ -1,3 +1,4 @@
+
/*
* Copyright (C) 2007 The Android Open Source Project
*
@@ -732,8 +733,7 @@
void updateTransformHint(ui::Transform::RotationFlags);
inline const State& getDrawingState() const { return mDrawingState; }
- inline const State& getCurrentState() const { return mCurrentState; }
- inline State& getCurrentState() { return mCurrentState; }
+ inline State& getDrawingState() { return mDrawingState; }
LayerDebugInfo getLayerDebugInfo(const DisplayDevice*) const;
@@ -850,9 +850,9 @@
// Sets the parent's gameMode for this layer and all its children. Parent's gameMode is applied
// only to layers that do not have the GAME_MODE_METADATA set by WMShell. Any layer(along with
// its children) that has the metadata set will use the gameMode from the metadata.
- void setGameModeForTree(int parentGameMode);
- void setGameMode(int gameMode) { mGameMode = gameMode; };
- int getGameMode() const { return mGameMode; }
+ void setGameModeForTree(int32_t parentGameMode);
+ void setGameMode(int32_t gameMode) { mGameMode = gameMode; };
+ int32_t getGameMode() const { return mGameMode; }
virtual uid_t getOwnerUid() const { return mOwnerUid; }
@@ -884,7 +884,7 @@
virtual bool setDestinationFrame(const Rect& /* destinationFrame */) { return false; }
virtual std::atomic<int32_t>* getPendingBufferCounter() { return nullptr; }
virtual std::string getPendingBufferCounterName() { return ""; }
- virtual void updateGeometry() {}
+ virtual bool updateGeometry() { return false; }
protected:
friend class impl::SurfaceInterceptor;
@@ -902,7 +902,6 @@
compositionengine::LayerFE::ClientCompositionTargetSettings&);
virtual void preparePerFrameCompositionState();
virtual void commitTransaction(State& stateToCommit);
- virtual uint32_t doTransactionResize(uint32_t flags, Layer::State* stateToCommit);
virtual void onSurfaceFrameCreated(const std::shared_ptr<frametimeline::SurfaceFrame>&) {}
// Returns mCurrentScaling mode (originating from the
@@ -958,9 +957,11 @@
// These are only accessed by the main thread or the tracing thread.
State mDrawingState;
- // these are protected by an external lock (mStateLock)
- State mCurrentState;
- std::atomic<uint32_t> mTransactionFlags{0};
+ uint32_t mTransactionFlags{0};
+ // Updated in doTransaction, used to track the last sequence number we
+ // committed. Currently this is really only used for updating visible
+ // regions.
+ int32_t mLastCommittedTxSequence = -1;
// Timestamp history for UIAutomation. Thread safe.
FrameTracker mFrameTracker;
@@ -983,7 +984,7 @@
// Whether filtering is needed b/c of the drawingstate
bool mNeedsFiltering{false};
- std::atomic<bool> mRemovedFromCurrentState{false};
+ std::atomic<bool> mRemovedFromDrawingState{false};
// page-flip thread (currently main thread)
bool mProtectedByApp{false}; // application requires protected path to external sink
@@ -996,9 +997,7 @@
// This layer can be a cursor on some displays.
bool mPotentialCursor{false};
- // Child list about to be committed/used for editing.
- LayerVector mCurrentChildren{LayerVector::StateSet::Current};
- // Child list used for rendering.
+ LayerVector mCurrentChildren{LayerVector::StateSet::Drawing};
LayerVector mDrawingChildren{LayerVector::StateSet::Drawing};
wp<Layer> mCurrentParent;
@@ -1022,7 +1021,7 @@
// Used in buffer stuffing analysis in FrameTimeline.
nsecs_t mLastLatchTime = 0;
- mutable bool mCurrentStateModified = false;
+ mutable bool mDrawingStateModified = false;
private:
virtual void setTransformHint(ui::Transform::RotationFlags) {}
@@ -1057,6 +1056,10 @@
// null.
sp<Layer> getRootLayer();
+ // Fills in the touch occlusion mode of the first parent (including this layer) that
+ // hasInputInfo() or no-op if no such parent is found.
+ void fillTouchOcclusionMode(InputWindowInfo& info);
+
// Fills in the frame and transform info for the InputWindowInfo
void fillInputFrameInfo(InputWindowInfo& info, const ui::Transform& toPhysicalDisplay);
@@ -1098,7 +1101,7 @@
// Game mode for the layer. Set by WindowManagerShell, game mode is used in
// metrics(SurfaceFlingerStats).
- int mGameMode = 0;
+ int32_t mGameMode = 0;
// A list of regions on this layer that should have blurs.
const std::vector<BlurRegion> getBlurRegions() const;
diff --git a/services/surfaceflinger/LayerVector.cpp b/services/surfaceflinger/LayerVector.cpp
index 9b94920..aee820a 100644
--- a/services/surfaceflinger/LayerVector.cpp
+++ b/services/surfaceflinger/LayerVector.cpp
@@ -42,10 +42,8 @@
const auto& l = *reinterpret_cast<const sp<Layer>*>(lhs);
const auto& r = *reinterpret_cast<const sp<Layer>*>(rhs);
- const auto& lState =
- (mStateSet == StateSet::Current) ? l->getCurrentState() : l->getDrawingState();
- const auto& rState =
- (mStateSet == StateSet::Current) ? r->getCurrentState() : r->getDrawingState();
+ const auto& lState = l->getDrawingState();
+ const auto& rState = r->getDrawingState();
uint32_t ls = lState.layerStack;
uint32_t rs = rState.layerStack;
@@ -66,8 +64,7 @@
void LayerVector::traverseInZOrder(StateSet stateSet, const Visitor& visitor) const {
for (size_t i = 0; i < size(); i++) {
const auto& layer = (*this)[i];
- auto& state = (stateSet == StateSet::Current) ? layer->getCurrentState()
- : layer->getDrawingState();
+ auto& state = layer->getDrawingState();
if (state.isRelativeOf) {
continue;
}
@@ -78,8 +75,7 @@
void LayerVector::traverseInReverseZOrder(StateSet stateSet, const Visitor& visitor) const {
for (auto i = static_cast<int64_t>(size()) - 1; i >= 0; i--) {
const auto& layer = (*this)[i];
- auto& state = (stateSet == StateSet::Current) ? layer->getCurrentState()
- : layer->getDrawingState();
+ auto& state = layer->getDrawingState();
if (state.isRelativeOf) {
continue;
}
diff --git a/services/surfaceflinger/RefreshRateOverlay.cpp b/services/surfaceflinger/RefreshRateOverlay.cpp
index a9fd16c..663e62a 100644
--- a/services/surfaceflinger/RefreshRateOverlay.cpp
+++ b/services/surfaceflinger/RefreshRateOverlay.cpp
@@ -199,10 +199,10 @@
mLayer->setFrameRate(Layer::FrameRate(Fps(0.0f), Layer::FrameRateCompatibility::NoVote));
// setting Layer's Z requires resorting layersSortedByZ
- ssize_t idx = mFlinger.mCurrentState.layersSortedByZ.indexOf(mLayer);
+ ssize_t idx = mFlinger.mDrawingState.layersSortedByZ.indexOf(mLayer);
if (mLayer->setLayer(INT32_MAX - 2) && idx >= 0) {
- mFlinger.mCurrentState.layersSortedByZ.removeAt(idx);
- mFlinger.mCurrentState.layersSortedByZ.add(mLayer);
+ mFlinger.mDrawingState.layersSortedByZ.removeAt(idx);
+ mFlinger.mDrawingState.layersSortedByZ.add(mLayer);
}
return true;
diff --git a/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp b/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp
index b062acd..0eb16e2 100644
--- a/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp
+++ b/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp
@@ -190,6 +190,45 @@
RefreshRate RefreshRateConfigs::getBestRefreshRate(const std::vector<LayerRequirement>& layers,
const GlobalSignals& globalSignals,
GlobalSignals* outSignalsConsidered) const {
+ std::lock_guard lock(mLock);
+
+ if (auto cached = getCachedBestRefreshRate(layers, globalSignals, outSignalsConsidered)) {
+ return *cached;
+ }
+
+ GlobalSignals signalsConsidered;
+ RefreshRate result = getBestRefreshRateLocked(layers, globalSignals, &signalsConsidered);
+ lastBestRefreshRateInvocation.emplace(
+ GetBestRefreshRateInvocation{.layerRequirements = layers,
+ .globalSignals = globalSignals,
+ .outSignalsConsidered = signalsConsidered,
+ .resultingBestRefreshRate = result});
+ if (outSignalsConsidered) {
+ *outSignalsConsidered = signalsConsidered;
+ }
+ return result;
+}
+
+std::optional<RefreshRate> RefreshRateConfigs::getCachedBestRefreshRate(
+ const std::vector<LayerRequirement>& layers, const GlobalSignals& globalSignals,
+ GlobalSignals* outSignalsConsidered) const {
+ const bool sameAsLastCall = lastBestRefreshRateInvocation &&
+ lastBestRefreshRateInvocation->layerRequirements == layers &&
+ lastBestRefreshRateInvocation->globalSignals == globalSignals;
+
+ if (sameAsLastCall) {
+ if (outSignalsConsidered) {
+ *outSignalsConsidered = lastBestRefreshRateInvocation->outSignalsConsidered;
+ }
+ return lastBestRefreshRateInvocation->resultingBestRefreshRate;
+ }
+
+ return {};
+}
+
+RefreshRate RefreshRateConfigs::getBestRefreshRateLocked(
+ const std::vector<LayerRequirement>& layers, const GlobalSignals& globalSignals,
+ GlobalSignals* outSignalsConsidered) const {
ATRACE_CALL();
ALOGV("getBestRefreshRate %zu layers", layers.size());
@@ -206,8 +245,6 @@
}
};
- std::lock_guard lock(mLock);
-
int noVoteLayers = 0;
int minVoteLayers = 0;
int maxVoteLayers = 0;
@@ -385,7 +422,15 @@
// actually increase the refresh rate over the normal selection.
const RefreshRate& touchRefreshRate = getMaxRefreshRateByPolicyLocked();
- bool touchBoostForExplicitExact = explicitExact == 0 || mSupportsFrameRateOverride;
+ const bool touchBoostForExplicitExact = [&] {
+ if (mSupportsFrameRateOverride) {
+ // Enable touch boost if there are other layers besides exact
+ return explicitExact + noVoteLayers != layers.size();
+ } else {
+ // Enable touch boost if there are no exact layers
+ return explicitExact == 0;
+ }
+ }();
if (globalSignals.touch && explicitDefaultVoteLayers == 0 && touchBoostForExplicitExact &&
bestRefreshRate->fps.lessThanWithMargin(touchRefreshRate.fps)) {
setTouchConsidered();
@@ -592,6 +637,11 @@
void RefreshRateConfigs::setCurrentModeId(DisplayModeId modeId) {
std::lock_guard lock(mLock);
+
+ // Invalidate the cached invocation to getBestRefreshRate. This forces
+ // the refresh rate to be recomputed on the next call to getBestRefreshRate.
+ lastBestRefreshRateInvocation.reset();
+
mCurrentRefreshRate = mRefreshRates.at(modeId).get();
}
@@ -605,11 +655,16 @@
void RefreshRateConfigs::updateDisplayModes(const DisplayModes& modes,
DisplayModeId currentModeId) {
std::lock_guard lock(mLock);
+
// The current mode should be supported
LOG_ALWAYS_FATAL_IF(std::none_of(modes.begin(), modes.end(), [&](DisplayModePtr mode) {
return mode->getId() == currentModeId;
}));
+ // Invalidate the cached invocation to getBestRefreshRate. This forces
+ // the refresh rate to be recomputed on the next call to getBestRefreshRate.
+ lastBestRefreshRateInvocation.reset();
+
mRefreshRates.clear();
for (const auto& mode : modes) {
const auto modeId = mode->getId();
@@ -666,6 +721,7 @@
ALOGE("Invalid refresh rate policy: %s", policy.toString().c_str());
return BAD_VALUE;
}
+ lastBestRefreshRateInvocation.reset();
Policy previousPolicy = *getCurrentPolicyLocked();
mDisplayManagerPolicy = policy;
if (*getCurrentPolicyLocked() == previousPolicy) {
@@ -680,6 +736,7 @@
if (policy && !isPolicyValidLocked(*policy)) {
return BAD_VALUE;
}
+ lastBestRefreshRateInvocation.reset();
Policy previousPolicy = *getCurrentPolicyLocked();
mOverridePolicy = policy;
if (*getCurrentPolicyLocked() == previousPolicy) {
@@ -810,11 +867,6 @@
return RefreshRateConfigs::KernelIdleTimerAction::TurnOff;
}
if (minByPolicy == maxByPolicy) {
- // Do not sent the call to toggle off kernel idle timer if the device min and policy min and
- // max are all the same. This saves us extra unnecessary calls to sysprop.
- if (deviceMin == minByPolicy) {
- return RefreshRateConfigs::KernelIdleTimerAction::NoChange;
- }
return RefreshRateConfigs::KernelIdleTimerAction::TurnOff;
}
// Turn on the timer in all other cases.
diff --git a/services/surfaceflinger/Scheduler/RefreshRateConfigs.h b/services/surfaceflinger/Scheduler/RefreshRateConfigs.h
index ee89149..6cd0f42 100644
--- a/services/surfaceflinger/Scheduler/RefreshRateConfigs.h
+++ b/services/surfaceflinger/Scheduler/RefreshRateConfigs.h
@@ -250,6 +250,10 @@
bool touch = false;
// True if the system hasn't seen any buffers posted to layers recently.
bool idle = false;
+
+ bool operator==(const GlobalSignals& other) const {
+ return touch == other.touch && idle == other.idle;
+ }
};
// Returns the refresh rate that fits best to the given layers.
@@ -314,7 +318,6 @@
// Class to enumerate options around toggling the kernel timer on and off. We have an option
// for no change to avoid extra calls to kernel.
enum class KernelIdleTimerAction {
- NoChange, // Do not change the idle timer.
TurnOff, // Turn off the idle timer.
TurnOn // Turn on the idle timer.
};
@@ -350,6 +353,15 @@
const std::function<bool(const RefreshRate&)>& shouldAddRefreshRate,
std::vector<const RefreshRate*>* outRefreshRates) REQUIRES(mLock);
+ std::optional<RefreshRate> getCachedBestRefreshRate(const std::vector<LayerRequirement>& layers,
+ const GlobalSignals& globalSignals,
+ GlobalSignals* outSignalsConsidered) const
+ REQUIRES(mLock);
+
+ RefreshRate getBestRefreshRateLocked(const std::vector<LayerRequirement>& layers,
+ const GlobalSignals& globalSignals,
+ GlobalSignals* outSignalsConsidered) const REQUIRES(mLock);
+
// Returns the refresh rate with the highest score in the collection specified from begin
// to end. If there are more than one with the same highest refresh rate, the first one is
// returned.
@@ -414,6 +426,15 @@
const bool mEnableFrameRateOverride;
bool mSupportsFrameRateOverride;
+
+ struct GetBestRefreshRateInvocation {
+ std::vector<LayerRequirement> layerRequirements;
+ GlobalSignals globalSignals;
+ GlobalSignals outSignalsConsidered;
+ RefreshRate resultingBestRefreshRate;
+ };
+ mutable std::optional<GetBestRefreshRateInvocation> lastBestRefreshRateInvocation
+ GUARDED_BY(mLock);
};
} // namespace android::scheduler
diff --git a/services/surfaceflinger/Scheduler/RefreshRateStats.h b/services/surfaceflinger/Scheduler/RefreshRateStats.h
index 80f4665..208a767 100644
--- a/services/surfaceflinger/Scheduler/RefreshRateStats.h
+++ b/services/surfaceflinger/Scheduler/RefreshRateStats.h
@@ -61,6 +61,7 @@
if (mCurrentRefreshRate.equalsWithMargin(currRefreshRate)) {
return;
}
+ mTimeStats.incrementRefreshRateSwitches();
flushTime();
mCurrentRefreshRate = currRefreshRate;
}
diff --git a/services/surfaceflinger/Scheduler/Scheduler.cpp b/services/surfaceflinger/Scheduler/Scheduler.cpp
index fac2c65..e0b3640 100644
--- a/services/surfaceflinger/Scheduler/Scheduler.cpp
+++ b/services/surfaceflinger/Scheduler/Scheduler.cpp
@@ -194,8 +194,6 @@
std::unique_ptr<LayerHistory> Scheduler::createLayerHistory(
const scheduler::RefreshRateConfigs& configs) {
- if (!configs.canSwitch()) return nullptr;
-
return std::make_unique<scheduler::LayerHistory>(configs);
}
@@ -207,6 +205,10 @@
}
std::optional<Fps> Scheduler::getFrameRateOverride(uid_t uid) const {
+ if (!mRefreshRateConfigs.supportsFrameRateOverride()) {
+ return std::nullopt;
+ }
+
std::lock_guard lock(mFrameRateOverridesMutex);
{
const auto iter = mFrameRateOverridesFromBackdoor.find(uid);
@@ -226,10 +228,6 @@
}
bool Scheduler::isVsyncValid(nsecs_t expectedVsyncTimestamp, uid_t uid) const {
- if (!mRefreshRateConfigs.supportsFrameRateOverride()) {
- return true;
- }
-
const auto frameRate = getFrameRateOverride(uid);
if (!frameRate.has_value()) {
return true;
@@ -579,8 +577,6 @@
}
void Scheduler::registerLayer(Layer* layer) {
- if (!mLayerHistory) return;
-
scheduler::LayerHistory::LayerVoteType voteType;
if (!mOptions.useContentDetection ||
@@ -600,26 +596,22 @@
}
void Scheduler::deregisterLayer(Layer* layer) {
- if (mLayerHistory) {
- mLayerHistory->deregisterLayer(layer);
- }
+ mLayerHistory->deregisterLayer(layer);
}
void Scheduler::recordLayerHistory(Layer* layer, nsecs_t presentTime,
LayerHistory::LayerUpdateType updateType) {
- if (mLayerHistory) {
+ if (mRefreshRateConfigs.canSwitch()) {
mLayerHistory->record(layer, presentTime, systemTime(), updateType);
}
}
void Scheduler::setModeChangePending(bool pending) {
- if (mLayerHistory) {
- mLayerHistory->setModeChangePending(pending);
- }
+ mLayerHistory->setModeChangePending(pending);
}
void Scheduler::chooseRefreshRateForContent() {
- if (!mLayerHistory) return;
+ if (!mRefreshRateConfigs.canSwitch()) return;
ATRACE_CALL();
@@ -630,9 +622,6 @@
bool frameRateOverridesChanged;
{
std::lock_guard<std::mutex> lock(mFeatureStateLock);
- if (mFeatures.contentRequirements == summary) {
- return;
- }
mFeatures.contentRequirements = summary;
newModeId = calculateRefreshRateModeId(&consideredSignals);
@@ -691,9 +680,7 @@
// Display Power event will boost the refresh rate to performance.
// Clear Layer History to get fresh FPS detection
- if (mLayerHistory) {
- mLayerHistory->clear();
- }
+ mLayerHistory->clear();
}
void Scheduler::kernelIdleTimerCallback(TimerState state) {
@@ -732,9 +719,7 @@
// NOTE: Instead of checking all the layers, we should be checking the layer
// that is currently on top. b/142507166 will give us this capability.
if (handleTimerStateChanged(&mFeatures.touch, touch)) {
- if (mLayerHistory) {
- mLayerHistory->clear();
- }
+ mLayerHistory->clear();
}
ATRACE_INT("TouchState", static_cast<int>(touch));
}
@@ -908,9 +893,7 @@
}
void Scheduler::onPrimaryDisplayAreaChanged(uint32_t displayArea) {
- if (mLayerHistory) {
- mLayerHistory->setDisplayArea(displayArea);
- }
+ mLayerHistory->setDisplayArea(displayArea);
}
void Scheduler::setPreferredRefreshRateForUid(FrameRateOverride frameRateOverride) {
diff --git a/services/surfaceflinger/Scheduler/Scheduler.h b/services/surfaceflinger/Scheduler/Scheduler.h
index 49d3d93..30a3253 100644
--- a/services/surfaceflinger/Scheduler/Scheduler.h
+++ b/services/surfaceflinger/Scheduler/Scheduler.h
@@ -268,7 +268,7 @@
VsyncSchedule mVsyncSchedule;
// Used to choose refresh rate if content detection is enabled.
- const std::unique_ptr<LayerHistory> mLayerHistory;
+ std::unique_ptr<LayerHistory> mLayerHistory;
// Timer that records time between requests for next vsync.
std::optional<scheduler::OneShotTimer> mIdleTimer;
diff --git a/services/surfaceflinger/Scheduler/VSyncPredictor.cpp b/services/surfaceflinger/Scheduler/VSyncPredictor.cpp
index 329e4a0..e9bd92a 100644
--- a/services/surfaceflinger/Scheduler/VSyncPredictor.cpp
+++ b/services/surfaceflinger/Scheduler/VSyncPredictor.cpp
@@ -69,7 +69,21 @@
auto const aValidTimestamp = mTimestamps[mLastTimestampIndex];
auto const percent = (timestamp - aValidTimestamp) % mIdealPeriod * kMaxPercent / mIdealPeriod;
- return percent < kOutlierTolerancePercent || percent > (kMaxPercent - kOutlierTolerancePercent);
+ if (percent >= kOutlierTolerancePercent &&
+ percent <= (kMaxPercent - kOutlierTolerancePercent)) {
+ return false;
+ }
+
+ const auto iter = std::min_element(mTimestamps.begin(), mTimestamps.end(),
+ [timestamp](nsecs_t a, nsecs_t b) {
+ return std::abs(timestamp - a) < std::abs(timestamp - b);
+ });
+ const auto distancePercent = std::abs(*iter - timestamp) * kMaxPercent / mIdealPeriod;
+ if (distancePercent < kOutlierTolerancePercent) {
+ // duplicate timestamp
+ return false;
+ }
+ return true;
}
nsecs_t VSyncPredictor::currentPeriod() const {
diff --git a/services/surfaceflinger/Scheduler/VsyncConfiguration.cpp b/services/surfaceflinger/Scheduler/VsyncConfiguration.cpp
index cb57aea..43e0297 100644
--- a/services/surfaceflinger/Scheduler/VsyncConfiguration.cpp
+++ b/services/surfaceflinger/Scheduler/VsyncConfiguration.cpp
@@ -59,7 +59,7 @@
}
void VsyncConfiguration::dump(std::string& result) const {
- const auto [early, earlyGpu, late] = getCurrentConfigs();
+ const auto [early, earlyGpu, late, hwcMinWorkDuration] = getCurrentConfigs();
using base::StringAppendF;
StringAppendF(&result,
" app phase: %9" PRId64 " ns\t SF phase: %9" PRId64
@@ -70,7 +70,8 @@
" early app duration: %9lld ns\t early SF duration: %9lld ns\n"
" GL early app phase: %9" PRId64 " ns\tGL early SF phase: %9" PRId64
" ns\n"
- " GL early app duration: %9lld ns\tGL early SF duration: %9lld ns\n",
+ " GL early app duration: %9lld ns\tGL early SF duration: %9lld ns\n"
+ " HWC min duration: %9lld ns\n",
late.appOffset, late.sfOffset,
late.appWorkDuration.count(), late.sfWorkDuration.count(),
@@ -81,7 +82,9 @@
earlyGpu.appOffset, earlyGpu.sfOffset,
- earlyGpu.appWorkDuration.count(), earlyGpu.sfWorkDuration.count());
+ earlyGpu.appWorkDuration.count(), earlyGpu.sfWorkDuration.count(),
+
+ hwcMinWorkDuration.count());
}
PhaseOffsets::PhaseOffsets(Fps currentRefreshRate)
@@ -103,7 +106,8 @@
// offset >= threshold, SF wake up (2 * vsync_duration - offset) before HW
// vsync.
getProperty("debug.sf.phase_offset_threshold_for_next_vsync_ns")
- .value_or(std::numeric_limits<nsecs_t>::max())) {}
+ .value_or(std::numeric_limits<nsecs_t>::max()),
+ getProperty("debug.sf.hwc.min.duration").value_or(0)) {}
PhaseOffsets::PhaseOffsets(Fps currentFps, nsecs_t vsyncPhaseOffsetNs, nsecs_t sfVSyncPhaseOffsetNs,
std::optional<nsecs_t> earlySfOffsetNs,
@@ -115,7 +119,7 @@
std::optional<nsecs_t> highFpsEarlyGpuSfOffsetNs,
std::optional<nsecs_t> highFpsEarlyAppOffsetNs,
std::optional<nsecs_t> highFpsEarlyGpuAppOffsetNs,
- nsecs_t thresholdForNextVsync)
+ nsecs_t thresholdForNextVsync, nsecs_t hwcMinWorkDuration)
: VsyncConfiguration(currentFps),
mVSyncPhaseOffsetNs(vsyncPhaseOffsetNs),
mSfVSyncPhaseOffsetNs(sfVSyncPhaseOffsetNs),
@@ -129,7 +133,8 @@
mHighFpsEarlyGpuSfOffsetNs(highFpsEarlyGpuSfOffsetNs),
mHighFpsEarlyAppOffsetNs(highFpsEarlyAppOffsetNs),
mHighFpsEarlyGpuAppOffsetNs(highFpsEarlyGpuAppOffsetNs),
- mThresholdForNextVsync(thresholdForNextVsync) {}
+ mThresholdForNextVsync(thresholdForNextVsync),
+ mHwcMinWorkDuration(hwcMinWorkDuration) {}
PhaseOffsets::VsyncConfigSet PhaseOffsets::constructOffsets(nsecs_t vsyncDuration) const {
if (vsyncDuration < std::chrono::nanoseconds(15ms).count()) {
@@ -189,6 +194,7 @@
.sfWorkDuration = sfOffsetToDuration(lateSfOffset, vsyncDuration),
.appWorkDuration =
appOffsetToDuration(lateAppOffset, lateSfOffset, vsyncDuration)},
+ .hwcMinWorkDuration = std::chrono::nanoseconds(mHwcMinWorkDuration),
};
}
@@ -234,6 +240,7 @@
.appWorkDuration =
appOffsetToDuration(lateAppOffset, lateSfOffset, vsyncDuration),
},
+ .hwcMinWorkDuration = std::chrono::nanoseconds(mHwcMinWorkDuration),
};
}
@@ -342,6 +349,7 @@
.sfWorkDuration = sfDuration,
.appWorkDuration = appDuration,
},
+ .hwcMinWorkDuration = std::chrono::nanoseconds(mHwcMinWorkDuration),
};
}
@@ -351,19 +359,22 @@
getProperty("debug.sf.early.sf.duration").value_or(mSfDuration),
getProperty("debug.sf.early.app.duration").value_or(mAppDuration),
getProperty("debug.sf.earlyGl.sf.duration").value_or(mSfDuration),
- getProperty("debug.sf.earlyGl.app.duration").value_or(mAppDuration)) {
+ getProperty("debug.sf.earlyGl.app.duration").value_or(mAppDuration),
+ getProperty("debug.sf.hwc.min.duration").value_or(0)) {
validateSysprops();
}
WorkDuration::WorkDuration(Fps currentRefreshRate, nsecs_t sfDuration, nsecs_t appDuration,
nsecs_t sfEarlyDuration, nsecs_t appEarlyDuration,
- nsecs_t sfEarlyGpuDuration, nsecs_t appEarlyGpuDuration)
+ nsecs_t sfEarlyGpuDuration, nsecs_t appEarlyGpuDuration,
+ nsecs_t hwcMinWorkDuration)
: VsyncConfiguration(currentRefreshRate),
mSfDuration(sfDuration),
mAppDuration(appDuration),
mSfEarlyDuration(sfEarlyDuration),
mAppEarlyDuration(appEarlyDuration),
mSfEarlyGpuDuration(sfEarlyGpuDuration),
- mAppEarlyGpuDuration(appEarlyGpuDuration) {}
+ mAppEarlyGpuDuration(appEarlyGpuDuration),
+ mHwcMinWorkDuration(hwcMinWorkDuration) {}
} // namespace android::scheduler::impl
diff --git a/services/surfaceflinger/Scheduler/VsyncConfiguration.h b/services/surfaceflinger/Scheduler/VsyncConfiguration.h
index d9d206d..3e53b3f 100644
--- a/services/surfaceflinger/Scheduler/VsyncConfiguration.h
+++ b/services/surfaceflinger/Scheduler/VsyncConfiguration.h
@@ -111,7 +111,8 @@
nsecs_t highFpsSfVSyncPhaseOffsetNs, std::optional<nsecs_t> highFpsEarlySfOffsetNs,
std::optional<nsecs_t> highFpsEarlyGpuSfOffsetNs,
std::optional<nsecs_t> highFpsEarlyAppOffsetNs,
- std::optional<nsecs_t> highFpsEarlyGpuAppOffsetNs, nsecs_t thresholdForNextVsync);
+ std::optional<nsecs_t> highFpsEarlyGpuAppOffsetNs, nsecs_t thresholdForNextVsync,
+ nsecs_t hwcMinWorkDuration);
private:
VsyncConfiguration::VsyncConfigSet constructOffsets(nsecs_t vsyncDuration) const override;
@@ -134,6 +135,7 @@
const std::optional<nsecs_t> mHighFpsEarlyGpuAppOffsetNs;
const nsecs_t mThresholdForNextVsync;
+ const nsecs_t mHwcMinWorkDuration;
};
/*
@@ -148,7 +150,8 @@
protected:
// Used for unit tests
WorkDuration(Fps currentFps, nsecs_t sfDuration, nsecs_t appDuration, nsecs_t sfEarlyDuration,
- nsecs_t appEarlyDuration, nsecs_t sfEarlyGpuDuration, nsecs_t appEarlyGpuDuration);
+ nsecs_t appEarlyDuration, nsecs_t sfEarlyGpuDuration, nsecs_t appEarlyGpuDuration,
+ nsecs_t hwcMinWorkDuration);
private:
VsyncConfiguration::VsyncConfigSet constructOffsets(nsecs_t vsyncDuration) const override;
@@ -161,6 +164,8 @@
const nsecs_t mSfEarlyGpuDuration;
const nsecs_t mAppEarlyGpuDuration;
+
+ const nsecs_t mHwcMinWorkDuration;
};
} // namespace impl
diff --git a/services/surfaceflinger/Scheduler/VsyncModulator.h b/services/surfaceflinger/Scheduler/VsyncModulator.h
index fcde279..9410768 100644
--- a/services/surfaceflinger/Scheduler/VsyncModulator.h
+++ b/services/surfaceflinger/Scheduler/VsyncModulator.h
@@ -69,9 +69,12 @@
VsyncConfig early; // Used for early transactions, and during refresh rate change.
VsyncConfig earlyGpu; // Used during GPU composition.
VsyncConfig late; // Default.
+ std::chrono::nanoseconds hwcMinWorkDuration; // Used for calculating the
+ // earliest present time
bool operator==(const VsyncConfigSet& other) const {
- return early == other.early && earlyGpu == other.earlyGpu && late == other.late;
+ return early == other.early && earlyGpu == other.earlyGpu && late == other.late &&
+ hwcMinWorkDuration == other.hwcMinWorkDuration;
}
bool operator!=(const VsyncConfigSet& other) const { return !(*this == other); }
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 2b4f9ef..c6841ed 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -63,6 +63,7 @@
#include <log/log.h>
#include <private/android_filesystem_config.h>
#include <private/gui/SyncFeatures.h>
+#include <processgroup/processgroup.h>
#include <renderengine/RenderEngine.h>
#include <sys/types.h>
#include <ui/ColorSpace.h>
@@ -680,6 +681,10 @@
if (mStartPropertySetThread->join() != NO_ERROR) {
ALOGE("Join StartPropertySetThread failed!");
}
+
+ if (mRenderEnginePrimeCacheFuture.valid()) {
+ mRenderEnginePrimeCacheFuture.get();
+ }
const nsecs_t now = systemTime();
const nsecs_t duration = now - mBootTime;
ALOGI("Boot is finished (%ld ms)", long(ns2ms(duration)) );
@@ -781,6 +786,12 @@
? renderengine::RenderEngine::ContextPriority::REALTIME
: renderengine::RenderEngine::ContextPriority::MEDIUM)
.build()));
+
+ // Set SF main policy after initializing RenderEngine which has its own policy.
+ if (!SetTaskProfiles(0, {"SFMainPolicy"})) {
+ ALOGW("Failed to set main task profile");
+ }
+
mCompositionEngine->setTimeStats(mTimeStats);
mCompositionEngine->setHwComposer(getFactory().createHWComposer(mHwcServiceName));
mCompositionEngine->getHwComposer().setCallback(this);
@@ -807,7 +818,15 @@
char primeShaderCache[PROPERTY_VALUE_MAX];
property_get("service.sf.prime_shader_cache", primeShaderCache, "1");
if (atoi(primeShaderCache)) {
- getRenderEngine().primeCache();
+ if (setSchedFifo(false) != NO_ERROR) {
+ ALOGW("Can't set SCHED_OTHER for primeCache");
+ }
+
+ mRenderEnginePrimeCacheFuture = getRenderEngine().primeCache();
+
+ if (setSchedFifo(true) != NO_ERROR) {
+ ALOGW("Can't set SCHED_OTHER for primeCache");
+ }
}
getRenderEngine().onPrimaryDisplaySizeChanged(display->getSize());
@@ -1139,7 +1158,18 @@
// have been already updated with the upcoming active mode.
return;
}
- const Fps oldRefreshRate = display->getActiveMode()->getFps();
+
+ if (display->getActiveMode()->getSize() != upcomingMode->getSize()) {
+ auto& state = mCurrentState.displays.editValueFor(display->getDisplayToken());
+ // We need to generate new sequenceId in order to recreate the display (and this
+ // way the framebuffer).
+ state.sequenceId = DisplayDeviceState{}.sequenceId;
+ state.physical->activeMode = upcomingMode;
+ processDisplayChangesLocked();
+
+ // processDisplayChangesLocked will update all necessary components so we're done here.
+ return;
+ }
std::lock_guard<std::mutex> lock(mActiveModeLock);
mRefreshRateConfigs->setCurrentModeId(mUpcomingActiveMode.modeId);
@@ -1149,9 +1179,6 @@
mRefreshRateStats->setRefreshRate(refreshRate);
- if (!refreshRate.equalsWithMargin(oldRefreshRate)) {
- mTimeStats->incrementRefreshRateSwitches();
- }
updatePhaseConfiguration(refreshRate);
ATRACE_INT("ActiveConfigFPS", refreshRate.getValue());
@@ -2039,7 +2066,10 @@
std::chrono::milliseconds(mDebugRegion > 1 ? mDebugRegion : 0);
}
- refreshArgs.earliestPresentTime = mScheduler->getPreviousVsyncFrom(mExpectedPresentTime);
+ const auto prevVsyncTime = mScheduler->getPreviousVsyncFrom(mExpectedPresentTime);
+ const auto hwcMinWorkDuration = mVsyncConfiguration->getCurrentConfigs().hwcMinWorkDuration;
+ refreshArgs.earliestPresentTime = prevVsyncTime - hwcMinWorkDuration;
+ refreshArgs.nextInvalidateTime = mEventQueue->nextExpectedInvalidate();
mGeometryInvalid = false;
@@ -2225,14 +2255,14 @@
compositorTiming = getBE().mCompositorTiming;
}
- mDrawingState.traverse([&](Layer* layer) {
+ for (const auto& layer: mLayersWithQueuedFrames) {
const bool frameLatched =
layer->onPostComposition(display, glCompositionDoneFenceTime,
mPreviousPresentFences[0].fenceTime, compositorTiming);
if (frameLatched) {
recordBufferingStats(layer->getName(), layer->getOccupancyHistory(false));
}
- });
+ }
std::vector<std::pair<std::shared_ptr<compositionengine::Display>, sp<HdrLayerInfoReporter>>>
hdrInfoListeners;
@@ -2808,7 +2838,10 @@
mRefreshRateConfigs->updateDisplayModes(currentState.physical->supportedModes,
currentState.physical->activeMode->getId());
mVsyncConfiguration->reset();
- updatePhaseConfiguration(mRefreshRateConfigs->getCurrentRefreshRate().getFps());
+ const Fps refreshRate = currentState.physical->activeMode->getFps();
+ updatePhaseConfiguration(refreshRate);
+ mRefreshRateStats->setRefreshRate(refreshRate);
+
if (mRefreshRateOverlay) {
mRefreshRateOverlay->reset();
}
@@ -2894,6 +2927,7 @@
// Commit layer transactions. This needs to happen after display transactions are
// committed because some geometry logic relies on display orientation.
if ((transactionFlags & eTraversalNeeded) || mForceTraversal || displayTransactionNeeded) {
+ mForceTraversal = false;
mCurrentState.traverse([&](Layer* layer) {
uint32_t trFlags = layer->getTransactionFlags(eTransactionNeeded);
if (!trFlags && !displayTransactionNeeded) return;
@@ -3166,6 +3200,7 @@
}
void SurfaceFlinger::commitTransaction() {
+ ATRACE_CALL();
commitTransactionLocked();
signalSynchronousTransactions(CountDownLatch::eSyncTransaction);
mAnimTransactionPending = false;
@@ -4474,6 +4509,11 @@
}
const auto vsyncPeriod = mRefreshRateConfigs->getCurrentRefreshRate().getVsyncPeriod();
if (currentMode == hal::PowerMode::OFF) {
+ // Keep uclamp in a separate syscall and set it before changing to RT due to b/190237315.
+ // We can merge the syscall later.
+ if (SurfaceFlinger::setSchedAttr(true) != NO_ERROR) {
+ ALOGW("Couldn't set uclamp.min on display on: %s\n", strerror(errno));
+ }
if (SurfaceFlinger::setSchedFifo(true) != NO_ERROR) {
ALOGW("Couldn't set SCHED_FIFO on display on: %s\n", strerror(errno));
}
@@ -4492,6 +4532,9 @@
if (SurfaceFlinger::setSchedFifo(false) != NO_ERROR) {
ALOGW("Couldn't set SCHED_OTHER on display off: %s\n", strerror(errno));
}
+ if (SurfaceFlinger::setSchedAttr(false) != NO_ERROR) {
+ ALOGW("Couldn't set uclamp.min on display off: %s\n", strerror(errno));
+ }
if (display->isPrimary() && currentMode != hal::PowerMode::DOZE_SUSPEND) {
mScheduler->disableHardwareVsync(true);
mScheduler->onScreenReleased(mAppConnectionHandle);
@@ -5207,7 +5250,7 @@
case CAPTURE_DISPLAY:
case SET_FRAME_TIMELINE_INFO:
case GET_GPU_CONTEXT_PRIORITY:
- case GET_EXTRA_BUFFER_COUNT: {
+ case GET_MAX_ACQUIRED_BUFFER_COUNT: {
// This is not sensitive information, so should not require permission control.
return OK;
}
@@ -5768,8 +5811,6 @@
mKernelIdleTimerEnabled = true;
}
break;
- case KernelIdleTimerAction::NoChange:
- break;
}
}
@@ -5841,6 +5882,44 @@
if (sched_setscheduler(0, sched_policy, ¶m) != 0) {
return -errno;
}
+
+ return NO_ERROR;
+}
+
+status_t SurfaceFlinger::setSchedAttr(bool enabled) {
+ static const unsigned int kUclampMin =
+ base::GetUintProperty<unsigned int>("ro.surface_flinger.uclamp.min", 0U);
+
+ if (!kUclampMin) {
+ // uclamp.min set to 0 (default), skip setting
+ return NO_ERROR;
+ }
+
+ // Currently, there is no wrapper in bionic: b/183240349.
+ struct sched_attr {
+ uint32_t size;
+ uint32_t sched_policy;
+ uint64_t sched_flags;
+ int32_t sched_nice;
+ uint32_t sched_priority;
+ uint64_t sched_runtime;
+ uint64_t sched_deadline;
+ uint64_t sched_period;
+ uint32_t sched_util_min;
+ uint32_t sched_util_max;
+ };
+
+ sched_attr attr = {};
+ attr.size = sizeof(attr);
+
+ attr.sched_flags = (SCHED_FLAG_KEEP_ALL | SCHED_FLAG_UTIL_CLAMP);
+ attr.sched_util_min = enabled ? kUclampMin : 0;
+ attr.sched_util_max = 1024;
+
+ if (syscall(__NR_sched_setattr, 0, &attr, 0)) {
+ return -errno;
+ }
+
return NO_ERROR;
}
@@ -5970,12 +6049,12 @@
}
if (!canCaptureBlackoutContent &&
- parent->getCurrentState().flags & layer_state_t::eLayerSecure) {
+ parent->getDrawingState().flags & layer_state_t::eLayerSecure) {
ALOGW("Attempting to capture secure layer: PERMISSION_DENIED");
return PERMISSION_DENIED;
}
- Rect parentSourceBounds = parent->getCroppedBufferSize(parent->getCurrentState());
+ Rect parentSourceBounds = parent->getCroppedBufferSize(parent->getDrawingState());
if (args.sourceCrop.width() <= 0) {
crop.left = 0;
crop.right = parentSourceBounds.getWidth();
@@ -6214,7 +6293,7 @@
Region clearRegion = Region::INVALID_REGION;
bool disableBlurs = false;
traverseLayers([&](Layer* layer) {
- disableBlurs |= layer->getCurrentState().sidebandStream != nullptr;
+ disableBlurs |= layer->getDrawingState().sidebandStream != nullptr;
Region clip(renderArea.getBounds());
compositionengine::LayerFE::ClientCompositionTargetSettings targetSettings{
@@ -6722,25 +6801,38 @@
return getRenderEngine().getContextPriority();
}
-int SurfaceFlinger::calculateExtraBufferCount(Fps maxSupportedRefreshRate,
- std::chrono::nanoseconds presentLatency) {
- auto pipelineDepth = presentLatency.count() / maxSupportedRefreshRate.getPeriodNsecs();
- if (presentLatency.count() % maxSupportedRefreshRate.getPeriodNsecs()) {
+int SurfaceFlinger::calculateMaxAcquiredBufferCount(Fps refreshRate,
+ std::chrono::nanoseconds presentLatency) {
+ auto pipelineDepth = presentLatency.count() / refreshRate.getPeriodNsecs();
+ if (presentLatency.count() % refreshRate.getPeriodNsecs()) {
pipelineDepth++;
}
- return std::max(0ll, pipelineDepth - 2);
+ return std::max(1ll, pipelineDepth - 1);
}
-status_t SurfaceFlinger::getExtraBufferCount(int* extraBuffers) const {
+status_t SurfaceFlinger::getMaxAcquiredBufferCount(int* buffers) const {
const auto maxSupportedRefreshRate = mRefreshRateConfigs->getSupportedRefreshRateRange().max;
- const auto vsyncConfig =
- mVsyncConfiguration->getConfigsForRefreshRate(maxSupportedRefreshRate).late;
- const auto presentLatency = vsyncConfig.appWorkDuration + vsyncConfig.sfWorkDuration;
-
- *extraBuffers = calculateExtraBufferCount(maxSupportedRefreshRate, presentLatency);
+ *buffers = getMaxAcquiredBufferCountForRefreshRate(maxSupportedRefreshRate);
return NO_ERROR;
}
+int SurfaceFlinger::getMaxAcquiredBufferCountForCurrentRefreshRate(uid_t uid) const {
+ const auto refreshRate = [&] {
+ const auto frameRateOverride = mScheduler->getFrameRateOverride(uid);
+ if (frameRateOverride.has_value()) {
+ return frameRateOverride.value();
+ }
+ return mRefreshRateConfigs->getCurrentRefreshRate().getFps();
+ }();
+ return getMaxAcquiredBufferCountForRefreshRate(refreshRate);
+}
+
+int SurfaceFlinger::getMaxAcquiredBufferCountForRefreshRate(Fps refreshRate) const {
+ const auto vsyncConfig = mVsyncConfiguration->getConfigsForRefreshRate(refreshRate).late;
+ const auto presentLatency = vsyncConfig.appWorkDuration + vsyncConfig.sfWorkDuration;
+ return calculateMaxAcquiredBufferCount(refreshRate, presentLatency);
+}
+
void SurfaceFlinger::TransactionState::traverseStatesWithBuffers(
std::function<void(const layer_state_t&)> visitor) {
for (const auto& state : states) {
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index be3417b..22d17eb 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -186,6 +186,9 @@
// set main thread scheduling policy
static status_t setSchedFifo(bool enabled) ANDROID_API;
+ // set main thread scheduling attributes
+ static status_t setSchedAttr(bool enabled);
+
static char const* getServiceName() ANDROID_API { return "SurfaceFlinger"; }
// This is the phase offset in nanoseconds of the software vsync event
@@ -705,7 +708,7 @@
int getGPUContextPriority() override;
- status_t getExtraBufferCount(int* extraBuffers) const override;
+ status_t getMaxAcquiredBufferCount(int* buffers) const override;
// Implements IBinder::DeathRecipient.
void binderDied(const wp<IBinder>& who) override;
@@ -920,6 +923,8 @@
size_t getMaxTextureSize() const;
size_t getMaxViewportDims() const;
+ int getMaxAcquiredBufferCountForCurrentRefreshRate(uid_t uid) const;
+
/*
* Display and layer stack management
*/
@@ -1059,6 +1064,7 @@
// Calculates the expected present time for this frame. For negative offsets, performs a
// correction using the predicted vsync for the next frame instead.
+
nsecs_t calculateExpectedPresentTime(DisplayStatInfo) const;
/*
@@ -1174,12 +1180,15 @@
std::vector<ui::ColorMode> getDisplayColorModes(PhysicalDisplayId displayId)
REQUIRES(mStateLock);
- static int calculateExtraBufferCount(Fps maxSupportedRefreshRate,
- std::chrono::nanoseconds presentLatency);
+ static int calculateMaxAcquiredBufferCount(Fps refreshRate,
+ std::chrono::nanoseconds presentLatency);
+ int getMaxAcquiredBufferCountForRefreshRate(Fps refreshRate) const;
sp<StartPropertySetThread> mStartPropertySetThread;
surfaceflinger::Factory& mFactory;
+ std::future<void> mRenderEnginePrimeCacheFuture;
+
// access must be protected by mStateLock
mutable Mutex mStateLock;
State mCurrentState{LayerVector::StateSet::Current};
diff --git a/services/surfaceflinger/SurfaceInterceptor.cpp b/services/surfaceflinger/SurfaceInterceptor.cpp
index c5f1598..8ca241e 100644
--- a/services/surfaceflinger/SurfaceInterceptor.cpp
+++ b/services/surfaceflinger/SurfaceInterceptor.cpp
@@ -130,25 +130,25 @@
transaction->set_animation(layerFlags & BnSurfaceComposer::eAnimation);
const int32_t layerId(getLayerId(layer));
- addPositionLocked(transaction, layerId, layer->mCurrentState.transform.tx(),
- layer->mCurrentState.transform.ty());
- addDepthLocked(transaction, layerId, layer->mCurrentState.z);
- addAlphaLocked(transaction, layerId, layer->mCurrentState.color.a);
+ addPositionLocked(transaction, layerId, layer->mDrawingState.transform.tx(),
+ layer->mDrawingState.transform.ty());
+ addDepthLocked(transaction, layerId, layer->mDrawingState.z);
+ addAlphaLocked(transaction, layerId, layer->mDrawingState.color.a);
addTransparentRegionLocked(transaction, layerId,
- layer->mCurrentState.activeTransparentRegion_legacy);
- addLayerStackLocked(transaction, layerId, layer->mCurrentState.layerStack);
- addCropLocked(transaction, layerId, layer->mCurrentState.crop);
- addCornerRadiusLocked(transaction, layerId, layer->mCurrentState.cornerRadius);
- addBackgroundBlurRadiusLocked(transaction, layerId, layer->mCurrentState.backgroundBlurRadius);
- addBlurRegionsLocked(transaction, layerId, layer->mCurrentState.blurRegions);
- addFlagsLocked(transaction, layerId, layer->mCurrentState.flags,
+ layer->mDrawingState.activeTransparentRegion_legacy);
+ addLayerStackLocked(transaction, layerId, layer->mDrawingState.layerStack);
+ addCropLocked(transaction, layerId, layer->mDrawingState.crop);
+ addCornerRadiusLocked(transaction, layerId, layer->mDrawingState.cornerRadius);
+ addBackgroundBlurRadiusLocked(transaction, layerId, layer->mDrawingState.backgroundBlurRadius);
+ addBlurRegionsLocked(transaction, layerId, layer->mDrawingState.blurRegions);
+ addFlagsLocked(transaction, layerId, layer->mDrawingState.flags,
layer_state_t::eLayerHidden | layer_state_t::eLayerOpaque |
layer_state_t::eLayerSecure);
- addReparentLocked(transaction, layerId, getLayerIdFromWeakRef(layer->mCurrentParent));
+ addReparentLocked(transaction, layerId, getLayerIdFromWeakRef(layer->mDrawingParent));
addRelativeParentLocked(transaction, layerId,
- getLayerIdFromWeakRef(layer->mCurrentState.zOrderRelativeOf),
- layer->mCurrentState.z);
- addShadowRadiusLocked(transaction, layerId, layer->mCurrentState.shadowRadius);
+ getLayerIdFromWeakRef(layer->mDrawingState.zOrderRelativeOf),
+ layer->mDrawingState.z);
+ addShadowRadiusLocked(transaction, layerId, layer->mDrawingState.shadowRadius);
}
void SurfaceInterceptor::addInitialDisplayStateLocked(Increment* increment,
@@ -511,8 +511,8 @@
SurfaceCreation* creation(increment->mutable_surface_creation());
creation->set_id(getLayerId(layer));
creation->set_name(layer->getName());
- creation->set_w(layer->mCurrentState.active_legacy.w);
- creation->set_h(layer->mCurrentState.active_legacy.h);
+ creation->set_w(layer->mDrawingState.active_legacy.w);
+ creation->set_h(layer->mDrawingState.active_legacy.h);
}
void SurfaceInterceptor::addSurfaceDeletionLocked(Increment* increment,
diff --git a/services/surfaceflinger/TimeStats/TimeStats.cpp b/services/surfaceflinger/TimeStats/TimeStats.cpp
index d6a0787..7c1f21f 100644
--- a/services/surfaceflinger/TimeStats/TimeStats.cpp
+++ b/services/surfaceflinger/TimeStats/TimeStats.cpp
@@ -58,6 +58,21 @@
return histogramProto;
}
+SurfaceflingerStatsLayerInfo_GameMode gameModeToProto(int32_t gameMode) {
+ switch (gameMode) {
+ case TimeStatsHelper::GameModeUnsupported:
+ return SurfaceflingerStatsLayerInfo::GAME_MODE_UNSUPPORTED;
+ case TimeStatsHelper::GameModeStandard:
+ return SurfaceflingerStatsLayerInfo::GAME_MODE_STANDARD;
+ case TimeStatsHelper::GameModePerformance:
+ return SurfaceflingerStatsLayerInfo::GAME_MODE_PERFORMANCE;
+ case TimeStatsHelper::GameModeBattery:
+ return SurfaceflingerStatsLayerInfo::GAME_MODE_BATTERY;
+ default:
+ return SurfaceflingerStatsLayerInfo::GAME_MODE_UNSPECIFIED;
+ }
+}
+
SurfaceflingerStatsLayerInfo_SetFrameRateVote frameRateVoteToProto(
const TimeStats::SetFrameRateVote& setFrameRateVote) {
using FrameRateCompatibilityEnum =
@@ -206,6 +221,7 @@
*atom->mutable_app_deadline_misses() =
histogramToProto(layer->deltas["appDeadlineDeltas"].hist,
mMaxPulledHistogramBuckets);
+ atom->set_game_mode(gameModeToProto(layer->gameMode));
}
// Always clear data.
@@ -437,7 +453,8 @@
void TimeStats::flushAvailableRecordsToStatsLocked(int32_t layerId, Fps displayRefreshRate,
std::optional<Fps> renderRate,
- SetFrameRateVote frameRateVote) {
+ SetFrameRateVote frameRateVote,
+ int32_t gameMode) {
ATRACE_CALL();
ALOGV("[%d]-flushAvailableRecordsToStatsLocked", layerId);
@@ -464,12 +481,13 @@
TimeStatsHelper::TimelineStats& displayStats = mTimeStats.stats[timelineKey];
- TimeStatsHelper::LayerStatsKey layerKey = {uid, layerName};
+ TimeStatsHelper::LayerStatsKey layerKey = {uid, layerName, gameMode};
if (!displayStats.stats.count(layerKey)) {
displayStats.stats[layerKey].displayRefreshRateBucket = refreshRateBucket;
displayStats.stats[layerKey].renderRateBucket = renderRateBucket;
displayStats.stats[layerKey].uid = uid;
displayStats.stats[layerKey].layerName = layerName;
+ displayStats.stats[layerKey].gameMode = gameMode;
}
if (frameRateVote.frameRate > 0.0f) {
displayStats.stats[layerKey].setFrameRateVote = frameRateVote;
@@ -535,10 +553,11 @@
layerName.compare(0, kMinLenLayerName, kPopupWindowPrefix) != 0;
}
-bool TimeStats::canAddNewAggregatedStats(uid_t uid, const std::string& layerName) {
+bool TimeStats::canAddNewAggregatedStats(uid_t uid, const std::string& layerName,
+ int32_t gameMode) {
uint32_t layerRecords = 0;
for (const auto& record : mTimeStats.stats) {
- if (record.second.stats.count({uid, layerName}) > 0) {
+ if (record.second.stats.count({uid, layerName, gameMode}) > 0) {
return true;
}
@@ -549,7 +568,7 @@
}
void TimeStats::setPostTime(int32_t layerId, uint64_t frameNumber, const std::string& layerName,
- uid_t uid, nsecs_t postTime) {
+ uid_t uid, nsecs_t postTime, int32_t gameMode) {
if (!mEnabled.load()) return;
ATRACE_CALL();
@@ -557,13 +576,14 @@
postTime);
std::lock_guard<std::mutex> lock(mMutex);
- if (!canAddNewAggregatedStats(uid, layerName)) {
+ if (!canAddNewAggregatedStats(uid, layerName, gameMode)) {
return;
}
if (!mTimeStatsTracker.count(layerId) && mTimeStatsTracker.size() < MAX_NUM_LAYER_RECORDS &&
layerNameIsValid(layerName)) {
mTimeStatsTracker[layerId].uid = uid;
mTimeStatsTracker[layerId].layerName = layerName;
+ mTimeStatsTracker[layerId].gameMode = gameMode;
}
if (!mTimeStatsTracker.count(layerId)) return;
LayerRecord& layerRecord = mTimeStatsTracker[layerId];
@@ -698,7 +718,7 @@
void TimeStats::setPresentTime(int32_t layerId, uint64_t frameNumber, nsecs_t presentTime,
Fps displayRefreshRate, std::optional<Fps> renderRate,
- SetFrameRateVote frameRateVote) {
+ SetFrameRateVote frameRateVote, int32_t gameMode) {
if (!mEnabled.load()) return;
ATRACE_CALL();
@@ -717,13 +737,14 @@
layerRecord.waitData++;
}
- flushAvailableRecordsToStatsLocked(layerId, displayRefreshRate, renderRate, frameRateVote);
+ flushAvailableRecordsToStatsLocked(layerId, displayRefreshRate, renderRate, frameRateVote,
+ gameMode);
}
void TimeStats::setPresentFence(int32_t layerId, uint64_t frameNumber,
const std::shared_ptr<FenceTime>& presentFence,
Fps displayRefreshRate, std::optional<Fps> renderRate,
- SetFrameRateVote frameRateVote) {
+ SetFrameRateVote frameRateVote, int32_t gameMode) {
if (!mEnabled.load()) return;
ATRACE_CALL();
@@ -743,7 +764,8 @@
layerRecord.waitData++;
}
- flushAvailableRecordsToStatsLocked(layerId, displayRefreshRate, renderRate, frameRateVote);
+ flushAvailableRecordsToStatsLocked(layerId, displayRefreshRate, renderRate, frameRateVote,
+ gameMode);
}
static const constexpr int32_t kValidJankyReason = JankType::DisplayHAL |
@@ -801,6 +823,7 @@
// the first jank record is not dropped.
static const std::string kDefaultLayerName = "none";
+ static constexpr int32_t kDefaultGameMode = TimeStatsHelper::GameModeUnsupported;
const int32_t refreshRateBucket =
clampToNearestBucket(info.refreshRate, REFRESH_RATE_BUCKET_WIDTH);
@@ -817,13 +840,14 @@
updateJankPayload<TimeStatsHelper::TimelineStats>(timelineStats, info.reasons);
- TimeStatsHelper::LayerStatsKey layerKey = {info.uid, info.layerName};
+ TimeStatsHelper::LayerStatsKey layerKey = {info.uid, info.layerName, info.gameMode};
if (!timelineStats.stats.count(layerKey)) {
- layerKey = {info.uid, kDefaultLayerName};
+ layerKey = {info.uid, kDefaultLayerName, kDefaultGameMode};
timelineStats.stats[layerKey].displayRefreshRateBucket = refreshRateBucket;
timelineStats.stats[layerKey].renderRateBucket = renderRateBucket;
timelineStats.stats[layerKey].uid = info.uid;
timelineStats.stats[layerKey].layerName = kDefaultLayerName;
+ timelineStats.stats[layerKey].gameMode = kDefaultGameMode;
}
TimeStatsHelper::TimeStatsLayer& timeStatsLayer = timelineStats.stats[layerKey];
diff --git a/services/surfaceflinger/TimeStats/TimeStats.h b/services/surfaceflinger/TimeStats/TimeStats.h
index 5b0f5bd..9e70684 100644
--- a/services/surfaceflinger/TimeStats/TimeStats.h
+++ b/services/surfaceflinger/TimeStats/TimeStats.h
@@ -16,18 +16,10 @@
#pragma once
-// TODO(b/129481165): remove the #pragma below and fix conversion issues
#include <cstdint>
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wconversion"
-#pragma clang diagnostic ignored "-Wextra"
-
-#include <android/hardware/graphics/composer/2.4/IComposerClient.h>
-
-// TODO(b/129481165): remove the #pragma below and fix conversion issues
-#pragma clang diagnostic pop // ignored "-Wconversion -Wextra"
#include <../Fps.h>
+#include <android/hardware/graphics/composer/2.4/IComposerClient.h>
#include <gui/JankInfo.h>
#include <timestatsproto/TimeStatsHelper.h>
#include <timestatsproto/TimeStatsProtoHeader.h>
@@ -87,7 +79,7 @@
const std::shared_ptr<FenceTime>& readyFence) = 0;
virtual void setPostTime(int32_t layerId, uint64_t frameNumber, const std::string& layerName,
- uid_t uid, nsecs_t postTime) = 0;
+ uid_t uid, nsecs_t postTime, int32_t gameMode) = 0;
virtual void setLatchTime(int32_t layerId, uint64_t frameNumber, nsecs_t latchTime) = 0;
// Reasons why latching a particular buffer may be skipped
enum class LatchSkipReason {
@@ -109,11 +101,11 @@
// rendering path, as they flush prior fences if those fences have fired.
virtual void setPresentTime(int32_t layerId, uint64_t frameNumber, nsecs_t presentTime,
Fps displayRefreshRate, std::optional<Fps> renderRate,
- SetFrameRateVote frameRateVote) = 0;
+ SetFrameRateVote frameRateVote, int32_t gameMode) = 0;
virtual void setPresentFence(int32_t layerId, uint64_t frameNumber,
const std::shared_ptr<FenceTime>& presentFence,
Fps displayRefreshRate, std::optional<Fps> renderRate,
- SetFrameRateVote frameRateVote) = 0;
+ SetFrameRateVote frameRateVote, int32_t gameMode) = 0;
// Increments janky frames, blamed to the provided {refreshRate, renderRate, uid, layerName}
// key, with JankMetadata as supplementary reasons for the jank. Because FrameTimeline is the
@@ -131,6 +123,7 @@
std::optional<Fps> renderRate;
uid_t uid = 0;
std::string layerName;
+ int32_t gameMode = 0;
int32_t reasons = 0;
nsecs_t displayDeadlineDelta = 0;
nsecs_t displayPresentJitter = 0;
@@ -141,8 +134,8 @@
((renderRate == std::nullopt && o.renderRate == std::nullopt) ||
(renderRate != std::nullopt && o.renderRate != std::nullopt &&
Fps::EqualsInBuckets{}(*renderRate, *o.renderRate))) &&
- uid == o.uid && layerName == o.layerName && reasons == o.reasons &&
- displayDeadlineDelta == o.displayDeadlineDelta &&
+ uid == o.uid && layerName == o.layerName && gameMode == o.gameMode &&
+ reasons == o.reasons && displayDeadlineDelta == o.displayDeadlineDelta &&
displayPresentJitter == o.displayPresentJitter &&
appDeadlineDelta == o.appDeadlineDelta;
}
@@ -199,6 +192,7 @@
struct LayerRecord {
uid_t uid;
std::string layerName;
+ int32_t gameMode = 0;
// This is the index in timeRecords, at which the timestamps for that
// specific frame are still not fully received. This is not waiting for
// fences to signal, but rather waiting to receive those fences/timestamps.
@@ -251,7 +245,7 @@
const std::shared_ptr<FenceTime>& readyFence) override;
void setPostTime(int32_t layerId, uint64_t frameNumber, const std::string& layerName, uid_t uid,
- nsecs_t postTime) override;
+ nsecs_t postTime, int32_t gameMode) override;
void setLatchTime(int32_t layerId, uint64_t frameNumber, nsecs_t latchTime) override;
void incrementLatchSkipped(int32_t layerId, LatchSkipReason reason) override;
void incrementBadDesiredPresent(int32_t layerId) override;
@@ -261,10 +255,11 @@
const std::shared_ptr<FenceTime>& acquireFence) override;
void setPresentTime(int32_t layerId, uint64_t frameNumber, nsecs_t presentTime,
Fps displayRefreshRate, std::optional<Fps> renderRate,
- SetFrameRateVote frameRateVote) override;
+ SetFrameRateVote frameRateVote, int32_t gameMode) override;
void setPresentFence(int32_t layerId, uint64_t frameNumber,
const std::shared_ptr<FenceTime>& presentFence, Fps displayRefreshRate,
- std::optional<Fps> renderRate, SetFrameRateVote frameRateVote) override;
+ std::optional<Fps> renderRate, SetFrameRateVote frameRateVote,
+ int32_t gameMode) override;
void incrementJankyFrames(const JankyFramesInfo& info) override;
// Clean up the layer record
@@ -286,10 +281,10 @@
bool recordReadyLocked(int32_t layerId, TimeRecord* timeRecord);
void flushAvailableRecordsToStatsLocked(int32_t layerId, Fps displayRefreshRate,
std::optional<Fps> renderRate,
- SetFrameRateVote frameRateVote);
+ SetFrameRateVote frameRateVote, int32_t gameMode);
void flushPowerTimeLocked();
void flushAvailableGlobalRecordsToStatsLocked();
- bool canAddNewAggregatedStats(uid_t uid, const std::string& layerName);
+ bool canAddNewAggregatedStats(uid_t uid, const std::string& layerName, int32_t gameMode);
void enable();
void disable();
diff --git a/services/surfaceflinger/TimeStats/timestatsatomsproto/timestats_atoms.proto b/services/surfaceflinger/TimeStats/timestatsatomsproto/timestats_atoms.proto
index 133a541..e45757d 100644
--- a/services/surfaceflinger/TimeStats/timestatsatomsproto/timestats_atoms.proto
+++ b/services/surfaceflinger/TimeStats/timestatsatomsproto/timestats_atoms.proto
@@ -166,6 +166,23 @@
// This is intended to be used as a dimension in collecting per-render rate
// jank statistics.
optional int32 render_rate_bucket = 23;
+
+ enum GameMode {
+ GAME_MODE_UNSPECIFIED = 0;
+ GAME_MODE_UNSUPPORTED = 1;
+ GAME_MODE_STANDARD = 2;
+ GAME_MODE_PERFORMANCE = 3;
+ GAME_MODE_BATTERY = 4;
+ }
+
+ // Game mode that the layer was running at. Used to track user engagement
+ // in different modes. The modes are defined in GameManager.java
+ // Game modes are used only for integrating with GameManager. All non-game
+ // layers will have this field set to UNSUPPORTED.
+ // Introduced in Android 12
+ // This is intended to be used as a dimension in collecting per-game mode
+ // fps and frame related metrics.
+ optional GameMode game_mode = 26;
// The layer for this set of metrics
// In many scenarios the package name is included in the layer name, e.g.,
// layers created by Window Manager. But this is not a guarantee - in the
@@ -271,7 +288,7 @@
// Introduced in Android 12.
optional FrameTimingHistogram app_deadline_misses = 25;
- // Next ID: 26
+ // Next ID: 27
}
/**
diff --git a/services/surfaceflinger/TimeStats/timestatsproto/TimeStatsHelper.cpp b/services/surfaceflinger/TimeStats/timestatsproto/TimeStatsHelper.cpp
index a7e7db2..ffb2f09 100644
--- a/services/surfaceflinger/TimeStats/timestatsproto/TimeStatsHelper.cpp
+++ b/services/surfaceflinger/TimeStats/timestatsproto/TimeStatsHelper.cpp
@@ -122,6 +122,20 @@
return result;
}
+std::string TimeStatsHelper::TimeStatsLayer::toString(int32_t gameMode) const {
+ switch (gameMode) {
+ case TimeStatsHelper::GameModeUnsupported:
+ return "GameModeUnsupported";
+ case TimeStatsHelper::GameModeStandard:
+ return "GameModeStandard";
+ case TimeStatsHelper::GameModePerformance:
+ return "GameModePerformance";
+ case TimeStatsHelper::GameModeBattery:
+ return "GameModeBattery";
+ default:
+ return "GameModeUnspecified";
+ }
+}
std::string TimeStatsHelper::TimeStatsLayer::toString() const {
std::string result = "\n";
StringAppendF(&result, "displayRefreshRate = %d fps\n", displayRefreshRateBucket);
@@ -129,6 +143,7 @@
StringAppendF(&result, "uid = %d\n", uid);
StringAppendF(&result, "layerName = %s\n", layerName.c_str());
StringAppendF(&result, "packageName = %s\n", packageName.c_str());
+ StringAppendF(&result, "gameMode = %s\n", toString(gameMode).c_str());
StringAppendF(&result, "totalFrames = %d\n", totalFrames);
StringAppendF(&result, "droppedFrames = %d\n", droppedFrames);
StringAppendF(&result, "lateAcquireFrames = %d\n", lateAcquireFrames);
diff --git a/services/surfaceflinger/TimeStats/timestatsproto/include/timestatsproto/TimeStatsHelper.h b/services/surfaceflinger/TimeStats/timestatsproto/include/timestatsproto/TimeStatsHelper.h
index 2b37ffe..2afff8d 100644
--- a/services/surfaceflinger/TimeStats/timestatsproto/include/timestatsproto/TimeStatsHelper.h
+++ b/services/surfaceflinger/TimeStats/timestatsproto/include/timestatsproto/TimeStatsHelper.h
@@ -77,6 +77,18 @@
std::string toString() const;
};
+ /**
+ * GameMode of the layer. GameModes are set by SysUI through WMShell.
+ * Actual game mode definitions are managed by GameManager.java
+ * The values defined here should always be in sync with the ones in GameManager.
+ */
+ enum GameMode {
+ GameModeUnsupported = 0,
+ GameModeStandard = 1,
+ GameModePerformance = 2,
+ GameModeBattery = 3,
+ };
+
class TimeStatsLayer {
public:
uid_t uid;
@@ -84,6 +96,7 @@
std::string packageName;
int32_t displayRefreshRateBucket = 0;
int32_t renderRateBucket = 0;
+ int32_t gameMode = 0;
int32_t totalFrames = 0;
int32_t droppedFrames = 0;
int32_t lateAcquireFrames = 0;
@@ -93,6 +106,7 @@
std::unordered_map<std::string, Histogram> deltas;
std::string toString() const;
+ std::string toString(int32_t gameMode) const;
SFTimeStatsLayerProto toProto() const;
};
@@ -123,24 +137,19 @@
struct LayerStatsKey {
uid_t uid = 0;
std::string layerName;
+ int32_t gameMode = 0;
struct Hasher {
size_t operator()(const LayerStatsKey& key) const {
- size_t result = std::hash<uid_t>{}(key.uid);
- return HashCombine(result, std::hash<std::string>{}(key.layerName));
+ size_t uidHash = std::hash<uid_t>{}(key.uid);
+ size_t layerNameHash = std::hash<std::string>{}(key.layerName);
+ size_t gameModeHash = std::hash<int32_t>{}(key.gameMode);
+ return HashCombine(uidHash, HashCombine(layerNameHash, gameModeHash));
}
};
bool operator==(const LayerStatsKey& o) const {
- return uid == o.uid && layerName == o.layerName;
- }
- };
-
- struct LayerStatsHasher {
- size_t operator()(const std::pair<uid_t, std::string>& p) const {
- // Normally this isn't a very good hash function due to symmetry reasons,
- // but these are distinct types so this should be good enough
- return std::hash<uid_t>{}(p.first) ^ std::hash<std::string>{}(p.second);
+ return uid == o.uid && layerName == o.layerName && gameMode == o.gameMode;
}
};
diff --git a/services/surfaceflinger/TransactionCallbackInvoker.cpp b/services/surfaceflinger/TransactionCallbackInvoker.cpp
index 4f4c02b..fdf16a7 100644
--- a/services/surfaceflinger/TransactionCallbackInvoker.cpp
+++ b/services/surfaceflinger/TransactionCallbackInvoker.cpp
@@ -235,8 +235,9 @@
handle->dequeueReadyTime);
transactionStats->surfaceStats.emplace_back(surfaceControl, handle->acquireTime,
handle->previousReleaseFence,
- handle->transformHint, eventStats, jankData,
- handle->previousBufferId);
+ handle->transformHint,
+ handle->currentMaxAcquiredBufferCount,
+ eventStats, jankData, handle->previousBufferId);
}
return NO_ERROR;
}
diff --git a/services/surfaceflinger/TransactionCallbackInvoker.h b/services/surfaceflinger/TransactionCallbackInvoker.h
index 184b151..444bec6 100644
--- a/services/surfaceflinger/TransactionCallbackInvoker.h
+++ b/services/surfaceflinger/TransactionCallbackInvoker.h
@@ -45,6 +45,7 @@
nsecs_t acquireTime = -1;
nsecs_t latchTime = -1;
uint32_t transformHint = 0;
+ uint32_t currentMaxAcquiredBufferCount = 0;
std::shared_ptr<FenceTime> gpuCompositionDoneFence{FenceTime::NO_FENCE};
CompositorTiming compositorTiming;
nsecs_t refreshStartTime = 0;
diff --git a/services/surfaceflinger/TunnelModeEnabledReporter.cpp b/services/surfaceflinger/TunnelModeEnabledReporter.cpp
index 1b3ddf7..48e3216 100644
--- a/services/surfaceflinger/TunnelModeEnabledReporter.cpp
+++ b/services/surfaceflinger/TunnelModeEnabledReporter.cpp
@@ -31,8 +31,8 @@
void TunnelModeEnabledReporter::updateTunnelModeStatus() {
bool tunnelModeEnabled = false;
mFlinger.mCurrentState.traverse([&](Layer* layer) {
- auto& currentState = layer->getCurrentState();
- if (currentState.sidebandStream != nullptr) {
+ auto& state = layer->getDrawingState();
+ if (state.sidebandStream != nullptr) {
tunnelModeEnabled = true;
return;
}
diff --git a/services/surfaceflinger/main_surfaceflinger.cpp b/services/surfaceflinger/main_surfaceflinger.cpp
index 9686523..673239d 100644
--- a/services/surfaceflinger/main_surfaceflinger.cpp
+++ b/services/surfaceflinger/main_surfaceflinger.cpp
@@ -89,6 +89,12 @@
// binder threads to 4.
ProcessState::self()->setThreadPoolMaxThreadCount(4);
+ // Set uclamp.min setting on all threads, maybe an overkill but we want
+ // to cover important threads like RenderEngine.
+ if (SurfaceFlinger::setSchedAttr(true) != NO_ERROR) {
+ ALOGW("Couldn't set uclamp.min: %s\n", strerror(errno));
+ }
+
// The binder threadpool we start will inherit sched policy and priority
// of (this) creating thread. We want the binder thread pool to have
// SCHED_FIFO policy and priority 1 (lowest RT priority)
diff --git a/services/surfaceflinger/tests/ReleaseBufferCallback_test.cpp b/services/surfaceflinger/tests/ReleaseBufferCallback_test.cpp
index fb7d41c..5aa809d 100644
--- a/services/surfaceflinger/tests/ReleaseBufferCallback_test.cpp
+++ b/services/surfaceflinger/tests/ReleaseBufferCallback_test.cpp
@@ -30,7 +30,8 @@
class ReleaseBufferCallbackHelper {
public:
static void function(void* callbackContext, uint64_t graphicsBufferId,
- const sp<Fence>& releaseFence) {
+ const sp<Fence>& releaseFence,
+ uint32_t /*currentMaxAcquiredBufferCount*/) {
if (!callbackContext) {
FAIL() << "failed to get callback context";
}
@@ -66,7 +67,7 @@
android::ReleaseBufferCallback getCallback() {
return std::bind(function, static_cast<void*>(this) /* callbackContext */,
- std::placeholders::_1, std::placeholders::_2);
+ std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
}
std::mutex mMutex;
diff --git a/services/surfaceflinger/tests/unittests/FakeVsyncConfiguration.h b/services/surfaceflinger/tests/unittests/FakeVsyncConfiguration.h
index e890a62..f6f3c07 100644
--- a/services/surfaceflinger/tests/unittests/FakeVsyncConfiguration.h
+++ b/services/surfaceflinger/tests/unittests/FakeVsyncConfiguration.h
@@ -34,7 +34,8 @@
{FAKE_PHASE_OFFSET_NS, FAKE_PHASE_OFFSET_NS, FAKE_DURATION_OFFSET_NS,
FAKE_DURATION_OFFSET_NS},
{FAKE_PHASE_OFFSET_NS, FAKE_PHASE_OFFSET_NS, FAKE_DURATION_OFFSET_NS,
- FAKE_DURATION_OFFSET_NS}};
+ FAKE_DURATION_OFFSET_NS},
+ FAKE_DURATION_OFFSET_NS};
}
void reset() override {}
diff --git a/services/surfaceflinger/tests/unittests/FrameTimelineTest.cpp b/services/surfaceflinger/tests/unittests/FrameTimelineTest.cpp
index c6a4115..0a8c748 100644
--- a/services/surfaceflinger/tests/unittests/FrameTimelineTest.cpp
+++ b/services/surfaceflinger/tests/unittests/FrameTimelineTest.cpp
@@ -175,6 +175,7 @@
static constexpr int32_t sInputEventId = 5;
static constexpr int32_t sLayerIdOne = 1;
static constexpr int32_t sLayerIdTwo = 2;
+static constexpr int32_t sGameMode = 0;
TEST_F(FrameTimelineTest, tokenManagerRemovesStalePredictions) {
int64_t token1 = mTokenManager->generateTokenForPredictions({0, 0, 0});
@@ -194,11 +195,11 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken({}, sPidOne, sUidOne, sLayerIdOne,
sLayerNameOne, sLayerNameOne,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, sGameMode);
auto surfaceFrame2 =
mFrameTimeline->createSurfaceFrameForToken({}, sPidTwo, sUidOne, sLayerIdOne,
sLayerNameOne, sLayerNameOne,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, sGameMode);
EXPECT_EQ(surfaceFrame1->getOwnerPid(), sPidOne);
EXPECT_EQ(surfaceFrame2->getOwnerPid(), sPidTwo);
}
@@ -207,7 +208,7 @@
auto surfaceFrame =
mFrameTimeline->createSurfaceFrameForToken({}, sPidOne, sUidOne, sLayerIdOne,
sLayerNameOne, sLayerNameOne,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, sGameMode);
EXPECT_EQ(surfaceFrame->getPredictionState(), PredictionState::None);
}
@@ -217,7 +218,7 @@
auto surfaceFrame =
mFrameTimeline->createSurfaceFrameForToken({token1, sInputEventId}, sPidOne, sUidOne,
sLayerIdOne, sLayerNameOne, sLayerNameOne,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, sGameMode);
EXPECT_EQ(surfaceFrame->getPredictionState(), PredictionState::Expired);
}
@@ -227,7 +228,7 @@
auto surfaceFrame =
mFrameTimeline->createSurfaceFrameForToken({token1, sInputEventId}, sPidOne, sUidOne,
sLayerIdOne, sLayerNameOne, sLayerNameOne,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, sGameMode);
EXPECT_EQ(surfaceFrame->getPredictionState(), PredictionState::Valid);
EXPECT_EQ(compareTimelineItems(surfaceFrame->getPredictions(), TimelineItem(10, 20, 30)), true);
@@ -239,7 +240,7 @@
auto surfaceFrame =
mFrameTimeline->createSurfaceFrameForToken({token1, inputEventId}, sPidOne, sUidOne,
sLayerIdOne, sLayerNameOne, sLayerNameOne,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, sGameMode);
EXPECT_EQ(inputEventId, surfaceFrame->getInputEventId());
}
@@ -250,7 +251,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken({token1, sInputEventId}, sPidOne, sUidOne,
sLayerIdOne, sLayerNameOne, sLayerNameOne,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, sGameMode);
// Set up the display frame
mFrameTimeline->setSfWakeUp(token1, 20, Fps::fromPeriodNsecs(11));
@@ -278,11 +279,11 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken1, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
auto surfaceFrame2 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken1, sInputEventId}, sPidOne,
sUidOne, sLayerIdTwo, sLayerNameTwo,
- sLayerNameTwo, /*isBuffer*/ true);
+ sLayerNameTwo, /*isBuffer*/ true, sGameMode);
mFrameTimeline->setSfWakeUp(sfToken1, 22, Fps::fromPeriodNsecs(11));
surfaceFrame1->setPresentState(SurfaceFrame::PresentState::Presented);
mFrameTimeline->addSurfaceFrame(surfaceFrame1);
@@ -325,7 +326,7 @@
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken, sInputEventId},
sPidOne, sUidOne, sLayerIdOne,
sLayerNameOne, sLayerNameOne,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, sGameMode);
mFrameTimeline->setSfWakeUp(sfToken, 22 + frameTimeFactor, Fps::fromPeriodNsecs(11));
surfaceFrame->setPresentState(SurfaceFrame::PresentState::Presented);
mFrameTimeline->addSurfaceFrame(surfaceFrame);
@@ -347,7 +348,7 @@
auto surfaceFrame =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
mFrameTimeline->setSfWakeUp(sfToken, 22 + frameTimeFactor, Fps::fromPeriodNsecs(11));
surfaceFrame->setPresentState(SurfaceFrame::PresentState::Presented);
mFrameTimeline->addSurfaceFrame(surfaceFrame);
@@ -361,20 +362,20 @@
}
TEST_F(FrameTimelineTest, surfaceFrameEndTimeAcquireFenceAfterQueue) {
- auto surfaceFrame =
- mFrameTimeline->createSurfaceFrameForToken({}, sPidOne, 0, sLayerIdOne,
- "acquireFenceAfterQueue",
- "acquireFenceAfterQueue", /*isBuffer*/ true);
+ auto surfaceFrame = mFrameTimeline->createSurfaceFrameForToken({}, sPidOne, 0, sLayerIdOne,
+ "acquireFenceAfterQueue",
+ "acquireFenceAfterQueue",
+ /*isBuffer*/ true, sGameMode);
surfaceFrame->setActualQueueTime(123);
surfaceFrame->setAcquireFenceTime(456);
EXPECT_EQ(surfaceFrame->getActuals().endTime, 456);
}
TEST_F(FrameTimelineTest, surfaceFrameEndTimeAcquireFenceBeforeQueue) {
- auto surfaceFrame =
- mFrameTimeline->createSurfaceFrameForToken({}, sPidOne, 0, sLayerIdOne,
- "acquireFenceAfterQueue",
- "acquireFenceAfterQueue", /*isBuffer*/ true);
+ auto surfaceFrame = mFrameTimeline->createSurfaceFrameForToken({}, sPidOne, 0, sLayerIdOne,
+ "acquireFenceAfterQueue",
+ "acquireFenceAfterQueue",
+ /*isBuffer*/ true, sGameMode);
surfaceFrame->setActualQueueTime(456);
surfaceFrame->setAcquireFenceTime(123);
EXPECT_EQ(surfaceFrame->getActuals().endTime, 456);
@@ -389,7 +390,7 @@
auto surfaceFrame =
mFrameTimeline->createSurfaceFrameForToken({}, sPidOne, sUidOne, sLayerIdOne,
sLayerNameOne, sLayerNameOne,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, sGameMode);
int64_t sfToken = mTokenManager->generateTokenForPredictions({22, 26, 30});
mFrameTimeline->setSfWakeUp(sfToken, 22, Fps::fromPeriodNsecs(11));
surfaceFrame->setPresentState(SurfaceFrame::PresentState::Presented);
@@ -406,7 +407,7 @@
auto surfaceFrame =
mFrameTimeline->createSurfaceFrameForToken({}, sPidOne, sUidOne, sLayerIdOne,
sLayerNameOne, sLayerNameOne,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, sGameMode);
int64_t sfToken = mTokenManager->generateTokenForPredictions({22, 26, 30});
mFrameTimeline->setSfWakeUp(sfToken, 22, Fps::fromPeriodNsecs(11));
surfaceFrame->setPresentState(SurfaceFrame::PresentState::Presented);
@@ -423,7 +424,7 @@
auto surfaceFrame =
mFrameTimeline->createSurfaceFrameForToken({}, sPidOne, sUidOne, sLayerIdOne,
sLayerNameOne, sLayerNameOne,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, sGameMode);
int64_t sfToken = mTokenManager->generateTokenForPredictions({22, 26, 30});
mFrameTimeline->setSfWakeUp(sfToken, 22, Fps::fromPeriodNsecs(11));
surfaceFrame->setPresentState(SurfaceFrame::PresentState::Presented);
@@ -443,7 +444,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken1, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
mFrameTimeline->setSfWakeUp(sfToken1, 52, refreshRate);
surfaceFrame1->setAcquireFenceTime(20);
surfaceFrame1->setPresentState(SurfaceFrame::PresentState::Presented);
@@ -471,7 +472,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken1, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
mFrameTimeline->setSfWakeUp(sfToken1, 52, refreshRate);
surfaceFrame1->setAcquireFenceTime(20);
surfaceFrame1->setPresentState(SurfaceFrame::PresentState::Presented);
@@ -486,7 +487,7 @@
EXPECT_CALL(*mTimeStats,
incrementJankyFrames(
TimeStats::JankyFramesInfo{refreshRate, std::nullopt, sUidOne,
- sLayerNameOne,
+ sLayerNameOne, sGameMode,
JankType::SurfaceFlingerCpuDeadlineMissed, 2, 10,
0}));
auto presentFence1 = fenceFactory.createFenceTimeForTest(Fence::NO_FENCE);
@@ -496,7 +497,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken1, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
mFrameTimeline->setSfWakeUp(sfToken1, 52, refreshRate);
surfaceFrame1->setAcquireFenceTime(20);
surfaceFrame1->setPresentState(SurfaceFrame::PresentState::Presented);
@@ -511,7 +512,7 @@
EXPECT_CALL(*mTimeStats,
incrementJankyFrames(
TimeStats::JankyFramesInfo{refreshRate, std::nullopt, sUidOne,
- sLayerNameOne,
+ sLayerNameOne, sGameMode,
JankType::SurfaceFlingerGpuDeadlineMissed, 4, 10,
0}));
auto presentFence1 = fenceFactory.createFenceTimeForTest(Fence::NO_FENCE);
@@ -522,7 +523,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken1, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
mFrameTimeline->setSfWakeUp(sfToken1, 52, refreshRate);
surfaceFrame1->setAcquireFenceTime(20);
surfaceFrame1->setPresentState(SurfaceFrame::PresentState::Presented);
@@ -537,8 +538,8 @@
Fps refreshRate = Fps::fromPeriodNsecs(30);
EXPECT_CALL(*mTimeStats,
incrementJankyFrames(TimeStats::JankyFramesInfo{refreshRate, std::nullopt, sUidOne,
- sLayerNameOne, JankType::DisplayHAL,
- -4, 0, 0}));
+ sLayerNameOne, sGameMode,
+ JankType::DisplayHAL, -4, 0, 0}));
auto presentFence1 = fenceFactory.createFenceTimeForTest(Fence::NO_FENCE);
int64_t surfaceFrameToken1 = mTokenManager->generateTokenForPredictions({10, 20, 60});
@@ -547,7 +548,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken1, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
mFrameTimeline->setSfWakeUp(sfToken1, 52, refreshRate);
surfaceFrame1->setPresentState(SurfaceFrame::PresentState::Presented);
surfaceFrame1->setAcquireFenceTime(20);
@@ -561,7 +562,7 @@
Fps refreshRate = Fps(11.0);
EXPECT_CALL(*mTimeStats,
incrementJankyFrames(TimeStats::JankyFramesInfo{refreshRate, std::nullopt, sUidOne,
- sLayerNameOne,
+ sLayerNameOne, sGameMode,
JankType::AppDeadlineMissed, -4, 0,
25}));
auto presentFence1 = fenceFactory.createFenceTimeForTest(Fence::NO_FENCE);
@@ -571,7 +572,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken1, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
surfaceFrame1->setAcquireFenceTime(45);
mFrameTimeline->setSfWakeUp(sfToken1, 52, refreshRate);
@@ -587,7 +588,7 @@
Fps refreshRate = Fps::fromPeriodNsecs(32);
EXPECT_CALL(*mTimeStats,
incrementJankyFrames(TimeStats::JankyFramesInfo{refreshRate, std::nullopt, sUidOne,
- sLayerNameOne,
+ sLayerNameOne, sGameMode,
JankType::SurfaceFlingerScheduling,
-4, 0, -10}));
auto presentFence1 = fenceFactory.createFenceTimeForTest(Fence::NO_FENCE);
@@ -597,7 +598,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken1, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
surfaceFrame1->setAcquireFenceTime(50);
mFrameTimeline->setSfWakeUp(sfToken1, 52, refreshRate);
@@ -613,7 +614,7 @@
Fps refreshRate = Fps::fromPeriodNsecs(16);
EXPECT_CALL(*mTimeStats,
incrementJankyFrames(TimeStats::JankyFramesInfo{refreshRate, std::nullopt, sUidOne,
- sLayerNameOne,
+ sLayerNameOne, sGameMode,
JankType::PredictionError, -4, 5,
0}));
auto presentFence1 = fenceFactory.createFenceTimeForTest(Fence::NO_FENCE);
@@ -623,7 +624,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken1, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
surfaceFrame1->setAcquireFenceTime(40);
mFrameTimeline->setSfWakeUp(sfToken1, 52, refreshRate);
@@ -639,7 +640,7 @@
Fps refreshRate = Fps::fromPeriodNsecs(32);
EXPECT_CALL(*mTimeStats,
incrementJankyFrames(TimeStats::JankyFramesInfo{refreshRate, std::nullopt, sUidOne,
- sLayerNameOne,
+ sLayerNameOne, sGameMode,
JankType::BufferStuffing, -4, 0,
0}));
auto presentFence1 = fenceFactory.createFenceTimeForTest(Fence::NO_FENCE);
@@ -649,7 +650,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken1, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
surfaceFrame1->setAcquireFenceTime(40);
mFrameTimeline->setSfWakeUp(sfToken1, 82, refreshRate);
@@ -666,9 +667,10 @@
Fps refreshRate = Fps::fromPeriodNsecs(11);
Fps renderRate = Fps::fromPeriodNsecs(30);
EXPECT_CALL(*mTimeStats,
- incrementJankyFrames(
- TimeStats::JankyFramesInfo{refreshRate, renderRate, sUidOne, sLayerNameOne,
- JankType::AppDeadlineMissed, -4, 0, 25}));
+ incrementJankyFrames(TimeStats::JankyFramesInfo{refreshRate, renderRate, sUidOne,
+ sLayerNameOne, sGameMode,
+ JankType::AppDeadlineMissed, -4, 0,
+ 25}));
auto presentFence1 = fenceFactory.createFenceTimeForTest(Fence::NO_FENCE);
int64_t surfaceFrameToken1 = mTokenManager->generateTokenForPredictions({10, 20, 60});
int64_t sfToken1 = mTokenManager->generateTokenForPredictions({82, 90, 90});
@@ -676,7 +678,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken1, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
surfaceFrame1->setAcquireFenceTime(45);
mFrameTimeline->setSfWakeUp(sfToken1, 52, refreshRate);
@@ -696,6 +698,7 @@
EXPECT_CALL(*mTimeStats,
incrementJankyFrames(
TimeStats::JankyFramesInfo{refreshRate, renderRate, sUidOne, sLayerNameOne,
+ sGameMode,
JankType::Unknown | JankType::AppDeadlineMissed,
0, 0, 25}));
auto presentFence1 = fenceFactory.createFenceTimeForTest(Fence::NO_FENCE);
@@ -705,7 +708,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken1, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
surfaceFrame1->setAcquireFenceTime(45);
// Trigger a prediction expiry
flushTokens();
@@ -742,7 +745,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken({token1, sInputEventId}, sPidOne, sUidOne,
sLayerIdOne, sLayerNameOne, sLayerNameOne,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, sGameMode);
// Set up the display frame
mFrameTimeline->setSfWakeUp(token1, 20, Fps::fromPeriodNsecs(11));
@@ -769,7 +772,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken({token1, sInputEventId}, sPidOne, sUidOne,
sLayerIdOne, sLayerNameOne, sLayerNameOne,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, sGameMode);
// Set up the display frame
mFrameTimeline->setSfWakeUp(token2, 20, Fps::fromPeriodNsecs(11));
@@ -815,7 +818,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken({}, sPidOne, sUidOne, sLayerIdOne,
sLayerNameOne, sLayerNameOne,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, sGameMode);
// Set up the display frame
mFrameTimeline->setSfWakeUp(token1, 20, Fps::fromPeriodNsecs(11));
@@ -874,7 +877,7 @@
ProtoActualSurfaceFrameStart createProtoActualSurfaceFrameStart(
int64_t cookie, int64_t token, int64_t displayFrameToken, pid_t pid, std::string layerName,
ProtoPresentType presentType, bool onTimeFinish, bool gpuComposition,
- ProtoJankType jankType, ProtoPredictionType predictionType) {
+ ProtoJankType jankType, ProtoPredictionType predictionType, bool isBuffer) {
ProtoActualSurfaceFrameStart proto;
proto.set_cookie(cookie);
proto.set_token(token);
@@ -886,6 +889,7 @@
proto.set_gpu_composition(gpuComposition);
proto.set_jank_type(jankType);
proto.set_prediction_type(predictionType);
+ proto.set_is_buffer(isBuffer);
return proto;
}
@@ -975,6 +979,8 @@
EXPECT_EQ(received.jank_type(), source.jank_type());
ASSERT_TRUE(received.has_prediction_type());
EXPECT_EQ(received.prediction_type(), source.prediction_type());
+ ASSERT_TRUE(received.has_is_buffer());
+ EXPECT_EQ(received.is_buffer(), source.is_buffer());
}
void validateTraceEvent(const ProtoFrameEnd& received, const ProtoFrameEnd& source) {
@@ -1128,11 +1134,11 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
auto surfaceFrame2 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
surfaceFrame1->setActualQueueTime(10);
surfaceFrame1->setDropTime(15);
@@ -1151,7 +1157,7 @@
displayFrameToken1, sPidOne, sLayerNameOne,
FrameTimelineEvent::PRESENT_DROPPED, false, false,
FrameTimelineEvent::JANK_NONE,
- FrameTimelineEvent::PREDICTION_VALID);
+ FrameTimelineEvent::PREDICTION_VALID, true);
auto protoDroppedSurfaceFrameActualEnd = createProtoFrameEnd(traceCookie + 2);
auto protoPresentedSurfaceFrameExpectedStart =
@@ -1163,7 +1169,7 @@
displayFrameToken1, sPidOne, sLayerNameOne,
FrameTimelineEvent::PRESENT_ON_TIME, true, false,
FrameTimelineEvent::JANK_NONE,
- FrameTimelineEvent::PREDICTION_VALID);
+ FrameTimelineEvent::PREDICTION_VALID, true);
auto protoPresentedSurfaceFrameActualEnd = createProtoFrameEnd(traceCookie + 4);
// Set up the display frame
@@ -1288,7 +1294,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken, /*inputEventId*/ 0},
sPidOne, sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
surfaceFrame1->setActualQueueTime(appEndTime);
surfaceFrame1->setAcquireFenceTime(appEndTime);
@@ -1306,7 +1312,7 @@
displayFrameToken, sPidOne, sLayerNameOne,
FrameTimelineEvent::PRESENT_UNSPECIFIED, false,
false, FrameTimelineEvent::JANK_UNKNOWN,
- FrameTimelineEvent::PREDICTION_EXPIRED);
+ FrameTimelineEvent::PREDICTION_EXPIRED, true);
auto protoActualSurfaceFrameEnd = createProtoFrameEnd(traceCookie + 1);
// Set up the display frame
@@ -1364,7 +1370,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken, /*inputEventId*/ 0},
sPidOne, sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
constexpr nsecs_t sfStartTime = std::chrono::nanoseconds(22ms).count();
constexpr nsecs_t sfEndTime = std::chrono::nanoseconds(30ms).count();
@@ -1380,7 +1386,7 @@
displayFrameToken, sPidOne, sLayerNameOne,
FrameTimelineEvent::PRESENT_DROPPED, false, false,
FrameTimelineEvent::JANK_NONE,
- FrameTimelineEvent::PREDICTION_EXPIRED);
+ FrameTimelineEvent::PREDICTION_EXPIRED, true);
auto protoActualSurfaceFrameEnd = createProtoFrameEnd(traceCookie + 1);
// Set up the display frame
@@ -1433,7 +1439,7 @@
auto surfaceFrame =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
mFrameTimeline->setSfWakeUp(sfToken1, 22, Fps::fromPeriodNsecs(11));
surfaceFrame->setPresentState(SurfaceFrame::PresentState::Presented);
mFrameTimeline->addSurfaceFrame(surfaceFrame);
@@ -1649,7 +1655,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken1, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
surfaceFrame1->setAcquireFenceTime(16);
mFrameTimeline->setSfWakeUp(sfToken1, 22, Fps::fromPeriodNsecs(11));
surfaceFrame1->setPresentState(SurfaceFrame::PresentState::Presented);
@@ -1669,7 +1675,7 @@
auto surfaceFrame2 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken2, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
surfaceFrame2->setAcquireFenceTime(36);
mFrameTimeline->setSfWakeUp(sfToken2, 52, Fps::fromPeriodNsecs(11));
surfaceFrame2->setPresentState(SurfaceFrame::PresentState::Presented);
@@ -1701,8 +1707,8 @@
EXPECT_CALL(*mTimeStats,
incrementJankyFrames(
TimeStats::JankyFramesInfo{Fps::fromPeriodNsecs(11), std::nullopt, sUidOne,
- sLayerNameOne, JankType::PredictionError, -3, 5,
- 0}));
+ sLayerNameOne, sGameMode,
+ JankType::PredictionError, -3, 5, 0}));
addEmptyDisplayFrame();
@@ -1729,7 +1735,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken1, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
surfaceFrame1->setAcquireFenceTime(16);
mFrameTimeline->setSfWakeUp(sfToken1, 22, Fps::fromPeriodNsecs(11));
surfaceFrame1->setPresentState(SurfaceFrame::PresentState::Presented);
@@ -1749,7 +1755,7 @@
auto surfaceFrame2 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken2, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
surfaceFrame2->setAcquireFenceTime(36);
mFrameTimeline->setSfWakeUp(sfToken2, 52, Fps::fromPeriodNsecs(11));
surfaceFrame2->setPresentState(SurfaceFrame::PresentState::Presented);
@@ -1781,8 +1787,8 @@
EXPECT_CALL(*mTimeStats,
incrementJankyFrames(
TimeStats::JankyFramesInfo{Fps::fromPeriodNsecs(11), std::nullopt, sUidOne,
- sLayerNameOne, JankType::PredictionError, -3, 5,
- 0}));
+ sLayerNameOne, sGameMode,
+ JankType::PredictionError, -3, 5, 0}));
addEmptyDisplayFrame();
@@ -1808,7 +1814,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken1, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
surfaceFrame1->setAcquireFenceTime(40);
mFrameTimeline->setSfWakeUp(sfToken1, 42, Fps::fromPeriodNsecs(11));
surfaceFrame1->setPresentState(SurfaceFrame::PresentState::Presented);
@@ -1852,7 +1858,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken1, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
surfaceFrame1->setAcquireFenceTime(26);
mFrameTimeline->setSfWakeUp(sfToken1, 32, Fps::fromPeriodNsecs(11));
surfaceFrame1->setPresentState(SurfaceFrame::PresentState::Presented);
@@ -1872,7 +1878,7 @@
auto surfaceFrame2 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken2, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
surfaceFrame2->setAcquireFenceTime(40);
mFrameTimeline->setSfWakeUp(sfToken2, 43, Fps::fromPeriodNsecs(11));
surfaceFrame2->setPresentState(SurfaceFrame::PresentState::Presented);
@@ -1927,7 +1933,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken1, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
surfaceFrame1->setAcquireFenceTime(50);
mFrameTimeline->setSfWakeUp(sfToken1, 52, Fps::fromPeriodNsecs(30));
surfaceFrame1->setPresentState(SurfaceFrame::PresentState::Presented);
@@ -1947,7 +1953,7 @@
auto surfaceFrame2 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken2, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
surfaceFrame2->setAcquireFenceTime(84);
mFrameTimeline->setSfWakeUp(sfToken2, 112, Fps::fromPeriodNsecs(30));
surfaceFrame2->setPresentState(SurfaceFrame::PresentState::Presented, 54);
@@ -2005,7 +2011,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken1, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
surfaceFrame1->setAcquireFenceTime(50);
mFrameTimeline->setSfWakeUp(sfToken1, 52, Fps::fromPeriodNsecs(30));
surfaceFrame1->setPresentState(SurfaceFrame::PresentState::Presented);
@@ -2025,7 +2031,7 @@
auto surfaceFrame2 =
mFrameTimeline->createSurfaceFrameForToken({surfaceFrameToken2, sInputEventId}, sPidOne,
sUidOne, sLayerIdOne, sLayerNameOne,
- sLayerNameOne, /*isBuffer*/ true);
+ sLayerNameOne, /*isBuffer*/ true, sGameMode);
surfaceFrame2->setAcquireFenceTime(80);
mFrameTimeline->setSfWakeUp(sfToken2, 82, Fps::fromPeriodNsecs(30));
// Setting previous latch time to 54, adjusted deadline will be 54 + vsyncTime(30) = 84
@@ -2081,7 +2087,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken(FrameTimelineInfo(), sPidOne, sUidOne,
sLayerIdOne, sLayerNameOne, sLayerNameOne,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, sGameMode);
auto presentFence1 = fenceFactory.createFenceTimeForTest(Fence::NO_FENCE);
surfaceFrame1->setPresentState(SurfaceFrame::PresentState::Presented);
mFrameTimeline->addSurfaceFrame(surfaceFrame1);
@@ -2097,7 +2103,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken(FrameTimelineInfo(), sPidOne, sUidOne,
sLayerIdOne, sLayerNameOne, sLayerNameOne,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, sGameMode);
auto presentFence1 = fenceFactory.createFenceTimeForTest(Fence::NO_FENCE);
surfaceFrame1->setPresentState(SurfaceFrame::PresentState::Presented);
mFrameTimeline->addSurfaceFrame(surfaceFrame1);
@@ -2107,7 +2113,7 @@
auto surfaceFrame2 =
mFrameTimeline->createSurfaceFrameForToken(FrameTimelineInfo(), sPidOne, sUidOne,
sLayerIdOne, sLayerNameOne, sLayerNameOne,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, sGameMode);
auto presentFence2 = fenceFactory.createFenceTimeForTest(Fence::NO_FENCE);
surfaceFrame2->setPresentState(SurfaceFrame::PresentState::Presented);
mFrameTimeline->addSurfaceFrame(surfaceFrame2);
@@ -2123,7 +2129,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken(FrameTimelineInfo(), sPidOne, sUidOne,
sLayerIdOne, sLayerNameOne, sLayerNameOne,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, sGameMode);
auto presentFence1 = fenceFactory.createFenceTimeForTest(Fence::NO_FENCE);
surfaceFrame1->setPresentState(SurfaceFrame::PresentState::Presented);
mFrameTimeline->addSurfaceFrame(surfaceFrame1);
@@ -2133,7 +2139,7 @@
auto surfaceFrame2 =
mFrameTimeline->createSurfaceFrameForToken(FrameTimelineInfo(), sPidOne, sUidOne,
sLayerIdTwo, sLayerNameTwo, sLayerNameTwo,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, sGameMode);
auto presentFence2 = fenceFactory.createFenceTimeForTest(Fence::NO_FENCE);
surfaceFrame2->setPresentState(SurfaceFrame::PresentState::Presented);
mFrameTimeline->addSurfaceFrame(surfaceFrame2);
@@ -2149,7 +2155,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken(FrameTimelineInfo(), sPidOne, sUidOne,
sLayerIdOne, sLayerNameOne, sLayerNameOne,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, sGameMode);
auto presentFence1 = fenceFactory.createFenceTimeForTest(Fence::NO_FENCE);
surfaceFrame1->setPresentState(SurfaceFrame::PresentState::Presented);
mFrameTimeline->addSurfaceFrame(surfaceFrame1);
@@ -2159,7 +2165,7 @@
auto surfaceFrame2 =
mFrameTimeline->createSurfaceFrameForToken(FrameTimelineInfo(), sPidOne, sUidOne,
sLayerIdTwo, sLayerNameTwo, sLayerNameTwo,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, sGameMode);
auto presentFence2 = fenceFactory.createFenceTimeForTest(Fence::NO_FENCE);
surfaceFrame2->setPresentState(SurfaceFrame::PresentState::Presented);
mFrameTimeline->addSurfaceFrame(surfaceFrame2);
@@ -2178,7 +2184,7 @@
auto surfaceFrame1 =
mFrameTimeline->createSurfaceFrameForToken(FrameTimelineInfo(), sPidOne, sUidOne,
sLayerIdOne, sLayerNameOne, sLayerNameOne,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, sGameMode);
auto presentFence1 = fenceFactory.createFenceTimeForTest(Fence::NO_FENCE);
surfaceFrame1->setPresentState(SurfaceFrame::PresentState::Presented);
mFrameTimeline->addSurfaceFrame(surfaceFrame1);
@@ -2188,7 +2194,7 @@
auto surfaceFrame2 =
mFrameTimeline->createSurfaceFrameForToken(FrameTimelineInfo(), sPidOne, sUidOne,
sLayerIdOne, sLayerNameOne, sLayerNameOne,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, sGameMode);
auto presentFence2 = fenceFactory.createFenceTimeForTest(Fence::NO_FENCE);
surfaceFrame2->setPresentState(SurfaceFrame::PresentState::Presented);
mFrameTimeline->addSurfaceFrame(surfaceFrame2);
@@ -2198,7 +2204,7 @@
auto surfaceFrame3 =
mFrameTimeline->createSurfaceFrameForToken(FrameTimelineInfo(), sPidOne, sUidOne,
sLayerIdTwo, sLayerNameTwo, sLayerNameTwo,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, sGameMode);
auto presentFence3 = fenceFactory.createFenceTimeForTest(Fence::NO_FENCE);
surfaceFrame3->setPresentState(SurfaceFrame::PresentState::Presented);
mFrameTimeline->addSurfaceFrame(surfaceFrame3);
@@ -2208,7 +2214,7 @@
auto surfaceFrame4 =
mFrameTimeline->createSurfaceFrameForToken(FrameTimelineInfo(), sPidOne, sUidOne,
sLayerIdOne, sLayerNameOne, sLayerNameOne,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, sGameMode);
auto presentFence4 = fenceFactory.createFenceTimeForTest(Fence::NO_FENCE);
surfaceFrame4->setPresentState(SurfaceFrame::PresentState::Presented);
mFrameTimeline->addSurfaceFrame(surfaceFrame4);
@@ -2218,7 +2224,7 @@
auto surfaceFrame5 =
mFrameTimeline->createSurfaceFrameForToken(FrameTimelineInfo(), sPidOne, sUidOne,
sLayerIdOne, sLayerNameOne, sLayerNameOne,
- /*isBuffer*/ true);
+ /*isBuffer*/ true, sGameMode);
auto presentFence5 = fenceFactory.createFenceTimeForTest(Fence::NO_FENCE);
// Dropped frames will be excluded from fps computation
surfaceFrame5->setPresentState(SurfaceFrame::PresentState::Dropped);
diff --git a/services/surfaceflinger/tests/unittests/RefreshRateConfigsTest.cpp b/services/surfaceflinger/tests/unittests/RefreshRateConfigsTest.cpp
index 7ace70a..d4b229f 100644
--- a/services/surfaceflinger/tests/unittests/RefreshRateConfigsTest.cpp
+++ b/services/surfaceflinger/tests/unittests/RefreshRateConfigsTest.cpp
@@ -45,9 +45,16 @@
class RefreshRateConfigsTest : public testing::Test {
protected:
+ using GetBestRefreshRateInvocation = RefreshRateConfigs::GetBestRefreshRateInvocation;
+
RefreshRateConfigsTest();
~RefreshRateConfigsTest();
+ RefreshRate createRefreshRate(DisplayModePtr displayMode) {
+ return {displayMode->getId(), displayMode, displayMode->getFps(),
+ RefreshRate::ConstructorTag(0)};
+ }
+
Fps findClosestKnownFrameRate(const RefreshRateConfigs& refreshRateConfigs, Fps frameRate) {
return refreshRateConfigs.findClosestKnownFrameRate(frameRate);
}
@@ -71,6 +78,19 @@
return *refreshRateConfigs.mMaxSupportedRefreshRate;
}
+ void setLastBestRefreshRateInvocation(RefreshRateConfigs& refreshRateConfigs,
+ const GetBestRefreshRateInvocation& invocation) {
+ std::lock_guard lock(refreshRateConfigs.mLock);
+ refreshRateConfigs.lastBestRefreshRateInvocation.emplace(
+ GetBestRefreshRateInvocation(invocation));
+ }
+
+ std::optional<GetBestRefreshRateInvocation> getLastBestRefreshRateInvocation(
+ const RefreshRateConfigs& refreshRateConfigs) {
+ std::lock_guard lock(refreshRateConfigs.mLock);
+ return refreshRateConfigs.lastBestRefreshRateInvocation;
+ }
+
// Test config IDs
static inline const DisplayModeId HWC_CONFIG_ID_60 = DisplayModeId(0);
static inline const DisplayModeId HWC_CONFIG_ID_90 = DisplayModeId(1);
@@ -124,6 +144,7 @@
mConfig30DifferentGroup,
mConfig25DifferentGroup,
mConfig50};
+ DisplayModes m60_120Device = {mConfig60, mConfig120};
// Expected RefreshRate objects
RefreshRate mExpected60Config = {HWC_CONFIG_ID_60, mConfig60, Fps(60),
@@ -1752,6 +1773,110 @@
refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false}));
}
+TEST_F(RefreshRateConfigsTest, getBestRefreshRate_ReadsCached) {
+ using GlobalSignals = RefreshRateConfigs::GlobalSignals;
+
+ auto refreshRateConfigs =
+ std::make_unique<RefreshRateConfigs>(m30_60_72_90_120Device,
+ /*currentConfigId=*/HWC_CONFIG_ID_60);
+
+ setLastBestRefreshRateInvocation(*refreshRateConfigs,
+ GetBestRefreshRateInvocation{.layerRequirements = std::vector<
+ LayerRequirement>(),
+ .globalSignals = {.touch = true,
+ .idle = true},
+ .outSignalsConsidered =
+ {.touch = true,
+ .idle = false},
+ .resultingBestRefreshRate =
+ createRefreshRate(
+ mConfig90)});
+
+ EXPECT_EQ(createRefreshRate(mConfig90),
+ refreshRateConfigs->getBestRefreshRate(std::vector<LayerRequirement>(),
+ {.touch = true, .idle = true}));
+
+ const GlobalSignals cachedSignalsConsidered{.touch = true, .idle = false};
+ setLastBestRefreshRateInvocation(*refreshRateConfigs,
+ GetBestRefreshRateInvocation{.layerRequirements = std::vector<
+ LayerRequirement>(),
+ .globalSignals = {.touch = true,
+ .idle = true},
+ .outSignalsConsidered =
+ cachedSignalsConsidered,
+ .resultingBestRefreshRate =
+ createRefreshRate(
+ mConfig30)});
+
+ GlobalSignals signalsConsidered;
+ EXPECT_EQ(createRefreshRate(mConfig30),
+ refreshRateConfigs->getBestRefreshRate(std::vector<LayerRequirement>(),
+ {.touch = true, .idle = true},
+ &signalsConsidered));
+
+ EXPECT_EQ(cachedSignalsConsidered, signalsConsidered);
+}
+
+TEST_F(RefreshRateConfigsTest, getBestRefreshRate_WritesCache) {
+ using GlobalSignals = RefreshRateConfigs::GlobalSignals;
+
+ auto refreshRateConfigs =
+ std::make_unique<RefreshRateConfigs>(m30_60_72_90_120Device,
+ /*currentConfigId=*/HWC_CONFIG_ID_60);
+ ASSERT_FALSE(getLastBestRefreshRateInvocation(*refreshRateConfigs).has_value());
+
+ GlobalSignals globalSignals{.touch = true, .idle = true};
+ auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
+ LayerRequirement{.weight = 0.5f}};
+ const auto lastResult =
+ refreshRateConfigs->getBestRefreshRate(layers, globalSignals,
+ /* outSignalsConsidered */ nullptr);
+
+ const auto lastInvocation = getLastBestRefreshRateInvocation(*refreshRateConfigs);
+
+ ASSERT_TRUE(lastInvocation.has_value());
+ ASSERT_EQ(layers, lastInvocation->layerRequirements);
+ ASSERT_EQ(globalSignals, lastInvocation->globalSignals);
+ ASSERT_EQ(lastResult, lastInvocation->resultingBestRefreshRate);
+
+ // outSignalsConsidered needs to be populated even tho earlier we gave nullptr
+ // to getBestRefreshRate()
+ GlobalSignals detaultSignals;
+ ASSERT_FALSE(detaultSignals == lastInvocation->outSignalsConsidered);
+}
+
+TEST_F(RefreshRateConfigsTest, getBestRefreshRate_ExplicitExactTouchBoost) {
+ auto refreshRateConfigs =
+ std::make_unique<RefreshRateConfigs>(m60_120Device,
+ /*currentConfigId=*/HWC_CONFIG_ID_60,
+ /*enableFrameRateOverride=*/true);
+
+ auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f},
+ LayerRequirement{.weight = 0.5f}};
+ auto& explicitExactLayer = layers[0];
+ auto& explicitExactOrMultipleLayer = layers[1];
+
+ explicitExactOrMultipleLayer.vote = LayerVoteType::ExplicitExactOrMultiple;
+ explicitExactOrMultipleLayer.name = "ExplicitExactOrMultiple";
+ explicitExactOrMultipleLayer.desiredRefreshRate = Fps(60);
+
+ explicitExactLayer.vote = LayerVoteType::ExplicitExact;
+ explicitExactLayer.name = "ExplicitExact";
+ explicitExactLayer.desiredRefreshRate = Fps(30);
+
+ EXPECT_EQ(mExpected60Config,
+ refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false}));
+ EXPECT_EQ(mExpected120Config,
+ refreshRateConfigs->getBestRefreshRate(layers, {.touch = true, .idle = false}));
+
+ explicitExactOrMultipleLayer.vote = LayerVoteType::NoVote;
+
+ EXPECT_EQ(mExpected60Config,
+ refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false}));
+ EXPECT_EQ(mExpected60Config,
+ refreshRateConfigs->getBestRefreshRate(layers, {.touch = true, .idle = false}));
+}
+
TEST_F(RefreshRateConfigsTest, testComparisonOperator) {
EXPECT_TRUE(mExpected60Config < mExpected90Config);
EXPECT_FALSE(mExpected60Config < mExpected60Config);
@@ -1772,10 +1897,10 @@
0);
EXPECT_EQ(KernelIdleTimerAction::TurnOn, refreshRateConfigs->getIdleTimerAction());
- // SetPolicy(60, 60), current 60Hz => NoChange, avoid extra calls.
+ // SetPolicy(60, 60), current 60Hz => TurnOff
ASSERT_GE(refreshRateConfigs->setDisplayManagerPolicy({HWC_CONFIG_ID_60, {Fps(60), Fps(60)}}),
0);
- EXPECT_EQ(KernelIdleTimerAction::NoChange, refreshRateConfigs->getIdleTimerAction());
+ EXPECT_EQ(KernelIdleTimerAction::TurnOff, refreshRateConfigs->getIdleTimerAction());
// SetPolicy(90, 90), current 90Hz => TurnOff.
ASSERT_GE(refreshRateConfigs->setDisplayManagerPolicy({HWC_CONFIG_ID_90, {Fps(90), Fps(90)}}),
diff --git a/services/surfaceflinger/tests/unittests/RefreshRateSelectionTest.cpp b/services/surfaceflinger/tests/unittests/RefreshRateSelectionTest.cpp
index fd3e564..35033ea 100644
--- a/services/surfaceflinger/tests/unittests/RefreshRateSelectionTest.cpp
+++ b/services/surfaceflinger/tests/unittests/RefreshRateSelectionTest.cpp
@@ -116,7 +116,7 @@
}
void RefreshRateSelectionTest::commitTransaction(Layer* layer) {
- auto c = layer->getCurrentState();
+ auto c = layer->getDrawingState();
layer->commitTransaction(c);
}
diff --git a/services/surfaceflinger/tests/unittests/SchedulerTest.cpp b/services/surfaceflinger/tests/unittests/SchedulerTest.cpp
index 38e503f..f680d80 100644
--- a/services/surfaceflinger/tests/unittests/SchedulerTest.cpp
+++ b/services/surfaceflinger/tests/unittests/SchedulerTest.cpp
@@ -51,9 +51,18 @@
SchedulerTest();
- const scheduler::RefreshRateConfigs
- mConfigs{{DisplayMode::Builder(0).setVsyncPeriod(16'666'667).setGroup(0).build()},
- DisplayModeId(0)};
+ const DisplayModePtr mode60 = DisplayMode::Builder(0)
+ .setId(DisplayModeId(0))
+ .setVsyncPeriod(Fps(60.f).getPeriodNsecs())
+ .setGroup(0)
+ .build();
+ const DisplayModePtr mode120 = DisplayMode::Builder(1)
+ .setId(DisplayModeId(1))
+ .setVsyncPeriod(Fps(120.f).getPeriodNsecs())
+ .setGroup(0)
+ .build();
+
+ scheduler::RefreshRateConfigs mConfigs{{mode60}, mode60->getId()};
mock::SchedulerCallback mSchedulerCallback;
@@ -149,15 +158,14 @@
EXPECT_EQ(kEventConnections, mScheduler->getEventThreadConnectionCount(mConnectionHandle));
}
-TEST_F(SchedulerTest, noLayerHistory) {
- // Layer history should not be created if there is a single config.
- ASSERT_FALSE(mScheduler->hasLayerHistory());
-
+TEST_F(SchedulerTest, chooseRefreshRateForContentIsNoopWhenModeSwitchingIsNotSupported) {
+ // The layer is registered at creation time and deregistered at destruction time.
sp<mock::MockLayer> layer = sp<mock::MockLayer>::make(mFlinger.flinger());
- // Content detection should be no-op.
- mScheduler->registerLayer(layer.get());
+ // recordLayerHistory should be a noop
+ ASSERT_EQ(static_cast<size_t>(0), mScheduler->getNumActiveLayers());
mScheduler->recordLayerHistory(layer.get(), 0, LayerHistory::LayerUpdateType::Buffer);
+ ASSERT_EQ(static_cast<size_t>(0), mScheduler->getNumActiveLayers());
constexpr bool kPowerStateNormal = true;
mScheduler->setDisplayPowerState(kPowerStateNormal);
@@ -169,6 +177,18 @@
mScheduler->chooseRefreshRateForContent();
}
+TEST_F(SchedulerTest, updateDisplayModes) {
+ ASSERT_EQ(static_cast<size_t>(0), mScheduler->layerHistorySize());
+ sp<mock::MockLayer> layer = sp<mock::MockLayer>::make(mFlinger.flinger());
+ ASSERT_EQ(static_cast<size_t>(1), mScheduler->layerHistorySize());
+
+ mConfigs.updateDisplayModes({mode60, mode120}, /* activeMode */ mode60->getId());
+
+ ASSERT_EQ(static_cast<size_t>(0), mScheduler->getNumActiveLayers());
+ mScheduler->recordLayerHistory(layer.get(), 0, LayerHistory::LayerUpdateType::Buffer);
+ ASSERT_EQ(static_cast<size_t>(1), mScheduler->getNumActiveLayers());
+}
+
TEST_F(SchedulerTest, testDispatchCachedReportedMode) {
// If the optional fields are cleared, the function should return before
// onModeChange is called.
@@ -190,14 +210,35 @@
EXPECT_CALL(*mEventThread, onModeChanged(_, _, _)).Times(0);
}
-TEST_F(SchedulerTest, calculateExtraBufferCount) {
- EXPECT_EQ(0, mFlinger.calculateExtraBufferCount(Fps(60), 30ms));
- EXPECT_EQ(1, mFlinger.calculateExtraBufferCount(Fps(90), 30ms));
- EXPECT_EQ(2, mFlinger.calculateExtraBufferCount(Fps(120), 30ms));
+TEST_F(SchedulerTest, calculateMaxAcquiredBufferCount) {
+ EXPECT_EQ(1, mFlinger.calculateMaxAcquiredBufferCount(Fps(60), 30ms));
+ EXPECT_EQ(2, mFlinger.calculateMaxAcquiredBufferCount(Fps(90), 30ms));
+ EXPECT_EQ(3, mFlinger.calculateMaxAcquiredBufferCount(Fps(120), 30ms));
- EXPECT_EQ(1, mFlinger.calculateExtraBufferCount(Fps(60), 40ms));
+ EXPECT_EQ(2, mFlinger.calculateMaxAcquiredBufferCount(Fps(60), 40ms));
- EXPECT_EQ(0, mFlinger.calculateExtraBufferCount(Fps(60), 10ms));
+ EXPECT_EQ(1, mFlinger.calculateMaxAcquiredBufferCount(Fps(60), 10ms));
+}
+
+MATCHER(Is120Hz, "") {
+ return arg.getFps().equalsWithMargin(Fps(120.f));
+}
+
+TEST_F(SchedulerTest, chooseRefreshRateForContentSelectsMaxRefreshRate) {
+ mConfigs.updateDisplayModes({mode60, mode120}, /* activeMode */ mode60->getId());
+
+ sp<mock::MockLayer> layer = sp<mock::MockLayer>::make(mFlinger.flinger());
+
+ mScheduler->recordLayerHistory(layer.get(), 0, LayerHistory::LayerUpdateType::Buffer);
+
+ constexpr bool kPowerStateNormal = true;
+ mScheduler->setDisplayPowerState(kPowerStateNormal);
+
+ constexpr uint32_t kDisplayArea = 999'999;
+ mScheduler->onPrimaryDisplayAreaChanged(kDisplayArea);
+
+ EXPECT_CALL(mSchedulerCallback, changeRefreshRate(Is120Hz(), _)).Times(1);
+ mScheduler->chooseRefreshRateForContent();
}
} // namespace android
diff --git a/services/surfaceflinger/tests/unittests/SetFrameRateTest.cpp b/services/surfaceflinger/tests/unittests/SetFrameRateTest.cpp
index 46ef750..1ed52ea 100644
--- a/services/surfaceflinger/tests/unittests/SetFrameRateTest.cpp
+++ b/services/surfaceflinger/tests/unittests/SetFrameRateTest.cpp
@@ -152,7 +152,7 @@
void SetFrameRateTest::commitTransaction() {
for (auto layer : mLayers) {
- auto c = layer->getCurrentState();
+ auto c = layer->getDrawingState();
layer->commitTransaction(c);
}
}
diff --git a/services/surfaceflinger/tests/unittests/SurfaceFlinger_DestroyDisplayTest.cpp b/services/surfaceflinger/tests/unittests/SurfaceFlinger_DestroyDisplayTest.cpp
index 0614434..e2be074 100644
--- a/services/surfaceflinger/tests/unittests/SurfaceFlinger_DestroyDisplayTest.cpp
+++ b/services/surfaceflinger/tests/unittests/SurfaceFlinger_DestroyDisplayTest.cpp
@@ -74,4 +74,4 @@
}
} // namespace
-} // namespace android
\ No newline at end of file
+} // namespace android
diff --git a/services/surfaceflinger/tests/unittests/TestableScheduler.h b/services/surfaceflinger/tests/unittests/TestableScheduler.h
index 3f9dd01..41fd6e3 100644
--- a/services/surfaceflinger/tests/unittests/TestableScheduler.h
+++ b/services/surfaceflinger/tests/unittests/TestableScheduler.h
@@ -64,6 +64,11 @@
return mutableLayerHistory()->mLayerInfos.size();
}
+ size_t getNumActiveLayers() NO_THREAD_SAFETY_ANALYSIS {
+ if (!mLayerHistory) return 0;
+ return mutableLayerHistory()->mActiveLayersEnd;
+ }
+
void replaceTouchTimer(int64_t millis) {
if (mTouchTimer) {
mTouchTimer.reset();
diff --git a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h
index d78f36c..7f6e05e 100644
--- a/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h
+++ b/services/surfaceflinger/tests/unittests/TestableSurfaceFlinger.h
@@ -259,7 +259,6 @@
memcpy(&mFlinger->mInternalDisplayPrimaries, &primaries, sizeof(ui::DisplayPrimaries));
}
- static auto& mutableLayerCurrentState(const sp<Layer>& layer) { return layer->mCurrentState; }
static auto& mutableLayerDrawingState(const sp<Layer>& layer) { return layer->mDrawingState; }
auto& mutableStateLock() { return mFlinger->mStateLock; }
@@ -272,7 +271,6 @@
static void setLayerSidebandStream(const sp<Layer>& layer,
const sp<NativeHandle>& sidebandStream) {
layer->mDrawingState.sidebandStream = sidebandStream;
- layer->mCurrentState.sidebandStream = sidebandStream;
layer->mSidebandStream = sidebandStream;
layer->editCompositionState()->sidebandStream = sidebandStream;
}
@@ -391,9 +389,9 @@
auto getGPUContextPriority() { return mFlinger->getGPUContextPriority(); }
- auto calculateExtraBufferCount(Fps maxSupportedRefreshRate,
- std::chrono::nanoseconds presentLatency) const {
- return SurfaceFlinger::calculateExtraBufferCount(maxSupportedRefreshRate, presentLatency);
+ auto calculateMaxAcquiredBufferCount(Fps refreshRate,
+ std::chrono::nanoseconds presentLatency) const {
+ return SurfaceFlinger::calculateMaxAcquiredBufferCount(refreshRate, presentLatency);
}
/* ------------------------------------------------------------------------
diff --git a/services/surfaceflinger/tests/unittests/TimeStatsTest.cpp b/services/surfaceflinger/tests/unittests/TimeStatsTest.cpp
index 3e4e130..317cdf1 100644
--- a/services/surfaceflinger/tests/unittests/TimeStatsTest.cpp
+++ b/services/surfaceflinger/tests/unittests/TimeStatsTest.cpp
@@ -54,6 +54,9 @@
using testing::UnorderedElementsAre;
using PowerMode = hardware::graphics::composer::V2_4::IComposerClient::PowerMode;
+using SurfaceflingerStatsLayerInfo = android::surfaceflinger::SurfaceflingerStatsLayerInfo;
+using SurfaceflingerStatsLayerInfoWrapper =
+ android::surfaceflinger::SurfaceflingerStatsLayerInfoWrapper;
// clang-format off
#define FMT_PROTO true
@@ -71,6 +74,7 @@
const constexpr Fps kRefreshRate0 = Fps(static_cast<float>(REFRESH_RATE_0));
const constexpr Fps kRenderRate0 = Fps(static_cast<float>(RENDER_RATE_0));
+static constexpr int32_t kGameMode = TimeStatsHelper::GameModeUnsupported;
enum InputCommand : int32_t {
ENABLE = 0,
@@ -143,15 +147,16 @@
std::string inputCommand(InputCommand cmd, bool useProto);
void setTimeStamp(TimeStamp type, int32_t id, uint64_t frameNumber, nsecs_t ts,
- TimeStats::SetFrameRateVote frameRateVote);
+ TimeStats::SetFrameRateVote frameRateVote, int32_t gameMode);
int32_t genRandomInt32(int32_t begin, int32_t end);
template <size_t N>
void insertTimeRecord(const TimeStamp (&sequence)[N], int32_t id, uint64_t frameNumber,
- nsecs_t ts, TimeStats::SetFrameRateVote frameRateVote = {}) {
+ nsecs_t ts, TimeStats::SetFrameRateVote frameRateVote = {},
+ int32_t gameMode = kGameMode) {
for (size_t i = 0; i < N; i++, ts += 1000000) {
- setTimeStamp(sequence[i], id, frameNumber, ts, frameRateVote);
+ setTimeStamp(sequence[i], id, frameNumber, ts, frameRateVote, gameMode);
}
}
@@ -200,11 +205,11 @@
}
void TimeStatsTest::setTimeStamp(TimeStamp type, int32_t id, uint64_t frameNumber, nsecs_t ts,
- TimeStats::SetFrameRateVote frameRateVote) {
+ TimeStats::SetFrameRateVote frameRateVote, int32_t gameMode) {
switch (type) {
case TimeStamp::POST:
- ASSERT_NO_FATAL_FAILURE(
- mTimeStats->setPostTime(id, frameNumber, genLayerName(id), UID_0, ts));
+ ASSERT_NO_FATAL_FAILURE(mTimeStats->setPostTime(id, frameNumber, genLayerName(id),
+ UID_0, ts, gameMode));
break;
case TimeStamp::ACQUIRE:
ASSERT_NO_FATAL_FAILURE(mTimeStats->setAcquireTime(id, frameNumber, ts));
@@ -221,12 +226,14 @@
break;
case TimeStamp::PRESENT:
ASSERT_NO_FATAL_FAILURE(mTimeStats->setPresentTime(id, frameNumber, ts, kRefreshRate0,
- kRenderRate0, frameRateVote));
+ kRenderRate0, frameRateVote,
+ gameMode));
break;
case TimeStamp::PRESENT_FENCE:
- ASSERT_NO_FATAL_FAILURE(
- mTimeStats->setPresentFence(id, frameNumber, std::make_shared<FenceTime>(ts),
- kRefreshRate0, kRenderRate0, frameRateVote));
+ ASSERT_NO_FATAL_FAILURE(mTimeStats->setPresentFence(id, frameNumber,
+ std::make_shared<FenceTime>(ts),
+ kRefreshRate0, kRenderRate0,
+ frameRateVote, gameMode));
break;
default:
ALOGD("Invalid timestamp type");
@@ -319,22 +326,24 @@
insertTimeRecord(NORMAL_SEQUENCE, LAYER_ID_0, 1, 1000000);
mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::SurfaceFlingerCpuDeadlineMissed, 1, 2, 3});
- mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::SurfaceFlingerGpuDeadlineMissed, 1, 2, 3});
- mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::DisplayHAL, 1, 2, 3});
- mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::AppDeadlineMissed, 1, 2, 3});
- mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::SurfaceFlingerScheduling, 1, 2, 3});
- mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::PredictionError, 1, 2, 3});
- mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::AppDeadlineMissed | JankType::BufferStuffing, 1, 2,
+ kGameMode, JankType::SurfaceFlingerCpuDeadlineMissed, 1, 2,
3});
mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::None, 1, 2, 3});
+ kGameMode, JankType::SurfaceFlingerGpuDeadlineMissed, 1, 2,
+ 3});
+ mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
+ kGameMode, JankType::DisplayHAL, 1, 2, 3});
+ mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
+ kGameMode, JankType::AppDeadlineMissed, 1, 2, 3});
+ mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
+ kGameMode, JankType::SurfaceFlingerScheduling, 1, 2, 3});
+ mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
+ kGameMode, JankType::PredictionError, 1, 2, 3});
+ mTimeStats->incrementJankyFrames(
+ {kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0), kGameMode,
+ JankType::AppDeadlineMissed | JankType::BufferStuffing, 1, 2, 3});
+ mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
+ kGameMode, JankType::None, 1, 2, 3});
const std::string result(inputCommand(InputCommand::DUMP_ALL, FMT_STRING));
std::string expectedResult =
@@ -872,22 +881,24 @@
std::make_shared<FenceTime>(std::chrono::nanoseconds(1ms).count()));
mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::SurfaceFlingerCpuDeadlineMissed, 1, 2, 3});
- mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::SurfaceFlingerGpuDeadlineMissed, 1, 2, 3});
- mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::DisplayHAL, 1, 2, 3});
- mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::AppDeadlineMissed, 1, 2, 3});
- mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::SurfaceFlingerScheduling, 1, 2, 3});
- mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::PredictionError, 1, 2, 3});
- mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::AppDeadlineMissed | JankType::BufferStuffing, 1, 2,
+ kGameMode, JankType::SurfaceFlingerCpuDeadlineMissed, 1, 2,
3});
mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::None, 1, 2, 3});
+ kGameMode, JankType::SurfaceFlingerGpuDeadlineMissed, 1, 2,
+ 3});
+ mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
+ kGameMode, JankType::DisplayHAL, 1, 2, 3});
+ mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
+ kGameMode, JankType::AppDeadlineMissed, 1, 2, 3});
+ mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
+ kGameMode, JankType::SurfaceFlingerScheduling, 1, 2, 3});
+ mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
+ kGameMode, JankType::PredictionError, 1, 2, 3});
+ mTimeStats->incrementJankyFrames(
+ {kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0), kGameMode,
+ JankType::AppDeadlineMissed | JankType::BufferStuffing, 1, 2, 3});
+ mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
+ kGameMode, JankType::None, 1, 2, 3});
EXPECT_TRUE(inputCommand(InputCommand::CLEAR, FMT_STRING).empty());
@@ -1039,34 +1050,36 @@
mTimeStats->setPresentFenceGlobal(std::make_shared<FenceTime>(5000000));
mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::SurfaceFlingerCpuDeadlineMissed,
+ kGameMode, JankType::SurfaceFlingerCpuDeadlineMissed,
DISPLAY_DEADLINE_DELTA, DISPLAY_PRESENT_JITTER,
APP_DEADLINE_DELTA});
mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::SurfaceFlingerGpuDeadlineMissed,
+ kGameMode, JankType::SurfaceFlingerGpuDeadlineMissed,
DISPLAY_DEADLINE_DELTA, DISPLAY_PRESENT_JITTER,
APP_DEADLINE_DELTA});
mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::DisplayHAL, DISPLAY_DEADLINE_DELTA,
+ kGameMode, JankType::DisplayHAL, DISPLAY_DEADLINE_DELTA,
DISPLAY_PRESENT_JITTER, APP_DEADLINE_DELTA});
mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::AppDeadlineMissed, DISPLAY_DEADLINE_DELTA,
- DISPLAY_PRESENT_JITTER, APP_DEADLINE_DELTA});
- mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::SurfaceFlingerScheduling, DISPLAY_DEADLINE_DELTA,
- DISPLAY_PRESENT_JITTER, APP_DEADLINE_DELTA});
- mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::PredictionError, DISPLAY_DEADLINE_DELTA,
- DISPLAY_PRESENT_JITTER, APP_DEADLINE_DELTA});
- mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::AppDeadlineMissed | JankType::BufferStuffing,
+ kGameMode, JankType::AppDeadlineMissed,
DISPLAY_DEADLINE_DELTA, DISPLAY_PRESENT_JITTER,
APP_DEADLINE_DELTA});
mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::BufferStuffing, DISPLAY_DEADLINE_DELTA,
+ kGameMode, JankType::SurfaceFlingerScheduling,
+ DISPLAY_DEADLINE_DELTA, DISPLAY_PRESENT_JITTER,
+ APP_DEADLINE_DELTA});
+ mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
+ kGameMode, JankType::PredictionError, DISPLAY_DEADLINE_DELTA,
+ DISPLAY_PRESENT_JITTER, APP_DEADLINE_DELTA});
+ mTimeStats->incrementJankyFrames(
+ {kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0), kGameMode,
+ JankType::AppDeadlineMissed | JankType::BufferStuffing, DISPLAY_DEADLINE_DELTA,
+ DISPLAY_PRESENT_JITTER, APP_DEADLINE_DELTA});
+ mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
+ kGameMode, JankType::BufferStuffing, DISPLAY_DEADLINE_DELTA,
DISPLAY_PRESENT_JITTER, APP_DEADLINE_DELTA});
mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::None, DISPLAY_DEADLINE_DELTA,
+ kGameMode, JankType::None, DISPLAY_DEADLINE_DELTA,
DISPLAY_PRESENT_JITTER, APP_DEADLINE_DELTA});
std::string pulledData;
@@ -1157,7 +1170,8 @@
constexpr nsecs_t APP_DEADLINE_DELTA_3MS = 3'000'000;
EXPECT_TRUE(inputCommand(InputCommand::ENABLE, FMT_STRING).empty());
- insertTimeRecord(NORMAL_SEQUENCE, LAYER_ID_0, 1, 1000000);
+ insertTimeRecord(NORMAL_SEQUENCE, LAYER_ID_0, 1, 1000000, {},
+ TimeStatsHelper::GameModeStandard);
for (size_t i = 0; i < LATE_ACQUIRE_FRAMES; i++) {
mTimeStats->incrementLatchSkipped(LAYER_ID_0, TimeStats::LatchSkipReason::LateAcquire);
}
@@ -1170,43 +1184,50 @@
TimeStats::SetFrameRateVote::FrameRateCompatibility::ExactOrMultiple,
.seamlessness = TimeStats::SetFrameRateVote::Seamlessness::NotRequired,
};
- insertTimeRecord(NORMAL_SEQUENCE, LAYER_ID_0, 2, 2000000, frameRate60);
+ insertTimeRecord(NORMAL_SEQUENCE, LAYER_ID_0, 2, 2000000, frameRate60,
+ TimeStatsHelper::GameModeStandard);
+ mTimeStats->incrementJankyFrames(
+ {kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
+ TimeStatsHelper::GameModeStandard, JankType::SurfaceFlingerCpuDeadlineMissed,
+ DISPLAY_DEADLINE_DELTA, DISPLAY_PRESENT_JITTER, APP_DEADLINE_DELTA_3MS});
+ mTimeStats->incrementJankyFrames(
+ {kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
+ TimeStatsHelper::GameModeStandard, JankType::SurfaceFlingerGpuDeadlineMissed,
+ DISPLAY_DEADLINE_DELTA, DISPLAY_PRESENT_JITTER, APP_DEADLINE_DELTA_3MS});
mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::SurfaceFlingerCpuDeadlineMissed,
+ TimeStatsHelper::GameModeStandard, JankType::DisplayHAL,
DISPLAY_DEADLINE_DELTA, DISPLAY_PRESENT_JITTER,
APP_DEADLINE_DELTA_3MS});
mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::SurfaceFlingerGpuDeadlineMissed,
- DISPLAY_DEADLINE_DELTA, DISPLAY_PRESENT_JITTER,
- APP_DEADLINE_DELTA_3MS});
- mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::DisplayHAL, DISPLAY_DEADLINE_DELTA,
- DISPLAY_PRESENT_JITTER, APP_DEADLINE_DELTA_3MS});
- mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
+ TimeStatsHelper::GameModeStandard,
JankType::AppDeadlineMissed, DISPLAY_DEADLINE_DELTA,
DISPLAY_PRESENT_JITTER, APP_DEADLINE_DELTA_3MS});
mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
+ TimeStatsHelper::GameModeStandard,
JankType::SurfaceFlingerScheduling, DISPLAY_DEADLINE_DELTA,
DISPLAY_PRESENT_JITTER, APP_DEADLINE_DELTA_2MS});
mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::PredictionError, DISPLAY_DEADLINE_DELTA,
- DISPLAY_PRESENT_JITTER, APP_DEADLINE_DELTA_2MS});
+ TimeStatsHelper::GameModeStandard, JankType::PredictionError,
+ DISPLAY_DEADLINE_DELTA, DISPLAY_PRESENT_JITTER,
+ APP_DEADLINE_DELTA_2MS});
mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
+ TimeStatsHelper::GameModeStandard,
JankType::AppDeadlineMissed | JankType::BufferStuffing,
DISPLAY_DEADLINE_DELTA, APP_DEADLINE_DELTA_2MS,
APP_DEADLINE_DELTA_2MS});
mTimeStats->incrementJankyFrames({kRefreshRate0, kRenderRate0, UID_0, genLayerName(LAYER_ID_0),
- JankType::None, DISPLAY_DEADLINE_DELTA,
- DISPLAY_PRESENT_JITTER, APP_DEADLINE_DELTA_3MS});
+ TimeStatsHelper::GameModeStandard, JankType::None,
+ DISPLAY_DEADLINE_DELTA, DISPLAY_PRESENT_JITTER,
+ APP_DEADLINE_DELTA_3MS});
std::string pulledData;
EXPECT_TRUE(mTimeStats->onPullAtom(10063 /*SURFACEFLINGER_STATS_LAYER_INFO*/, &pulledData));
- android::surfaceflinger::SurfaceflingerStatsLayerInfoWrapper atomList;
+ SurfaceflingerStatsLayerInfoWrapper atomList;
ASSERT_TRUE(atomList.ParseFromString(pulledData));
ASSERT_EQ(atomList.atom_size(), 1);
- const android::surfaceflinger::SurfaceflingerStatsLayerInfo& atom = atomList.atom(0);
+ const SurfaceflingerStatsLayerInfo& atom = atomList.atom(0);
EXPECT_EQ(atom.layer_name(), genLayerName(LAYER_ID_0));
EXPECT_EQ(atom.total_frames(), 1);
@@ -1236,6 +1257,7 @@
(int)frameRate60.frameRateCompatibility);
EXPECT_EQ((int)atom.set_frame_rate_vote().seamlessness(), (int)frameRate60.seamlessness);
EXPECT_THAT(atom.app_deadline_misses(), HistogramEq(buildExpectedHistogram({3, 2}, {4, 3})));
+ EXPECT_EQ(atom.game_mode(), SurfaceflingerStatsLayerInfo::GAME_MODE_STANDARD);
SFTimeStatsGlobalProto globalProto;
ASSERT_TRUE(globalProto.ParseFromString(inputCommand(InputCommand::DUMP_ALL, FMT_PROTO)));
@@ -1268,6 +1290,92 @@
EXPECT_THAT(result, Not(HasSubstr(expectedMissing)));
}
+TEST_F(TimeStatsTest, layerStatsCallback_multipleGameModes) {
+ constexpr size_t LATE_ACQUIRE_FRAMES = 2;
+ constexpr size_t BAD_DESIRED_PRESENT_FRAMES = 3;
+ EXPECT_TRUE(inputCommand(InputCommand::ENABLE, FMT_STRING).empty());
+
+ insertTimeRecord(NORMAL_SEQUENCE, LAYER_ID_0, 1, 1000000, {},
+ TimeStatsHelper::GameModeStandard);
+ for (size_t i = 0; i < LATE_ACQUIRE_FRAMES; i++) {
+ mTimeStats->incrementLatchSkipped(LAYER_ID_0, TimeStats::LatchSkipReason::LateAcquire);
+ }
+ for (size_t i = 0; i < BAD_DESIRED_PRESENT_FRAMES; i++) {
+ mTimeStats->incrementBadDesiredPresent(LAYER_ID_0);
+ }
+ insertTimeRecord(NORMAL_SEQUENCE, LAYER_ID_0, 2, 2000000, {},
+ TimeStatsHelper::GameModeStandard);
+
+ insertTimeRecord(NORMAL_SEQUENCE, LAYER_ID_0, 3, 3000000, {},
+ TimeStatsHelper::GameModePerformance);
+
+ insertTimeRecord(NORMAL_SEQUENCE, LAYER_ID_0, 4, 4000000, {}, TimeStatsHelper::GameModeBattery);
+ insertTimeRecord(NORMAL_SEQUENCE, LAYER_ID_0, 5, 4000000, {}, TimeStatsHelper::GameModeBattery);
+
+ std::string pulledData;
+ EXPECT_TRUE(mTimeStats->onPullAtom(10063 /*SURFACEFLINGER_STATS_LAYER_INFO*/, &pulledData));
+
+ SurfaceflingerStatsLayerInfoWrapper atomList;
+ ASSERT_TRUE(atomList.ParseFromString(pulledData));
+ // The first time record is never uploaded to stats.
+ ASSERT_EQ(atomList.atom_size(), 3);
+ // Layers are ordered based on the hash in LayerStatsKey. For this test, the order happens to
+ // be: 0 - Battery 1 - Performance 2 - Standard
+ const SurfaceflingerStatsLayerInfo& atom0 = atomList.atom(0);
+
+ EXPECT_EQ(atom0.layer_name(), genLayerName(LAYER_ID_0));
+ EXPECT_EQ(atom0.total_frames(), 2);
+ EXPECT_EQ(atom0.dropped_frames(), 0);
+ EXPECT_THAT(atom0.present_to_present(), HistogramEq(buildExpectedHistogram({0, 1}, {1, 1})));
+ EXPECT_THAT(atom0.post_to_present(), HistogramEq(buildExpectedHistogram({4}, {2})));
+ EXPECT_THAT(atom0.acquire_to_present(), HistogramEq(buildExpectedHistogram({3}, {2})));
+ EXPECT_THAT(atom0.latch_to_present(), HistogramEq(buildExpectedHistogram({2}, {2})));
+ EXPECT_THAT(atom0.desired_to_present(), HistogramEq(buildExpectedHistogram({1}, {2})));
+ EXPECT_THAT(atom0.post_to_acquire(), HistogramEq(buildExpectedHistogram({1}, {2})));
+ EXPECT_EQ(atom0.late_acquire_frames(), 0);
+ EXPECT_EQ(atom0.bad_desired_present_frames(), 0);
+ EXPECT_EQ(atom0.uid(), UID_0);
+ EXPECT_EQ(atom0.display_refresh_rate_bucket(), REFRESH_RATE_BUCKET_0);
+ EXPECT_EQ(atom0.render_rate_bucket(), RENDER_RATE_BUCKET_0);
+ EXPECT_EQ(atom0.game_mode(), SurfaceflingerStatsLayerInfo::GAME_MODE_BATTERY);
+
+ const SurfaceflingerStatsLayerInfo& atom1 = atomList.atom(1);
+
+ EXPECT_EQ(atom1.layer_name(), genLayerName(LAYER_ID_0));
+ EXPECT_EQ(atom1.total_frames(), 1);
+ EXPECT_EQ(atom1.dropped_frames(), 0);
+ EXPECT_THAT(atom1.present_to_present(), HistogramEq(buildExpectedHistogram({1}, {1})));
+ EXPECT_THAT(atom1.post_to_present(), HistogramEq(buildExpectedHistogram({4}, {1})));
+ EXPECT_THAT(atom1.acquire_to_present(), HistogramEq(buildExpectedHistogram({3}, {1})));
+ EXPECT_THAT(atom1.latch_to_present(), HistogramEq(buildExpectedHistogram({2}, {1})));
+ EXPECT_THAT(atom1.desired_to_present(), HistogramEq(buildExpectedHistogram({1}, {1})));
+ EXPECT_THAT(atom1.post_to_acquire(), HistogramEq(buildExpectedHistogram({1}, {1})));
+ EXPECT_EQ(atom1.late_acquire_frames(), 0);
+ EXPECT_EQ(atom1.bad_desired_present_frames(), 0);
+ EXPECT_EQ(atom1.uid(), UID_0);
+ EXPECT_EQ(atom1.display_refresh_rate_bucket(), REFRESH_RATE_BUCKET_0);
+ EXPECT_EQ(atom1.render_rate_bucket(), RENDER_RATE_BUCKET_0);
+ EXPECT_EQ(atom1.game_mode(), SurfaceflingerStatsLayerInfo::GAME_MODE_PERFORMANCE);
+
+ const SurfaceflingerStatsLayerInfo& atom2 = atomList.atom(2);
+
+ EXPECT_EQ(atom2.layer_name(), genLayerName(LAYER_ID_0));
+ EXPECT_EQ(atom2.total_frames(), 1);
+ EXPECT_EQ(atom2.dropped_frames(), 0);
+ EXPECT_THAT(atom2.present_to_present(), HistogramEq(buildExpectedHistogram({1}, {1})));
+ EXPECT_THAT(atom2.post_to_present(), HistogramEq(buildExpectedHistogram({4}, {1})));
+ EXPECT_THAT(atom2.acquire_to_present(), HistogramEq(buildExpectedHistogram({3}, {1})));
+ EXPECT_THAT(atom2.latch_to_present(), HistogramEq(buildExpectedHistogram({2}, {1})));
+ EXPECT_THAT(atom2.desired_to_present(), HistogramEq(buildExpectedHistogram({1}, {1})));
+ EXPECT_THAT(atom2.post_to_acquire(), HistogramEq(buildExpectedHistogram({1}, {1})));
+ EXPECT_EQ(atom2.late_acquire_frames(), LATE_ACQUIRE_FRAMES);
+ EXPECT_EQ(atom2.bad_desired_present_frames(), BAD_DESIRED_PRESENT_FRAMES);
+ EXPECT_EQ(atom2.uid(), UID_0);
+ EXPECT_EQ(atom2.display_refresh_rate_bucket(), REFRESH_RATE_BUCKET_0);
+ EXPECT_EQ(atom2.render_rate_bucket(), RENDER_RATE_BUCKET_0);
+ EXPECT_EQ(atom2.game_mode(), SurfaceflingerStatsLayerInfo::GAME_MODE_STANDARD);
+}
+
TEST_F(TimeStatsTest, layerStatsCallback_pullsMultipleLayers) {
EXPECT_TRUE(inputCommand(InputCommand::ENABLE, FMT_STRING).empty());
@@ -1279,7 +1387,7 @@
std::string pulledData;
EXPECT_TRUE(mTimeStats->onPullAtom(10063 /*SURFACEFLINGER_STATS_LAYER_INFO*/, &pulledData));
- android::surfaceflinger::SurfaceflingerStatsLayerInfoWrapper atomList;
+ SurfaceflingerStatsLayerInfoWrapper atomList;
ASSERT_TRUE(atomList.ParseFromString(pulledData));
ASSERT_EQ(atomList.atom_size(), 2);
std::vector<std::string> actualLayerNames = {atomList.atom(0).layer_name(),
@@ -1304,10 +1412,10 @@
std::string pulledData;
EXPECT_TRUE(mTimeStats->onPullAtom(10063 /*SURFACEFLINGER_STATS_LAYER_INFO*/, &pulledData));
- android::surfaceflinger::SurfaceflingerStatsLayerInfoWrapper atomList;
+ SurfaceflingerStatsLayerInfoWrapper atomList;
ASSERT_TRUE(atomList.ParseFromString(pulledData));
ASSERT_EQ(atomList.atom_size(), 1);
- const android::surfaceflinger::SurfaceflingerStatsLayerInfo& atom = atomList.atom(0);
+ const SurfaceflingerStatsLayerInfo& atom = atomList.atom(0);
EXPECT_THAT(atom.present_to_present(), HistogramEq(buildExpectedHistogram({1, 2}, {2, 1})));
}
@@ -1323,10 +1431,10 @@
std::string pulledData;
EXPECT_TRUE(mTimeStats->onPullAtom(10063 /*SURFACEFLINGER_STATS_LAYER_INFO*/, &pulledData));
- android::surfaceflinger::SurfaceflingerStatsLayerInfoWrapper atomList;
+ SurfaceflingerStatsLayerInfoWrapper atomList;
ASSERT_TRUE(atomList.ParseFromString(pulledData));
ASSERT_EQ(atomList.atom_size(), 1);
- const android::surfaceflinger::SurfaceflingerStatsLayerInfo& atom = atomList.atom(0);
+ const SurfaceflingerStatsLayerInfo& atom = atomList.atom(0);
EXPECT_THAT(atom.present_to_present(), HistogramEq(buildExpectedHistogram({1}, {2})));
}
@@ -1343,7 +1451,7 @@
std::string pulledData;
EXPECT_TRUE(mTimeStats->onPullAtom(10063 /*SURFACEFLINGER_STATS_LAYER_INFO*/, &pulledData));
- android::surfaceflinger::SurfaceflingerStatsLayerInfoWrapper atomList;
+ SurfaceflingerStatsLayerInfoWrapper atomList;
ASSERT_TRUE(atomList.ParseFromString(pulledData));
ASSERT_EQ(atomList.atom_size(), 1);
EXPECT_EQ(atomList.atom(0).layer_name(), genLayerName(LAYER_ID_1));
@@ -1372,7 +1480,7 @@
TimeStamp type = static_cast<TimeStamp>(genRandomInt32(TIME_STAMP_BEGIN, TIME_STAMP_END));
const int32_t ts = genRandomInt32(1, 1000000000);
ALOGV("type[%d], layerId[%d], frameNumber[%d], ts[%d]", type, layerId, frameNumber, ts);
- setTimeStamp(type, layerId, frameNumber, ts, {});
+ setTimeStamp(type, layerId, frameNumber, ts, {}, kGameMode);
}
}
@@ -1383,8 +1491,8 @@
EXPECT_TRUE(inputCommand(InputCommand::ENABLE, FMT_STRING).empty());
insertTimeRecord(NORMAL_SEQUENCE, LAYER_ID_0, 1, 1000000);
- mTimeStats->incrementJankyFrames(
- {fps, std::nullopt, UID_0, genLayerName(LAYER_ID_0), JankType::None, 0, 0, 0});
+ mTimeStats->incrementJankyFrames({fps, std::nullopt, UID_0, genLayerName(LAYER_ID_0),
+ kGameMode, JankType::None, 0, 0, 0});
const std::string result(inputCommand(InputCommand::DUMP_ALL, FMT_STRING));
std::string expectedResult = "displayRefreshRate = " + std::to_string(bucket) + " fps";
EXPECT_THAT(result, HasSubstr(expectedResult)) << "failed for " << fps;
diff --git a/services/surfaceflinger/tests/unittests/TransactionFrameTracerTest.cpp b/services/surfaceflinger/tests/unittests/TransactionFrameTracerTest.cpp
index 546bc4a..2845d0a 100644
--- a/services/surfaceflinger/tests/unittests/TransactionFrameTracerTest.cpp
+++ b/services/surfaceflinger/tests/unittests/TransactionFrameTracerTest.cpp
@@ -62,7 +62,7 @@
}
void commitTransaction(Layer* layer) {
- auto c = layer->getCurrentState();
+ auto c = layer->getDrawingState();
layer->commitTransaction(c);
}
diff --git a/services/surfaceflinger/tests/unittests/TransactionSurfaceFrameTest.cpp b/services/surfaceflinger/tests/unittests/TransactionSurfaceFrameTest.cpp
index c1123cd..7bf224d 100644
--- a/services/surfaceflinger/tests/unittests/TransactionSurfaceFrameTest.cpp
+++ b/services/surfaceflinger/tests/unittests/TransactionSurfaceFrameTest.cpp
@@ -62,7 +62,7 @@
}
void commitTransaction(Layer* layer) {
- auto c = layer->getCurrentState();
+ auto c = layer->getDrawingState();
layer->commitTransaction(c);
}
@@ -101,9 +101,9 @@
sp<BufferStateLayer> layer = createBufferStateLayer();
layer->setFrameTimelineVsyncForBufferlessTransaction({/*vsyncId*/ 1, /*inputEventId*/ 0},
10);
- EXPECT_EQ(1u, layer->mCurrentState.bufferlessSurfaceFramesTX.size());
- ASSERT_TRUE(layer->mCurrentState.bufferSurfaceFrameTX == nullptr);
- const auto surfaceFrame = layer->mCurrentState.bufferlessSurfaceFramesTX.at(/*token*/ 1);
+ EXPECT_EQ(1u, layer->mDrawingState.bufferlessSurfaceFramesTX.size());
+ ASSERT_TRUE(layer->mDrawingState.bufferSurfaceFrameTX == nullptr);
+ const auto surfaceFrame = layer->mDrawingState.bufferlessSurfaceFramesTX.at(/*token*/ 1);
commitTransaction(layer.get());
EXPECT_EQ(1, surfaceFrame->getToken());
EXPECT_EQ(false, surfaceFrame->getIsBuffer());
@@ -123,9 +123,9 @@
acquireFence->signalForTest(12);
commitTransaction(layer.get());
- EXPECT_EQ(0u, layer->mCurrentState.bufferlessSurfaceFramesTX.size());
- ASSERT_NE(nullptr, layer->mCurrentState.bufferSurfaceFrameTX);
- const auto& surfaceFrame = layer->mCurrentState.bufferSurfaceFrameTX;
+ EXPECT_EQ(0u, layer->mDrawingState.bufferlessSurfaceFramesTX.size());
+ ASSERT_NE(nullptr, layer->mDrawingState.bufferSurfaceFrameTX);
+ const auto surfaceFrame = layer->mDrawingState.bufferSurfaceFrameTX;
// Buffers are presented only at latch time.
EXPECT_EQ(PresentState::Unknown, surfaceFrame->getPresentState());
@@ -148,9 +148,9 @@
mRenderEngine, false);
layer->setBuffer(buffer1, fence1, 10, 20, false, mClientCache, 1, std::nullopt,
{/*vsyncId*/ 1, /*inputEventId*/ 0}, nullptr /* releaseBufferCallback */);
- EXPECT_EQ(0u, layer->mCurrentState.bufferlessSurfaceFramesTX.size());
- ASSERT_NE(nullptr, layer->mCurrentState.bufferSurfaceFrameTX);
- const auto droppedSurfaceFrame = layer->mCurrentState.bufferSurfaceFrameTX;
+ EXPECT_EQ(0u, layer->mDrawingState.bufferlessSurfaceFramesTX.size());
+ ASSERT_NE(nullptr, layer->mDrawingState.bufferSurfaceFrameTX);
+ const auto droppedSurfaceFrame = layer->mDrawingState.bufferSurfaceFrameTX;
sp<Fence> fence2(new Fence());
auto acquireFence2 = fenceFactory.createFenceTimeForTest(fence2);
@@ -164,9 +164,9 @@
nsecs_t end = systemTime();
acquireFence2->signalForTest(12);
- EXPECT_EQ(0u, layer->mCurrentState.bufferlessSurfaceFramesTX.size());
- ASSERT_NE(nullptr, layer->mCurrentState.bufferSurfaceFrameTX);
- const auto& presentedSurfaceFrame = layer->mCurrentState.bufferSurfaceFrameTX;
+ EXPECT_EQ(0u, layer->mDrawingState.bufferlessSurfaceFramesTX.size());
+ ASSERT_NE(nullptr, layer->mDrawingState.bufferSurfaceFrameTX);
+ const auto presentedSurfaceFrame = layer->mDrawingState.bufferSurfaceFrameTX;
commitTransaction(layer.get());
bool computeVisisbleRegions;
@@ -190,8 +190,8 @@
layer->setFrameTimelineVsyncForBufferlessTransaction({/*vsyncId*/ 1, /*inputEventId*/ 0},
10);
- EXPECT_EQ(1u, layer->mCurrentState.bufferlessSurfaceFramesTX.size());
- ASSERT_EQ(nullptr, layer->mCurrentState.bufferSurfaceFrameTX);
+ EXPECT_EQ(1u, layer->mDrawingState.bufferlessSurfaceFramesTX.size());
+ ASSERT_EQ(nullptr, layer->mDrawingState.bufferSurfaceFrameTX);
sp<Fence> fence(new Fence());
auto acquireFence = fenceFactory.createFenceTimeForTest(fence);
@@ -203,9 +203,9 @@
{/*vsyncId*/ 1, /*inputEventId*/ 0}, nullptr /* releaseBufferCallback */);
acquireFence->signalForTest(12);
- EXPECT_EQ(0u, layer->mCurrentState.bufferlessSurfaceFramesTX.size());
- ASSERT_NE(nullptr, layer->mCurrentState.bufferSurfaceFrameTX);
- const auto& surfaceFrame = layer->mCurrentState.bufferSurfaceFrameTX;
+ EXPECT_EQ(0u, layer->mDrawingState.bufferlessSurfaceFramesTX.size());
+ ASSERT_NE(nullptr, layer->mDrawingState.bufferSurfaceFrameTX);
+ const auto surfaceFrame = layer->mDrawingState.bufferSurfaceFrameTX;
commitTransaction(layer.get());
EXPECT_EQ(1, surfaceFrame->getToken());
@@ -229,29 +229,29 @@
mRenderEngine, false);
layer->setBuffer(buffer, fence, 10, 20, false, mClientCache, 1, std::nullopt,
{/*vsyncId*/ 1, /*inputEventId*/ 0}, nullptr /* releaseBufferCallback */);
- EXPECT_EQ(0u, layer->mCurrentState.bufferlessSurfaceFramesTX.size());
- ASSERT_NE(nullptr, layer->mCurrentState.bufferSurfaceFrameTX);
+ EXPECT_EQ(0u, layer->mDrawingState.bufferlessSurfaceFramesTX.size());
+ ASSERT_NE(nullptr, layer->mDrawingState.bufferSurfaceFrameTX);
layer->setFrameTimelineVsyncForBufferlessTransaction({/*vsyncId*/ 1, /*inputEventId*/ 0},
10);
- EXPECT_EQ(0u, layer->mCurrentState.bufferlessSurfaceFramesTX.size());
- ASSERT_NE(nullptr, layer->mCurrentState.bufferSurfaceFrameTX);
+ EXPECT_EQ(0u, layer->mDrawingState.bufferlessSurfaceFramesTX.size());
+ ASSERT_NE(nullptr, layer->mDrawingState.bufferSurfaceFrameTX);
}
void MultipleSurfaceFramesPresentedTogether() {
sp<BufferStateLayer> layer = createBufferStateLayer();
layer->setFrameTimelineVsyncForBufferlessTransaction({/*vsyncId*/ 1, /*inputEventId*/ 0},
10);
- EXPECT_EQ(1u, layer->mCurrentState.bufferlessSurfaceFramesTX.size());
- ASSERT_EQ(nullptr, layer->mCurrentState.bufferSurfaceFrameTX);
+ EXPECT_EQ(1u, layer->mDrawingState.bufferlessSurfaceFramesTX.size());
+ ASSERT_EQ(nullptr, layer->mDrawingState.bufferSurfaceFrameTX);
const auto bufferlessSurfaceFrame1 =
- layer->mCurrentState.bufferlessSurfaceFramesTX.at(/*token*/ 1);
+ layer->mDrawingState.bufferlessSurfaceFramesTX.at(/*token*/ 1);
layer->setFrameTimelineVsyncForBufferlessTransaction({/*vsyncId*/ 4, /*inputEventId*/ 0},
10);
- EXPECT_EQ(2u, layer->mCurrentState.bufferlessSurfaceFramesTX.size());
- ASSERT_EQ(nullptr, layer->mCurrentState.bufferSurfaceFrameTX);
- const auto bufferlessSurfaceFrame2 = layer->mCurrentState.bufferlessSurfaceFramesTX[4];
+ EXPECT_EQ(2u, layer->mDrawingState.bufferlessSurfaceFramesTX.size());
+ ASSERT_EQ(nullptr, layer->mDrawingState.bufferSurfaceFrameTX);
+ const auto bufferlessSurfaceFrame2 = layer->mDrawingState.bufferlessSurfaceFramesTX[4];
sp<Fence> fence(new Fence());
auto acquireFence = fenceFactory.createFenceTimeForTest(fence);
@@ -261,9 +261,9 @@
mRenderEngine, false);
layer->setBuffer(buffer, fence, 10, 20, false, mClientCache, 1, std::nullopt,
{/*vsyncId*/ 3, /*inputEventId*/ 0}, nullptr /* releaseBufferCallback */);
- EXPECT_EQ(2u, layer->mCurrentState.bufferlessSurfaceFramesTX.size());
- ASSERT_NE(nullptr, layer->mCurrentState.bufferSurfaceFrameTX);
- const auto& bufferSurfaceFrameTX = layer->mCurrentState.bufferSurfaceFrameTX;
+ EXPECT_EQ(2u, layer->mDrawingState.bufferlessSurfaceFramesTX.size());
+ ASSERT_NE(nullptr, layer->mDrawingState.bufferSurfaceFrameTX);
+ const auto bufferSurfaceFrameTX = layer->mDrawingState.bufferSurfaceFrameTX;
acquireFence->signalForTest(12);
@@ -299,8 +299,8 @@
mRenderEngine, false);
layer->setBuffer(buffer1, fence1, 10, 20, false, mClientCache, 1, std::nullopt,
{/*vsyncId*/ 1, /*inputEventId*/ 0}, nullptr /* releaseBufferCallback */);
- ASSERT_NE(nullptr, layer->mCurrentState.bufferSurfaceFrameTX);
- const auto droppedSurfaceFrame = layer->mCurrentState.bufferSurfaceFrameTX;
+ ASSERT_NE(nullptr, layer->mDrawingState.bufferSurfaceFrameTX);
+ const auto droppedSurfaceFrame = layer->mDrawingState.bufferSurfaceFrameTX;
sp<Fence> fence2(new Fence());
auto acquireFence2 = fenceFactory.createFenceTimeForTest(fence2);
@@ -312,8 +312,8 @@
{/*vsyncId*/ 1, /*inputEventId*/ 0}, nullptr /* releaseBufferCallback */);
acquireFence2->signalForTest(12);
- ASSERT_NE(nullptr, layer->mCurrentState.bufferSurfaceFrameTX);
- auto& presentedSurfaceFrame = layer->mCurrentState.bufferSurfaceFrameTX;
+ ASSERT_NE(nullptr, layer->mDrawingState.bufferSurfaceFrameTX);
+ auto presentedSurfaceFrame = layer->mDrawingState.bufferSurfaceFrameTX;
commitTransaction(layer.get());
bool computeVisisbleRegions;
@@ -340,9 +340,9 @@
mRenderEngine, false);
layer->setBuffer(buffer1, fence1, 10, 20, false, mClientCache, 1, std::nullopt,
{/*vsyncId*/ 1, /*inputEventId*/ 0}, nullptr /* releaseBufferCallback */);
- EXPECT_EQ(0u, layer->mCurrentState.bufferlessSurfaceFramesTX.size());
- ASSERT_NE(nullptr, layer->mCurrentState.bufferSurfaceFrameTX);
- const auto droppedSurfaceFrame1 = layer->mCurrentState.bufferSurfaceFrameTX;
+ EXPECT_EQ(0u, layer->mDrawingState.bufferlessSurfaceFramesTX.size());
+ ASSERT_NE(nullptr, layer->mDrawingState.bufferSurfaceFrameTX);
+ const auto droppedSurfaceFrame1 = layer->mDrawingState.bufferSurfaceFrameTX;
sp<Fence> fence2(new Fence());
auto acquireFence2 = fenceFactory.createFenceTimeForTest(fence2);
@@ -355,9 +355,9 @@
{/*vsyncId*/ FrameTimelineInfo::INVALID_VSYNC_ID, /*inputEventId*/ 0},
nullptr /* releaseBufferCallback */);
auto dropEndTime1 = systemTime();
- EXPECT_EQ(0u, layer->mCurrentState.bufferlessSurfaceFramesTX.size());
- ASSERT_NE(nullptr, layer->mCurrentState.bufferSurfaceFrameTX);
- const auto droppedSurfaceFrame2 = layer->mCurrentState.bufferSurfaceFrameTX;
+ EXPECT_EQ(0u, layer->mDrawingState.bufferlessSurfaceFramesTX.size());
+ ASSERT_NE(nullptr, layer->mDrawingState.bufferSurfaceFrameTX);
+ const auto droppedSurfaceFrame2 = layer->mDrawingState.bufferSurfaceFrameTX;
sp<Fence> fence3(new Fence());
auto acquireFence3 = fenceFactory.createFenceTimeForTest(fence3);
@@ -371,9 +371,9 @@
auto dropEndTime2 = systemTime();
acquireFence3->signalForTest(12);
- EXPECT_EQ(0u, layer->mCurrentState.bufferlessSurfaceFramesTX.size());
- ASSERT_NE(nullptr, layer->mCurrentState.bufferSurfaceFrameTX);
- const auto& presentedSurfaceFrame = layer->mCurrentState.bufferSurfaceFrameTX;
+ EXPECT_EQ(0u, layer->mDrawingState.bufferlessSurfaceFramesTX.size());
+ ASSERT_NE(nullptr, layer->mDrawingState.bufferSurfaceFrameTX);
+ const auto presentedSurfaceFrame = layer->mDrawingState.bufferSurfaceFrameTX;
commitTransaction(layer.get());
bool computeVisisbleRegions;
@@ -415,10 +415,10 @@
layer->setFrameTimelineVsyncForBufferlessTransaction({/*vsyncId*/ 2,
/*inputEventId*/ 0},
10);
- ASSERT_NE(nullptr, layer->mCurrentState.bufferSurfaceFrameTX);
- EXPECT_EQ(1u, layer->mCurrentState.bufferlessSurfaceFramesTX.size());
+ ASSERT_NE(nullptr, layer->mDrawingState.bufferSurfaceFrameTX);
+ EXPECT_EQ(1u, layer->mDrawingState.bufferlessSurfaceFramesTX.size());
auto& bufferlessSurfaceFrame =
- layer->mCurrentState.bufferlessSurfaceFramesTX.at(/*vsyncId*/ 2);
+ layer->mDrawingState.bufferlessSurfaceFramesTX.at(/*vsyncId*/ 2);
bufferlessSurfaceFrames.push_back(bufferlessSurfaceFrame);
commitTransaction(layer.get());
diff --git a/services/surfaceflinger/tests/unittests/VSyncPredictorTest.cpp b/services/surfaceflinger/tests/unittests/VSyncPredictorTest.cpp
index ae936e4..37ecd7c 100644
--- a/services/surfaceflinger/tests/unittests/VSyncPredictorTest.cpp
+++ b/services/surfaceflinger/tests/unittests/VSyncPredictorTest.cpp
@@ -510,6 +510,28 @@
EXPECT_EQ(mNow + 1000, tracker.nextAnticipatedVSyncTimeFrom(mNow));
}
+TEST_F(VSyncPredictorTest, robustToDuplicateTimestamps_60hzRealTraceData) {
+ // these are real vsync timestamps from b/190331974 which caused vsync predictor
+ // period to spike to 18ms due to very close timestamps
+ std::vector<nsecs_t> const simulatedVsyncs{
+ 198353408177, 198370074844, 198371400000, 198374274000, 198390941000, 198407565000,
+ 198540887994, 198607538588, 198624218276, 198657655939, 198674224176, 198690880955,
+ 198724204319, 198740988133, 198758166681, 198790869196, 198824205052, 198840871678,
+ 198857715631, 198890885797, 198924199640, 198940873834, 198974204401,
+ };
+ auto constexpr idealPeriod = 16'666'666;
+ auto constexpr expectedPeriod = 16'644'742;
+ auto constexpr expectedIntercept = 125'626;
+
+ tracker.setPeriod(idealPeriod);
+ for (auto const& timestamp : simulatedVsyncs) {
+ tracker.addVsyncTimestamp(timestamp);
+ }
+ auto [slope, intercept] = tracker.getVSyncPredictionModel();
+ EXPECT_THAT(slope, IsCloseTo(expectedPeriod, mMaxRoundingError));
+ EXPECT_THAT(intercept, IsCloseTo(expectedIntercept, mMaxRoundingError));
+}
+
} // namespace android::scheduler
// TODO(b/129481165): remove the #pragma below and fix conversion issues
diff --git a/services/surfaceflinger/tests/unittests/VsyncConfigurationTest.cpp b/services/surfaceflinger/tests/unittests/VsyncConfigurationTest.cpp
index bb7578d..41a4d30 100644
--- a/services/surfaceflinger/tests/unittests/VsyncConfigurationTest.cpp
+++ b/services/surfaceflinger/tests/unittests/VsyncConfigurationTest.cpp
@@ -34,16 +34,18 @@
public:
TestableWorkDuration(Fps currentFps, nsecs_t sfDuration, nsecs_t appDuration,
nsecs_t sfEarlyDuration, nsecs_t appEarlyDuration,
- nsecs_t sfEarlyGlDuration, nsecs_t appEarlyGlDuration)
+ nsecs_t sfEarlyGlDuration, nsecs_t appEarlyGlDuration,
+ nsecs_t hwcMinWorkDuration)
: impl::WorkDuration(currentFps, sfDuration, appDuration, sfEarlyDuration,
- appEarlyDuration, sfEarlyGlDuration, appEarlyGlDuration) {}
+ appEarlyDuration, sfEarlyGlDuration, appEarlyGlDuration,
+ hwcMinWorkDuration) {}
};
class WorkDurationTest : public testing::Test {
protected:
WorkDurationTest()
: mWorkDuration(Fps(60.0f), 10'500'000, 20'500'000, 16'000'000, 16'500'000, 13'500'000,
- 21'000'000) {}
+ 21'000'000, 1234) {}
~WorkDurationTest() = default;
@@ -104,7 +106,7 @@
}
TEST_F(WorkDurationTest, getConfigsForRefreshRate_DefaultOffsets) {
- TestableWorkDuration phaseOffsetsWithDefaultValues(Fps(60.0f), -1, -1, -1, -1, -1, -1);
+ TestableWorkDuration phaseOffsetsWithDefaultValues(Fps(60.0f), -1, -1, -1, -1, -1, -1, 0);
auto validateOffsets = [](const auto& offsets, std::chrono::nanoseconds vsyncPeriod) {
EXPECT_EQ(offsets.late.sfOffset, 1'000'000);
@@ -124,6 +126,8 @@
EXPECT_EQ(offsets.earlyGpu.sfWorkDuration, vsyncPeriod - 1'000'000ns);
EXPECT_EQ(offsets.earlyGpu.appWorkDuration, vsyncPeriod);
+
+ EXPECT_EQ(offsets.hwcMinWorkDuration, 0ns);
};
const auto testForRefreshRate = [&](Fps refreshRate) {
@@ -160,6 +164,10 @@
EXPECT_EQ(offsets.earlyGpu.appWorkDuration, 21'000'000ns);
}
+TEST_F(WorkDurationTest, minHwcWorkDuration) {
+ EXPECT_EQ(mWorkDuration.getCurrentConfigs().hwcMinWorkDuration, 1234ns);
+}
+
class TestablePhaseOffsets : public impl::PhaseOffsets {
public:
TestablePhaseOffsets(nsecs_t vsyncPhaseOffsetNs, nsecs_t sfVSyncPhaseOffsetNs,
@@ -172,13 +180,14 @@
std::optional<nsecs_t> highFpsEarlyGpuSfOffsetNs,
std::optional<nsecs_t> highFpsEarlyAppOffsetNs,
std::optional<nsecs_t> highFpsEarlyGpuAppOffsetNs,
- nsecs_t thresholdForNextVsync)
+ nsecs_t thresholdForNextVsync, nsecs_t hwcMinWorkDuration)
: impl::PhaseOffsets(Fps(60.0f), vsyncPhaseOffsetNs, sfVSyncPhaseOffsetNs,
earlySfOffsetNs, earlyGpuSfOffsetNs, earlyAppOffsetNs,
earlyGpuAppOffsetNs, highFpsVsyncPhaseOffsetNs,
highFpsSfVSyncPhaseOffsetNs, highFpsEarlySfOffsetNs,
highFpsEarlyGpuSfOffsetNs, highFpsEarlyAppOffsetNs,
- highFpsEarlyGpuAppOffsetNs, thresholdForNextVsync) {}
+ highFpsEarlyGpuAppOffsetNs, thresholdForNextVsync,
+ hwcMinWorkDuration) {}
};
class PhaseOffsetsTest : public testing::Test {
@@ -186,9 +195,9 @@
PhaseOffsetsTest() = default;
~PhaseOffsetsTest() = default;
- TestablePhaseOffsets mPhaseOffsets{2'000'000, 6'000'000, 7'000'000, 8'000'000, 3'000'000,
- 4'000'000, 2'000'000, 1'000'000, 2'000'000, 3'000'000,
- 3'000'000, 4'000'000, 10'000'000};
+ TestablePhaseOffsets mPhaseOffsets{2'000'000, 6'000'000, 7'000'000, 8'000'000, 3'000'000,
+ 4'000'000, 2'000'000, 1'000'000, 2'000'000, 3'000'000,
+ 3'000'000, 4'000'000, 10'000'000, 1234};
};
TEST_F(PhaseOffsetsTest, getConfigsForRefreshRate_unknownRefreshRate) {
@@ -258,8 +267,8 @@
}
TEST_F(PhaseOffsetsTest, getConfigsForRefreshRate_DefaultValues_60Hz) {
- TestablePhaseOffsets phaseOffsets{1'000'000, 1'000'000, {}, {}, {}, {}, 2'000'000,
- 1'000'000, {}, {}, {}, {}, 10'000'000};
+ TestablePhaseOffsets phaseOffsets{1'000'000, 1'000'000, {}, {}, {}, {}, 2'000'000,
+ 1'000'000, {}, {}, {}, {}, 10'000'000, 1234};
auto offsets = phaseOffsets.getConfigsForRefreshRate(Fps(60.0f));
EXPECT_EQ(offsets.late.sfOffset, 1'000'000);
@@ -282,8 +291,8 @@
}
TEST_F(PhaseOffsetsTest, getConfigsForRefreshRate_DefaultValues_90Hz) {
- TestablePhaseOffsets phaseOffsets{1'000'000, 1'000'000, {}, {}, {}, {}, 2'000'000,
- 1'000'000, {}, {}, {}, {}, 10'000'000};
+ TestablePhaseOffsets phaseOffsets{1'000'000, 1'000'000, {}, {}, {}, {}, 2'000'000,
+ 1'000'000, {}, {}, {}, {}, 10'000'000, 1234};
auto offsets = phaseOffsets.getConfigsForRefreshRate(Fps(90.0f));
EXPECT_EQ(offsets.late.sfOffset, 1'000'000);
@@ -305,4 +314,10 @@
EXPECT_EQ(offsets.earlyGpu.appWorkDuration, 21'222'222ns);
}
+TEST_F(PhaseOffsetsTest, minHwcWorkDuration) {
+ TestablePhaseOffsets phaseOffsets{1'000'000, 1'000'000, {}, {}, {}, {}, 2'000'000,
+ 1'000'000, {}, {}, {}, {}, 10'000'000, 1234};
+ EXPECT_EQ(phaseOffsets.getCurrentConfigs().hwcMinWorkDuration, 1234ns);
+}
+
} // namespace android::scheduler
diff --git a/services/surfaceflinger/tests/unittests/VsyncModulatorTest.cpp b/services/surfaceflinger/tests/unittests/VsyncModulatorTest.cpp
index 17648d5..60952bf 100644
--- a/services/surfaceflinger/tests/unittests/VsyncModulatorTest.cpp
+++ b/services/surfaceflinger/tests/unittests/VsyncModulatorTest.cpp
@@ -35,6 +35,7 @@
APP_OFFSET_EARLY_GPU,
SF_DURATION_EARLY_GPU,
APP_DURATION_EARLY_GPU,
+ HWC_MIN_WORK_DURATION,
};
static VsyncModulator::TimePoint Now() {
@@ -57,7 +58,8 @@
nanos(SF_DURATION_EARLY_GPU),
nanos(APP_DURATION_EARLY_GPU)};
- const VsyncModulator::VsyncConfigSet mOffsets = {kEarly, kEarlyGpu, kLate};
+ const VsyncModulator::VsyncConfigSet mOffsets = {kEarly, kEarlyGpu, kLate,
+ nanos(HWC_MIN_WORK_DURATION)};
VsyncModulator mVsyncModulator{mOffsets, Now};
void SetUp() override { EXPECT_EQ(kLate, mVsyncModulator.setVsyncConfigSet(mOffsets)); }
diff --git a/services/surfaceflinger/tests/unittests/mock/MockTimeStats.h b/services/surfaceflinger/tests/unittests/mock/MockTimeStats.h
index 526a847..5aebd2f 100644
--- a/services/surfaceflinger/tests/unittests/mock/MockTimeStats.h
+++ b/services/surfaceflinger/tests/unittests/mock/MockTimeStats.h
@@ -41,18 +41,19 @@
MOCK_METHOD2(recordFrameDuration, void(nsecs_t, nsecs_t));
MOCK_METHOD2(recordRenderEngineDuration, void(nsecs_t, nsecs_t));
MOCK_METHOD2(recordRenderEngineDuration, void(nsecs_t, const std::shared_ptr<FenceTime>&));
- MOCK_METHOD5(setPostTime, void(int32_t, uint64_t, const std::string&, uid_t, nsecs_t));
+ MOCK_METHOD6(setPostTime, void(int32_t, uint64_t, const std::string&, uid_t, nsecs_t, int32_t));
MOCK_METHOD2(incrementLatchSkipped, void(int32_t layerId, LatchSkipReason reason));
MOCK_METHOD1(incrementBadDesiredPresent, void(int32_t layerId));
MOCK_METHOD3(setLatchTime, void(int32_t, uint64_t, nsecs_t));
MOCK_METHOD3(setDesiredTime, void(int32_t, uint64_t, nsecs_t));
MOCK_METHOD3(setAcquireTime, void(int32_t, uint64_t, nsecs_t));
MOCK_METHOD3(setAcquireFence, void(int32_t, uint64_t, const std::shared_ptr<FenceTime>&));
- MOCK_METHOD6(setPresentTime,
- void(int32_t, uint64_t, nsecs_t, Fps, std::optional<Fps>, SetFrameRateVote));
- MOCK_METHOD6(setPresentFence,
+ MOCK_METHOD7(setPresentTime,
+ void(int32_t, uint64_t, nsecs_t, Fps, std::optional<Fps>, SetFrameRateVote,
+ int32_t));
+ MOCK_METHOD7(setPresentFence,
void(int32_t, uint64_t, const std::shared_ptr<FenceTime>&, Fps, std::optional<Fps>,
- SetFrameRateVote));
+ SetFrameRateVote, int32_t));
MOCK_METHOD1(incrementJankyFrames, void(const JankyFramesInfo&));
MOCK_METHOD1(onDestroy, void(int32_t));
MOCK_METHOD2(removeTimeRecord, void(int32_t, uint64_t));
diff --git a/services/vibratorservice/VibratorHalWrapper.cpp b/services/vibratorservice/VibratorHalWrapper.cpp
index 1010aa5..f15a963 100644
--- a/services/vibratorservice/VibratorHalWrapper.cpp
+++ b/services/vibratorservice/VibratorHalWrapper.cpp
@@ -95,7 +95,10 @@
}
HalResult<void> HalResult<void>::fromStatus(binder::Status status) {
- if (status.exceptionCode() == binder::Status::EX_UNSUPPORTED_OPERATION) {
+ if (status.exceptionCode() == binder::Status::EX_UNSUPPORTED_OPERATION ||
+ status.transactionError() == android::UNKNOWN_TRANSACTION) {
+ // UNKNOWN_TRANSACTION means the HAL implementation is an older version, so this is
+ // the same as the operation being unsupported by this HAL. Should not retry.
return HalResult<void>::unsupported();
}
if (status.isOk()) {
diff --git a/services/vibratorservice/include/vibratorservice/VibratorHalWrapper.h b/services/vibratorservice/include/vibratorservice/VibratorHalWrapper.h
index 8720d9d..87bc34e 100644
--- a/services/vibratorservice/include/vibratorservice/VibratorHalWrapper.h
+++ b/services/vibratorservice/include/vibratorservice/VibratorHalWrapper.h
@@ -42,7 +42,10 @@
static HalResult<T> unsupported() { return HalResult("", /* unsupported= */ true); }
static HalResult<T> fromStatus(binder::Status status, T data) {
- if (status.exceptionCode() == binder::Status::EX_UNSUPPORTED_OPERATION) {
+ if (status.exceptionCode() == binder::Status::EX_UNSUPPORTED_OPERATION ||
+ status.transactionError() == android::UNKNOWN_TRANSACTION) {
+ // UNKNOWN_TRANSACTION means the HAL implementation is an older version, so this is
+ // the same as the operation being unsupported by this HAL. Should not retry.
return HalResult<T>::unsupported();
}
if (status.isOk()) {
diff --git a/services/vibratorservice/test/VibratorHalWrapperAidlTest.cpp b/services/vibratorservice/test/VibratorHalWrapperAidlTest.cpp
index af0cdb8..7813303 100644
--- a/services/vibratorservice/test/VibratorHalWrapperAidlTest.cpp
+++ b/services/vibratorservice/test/VibratorHalWrapperAidlTest.cpp
@@ -189,8 +189,7 @@
.WillRepeatedly(vibrator::TriggerSchedulerCallback());
EXPECT_CALL(*mMockHal.get(), on(Eq(11), _))
.Times(Exactly(1))
- .WillRepeatedly(Return(
- Status::fromExceptionCode(Status::Exception::EX_UNSUPPORTED_OPERATION)));
+ .WillRepeatedly(Return(Status::fromStatusT(UNKNOWN_TRANSACTION)));
EXPECT_CALL(*mMockHal.get(), on(Eq(12), _))
.Times(Exactly(1))
.WillRepeatedly(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)));
@@ -228,8 +227,7 @@
EXPECT_CALL(*mMockHal.get(), setAmplitude(Eq(0.1f))).Times(Exactly(1));
EXPECT_CALL(*mMockHal.get(), setAmplitude(Eq(0.2f)))
.Times(Exactly(1))
- .WillRepeatedly(Return(
- Status::fromExceptionCode(Status::Exception::EX_UNSUPPORTED_OPERATION)));
+ .WillRepeatedly(Return(Status::fromStatusT(UNKNOWN_TRANSACTION)));
EXPECT_CALL(*mMockHal.get(), setAmplitude(Eq(0.5f)))
.Times(Exactly(1))
.WillRepeatedly(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)));
@@ -265,8 +263,7 @@
EXPECT_CALL(*mMockHal.get(),
alwaysOnEnable(Eq(2), Eq(Effect::TICK), Eq(EffectStrength::MEDIUM)))
.Times(Exactly(1))
- .WillRepeatedly(Return(
- Status::fromExceptionCode(Status::Exception::EX_UNSUPPORTED_OPERATION)));
+ .WillRepeatedly(Return(Status::fromStatusT(UNKNOWN_TRANSACTION)));
EXPECT_CALL(*mMockHal.get(),
alwaysOnEnable(Eq(3), Eq(Effect::POP), Eq(EffectStrength::STRONG)))
.Times(Exactly(1))
@@ -397,8 +394,7 @@
Return(Status::fromExceptionCode(Status::Exception::EX_UNSUPPORTED_OPERATION)));
EXPECT_CALL(*mMockHal.get(), getSupportedPrimitives(_))
.Times(Exactly(1))
- .WillRepeatedly(
- Return(Status::fromExceptionCode(Status::Exception::EX_UNSUPPORTED_OPERATION)));
+ .WillRepeatedly(Return(Status::fromStatusT(UNKNOWN_TRANSACTION)));
EXPECT_CALL(*mMockHal.get(), getFrequencyMinimum(_))
.Times(Exactly(1))
.WillRepeatedly(DoAll(SetArgPointee<0>(F_MIN), Return(Status())));
@@ -411,8 +407,7 @@
Return(Status::fromExceptionCode(Status::Exception::EX_UNSUPPORTED_OPERATION)));
EXPECT_CALL(*mMockHal.get(), getBandwidthAmplitudeMap(_))
.Times(Exactly(1))
- .WillRepeatedly(
- Return(Status::fromExceptionCode(Status::Exception::EX_UNSUPPORTED_OPERATION)));
+ .WillRepeatedly(Return(Status::fromStatusT(UNKNOWN_TRANSACTION)));
EXPECT_CALL(*mMockHal.get(), getSupportedBraking(_))
.Times(Exactly(1))
.WillRepeatedly(
@@ -451,8 +446,7 @@
DoAll(SetArgPointee<3>(1000), TriggerCallbackInArg2(), Return(Status())));
EXPECT_CALL(*mMockHal.get(), perform(Eq(Effect::POP), Eq(EffectStrength::MEDIUM), _, _))
.Times(Exactly(1))
- .WillRepeatedly(Return(
- Status::fromExceptionCode(Status::Exception::EX_UNSUPPORTED_OPERATION)));
+ .WillRepeatedly(Return(Status::fromStatusT(UNKNOWN_TRANSACTION)));
EXPECT_CALL(*mMockHal.get(), perform(Eq(Effect::THUD), Eq(EffectStrength::STRONG), _, _))
.Times(Exactly(1))
.WillRepeatedly(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)));
@@ -549,8 +543,7 @@
.WillRepeatedly(DoAll(TriggerCallbackInArg1(), Return(Status())));
EXPECT_CALL(*mMockHal.get(), compose(Eq(singleEffect), _))
.Times(Exactly(1))
- .WillRepeatedly(Return(
- Status::fromExceptionCode(Status::Exception::EX_UNSUPPORTED_OPERATION)));
+ .WillRepeatedly(Return(Status::fromStatusT(UNKNOWN_TRANSACTION)));
EXPECT_CALL(*mMockHal.get(), compose(Eq(multipleEffects), _))
.Times(Exactly(1))
.WillRepeatedly(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)));
diff --git a/services/vibratorservice/test/VibratorManagerHalWrapperAidlTest.cpp b/services/vibratorservice/test/VibratorManagerHalWrapperAidlTest.cpp
index 548d028..1593cb1 100644
--- a/services/vibratorservice/test/VibratorManagerHalWrapperAidlTest.cpp
+++ b/services/vibratorservice/test/VibratorManagerHalWrapperAidlTest.cpp
@@ -308,8 +308,7 @@
Return(Status())));
EXPECT_CALL(*mMockHal.get(), triggerSynced(_))
.Times(Exactly(3))
- .WillOnce(Return(
- Status::fromExceptionCode(Status::Exception::EX_UNSUPPORTED_OPERATION)))
+ .WillOnce(Return(Status::fromStatusT(UNKNOWN_TRANSACTION)))
.WillOnce(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)))
.WillRepeatedly(DoAll(TriggerCallback(), Return(Status())));
}
@@ -345,8 +344,7 @@
TEST_F(VibratorManagerHalWrapperAidlTest, TestCancelSynced) {
EXPECT_CALL(*mMockHal.get(), cancelSynced())
.Times(Exactly(3))
- .WillOnce(
- Return(Status::fromExceptionCode(Status::Exception::EX_UNSUPPORTED_OPERATION)))
+ .WillOnce(Return(Status::fromStatusT(UNKNOWN_TRANSACTION)))
.WillOnce(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)))
.WillRepeatedly(Return(Status()));