ART: Better handle multiple event enables
Only do extra work like allocation listener registration when the
global state changes.
Bug: 31684920
Test: m test-art-host
Change-Id: Id927f2b504e02f2d68bc6e4af2658a6017920d8a
diff --git a/runtime/openjdkjvmti/events.cc b/runtime/openjdkjvmti/events.cc
index 9ff6c93..59e01ea 100644
--- a/runtime/openjdkjvmti/events.cc
+++ b/runtime/openjdkjvmti/events.cc
@@ -219,6 +219,8 @@
return ERR(INVALID_EVENT_TYPE);
}
+ bool old_state = global_mask.Test(event);
+
if (mode == JVMTI_ENABLE) {
env->event_masks.EnableEvent(thread, event);
global_mask.Set(event);
@@ -239,8 +241,12 @@
global_mask.Set(event, union_value);
}
+ bool new_state = global_mask.Test(event);
+
// Handle any special work required for the event type.
- HandleEventType(event, mode == JVMTI_ENABLE);
+ if (new_state != old_state) {
+ HandleEventType(event, mode == JVMTI_ENABLE);
+ }
return ERR(NONE);
}