# Trace Compass Developer Guide

- Table of Contents
- Introduction
- Implementing a New Trace Type
- Event Aspects
- Base and custom aspects
- Creating event aspects programmatically
- Optional Trace Type Attributes
- Default Editor
- Events Table Type
- Perspective
- Other Considerations
- Collapsing of repetitive events
- Best Practices
- An Example: Nexus-lite parser
- Description of the file
- NexusLite Plug-in
- Trace Event
- Trace Reader
- Trace Context
- Trace Location
- The ''org.eclipse.linuxtools.tmf.core.tracetype'' and ''org.eclipse.linuxtools.tmf.ui.tracetypeui'' plug-in extension points
- View Tutorial
- Prerequisites
- Creating an Eclipse UI Plug-in
- Creating a View
- Implementing a view
- Adding an Empty Chart
- Signal Handling
- Requesting Data
- Transferring Data to the Chart
- Adjusting the Range
- Formatting the Time Stamps
- Pin feature
- TMF Built-in Views and Viewers
- Timing Analysis Views and Viewers
- Component Interaction
- Sending Signals
- Receiving Signals
- Signal Throttling
- Ignoring inbound/outbound signals
- Signal Reference
- TmfStartSynchSignal
- TmfEndSynchSignal
- TmfTraceOpenedSignal
- TmfTraceSelectedSignal
- TmfTraceClosedSignal
- TmfTraceRangeUpdatedSignal
- TmfTraceUpdatedSignal
- TmfSelectionRangeUpdatedSignal
- TmfWindowRangeUpdatedSignal
- TmfEventFilterAppliedSignal
- TmfEventSearchAppliedSignal
- TmfTimestampFormatUpdateSignal
- TmfStatsUpdatedSignal
- TmfPacketStreamSelected
- TmfStartAnalysisSignal
- TmfCpuSelectedSignal
- TmfThreadSelectedSignal
- TmfSymbolProviderUpdatedSignal
- TmfTraceSynchronizedSignal
- TmfMarkerEventSourceUpdatedSignal
- Debugging
- Generic State System
- Introduction
- High-level components
- Definitions
- Attribute
- Attribute Tree
- Quark
- State value
- State change
- State interval
- State history
- Construction phase
- Queries
- Full queries
- Single queries
- 2D queries
- Relevant interfaces/classes
- Main classes in org.eclipse.tracecompass.tmf.core.statesystem
- ITmfStateProvider / AbstractTmfStateProvider
- TmfStateSystemFactory
- ITmfStateSystem
- getQuarkAbsolute()/getQuarkRelative()
- optQuarkAbsolute()/optQuarkRelative()
- getQuarks()
- waitUntilBuilt()
- queryFullState()
- querySingleState()
- ITmfStateSystemBuilder
- getQuark*AndAdd()
- modifyAttribute()
- closeHistory()
- Other relevant interfaces
- ITmfStateValue
- ITmfStateInterval
- Exceptions
- AttributeNotFoundException
- StateValueTypeException
- TimeRangeException
- StateSystemDisposedException
- Comparison of state system backends
- Full history
- Null history
- In-memory history
- Partial history
- State System Operations
- queryRangeMax()
- queryRangeMin()
- queryRangeAverage()
- Code example
- State Provider
- Analysis module definition
- Mipmap feature
- AbstractTmfMipmapStateProvider
- UML2 Sequence Diagram Framework
- TMF UML2 Sequence Diagram Extensions
- Management of the Extension Point
- Sequence Diagram View
- Supported Widgets
- Zooming
- Printing
- Key Bindings
- Preferences
- Callback hooks
- Tutorial
- Prerequisites
- Creating an Eclipse UI Plug-in
- Creating a Sequence Diagram View
- Defining the uml2SDLoader Extension
- Implementing the Loader Class
- Adding time information
- Default Coolbar and Menu Items
- Implementing Optional Callbacks
- Using the Paging Provider Interface
- Using the Find Provider Interface
- Using the Filter Provider Interface
- Using the Extended Action Bar Provider Interface
- Using the Properties Provider Interface
- Using the Collapse Provider Interface
- Using the Selection Provider Service
- Printing a Sequence Diagram
- Using one Sequence Diagram View with Multiple Loaders
- Downloading the Tutorial
- Integration of Tracing and Monitoring Framework with Sequence Diagram Framework
- Reference Implementation
- Used Sequence Diagram Features
- Advanced paging
- Basic finding
- Basic filtering
- Selection Service
- Used TMF Features
- TMF Experiment and Trace for accessing traces
- TMF Event Request Framework
- TMF Signal Framework
- Supported Traces
- Trace Format
- How to use the Reference Implementation
- Extending the Reference Loader
- CTF Parser
- CTF Format
- Metadata
- Event Streams
- Reading a trace
- Seeking in a trace
- Interfacing to TMF
- CtfLocation
- CtfTmfTrace
- CtfIterator
- CtfIteratorManager
- CtfTmfContext
- CtfTmfTimestamp
- CtfTmfEvent
- Other
- Limitations
- Event matching and trace synchronization
- Event matching interfaces
- Implementation details and how to extend it
- ITmfEventMatching interface and derived classes
- ITmfMatchEventDefinition interface and its derived classes
- IMatchProcessingUnit interface and derived classes
- Code examples
- Using network packets matching in an analysis
- Match events from UST traces
- Trace synchronization
- Synchronization algorithm
- Timestamp transforms
- Todo
- Analysis Framework
- Creating a new module
- Example
- Available base analysis classes and interfaces
- How it works
- Telling TMF about the analysis module
- Attaching outputs and views to the analysis module
- Using the extension point to add outputs
- Providing help for the module
- Using analysis parameter providers
- Example parameter provider
- Register the parameter provider to the analysis
- Providing requirements to analyses
- Analysis requirement provider API
- Requirement values
- Example of providing requirements
- TODO
- TMF Remote API
- Prerequisites
- TmfRemoteConnectionFactory
- Accessing the remote services manager (OSGI service)
- Obtaining a IRemoteConnection
- Creating an IRemoteConnection instance
- Providing a connection factory
- RemoteSystemProxy
- Creating a RemoteSystemProxy
- Opening the remote connection
- Closing the remote connection
- Disposing the remote connection
- Checking the connection state
- Retrieving the IRemoteConnection instance
- Obtaining a command shell
- Performance Tests
- Add performance tests
- Where
- How
- Run a performance test
- ABC of performance testing
- Determine what to test
- Metrics descriptions and considerations
- Network Tracing
- Adding a protocol
- Architecture
- UDP Packet Structure
- Creating the UDPPacket
- Creating the UDPEndpoint
- Registering the UDP protocol
- Adding stream-based views
- TODO
- Markers
- Trace-specific markers
- View-specific markers
- Virtual Machine Analysis
- JUL Logging
- Use a static logger for each class
- Use a message supplier
- Choose the appropriate log level
- Log message format
- Logging to populate Callstacks and Callgraph analyses
- Logging to track Object life cycles
- Logging to track Asynchronous operations
- XML schema extension
- Extending the schema
- Parsing the schema
- Adding the extension point
- OS Execution Graph Extension
- Write the graph extension
- Adding the extension point
- Data Providers
- Data provider types
- Tree XY
- Time Graph
- Data provider management
- Extension point
- Experiments
- Utilities
- Example Tree XY code