packages feed

threadscope-0.1: State.hs

module State ( 
    ViewerState(..), 
    ViewParameters(..),
    Trace(..),
    HECs(..)
  ) where

import EventTree

import qualified GHC.RTS.Events as GHCEvents
import GHC.RTS.Events hiding (Event)

import Graphics.UI.Gtk
import Graphics.Rendering.Cairo 

import Data.IORef
import Data.Array

-----------------------------------------------------------------------------

data ViewerState = ViewerState {
  filenameIORef    :: IORef (Maybe FilePath),
  debug            :: Bool,

  -- The loaded profile
  hecsIORef         :: IORef (Maybe HECs),
  scaleIORef        :: IORef Double, -- in ns/pixel
  cursorIORef       :: IORef Timestamp,

  -- WIDGETS
  
  -- main window
  mainWindow         :: Window,
  statusBar          :: Statusbar,
  hpaned             :: HPaned,

  -- menu items
  bwToggle           :: CheckMenuItem,
  sidebarToggle      :: CheckMenuItem,
  openMenuItem       :: MenuItem,
  saveAsPDFMenuItem  :: MenuItem,
  saveAsPNGMenuItem  :: MenuItem,
  reloadMenuItem     :: MenuItem,
  quitMenuItem       :: MenuItem,
  aboutMenuItem      :: MenuItem,

  -- Timeline view
  timelineDrawingArea      :: DrawingArea,
  timelineLabelDrawingArea :: DrawingArea,
  timelineKeyDrawingArea   :: DrawingArea,
  timelineHScrollbar       :: HScrollbar,
  timelineVScrollbar       :: VScrollbar,
  timelineAdj              :: Adjustment,
  timelineVAdj             :: Adjustment,
  zoomInButton             :: ToolButton,
  zoomOutButton            :: ToolButton,
  zoomFitButton            :: ToolButton,
  firstButton              :: ToolButton,
  lastButton               :: ToolButton,
  centreButton             :: ToolButton,
  showLabelsToggle         :: ToggleToolButton,

  timelinePrevView    :: IORef (Maybe (ViewParameters, Surface)),

  -- Events view
  eventsFontExtents  :: IORef FontExtents,
  eventsCursorIORef  :: IORef (Maybe (Timestamp, Int)),
  eventsVScrollbar   :: VScrollbar,
  eventsAdj          :: Adjustment,
  eventsDrawingArea  :: DrawingArea,
  eventsTextEntry    :: Entry,
  eventsFindButton   :: ToolButton,
  eventsFirstButton  :: ToolButton,
  eventsHomeButton   :: ToolButton,
  eventsLastButton   :: ToolButton,

  -- sidebar
  sidebarVBox        :: VBox,
  sidebarHBox        :: HBox,
  sidebarCombo       :: ComboBox,
  sidebarComboState  :: IORef Int,
  sidebarCloseButton :: Button,

  -- Bookmarks
  bookmarkVBox       :: VBox,
  addBookmarkButton  :: ToolButton,
  deleteBookmarkButton  :: ToolButton,
  gotoBookmarkButton :: ToolButton,
  bookmarkTreeView   :: TreeView,
  bookmarkStore      :: ListStore Timestamp,

  -- Traces
  tracesVBox         :: VBox,
  tracesTreeView     :: TreeView,
  tracesStore        :: TreeStore (Trace,Bool)
  }

-- all the data from a .eventlog file
data HECs = HECs {
    hecCount         :: Int,
    hecTrees         :: [(DurationTree,EventTree)],
    hecEventArray    :: Array Int GHCEvents.CapEvent,
    hecLastEventTime :: Timestamp
  }

data Trace
  = TraceHEC      Int
  | TraceThread   ThreadId
  | TraceGroup    String
  | TraceActivity
  -- more later ...
  deriving Eq

-- the parameters for a timeline render; used to figure out whether
-- we're drawing the same thing twice.
data ViewParameters = ViewParameters {
    width, height :: Int,
    viewTraces    :: [Trace],
    hadjValue     :: Double,
    scaleValue    :: Double,
    detail        :: Int,
    bwMode, labelsMode :: Bool
  }
  deriving Eq