## mars.tools
Class InstructionStatistics

    java.lang.Object
      java.awt.Component
          java.awt.Container
              java.awt.Window
                  java.awt.Frame
                      javax.swing.JFrame
                          mars.tools.AbstractMarsToolAndApplication
                              mars.tools.InstructionStatistics

All Implemented Interfaces:
  ImageObserver, MenuContainer, Serializable, Observer, Accessible, RootPaneContainer, WindowConstants, MarsTool

    public class InstructionStatistics

extends AbstractMarsToolAndApplication

A MARS tool for obtaining instruction statistics by instruction category.

The code of this tools is initially based on the Instruction counter tool by Felipe Lassa.

Author:
  Ingo Kofler <ingo.kofler@itec.uni-klu.ac.at>
See Also:
  Serialized Form

Nested Class Summary

Nested classes/interfaces inherited from class mars.tools.AbstractMarsToolAndApplication
`AbstractMarsToolAndApplication.ConnectButton, AbstractMarsToolAndApplication.EnterKeyListener`

Nested classes/interfaces inherited from class javax.swing.JFrame
`JFrame.AccessibleJFrame`

Nested classes/interfaces inherited from class java.awt.Frame
`Frame.AccessibleAWTFrame`

Nested classes/interfaces inherited from class java.awt.Window
`Window.AccessibleAWTWindow`

Nested classes/interfaces inherited from class java.awt.Container
`Container.AccessibleAWTContainer`

Nested classes/interfaces inherited from class java.awt.Component
`Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy`

Field Summary
`protected int` `lastAddress` The last address we saw.

Fields inherited from class mars.tools.AbstractMarsToolAndApplication
`connectButton, isBeingUsedAsAMarsTool, theWindow, thisMarsApp`

Fields inherited from class javax.swing.JFrame
`accessibleContext, EXIT_ON_CLOSE, rootPane, rootPaneCheckingEnabled`

Fields inherited from class java.awt.Frame
`CROSSHAIR_CURSOR, DEFAULT_CURSOR, E_RESIZE_CURSOR, HAND_CURSOR, ICONIFIED, MAXIMIZED_BOTH, MAXIMIZED_HORIZ, MAXIMIZED_VERT, MOVE_CURSOR, N_RESIZE_CURSOR, NE_RESIZE_CURSOR, NORMAL, NW_RESIZE_CURSOR, S_RESIZE_CURSOR, SE_RESIZE_CURSOR, SW_RESIZE_CURSOR, TEXT_CURSOR, W_RESIZE_CURSOR, WAIT_CURSOR`

Fields inherited from class java.awt.Component
`BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT`

Fields inherited from interface javax.swing.WindowConstants
`DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE`

Fields inherited from interface java.awt.image.ImageObserver
`ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH`

Constructor Summary
`InstructionStatistics()` Simple construction, likely used by the MARS Tools menu mechanism.
`InstructionStatistics(String title, String heading)` Simple constructor, likely used to run a stand-alone enhanced instruction counter.

Method Summary
`protected void` `addAsObserver()` registers the tool as observer for the text segment of the MIPS program
`protected JComponent` `buildMainDisplayArea()` creates the display area for the tool as required by the API
`protected int` `getInstructionCategory(ProgramStatement stmt)` decodes the instruction and determines the category of the instruction.
`String` `getName()` returns the name of the tool
`protected void` `initializePreGUI()` performs initialization tasks of the counters before the GUI is created.
`protected void` `processMIPSUpdate(Observable resource, AccessNotice notice)` method that is called each time the MIPS simulator accesses the text segment.
`protected void` `reset()` resets the counter values of the tool and updates the display.
`protected void` `updateDisplay()` updates the text fields and progress bars according to the current counter values.

Methods inherited from class mars.tools.AbstractMarsToolAndApplication
`action, addAsObserver, addAsObserver, buildButtonAreaMarsTool, buildButtonAreaStandAlone, buildHeadingArea, deleteAsObserver, deleteAsObserver, getHelpComponent, go, initializePostGUI, isObserving, performSpecialClosingDuties, update`

Methods inherited from class javax.swing.JFrame

