📄 tracetoslog2.java
字号:
/* * (C) 2001 by Argonne National Laboratory * See COPYRIGHT in top-level directory. *//* * @author Anthony Chan */package logformat.slog2.output;import java.util.*;import java.io.File;import base.drawable.*;import logformat.trace.*;import logformat.slog2.*;public class TraceToSlog2{ static { System.loadLibrary( "TraceInput" ); } private static short num_children_per_node = 0; private static int leaf_bytesize = 0; private static String trace_filespec, slog_filename; private static boolean enable_endtime_check; private static boolean continue_when_violation; public static final void main( String[] args ) { logformat.trace.InputLog dobj_ins; logformat.slog2.output.OutputLog slog_outs; Kind next_kind; Topology topo; CategoryMap objdefs; // Drawable def'n Map shadefs; // Shadow def'n Category objdef; LineIDMapList lineIDmaps; LineIDMap lineIDmap; Primitive prime_obj; Composite cmplx_obj; long Nobjs; TreeTrunk treetrunk; double prev_dobj_endtime; double curr_dobj_endtime; long offended_Nobjs; Drawable offended_dobj; // Initialize prev_dobj_endtime to avoid complaint by compiler prev_dobj_endtime = Double.NEGATIVE_INFINITY; offended_Nobjs = Integer.MIN_VALUE; offended_dobj = null; slog_filename = null; parseCmdLineArgs( args ); if ( slog_filename == null ) slog_filename = TraceName.getDefaultSLOG2Name( trace_filespec ); objdefs = new CategoryMap(); shadefs = new HashMap(); lineIDmaps = new LineIDMapList(); Nobjs = 0; /* */ Date time1 = new Date(); dobj_ins = new logformat.trace.InputLog( trace_filespec ); slog_outs = new logformat.slog2.output.OutputLog( slog_filename ); // Set Tree properties, !optional! // TreeNode's minimum size, without any drawable/shadow, is 38 bytes. // Drawable;s minimum size is 32 bytes, whether it is state/arrow. // Arrow( with 2 integer infovalues ) is 40 bytes long. // So, for 1 state primitive leaf, the size is 38 + 40 = 78 . if ( leaf_bytesize > 0 ) slog_outs.setTreeLeafByteSize( leaf_bytesize ); if ( num_children_per_node > 0 ) slog_outs.setNumChildrenPerNode( num_children_per_node ); treetrunk = new TreeTrunk( slog_outs, shadefs ); /* */ Date time2 = new Date(); while ( ( next_kind = dobj_ins.peekNextKind() ) != Kind.EOF ) { if ( next_kind == Kind.TOPOLOGY ) { topo = dobj_ins.getNextTopology(); objdef = Category.getShadowCategory( topo ); objdefs.put( new Integer( objdef.getIndex() ), objdef ); shadefs.put( topo, objdef ); } else if ( next_kind == Kind.YCOORDMAP ) { lineIDmap = new LineIDMap( dobj_ins.getNextYCoordMap() ); lineIDmaps.add( lineIDmap ); } else if ( next_kind == Kind.CATEGORY ) { objdef = dobj_ins.getNextCategory(); objdefs.put( new Integer( objdef.getIndex() ), objdef ); } else if ( next_kind == Kind.PRIMITIVE ) { prime_obj = dobj_ins.getNextPrimitive(); prime_obj.resolveCategory( objdefs ); // postponed, wait till on-demand decoding of InfoBuffer // prime_obj.decodeInfoBuffer(); Nobjs++; // System.out.println( Nobjs + " : " + prime_obj ); if ( enable_endtime_check ) { if ( ! prime_obj.isTimeOrdered() ) { System.out.println( "**** Primitive Time Error ****" ); if ( ! continue_when_violation ) System.exit( 1 ); } curr_dobj_endtime = prime_obj.getLatestTime(); if ( prev_dobj_endtime > curr_dobj_endtime ) { System.err.println( "**** Violation of " + "Increasing Endtime Order ****\n" + "\t Offended Drawable -> " + offended_Nobjs + " : " + offended_dobj + "\n" + "\t Offending Primitive -> " + Nobjs + " : " + prime_obj + "\n" + " previous drawable endtime ( " + prev_dobj_endtime + " ) " + " > current drawable endtiime ( " + curr_dobj_endtime + " ) " ); if ( ! continue_when_violation ) System.exit( 1 ); } offended_Nobjs = Nobjs; offended_dobj = prime_obj; prev_dobj_endtime = curr_dobj_endtime; } treetrunk.addDrawable( prime_obj ); } else if ( next_kind == Kind.COMPOSITE ) { cmplx_obj = dobj_ins.getNextComposite(); cmplx_obj.resolveCategory( objdefs ); // postponed, wait till on-demand decoding of InfoBuffer // cmplx_obj.decodeInfoBuffer(); Nobjs++; // System.out.println( Nobjs + " : " + cmplx_obj ); if ( enable_endtime_check ) { if ( ! cmplx_obj.isTimeOrdered() ) { System.out.println( "**** Composite Time Error ****" ); if ( ! continue_when_violation ) System.exit( 1 ); } curr_dobj_endtime = cmplx_obj.getLatestTime(); if ( prev_dobj_endtime > curr_dobj_endtime ) { System.err.println( "***** Violation of " + "Increasing Endtime Order! *****\n" + "\t Offended Drawable -> " + offended_Nobjs + " : " + offended_dobj + "\n" + "\t Offending Composite -> " + Nobjs + " : " + cmplx_obj + "\n" + " previous drawable endtime ( " + prev_dobj_endtime + " ) " + " > current drawable endtiime ( " + curr_dobj_endtime + " ) " ); if ( ! continue_when_violation ) System.exit( 1 ); } offended_Nobjs = Nobjs; offended_dobj = cmplx_obj; prev_dobj_endtime = curr_dobj_endtime; } treetrunk.addDrawable( cmplx_obj ); } else { System.err.println( "TraceToSlog2: Unrecognized return " + "from peekNextKind() = " + next_kind ); } } // Endof while ( dobj_ins.peekNextKind() ) // Check if flushToFile is successful, // i.e. if treetrunk contains drawables. if ( treetrunk.flushToFile() ) { objdefs.removeUnusedCategories(); slog_outs.writeCategoryMap( objdefs ); lineIDmaps.add( treetrunk.getIdentityLineIDMap() ); slog_outs.writeLineIDMapList( lineIDmaps ); slog_outs.close(); dobj_ins.close();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -