/* Hpc stuff */
extern int hs_hpc_module(char *modName,int modCount,int modHashNo,StgWord64 *tixArr);
-extern void hs_hpc_tick(int globIx,struct StgTSO_ *current_tso);
-extern void hs_hpc_raise_event(struct StgTSO_ *current_tso);
-extern void hs_hpc_thread_finished_event(struct StgTSO_ *current_tso);
-extern void hs_hpc_read(char *filename);
-extern void hs_hpc_write(char *filename);
+// Simple linked list of modules
+typedef struct _HpcModuleInfo {
+ char *modName; // name of module
+ int tickCount; // number of ticks
+ int tickOffset; // offset into a single large .tix Array
+ int hashNo; // Hash number for this module's mix info
+ StgWord64 *tixArr; // tix Array; local for this module
+ struct _HpcModuleInfo *next;
+} HpcModuleInfo;
+
+extern HpcModuleInfo *hs_hpc_rootModule(void);
+
#if defined(mingw32_HOST_OS)
extern int rts_InstallConsoleEvent ( int action, StgStablePtr *handler );
*
*/
-#define WOP_SIZE 1024
-
static int hpc_inited = 0; // Have you started this component?
static FILE *tixFile; // file being read/written
static int tix_ch; // current char
-typedef struct _HpcModuleInfo {
- char *modName; // name of module
- int tickCount; // number of ticks
- int tickOffset; // offset into a single large .tix Array
- int hashNo; // Hash number for this module's mix info
- StgWord64 *tixArr; // tix Array from the program execution (local for this module)
- struct _HpcModuleInfo *next;
-} HpcModuleInfo;
-
// This is a cruel hack, we should completely redesign the format specifier handling in the RTS.
#if SIZEOF_LONG == 8
#define PRIuWORD64 "lu"
static char *tixFilename;
+void hs_hpc_read(char *filename);
+void hs_hpc_write(char *filename);
+
static void failure(char *msg) {
debugTrace(DEBUG_hpc,"hpc failure: %s\n",msg);
fprintf(stderr,"Hpc failure: %s\n",msg);
writeTix(fopen(filename,"w"));
}
+//////////////////////////////////////////////////////////////////////////////
+// This is the API into Hpc RTS from Haskell, allowing the tixs boxes
+// to be first class.
-
+HpcModuleInfo *hs_hpc_rootModule(void) {
+ return modules;
+}