| /* |
| * 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.mmtk.vm.gcspy; |
| |
| import org.mmtk.utility.Log; |
| import org.mmtk.utility.gcspy.drivers.AbstractDriver; |
| import org.vmmagic.unboxed.*; |
| import org.vmmagic.pragma.*; |
| |
| /** |
| * Abstract class for the GCspy Space abstraction. |
| * |
| * Implementing classes will largely forward calls to the gcspy C library. |
| */ |
| @Uninterruptible public abstract class ServerSpace { |
| |
| /**************************************************************************** |
| * |
| * Class variables |
| */ |
| protected static final String DEFAULT_UNUSED_STRING = "NOT USED"; // The "unused" string |
| |
| /**************************************************************************** |
| * |
| * Instance variables |
| */ |
| protected int spaceId; // the space's ID |
| protected Address driver; // a pointer to the C driver, gcspy_gc_drivert *driver; |
| protected static final boolean DEBUG = false; |
| |
| |
| /** |
| * Get a pointer to the native driver |
| * @return The address of the C driver, gcspy_gc_drivert *, used in all calls |
| * to the C library. |
| */ |
| Address getDriverAddress() { |
| return driver; |
| } |
| |
| /** |
| * Tell the native driver the tile name. |
| * @param i the number of the tile |
| * @param start the starting address of the tile |
| * @param end the end address |
| */ |
| public abstract void setTilename(int i, Address start, Address end); |
| |
| /** |
| * Tell the native driver the tile name. |
| * @param i the number of the tile |
| * @param format the name of the tile, a format string |
| * @param value The value for the format string |
| */ |
| public abstract void setTilename(int i, Address format, long value); |
| |
| /** |
| * Tell the native driver the tile names. |
| * @param i the number of the tile |
| * @param format The name, including format tags |
| * @param value The value for the format string |
| */ |
| public abstract void setTilename(int i, String format, long value); |
| |
| /** |
| * Tell the C driver to resize |
| * @param size the new driver size |
| */ |
| public abstract void resize(int size); |
| |
| /** |
| * Start a transmission |
| */ |
| public abstract void startCommunication(); |
| |
| /** |
| * Add a stream to the native driver |
| * @param id the stream's ID |
| * @return the address of the C gcspy_gc_stream_t |
| */ |
| public abstract Address addStream(int id); |
| |
| /** |
| * Start transmitting a stream. |
| * @param id The stream's ID |
| * @param len The number of items in the stream |
| */ |
| public abstract void stream(int id, int len); |
| |
| /** |
| * Send a byte |
| * @param value The byte |
| */ |
| public abstract void streamByteValue(byte value); |
| |
| /** |
| * Send a short |
| * @param value The short |
| */ |
| public abstract void streamShortValue(short value); |
| |
| /** |
| * Send an int |
| * @param value The int |
| */ |
| public abstract void streamIntValue(int value); |
| |
| /** |
| * End of this stream |
| */ |
| public abstract void streamEnd(); |
| |
| /** |
| * Start to send a summary |
| * @param id The stream's ID |
| * @param len The number of items to be sent |
| */ |
| public abstract void summary(int id, int len); |
| |
| /** |
| * Send a summary value |
| * @param val The value |
| */ |
| public abstract void summaryValue(int val); |
| |
| /** |
| * End the summary |
| */ |
| public abstract void summaryEnd(); |
| |
| /** |
| * Send all the control info for the space |
| * @param space The GCspy driver for this space |
| * @param tileNum The number of tiles |
| */ |
| public abstract void sendControls(AbstractDriver space, int tileNum); |
| |
| /** |
| * Send info for this space |
| * @param info A pointer to the information (held as C string) |
| */ |
| public abstract void spaceInfo(Address info); |
| |
| /** |
| * End the transmission (for this event) |
| */ |
| public void endCommunication() { |
| if (DEBUG) Log.write("endComm\n"); |
| } |
| } |