summaryrefslogtreecommitdiffstats
path: root/compiler/driver
diff options
context:
space:
mode:
authorBrian Carlstrom <bdc@google.com>2013-07-25 10:50:39 -0700
committerBrian Carlstrom <bdc@google.com>2013-07-25 10:50:39 -0700
commitd792cc1569c3505d68352c11a72447419ee6eaaf (patch)
treed5e5f44414d54064f0ab3095155f7dad0c6ec9b6 /compiler/driver
parent23d5cffcb8e32aaa6ce0895ade28849f72d90463 (diff)
downloadart-d792cc1569c3505d68352c11a72447419ee6eaaf.zip
art-d792cc1569c3505d68352c11a72447419ee6eaaf.tar.gz
art-d792cc1569c3505d68352c11a72447419ee6eaaf.tar.bz2
Add art support for Zygote NoPreloadHolder which black lists early initialization.
Change-Id: I9c68f6d7a1f230aba6382b1331d413d4cb92be12
Diffstat (limited to 'compiler/driver')
-rw-r--r--compiler/driver/compiler_driver.cc14
1 files changed, 8 insertions, 6 deletions
diff --git a/compiler/driver/compiler_driver.cc b/compiler/driver/compiler_driver.cc
index 486c536..c2a1312 100644
--- a/compiler/driver/compiler_driver.cc
+++ b/compiler/driver/compiler_driver.cc
@@ -1981,7 +1981,6 @@ static const char* class_initializer_black_list[] = {
"Ljavax/security/cert/X509Certificate$1;", // Calls VMClassLoader.getBootClassPathSize.
"Ljavax/microedition/khronos/egl/EGL10;", // Requires EGLContext.
"Ljavax/microedition/khronos/egl/EGLContext;", // Requires com.google.android.gles_jni.EGLImpl.
- "Ljavax/net/ssl/HttpsURLConnection$DefaultHolder;", // Calls VMClassLoader.getBootClassPathSize().
"Ljavax/xml/datatype/DatatypeConstants;", // Calls OsConstants.initConstants.
"Ljavax/xml/datatype/FactoryFinder;", // Calls OsConstants.initConstants.
"Ljavax/xml/namespace/QName;", // Calls OsConstants.initConstants.
@@ -2071,11 +2070,14 @@ static void InitializeClass(const ParallelCompilationManager* manager, size_t cl
}
if (!klass->IsInitialized()) {
if (can_init_static_fields) {
- bool is_black_listed = false;
- for (size_t i = 0; i < arraysize(class_initializer_black_list); ++i) {
- if (StringPiece(descriptor) == class_initializer_black_list[i]) {
- is_black_listed = true;
- break;
+ // NoPreloadHolder inner class implies this should not be initialized early.
+ bool is_black_listed = StringPiece(descriptor).ends_with("$NoPreloadHolder;");
+ if (!is_black_listed) {
+ for (size_t i = 0; i < arraysize(class_initializer_black_list); ++i) {
+ if (StringPiece(descriptor) == class_initializer_black_list[i]) {
+ is_black_listed = true;
+ break;
+ }
}
}
if (!is_black_listed) {