summaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
Diffstat (limited to 'compiler')
-rw-r--r--compiler/driver/compiler_driver.cc10
-rw-r--r--compiler/image_writer.cc27
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());