Snap for 7670480 from 8d44c3d61d4bde412f06190cd4acc4afc2ea469c to sc-beta5-release
Change-Id: Ia5750b594088a4e190d2fd543ae07a19597a82cf
diff --git a/odrefresh/odrefresh.cc b/odrefresh/odrefresh.cc
index cda39ee..2cef50d 100644
--- a/odrefresh/odrefresh.cc
+++ b/odrefresh/odrefresh.cc
@@ -1139,7 +1139,13 @@
AddDex2OatInstructionSet(&args, isa);
const std::string jar_name(android::base::Basename(jar));
const std::string profile = Concatenate({GetAndroidRoot(), "/framework/", jar_name, ".prof"});
- AddDex2OatProfileAndCompilerFilter(&args, profile);
+ std::string compiler_filter =
+ android::base::GetProperty("dalvik.vm.systemservercompilerfilter", "speed");
+ if (compiler_filter == "speed-profile") {
+ AddDex2OatProfileAndCompilerFilter(&args, profile);
+ } else {
+ args.emplace_back("--compiler-filter=" + compiler_filter);
+ }
const std::string image_location = GetSystemServerImagePath(/*on_system=*/false, jar);
const std::string install_location = android::base::Dirname(image_location);
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc
index b9751ab..8b9e42a 100644
--- a/runtime/class_linker.cc
+++ b/runtime/class_linker.cc
@@ -9814,22 +9814,16 @@
}
void ClassLinker::DumpForSigQuit(std::ostream& os) {
- // Avoid a deadlock between a garbage collecting thread running a checkpoint,
- // a thread holding the dex or classlinker lock and blocking on a condition variable for
- // weak references access, and a thread blocking on the dex or classlinker lock and thus
- // unable to run the checkpoint.
- Thread* self = Thread::Current();
- ScopedObjectAccess soa(self);
- gc::ScopedGCCriticalSection gcs(self, gc::kGcCauseClassLinker, gc::kCollectorTypeClassLinker);
- ReaderMutexLock mu(self, *Locks::classlinker_classes_lock_);
+ ScopedObjectAccess soa(Thread::Current());
+ ReaderMutexLock mu(soa.Self(), *Locks::classlinker_classes_lock_);
os << "Zygote loaded classes=" << NumZygoteClasses() << " post zygote classes="
<< NumNonZygoteClasses() << "\n";
- ReaderMutexLock mu2(self, *Locks::dex_lock_);
+ ReaderMutexLock mu2(soa.Self(), *Locks::dex_lock_);
os << "Dumping registered class loaders\n";
size_t class_loader_index = 0;
for (const ClassLoaderData& class_loader : class_loaders_) {
ObjPtr<mirror::ClassLoader> loader =
- ObjPtr<mirror::ClassLoader>::DownCast(self->DecodeJObject(class_loader.weak_root));
+ ObjPtr<mirror::ClassLoader>::DownCast(soa.Self()->DecodeJObject(class_loader.weak_root));
if (loader != nullptr) {
os << "#" << class_loader_index++ << " " << loader->GetClass()->PrettyDescriptor() << ": [";
bool saw_one_dex_file = false;
@@ -9848,7 +9842,7 @@
size_t parent_index = 0;
for (const ClassLoaderData& class_loader2 : class_loaders_) {
ObjPtr<mirror::ClassLoader> loader2 = ObjPtr<mirror::ClassLoader>::DownCast(
- self->DecodeJObject(class_loader2.weak_root));
+ soa.Self()->DecodeJObject(class_loader2.weak_root));
if (loader2 == loader->GetParent()) {
os << ", parent #" << parent_index;
found_parent = true;