/* Hpc stuff */
extern int hs_hpc_module(char *modName,int modCount,StgWord64 *tixArr);
extern void hs_hpc_tick(int globIx,struct StgTSO_ *current_tso);
-extern void hs_hpc_throw(struct StgTSO_ *current_tso);
+extern void hs_hpc_event(char *msg,struct StgTSO_ *current_tso);
#if defined(mingw32_HOST_OS)
#endif
/* Inform the Hpc that an exception has been thrown */
- foreign "C" hs_hpc_throw(CurrentTSO);
+ foreign "C" hs_hpc_event("Raise",CurrentTSO);
retry_pop_stack:
StgTSO_sp(CurrentTSO) = Sp;
// This assumes that there is no real thread 0.
StgThreadID tid = (current_tso == 0) ? 0 : current_tso->id;
if (tid != previous_tid) {
- previous_tid = current_tso->id;
+ previous_tid = tid;
// How do we print StgWord32's without a cast?
- fprintf(rixFile,"Thread %d\n",(unsigned int)tid);
+ fprintf(rixFile,"Thread Switch %d\n",(unsigned int)tid);
}
}
* Called on *every* exception thrown
*/
void
-hs_hpc_throw(StgTSO *current_tso) {
+hs_hpc_event(char *msg,StgTSO *current_tso) {
// Assumes that we have had at least *one* tick first.
// All exceptions before the first tick are not reported.
// The only time this might be an issue is in bootstrapping code,
if (rixFile != NULL) {
assert(hpc_inited != 0);
send_ThreadId(current_tso);
- fprintf(rixFile,"Throw\n");
+ fprintf(rixFile,"%s\n",msg);
}
}
debugTrace(DEBUG_sched, "--++ thread %lu (%s) finished",
(unsigned long)t->id, whatNext_strs[t->what_next]);
+ /* Inform the Hpc that a thread has finished */
+ hs_hpc_event("Thread Finished",t);
+
#if defined(GRAN)
endThread(t, CurrentProc); // clean-up the thread
#elif defined(PARALLEL_HASKELL)