`addImpl, createRootPane, frameInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getGraphics, getJMenuBar, getLayeredPane, getRootPane, getTransferHandler, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, processWindowEvent, remove, repaint, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setIconImage, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, setTransferHandler, update`

Methods inherited from class java.awt.Frame
`addNotify, getCursorType, getExtendedState, getFrames, getIconImage, getMaximizedBounds, getMenuBar, getState, getTitle, isResizable, isUndecorated, remove, removeNotify, setCursor, setExtendedState, setMaximizedBounds, setMenuBar, setResizable, setState, setTitle, setUndecorated`

Methods inherited from class java.awt.Window

`addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getGraphicsConfiguration, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOwnedWindows, getOwner, getOwnerlessWindows, getToolkit, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, hide, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isShowing, pack, paint, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImages, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, setVisible, show, toBack, toFront`

Methods inherited from class java.awt.Container

`add, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, transferFocusBackward, transferFocusDownCycle, validate, validateTree`

Methods inherited from class java.awt.Component

`action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resize, resize, setBackground, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusUpCycle`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

Methods inherited from interface java.awt.MenuContainer
`getFont, postEvent`

Field Detail

### lastAddress

    protected int lastAddress

  The last address we saw. We ignore it because the only way for a program to execute twice the same instruction is to enter an infinite loop, which is not insteresting in the POV of counting instructions.

Constructor Detail

### InstructionStatistics

    public InstructionStatistics(String title,
                                 String heading)

  Simple constructor, likely used to run a stand-alone enhanced instruction counter.

  Parameters:
    `title` - String containing title for title bar
    `heading` - String containing text for heading shown in upper part of window.

### InstructionStatistics

    public InstructionStatistics()

  Simple construction, likely used by the MARS Tools menu mechanism.

Method Detail

### getName

    public String getName()

  returns the name of the tool

  Specified by:
    `getName` in interface `MarsTool`
  Specified by:
    `getName` in class `AbstractMarsToolAndApplication`
  Returns:
    the tools's name

### buildMainDisplayArea

    protected JComponent buildMainDisplayArea()

  creates the display area for the tool as required by the API

  Specified by:
    `buildMainDisplayArea` in class `AbstractMarsToolAndApplication`
  Returns:
    a panel that holds the GUI of the tool

### addAsObserver

    protected void addAsObserver()

  registers the tool as observer for the text segment of the MIPS program

  Overrides:
    `addAsObserver` in class `AbstractMarsToolAndApplication`

### getInstructionCategory

    protected int getInstructionCategory(ProgramStatement stmt)

  decodes the instruction and determines the category of the instruction. The instruction is decoded by extracting the operation and function code of the 32-bit instruction. Only the most relevant instructions are decoded and categorized.

  Parameters:
    `stmt` - the instruction to decode
  Returns:
    the category of the instruction
  See Also:
    `CATEGORY_ALU`, `CATEGORY_JUMP`, `CATEGORY_BRANCH`, `CATEGORY_MEM`, `CATEGORY_OTHER`

### processMIPSUpdate

    protected void processMIPSUpdate(Observable resource,
                                     AccessNotice notice)

  method that is called each time the MIPS simulator accesses the text segment. Before an instruction is executed by the simulator, the instruction is fetched from the program memory. This memory access is observed and the corresponding instruction is decoded and categorized by the tool. According to the category the counter values are increased and the display gets updated.

  Overrides:
    `processMIPSUpdate` in class `AbstractMarsToolAndApplication`
  Parameters:
    `resource` - the observed resource
    `notice` - signals the type of access (memory, register etc.)

### initializePreGUI

    protected void initializePreGUI()

  performs initialization tasks of the counters before the GUI is created.

  Overrides:
    `initializePreGUI` in class `AbstractMarsToolAndApplication`

### reset

    protected void reset()

  resets the counter values of the tool and updates the display.

  Overrides:
    `reset` in class `AbstractMarsToolAndApplication`

### updateDisplay

    protected void updateDisplay()

  updates the text fields and progress bars according to the current counter values.

  Overrides:
    `updateDisplay` in class `AbstractMarsToolAndApplication`