diff options
author | Brian Carlstrom <bdc@google.com> | 2013-07-25 10:50:39 -0700 |
---|---|---|
committer | Brian Carlstrom <bdc@google.com> | 2013-07-25 10:50:39 -0700 |
commit | d792cc1569c3505d68352c11a72447419ee6eaaf (patch) | |
tree | d5e5f44414d54064f0ab3095155f7dad0c6ec9b6 /compiler/driver | |
parent | 23d5cffcb8e32aaa6ce0895ade28849f72d90463 (diff) | |
download | art-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.cc | 14 |
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) { |