Cleaning up Hpc.c; adding support for reflection into Hpc.
authorandy@galois.com <unknown>
Wed, 27 Jun 2007 06:36:31 +0000 (06:36 +0000)
committerandy@galois.com <unknown>
Wed, 27 Jun 2007 06:36:31 +0000 (06:36 +0000)
includes/RtsExternal.h
rts/Hpc.c

index 58b6ef0..30a5b56 100644 (file)
@@ -72,11 +72,18 @@ extern void   freeHaskellFunctionPtr(void* ptr);
 
 /* 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 );
index 7ad2666..ebd5af1 100644 (file)
--- a/rts/Hpc.c
+++ b/rts/Hpc.c
  *
  */
 
-#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"
@@ -50,6 +39,9 @@ int totalTixes = 0;           // total number of tix boxes.
 
 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);
@@ -371,5 +363,10 @@ void hs_hpc_write(char *filename) {
   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;
+}