Fix debugger performance regression
http://b/issue?id=4282910
The interpreter was reporting every instruction as a method entry point,
causing significant performance degradation in the debugger.
Change-Id: If6fb092d6ade7fc3d74be3c7f806bf2d6923a063
diff --git a/vm/interp/Interp.c b/vm/interp/Interp.c
index e670d49..092df32 100644
--- a/vm/interp/Interp.c
+++ b/vm/interp/Interp.c
@@ -714,7 +714,7 @@
* the event list unless we know there's at least one lurking within.
*/
static void updateDebugger(const Method* method, const u2* pc, const u4* fp,
- bool methodEntry, Thread* self)
+ Thread* self)
{
int eventFlags = 0;
@@ -727,8 +727,10 @@
*/
dvmExportPC(pc, fp);
- if (methodEntry)
+ if (self->debugIsMethodEntry) {
eventFlags |= DBG_METHOD_ENTRY;
+ self->debugIsMethodEntry = false;
+ }
/*
* See if we have a breakpoint here.
@@ -1775,8 +1777,7 @@
}
if (self->interpBreak.ctl.subMode & kSubModeDebuggerActive) {
- updateDebugger(method, pc, fp,
- self->debugIsMethodEntry, self);
+ updateDebugger(method, pc, fp, self);
}
if (gDvm.instructionCountEnableCount != 0) {
/*