From 8b862ffa7ea7374e48329ae090c68c06a8c885bb Mon Sep 17 00:00:00 2001 From: Andreas Gampe Date: Mon, 17 Oct 2016 17:49:59 -0700 Subject: [PATCH] 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 --- runtime/openjdkjvmti/events.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/runtime/openjdkjvmti/events.cc b/runtime/openjdkjvmti/events.cc index 9ff6c93c8..59e01eafa 100644 --- a/runtime/openjdkjvmti/events.cc +++ b/runtime/openjdkjvmti/events.cc @@ -219,6 +219,8 @@ jvmtiError EventHandler::SetEvent(ArtJvmTiEnv* env, 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 @@ jvmtiError EventHandler::SetEvent(ArtJvmTiEnv* env, 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); } -- 2.11.0