From: Andreas Gampe Date: Wed, 24 Jun 2015 23:25:33 +0000 (-0700) Subject: ART: Set methods to preverified in verify-none X-Git-Tag: android-x86-7.1-r1~889^2~882^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=1c284f2abdfe1b0ed87d5216021e69146f10b116;p=android-x86%2Fart.git ART: Set methods to preverified in verify-none Actually mark all methods to be verified, so that the interpreter doesn't do access checks. Speedup is about 2x on a Nexus 6 when booting in verify-none mode. Bug: 22040916 Change-Id: I2d6c8df2a68eae6e358da2639d980cb8bfcc1560 --- diff --git a/compiler/driver/compiler_driver.cc b/compiler/driver/compiler_driver.cc index 4cdf75bba..7890108f4 100644 --- a/compiler/driver/compiler_driver.cc +++ b/compiler/driver/compiler_driver.cc @@ -1971,7 +1971,13 @@ static void SetVerifiedClass(const ParallelCompilationManager* manager, size_t c if (klass->IsResolved()) { if (klass->GetStatus() < mirror::Class::kStatusVerified) { ObjectLock lock(soa.Self(), klass); + // Set class status to verified. mirror::Class::SetStatus(klass, mirror::Class::kStatusVerified, soa.Self()); + // Mark methods as pre-verified. If we don't do this, the interpreter will run with + // access checks. + klass->SetPreverifiedFlagOnAllMethods( + GetInstructionSetPointerSize(manager->GetCompiler()->GetInstructionSet())); + klass->SetPreverified(); } // Record the final class status if necessary. ClassReference ref(manager->GetDexFile(), class_def_index);