/* * This file is part of the Jikes RVM project (http://jikesrvm.org). * * This file is licensed to You under the Eclipse Public License (EPL); * You may not use this file except in compliance with the License. You * may obtain a copy of the License at * * http://www.opensource.org/licenses/eclipse-1.0.php * * See the COPYRIGHT.txt file distributed with this work for information * regarding copyright ownership. */ package org.jikesrvm.adaptive.measurements.listeners; import org.jikesrvm.adaptive.measurements.organizers.Organizer; import org.vmmagic.pragma.Interruptible; import org.vmmagic.pragma.Uninterruptible; /** * A Listener object is invoked when online measurement information * needs to be collected. * * This class does not define the update() method, the call back method from * the runtime when a sample should be taken. * The expectation is that immediately derived classes define an interface to * the update() method from which classes may be further derived. * * CONSTRAINTS: * Classes that are derived from Listener * must be annotated as Uninterruptible to ensure that they * are not interrupted by a thread switch. * Since thread switching is disabled, listeners are * expected to complete execution quickly, and therefore, * must do a minimal amount of work. */ @Uninterruptible public abstract class Listener { /** * Entry point to dump what has been collected. */ @Interruptible public abstract void report(); /** * Is the listener currently active (interested in getting "update" calls) */ public final boolean isActive() { return active; } /** * Transition listener to active state */ public final void activate() { active = true; } /** * Transition listener to passive state */ public final void passivate() { active = false; } /** * reset the listeners data structures */ public abstract void reset(); /** * Organizer associated with this listener. */ public final void setOrganizer(Organizer organizer) { this.organizer = organizer; } /** * Wake up the organizer thread (if any) associated with the listener */ public final void activateOrganizer() { if (organizer != null) { organizer.activate(); } } // Is the listener active or passive? private boolean active = false; // My organizer. private Organizer organizer; }