- public void readThread(int t) {
- BufferedInputStream bis=threads[t];
- int numevents=eventCounts[t];
- Event[] stack=eventstack[t];
- Hashtable<Integer, Counter> countertab=getcounter[t];
- int i=0;
- int depth=0;
- long time=0;
- while(i<numevents) {
- int event=readInt(bis);
- time=readLong(bis);
- int baseevent=event>>CP_BASE_SHIFT;
- i+=3; //time and event
-
- switch(event&CP_MASK) {
- case CP_BEGIN:
- enqueue(stack, depth, baseevent, time, countertab);
- depth++;
- break;
- case CP_END: {
- 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;
- }
- break;
- }
- case CP_EVENT: {
- Counter counter=countertab.get(event);
- if (counter==null) {
- Counter c=new Counter();
- countertab.put(event, c);
- counter=c;
- }
- counter.count++;
- break;
- }
+ public void readThread( int tNum ) {
+
+ BufferedInputStream stream = threadNum2stream [tNum];
+ int numWords = threadNum2numWords [tNum];
+ Event[] stack = threadNum2eventStack[tNum];
+ Hashtable<Integer, Counter> eid2c = threadNum2eid2c [tNum];
+
+ int depth = 0;
+ long timeStamp = 0;
+ int i = 0;
+
+ while( i < numWords ) {
+
+ int event = readInt ( stream );
+ timeStamp = readLong( stream );
+ i += 3;
+
+ int eventType = event & CP_EVENT_MASK;
+ int eventID = event >> CP_EVENT_BASESHIFT;
+
+ switch( eventType ) {
+
+ case CP_EVENTTYPE_BEGIN: {
+ 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;
+ }
+ depth++;
+ if( depth == STACKMAX ) {
+ throw new Error( "Event stack overflow\n" );
+ }
+ } break;
+
+ case CP_EVENTTYPE_END: {
+ depth--;
+ if( depth < 0 ) {
+ throw new Error( "Event stack underflow\n" );
+ }
+ Event e = stack[depth];
+ long elapsedTime = timeStamp - e.timeStamp;
+ Counter c = e.counter;
+ c.totalTime += elapsedTime;
+ c.selfTime += elapsedTime;
+ if( depth - 1 >= 0 ) {
+ Counter cParent = stack[depth-1].counter;
+ cParent.selfTime -= elapsedTime;
+ }
+ } break;