- System.out.println( "Warning: unmatched event begin/end\n" );
- /*
- //get rid of last item also
- depth--;
- Event e=stack[depth];
- long elapsedtime=time-e.time;
- Counter c=e.counter;
- c.totaltime+=elapsedtime;
- c.selftime+=elapsedtime;
- if(depth-1>=0) {
- Counter cn=stack[depth-1].counter;
- cn.selftime-=elapsedtime;
- }
- */
+ // worker threads currently do not exit gracefully, and therefore
+ // never register their MAIN END event, so if the mismatch is with
+ // MAIN BEGIN then treat it as fine, otherwise warn.
+ if( depth == 1 ) {
+ // the value of timestamp will be equal to whatever the last
+ // properly registered event for this thread was
+ depth = popEvent( stack, depth, CP_EVENTID_MAIN, timeStamp );
+ } else {
+ System.out.println( "Warning: unmatched event begin/end\n" );
+ }
+ }
+ }
+
+
+ protected int pushEvent( Event[] stack,
+ int d,
+ Hashtable<Integer, Counter> eid2c,
+ int eventID,
+ long timeStamp ) {
+ int depth = d;
+ Counter counter = eid2c.get( eventID );
+ if( counter == null ) {
+ counter = new Counter();
+ eid2c.put( eventID, counter );
+ }
+ counter.count++;
+ if( stack[depth] == null ) {
+ stack[depth] = new Event( timeStamp, eventID, counter );
+ } else {
+ stack[depth].timeStamp = timeStamp;
+ stack[depth].eventID = eventID;
+ stack[depth].counter = counter;