{-# LANGUAGE CPP #-}
module GHC.Stack.Profiler.Internal.Eventlog.Socket (
registerWithEventlogSocket,
) where
import GHC.Stack.Profiler.Internal.Manager (Manager)
#ifdef EVENTLOG_SOCKET_SUPPORT
import qualified Control.Monad.STM as STM
import GHC.Eventlog.Socket (CommandId (..), Hook (..), registerCommand, registerHook, registerNamespace)
import GHC.Stack.Profiler.Internal.Manager (disableEventLogging, startProfiling, stopProfiling, sendEnableEventlogMessage, sendDisableEventlogMessage, sendPublishInitEventMessages)
import Debug.Trace (traceMarkerIO)
#endif
registerWithEventlogSocket :: Manager -> IO ()
#ifdef EVENTLOG_SOCKET_SUPPORT
registerWithEventlogSocket = registerWithEventlogSocketIfSupported
#else
registerWithEventlogSocket :: Manager -> IO ()
registerWithEventlogSocket = IO () -> Manager -> IO ()
forall a b. a -> b -> a
const (IO () -> Manager -> IO ()) -> IO () -> Manager -> IO ()
forall a b. (a -> b) -> a -> b
$ () -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
#endif
#ifdef EVENTLOG_SOCKET_SUPPORT
registerWithEventlogSocketIfSupported :: Manager -> IO ()
registerWithEventlogSocketIfSupported manager = do
registerHook HookPostStartEventLogging $ startEventLoggingHook manager
registerHook HookPreEndEventLogging $ endEventLoggingHook manager
ns <- registerNamespace "ghc-stack-profiler"
registerCommand ns startProfilerCommandId (startProfilerCommand manager)
registerCommand ns stopProfilerCommandId (stopProfilerCommand manager)
startProfilerCommandId :: CommandId
startProfilerCommandId = CommandId 0x1
stopProfilerCommandId :: CommandId
stopProfilerCommandId = CommandId 0x2
startEventLoggingHook :: Manager -> IO ()
startEventLoggingHook manager = do
sendPublishInitEventMessages manager
sendEnableEventlogMessage manager
endEventLoggingHook :: Manager -> IO ()
endEventLoggingHook manager = do
STM.atomically $ disableEventLogging manager
sendDisableEventlogMessage manager
startProfilerCommand :: Manager -> IO ()
startProfilerCommand manager = do
traceMarkerIO "ghc-stack-profiler: Start profiling"
startProfiling manager
stopProfilerCommand :: Manager -> IO ()
stopProfilerCommand manager = do
stopProfiling manager
traceMarkerIO "ghc-stack-profiler: Stop profiling"
#endif