diff options
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/driver/compiler_driver.cc | 10 | ||||
| -rw-r--r-- | compiler/image_writer.cc | 27 |
2 files changed, 16 insertions, 21 deletions
diff --git a/compiler/driver/compiler_driver.cc b/compiler/driver/compiler_driver.cc index ded70cdaca..9ee0a366b3 100644 --- a/compiler/driver/compiler_driver.cc +++ b/compiler/driver/compiler_driver.cc @@ -688,7 +688,7 @@ void CompilerDriver::CompileOne(Thread* self, ArtMethod* method, TimingLogger* t const DexFile::CodeItem* code_item = dex_file->GetCodeItem(method->GetCodeItemOffset()); // Go to native so that we don't block GC during compilation. - self->TransitionFromRunnableToSuspended(kNative); + ScopedThreadSuspension sts(self, kNative); std::vector<const DexFile*> dex_files; dex_files.push_back(dex_file); @@ -718,7 +718,6 @@ void CompilerDriver::CompileOne(Thread* self, ArtMethod* method, TimingLogger* t dex_cache); self->GetJniEnv()->DeleteGlobalRef(jclass_loader); - self->TransitionFromSuspendedToRunnable(); } CompiledMethod* CompilerDriver::CompileArtMethod(Thread* self, ArtMethod* method) { @@ -737,7 +736,7 @@ CompiledMethod* CompilerDriver::CompileArtMethod(Thread* self, ArtMethod* method GetDexToDexCompilationLevel(self, *this, class_loader, *dex_file, class_def); const DexFile::CodeItem* code_item = dex_file->GetCodeItem(method->GetCodeItemOffset()); // Go to native so that we don't block GC during compilation. - self->TransitionFromRunnableToSuspended(kNative); + ScopedThreadSuspension sts(self, kNative); CompileMethod(self, this, code_item, @@ -751,7 +750,6 @@ CompiledMethod* CompilerDriver::CompileArtMethod(Thread* self, ArtMethod* method true, dex_cache); auto* compiled_method = GetCompiledMethod(MethodReference(dex_file, method_idx)); - self->TransitionFromSuspendedToRunnable(); return compiled_method; } @@ -2382,7 +2380,7 @@ class CompileClassVisitor : public CompilationVisitor { } // Go to native so that we don't block GC during compilation. - soa.Self()->TransitionFromRunnableToSuspended(kNative); + ScopedThreadSuspension sts(soa.Self(), kNative); CompilerDriver* const driver = manager_->GetCompiler(); @@ -2437,8 +2435,6 @@ class CompileClassVisitor : public CompilationVisitor { it.Next(); } DCHECK(!it.HasNext()); - - soa.Self()->TransitionFromSuspendedToRunnable(); } private: diff --git a/compiler/image_writer.cc b/compiler/image_writer.cc index dbd3366c1b..f318921d3f 100644 --- a/compiler/image_writer.cc +++ b/compiler/image_writer.cc @@ -85,11 +85,9 @@ static void CheckNoDexObjects() { bool ImageWriter::PrepareImageAddressSpace() { target_ptr_size_ = InstructionSetPointerSize(compiler_driver_.GetInstructionSet()); { - Thread::Current()->TransitionFromSuspendedToRunnable(); + ScopedObjectAccess soa(Thread::Current()); PruneNonImageClasses(); // Remove junk ComputeLazyFieldsForImageClasses(); // Add useful information - - Thread::Current()->TransitionFromRunnableToSuspended(kNative); } gc::Heap* heap = Runtime::Current()->GetHeap(); heap->CollectGarbage(false); // Remove garbage. @@ -109,9 +107,10 @@ bool ImageWriter::PrepareImageAddressSpace() { CheckNonImageClassesRemoved(); } - Thread::Current()->TransitionFromSuspendedToRunnable(); - CalculateNewObjectOffsets(); - Thread::Current()->TransitionFromRunnableToSuspended(kNative); + { + ScopedObjectAccess soa(Thread::Current()); + CalculateNewObjectOffsets(); + } // This needs to happen after CalculateNewObjectOffsets since it relies on intern_table_bytes_ and // bin size sums being calculated. @@ -164,14 +163,14 @@ bool ImageWriter::Write(const std::string& image_filename, size_t oat_data_offset = 0; ElfWriter::GetOatElfInformation(oat_file.get(), &oat_loaded_size, &oat_data_offset); - Thread::Current()->TransitionFromSuspendedToRunnable(); - - CreateHeader(oat_loaded_size, oat_data_offset); - CopyAndFixupNativeData(); - // TODO: heap validation can't handle these fix up passes. - Runtime::Current()->GetHeap()->DisableObjectValidation(); - CopyAndFixupObjects(); - Thread::Current()->TransitionFromRunnableToSuspended(kNative); + { + ScopedObjectAccess soa(Thread::Current()); + CreateHeader(oat_loaded_size, oat_data_offset); + CopyAndFixupNativeData(); + // TODO: heap validation can't handle these fix up passes. + Runtime::Current()->GetHeap()->DisableObjectValidation(); + CopyAndFixupObjects(); + } SetOatChecksumFromElfFile(oat_file.get()); |