summaryrefslogtreecommitdiffstats
path: root/vm/compiler/codegen/arm/CodegenDriver.c
diff options
context:
space:
mode:
authorBen Cheng <bccheng@android.com>2010-01-26 16:46:15 -0800
committerBen Cheng <bccheng@android.com>2010-02-03 13:01:55 -0800
commit6999d84e2c55dc4a46a6c311b55bd5811336d9c4 (patch)
tree809008af195a534bc5db4b9818a73d508e960903 /vm/compiler/codegen/arm/CodegenDriver.c
parentb9126dddbc33bcc0467d753b0dc443296730c431 (diff)
downloadandroid_dalvik-6999d84e2c55dc4a46a6c311b55bd5811336d9c4.tar.gz
android_dalvik-6999d84e2c55dc4a46a6c311b55bd5811336d9c4.tar.bz2
android_dalvik-6999d84e2c55dc4a46a6c311b55bd5811336d9c4.zip
Fix performance issues related to chaining and unchaining.
1) Patching requests for predicted chaining cells (used by virtual/interface methods) are now batched in a queue and processed when the VM is paused for GC. 2) When the code cache is full the reset operation is also conducted at the end of GC pauses so this totally eliminates the need for the compiler thread to issue suspend-all requests. This is a very rare event and when happening it takes less than 5ms to finish. 3) Change the initial value of the branch in a predicted chaining cell from 0 (ie lsl r0, r0, #0) to 0xe7fe (ie branch to self) so that initializing a predicted chaining cell doesn't need to suspend all threads. Together with 1) seeing 20% speedup on some benchmarks. 4) Add TestCompability.c where defining "TEST_VM_IN_ECLAIR := true" in buildspec.mk will activate dummy symbols needed to run libdvm.so in older releases. Bug: 2397689 Bug: 2396513 Bug: 2331313
Diffstat (limited to 'vm/compiler/codegen/arm/CodegenDriver.c')
-rw-r--r--vm/compiler/codegen/arm/CodegenDriver.c6
1 files changed, 1 insertions, 5 deletions
diff --git a/vm/compiler/codegen/arm/CodegenDriver.c b/vm/compiler/codegen/arm/CodegenDriver.c
index 5be07aa3d..b0e16b82f 100644
--- a/vm/compiler/codegen/arm/CodegenDriver.c
+++ b/vm/compiler/codegen/arm/CodegenDriver.c
@@ -4121,8 +4121,7 @@ bool dvmCompilerDoWork(CompilerWorkOrder *work)
{
bool res;
- if (gDvmJit.codeCacheFull &&
- (work->kind != kWorkOrderICPatch)) {
+ if (gDvmJit.codeCacheFull) {
return false;
}
@@ -4142,9 +4141,6 @@ bool dvmCompilerDoWork(CompilerWorkOrder *work)
gDvmJit.printMe = oldPrintMe;;
break;
}
- case kWorkOrderICPatch:
- res = dvmJitPatchInlineCache((void *) work->pc, work->info);
- break;
default:
res = false;
dvmAbort();