|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectsofya.ed.structural.processors.AbstractProcessingStrategy
sofya.ed.structural.processors.AbstractSocketProcessingStrategy
sofya.ed.structural.processors.BlockSequenceProcessingStrategy
public class BlockSequenceProcessingStrategy
Processing strategy to receive basic block sequence probes and dispatch basic block sequence events.
| Field Summary | |
|---|---|
protected static long |
pendingTimeStamp
Last timestamp that forced a synchronization, used when the subject is an event dispatcher. |
protected static java.lang.Object |
timeLock
Synchronizes access to pendingTimeStamp and controls
notifications between threads. |
| Fields inherited from class sofya.ed.structural.processors.AbstractSocketProcessingStrategy |
|---|
isSbjDispatcher, PREEMPTIVE, traceLock |
| Fields inherited from class sofya.ed.structural.processors.AbstractProcessingStrategy |
|---|
instMode, sbjout, stderr, stdout |
| Constructor Summary | |
|---|---|
BlockSequenceProcessingStrategy()
Creates a new instance of the processing strategy. |
|
| Method Summary | |
|---|---|
void |
addEventListener(BlockEventListener listener)
Registers a listener for observable events. |
boolean |
areCallBlocksActive()
Reports whether call blocks are selected. |
boolean |
areCodeBlocksActive()
Reports whether general basic blocks are selected; general basic blocks are any basic blocks corresponding to actual program code other than method call blocks. |
boolean |
areEntryBlocksActive()
Reports whether entry blocks are selected. |
boolean |
areExitBlocksActive()
Reports whether exit blocks are selected. |
java.util.List |
configure(java.util.List params)
Configures this component from command line parameters. |
void |
dispatcherStarting()
Message sent by the event dispatcher to indicate that it is about to start receiving data to publish its event stream. |
void |
dispatcherStopped()
Message sent by the event dispatcher to indicate that it has stopped receiving data used to publish its event stream. |
void |
doHandshake(java.net.Socket sbjSocket)
Executes the handshake procedure with the socket probe. |
int |
getTypeFlags()
Gets the bitmask corresponding to the types of basic blocks currently selected. |
boolean |
isReady()
Reports whether this component is ready for the event dispatcher to begin dispatching events. |
void |
processProbes(java.net.Socket sbjSocket,
ControlData cntrl)
The standard trace processing loop, used for all subjects except other event dispatchers. |
void |
processProbesSynchronized(java.net.Socket sbjSocket,
ControlData cntrl)
The synchronized trace processing loop. |
void |
register(EventDispatcherConfiguration edConfig)
Registers this component with the event dispatcher. |
void |
release()
Notifies this component that its current lifecycle has expired and that it should commit any stored state and release resources. |
void |
removeEventListener(BlockEventListener listener)
Unregisters a listener for observable events. |
void |
reset()
Notifies this component to clear its configuration and reset any internal state. |
void |
setCallBlocksActive(boolean enable)
Sets whether call blocks are selected. |
void |
setCodeBlocksActive(boolean enable)
Sets whether general basic blocks are selected; general basic blocks are any basic blocks corresponding to actual program code other than method call blocks. |
void |
setEntryBlocksActive(boolean enable)
Sets whether entry blocks are selected. |
void |
setExitBlocksActive(boolean enable)
Sets whether exit blocks are selected. |
| Methods inherited from class sofya.ed.structural.processors.AbstractSocketProcessingStrategy |
|---|
openSignalSocket, parseMethodSignature |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
protected static volatile long pendingTimeStamp
protected static java.lang.Object timeLock
pendingTimeStamp and controls
notifications between threads.
| Constructor Detail |
|---|
public BlockSequenceProcessingStrategy()
| Method Detail |
|---|
public void addEventListener(BlockEventListener listener)
listener - Observer that wishes to receive basic block events from
the event dispatcher.public void removeEventListener(BlockEventListener listener)
listener - Object that no longer wishes to receive basic block
events from the event dispatcher.public void register(EventDispatcherConfiguration edConfig)
AbstractProcessingStrategyRegisters this component with the event dispatcher.
register in interface ActiveComponentregister in class AbstractSocketProcessingStrategyedConfig - The current configuration of system global resources
and settings that the component will use as appropriate.public java.util.List configure(java.util.List params)
ActiveComponentConfigures this component from command line parameters.
This method provides a component the opportunity to define and process command line parameters required to configure itself. Components participate in a processing chain, initiated in Sofya-provided event dispatchers by calling this method on the processing strategy. The processing strategies provided by Sofya in turn invoke this method on any listeners implementing this interface.
configure in interface ActiveComponentconfigure in class AbstractSocketProcessingStrategyparams - A list of command line tokens that have not yet
been processed by any previous components.
public void reset()
ActiveComponentNotifies this component to clear its configuration and reset any internal state.
Calls to this method are chained similary to the ActiveComponent.configure(java.util.List)
method. This method is invoked by the event dispatcher prior to
reconfiguration. Normally it should be used to clear any configuration
state to avoid using stale values.
reset in interface ActiveComponentreset in class AbstractSocketProcessingStrategypublic boolean isReady()
ActiveComponentReports whether this component is ready for the event dispatcher to begin dispatching events.
Calls to this method are chained similarly to the ActiveComponent.configure(java.util.List)
method. The event dispatcher will fail with an error if a client
invokes ProgramEventDispatcher.startDispatcher() when any
attached component returns false from this method.
isReady in interface ActiveComponenttrue if this component is ready for the event
dispatcher to begin dispatching events, false otherwise.public void release()
ActiveComponentNotifies this component that its current lifecycle has expired and that it should commit any stored state and release resources.
Calls to this method are chained similary to the ActiveComponent.configure(java.util.List)
method. This method is invoked directly by a client of the event
dispatcher. Normally, it should be used to release any resources that
were required to persist over multiple runs of the event dispatcher.
release in interface ActiveComponentrelease in class AbstractSocketProcessingStrategypublic void dispatcherStarting()
SocketProcessingStrategyThis message provides the processing strategy an opportunity to take some action prior to handling the event stream, such as issuing a message to listeners.
dispatcherStarting in interface SocketProcessingStrategypublic void dispatcherStopped()
SocketProcessingStrategyThis message provides the processing strategy an opportunity to take some action after handling the event stream, such as issuing a message to listeners.
dispatcherStopped in interface SocketProcessingStrategy
public void doHandshake(java.net.Socket sbjSocket)
throws java.io.IOException,
AbstractEventDispatcher.ExecException
SocketProcessingStrategyThis method should check whether the type of instrumentation indicated by the socket probe is appropriate for this processing strategy. If it is not, an error response should be sent to the socket probe and an exception thrown. Otherwise, the integer code for the form of instrumentation to be processed should be returned.
doHandshake in interface SocketProcessingStrategysbjSocket - Main communications socket which is connected to the
socket probe.
java.io.IOException - If there is any error communicating through
the socket.
AbstractEventDispatcher.ExecException - If the instrumentation in the subject is not
appropriate for this type of filter.
public void processProbes(java.net.Socket sbjSocket,
ControlData cntrl)
SocketProcessingStrategyThe run loop waits for the subject to negotiate a socket connection
and then begins processing trace messages until the socket stream is
closed. If the subject is not instrumented, this loop will be killed
while waiting for the subject to connect when the main thread calls
ProgramEventDispatcher.stopServer().
A standard trace processing loop is provided distinct from the
synchronized version so that the cost of synchronization is not
incurred for all subjects. This also avoids complications related to
determining when to strip timestamps from trace messages. The cost of
this implementation is that you must remember to update both this
method and SocketProcessingStrategy.processProbesSynchronized(java.net.Socket, sofya.ed.structural.ControlData) when
making changes to how trace messages are processed.
processProbes in interface SocketProcessingStrategy
public void processProbesSynchronized(java.net.Socket sbjSocket,
ControlData cntrl)
SocketProcessingStrategyThe processing performed by this run loop should be functionally
equivalent to that of SocketProcessingStrategy.processProbes(java.net.Socket, sofya.ed.structural.ControlData). The only
difference is that this loop should synchronize access to the
listeners.
Note: This method is only expected to synchronize two threads. The event dispatcher will never execute this method from more than two threads, as there is no reason to do so.
processProbesSynchronized in interface SocketProcessingStrategypublic boolean areCodeBlocksActive()
BlockInstrumentationStrategy
areCodeBlocksActive in interface BlockInstrumentationStrategytrue if general basic blocks are selected,
false otherwise.public void setCodeBlocksActive(boolean enable)
BlockInstrumentationStrategy
setCodeBlocksActive in interface BlockInstrumentationStrategyenable - true to select general basic blocks,
false to ignore.public boolean areEntryBlocksActive()
BlockInstrumentationStrategy
areEntryBlocksActive in interface BlockInstrumentationStrategytrue if entry blocks are selected,
false otherwise.public void setEntryBlocksActive(boolean enable)
BlockInstrumentationStrategy
setEntryBlocksActive in interface BlockInstrumentationStrategyenable - true to select entry blocks,
false to ignore.public boolean areExitBlocksActive()
BlockInstrumentationStrategy
areExitBlocksActive in interface BlockInstrumentationStrategytrue if exit blocks are selected,
false otherwise.public void setExitBlocksActive(boolean enable)
BlockInstrumentationStrategy
setExitBlocksActive in interface BlockInstrumentationStrategyenable - true to select exit blocks,
false to ignore.public boolean areCallBlocksActive()
BlockInstrumentationStrategy
areCallBlocksActive in interface BlockInstrumentationStrategytrue if call blocks are selected,
false otherwise.public void setCallBlocksActive(boolean enable)
BlockInstrumentationStrategy
setCallBlocksActive in interface BlockInstrumentationStrategyenable - true to select call blocks,
false to ignore.public int getTypeFlags()
BlockInstrumentationStrategyUsed for communicating configuration information to certain other components. To be phased out at a future date.
getTypeFlags in interface BlockInstrumentationStrategy
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||