@@ -696,44 +696,83 @@ void
696696ExplainPrintJIT (ExplainState * es ,QueryDesc * queryDesc )
697697{
698698JitContext * jc = queryDesc -> estate -> es_jit ;
699+ instr_time total_time ;
700+
701+ /* calculate total time */
702+ INSTR_TIME_SET_ZERO (total_time );
703+ INSTR_TIME_ADD (total_time ,jc -> generation_counter );
704+ INSTR_TIME_ADD (total_time ,jc -> inlining_counter );
705+ INSTR_TIME_ADD (total_time ,jc -> optimization_counter );
706+ INSTR_TIME_ADD (total_time ,jc -> emission_counter );
699707
700708ExplainOpenGroup ("JIT" ,"JIT" , true,es );
701709
710+ /* for higher density, open code the text output format */
702711if (es -> format == EXPLAIN_FORMAT_TEXT )
703712{
704- es -> indent += 1 ;
713+ appendStringInfoSpaces ( es -> str , es -> indent * 2 ) ;
705714appendStringInfo (es -> str ,"JIT:\n" );
706- }
715+ es -> indent += 1 ;
707716
708- ExplainPropertyInteger ("Functions" ,NULL ,jc -> created_functions ,es );
709- if (es -> analyze && es -> timing )
710- ExplainPropertyFloat ("Generation Time" ,"ms" ,
711- 1000.0 * INSTR_TIME_GET_DOUBLE (jc -> generation_counter ),
712- 3 ,es );
717+ ExplainPropertyInteger ("Functions" ,NULL ,jc -> created_functions ,es );
713718
714- ExplainPropertyBool ("Inlining" ,jc -> flags & PGJIT_INLINE ,es );
719+ appendStringInfoSpaces (es -> str ,es -> indent * 2 );
720+ appendStringInfo (es -> str ,"Options: %s %s, %s %s, %s %s, %s %s\n" ,
721+ "Inlining" ,jc -> flags & PGJIT_INLINE ?"true" :"false" ,
722+ "Optimization" ,jc -> flags & PGJIT_OPT3 ?"true" :"false" ,
723+ "Expressions" ,jc -> flags & PGJIT_EXPR ?"true" :"false" ,
724+ "Deforming" ,jc -> flags & PGJIT_DEFORM ?"true" :"false" );
715725
716- if (es -> analyze && es -> timing )
717- ExplainPropertyFloat ("Inlining Time" ,"ms" ,
718- 1000.0 * INSTR_TIME_GET_DOUBLE (jc -> inlining_counter ),
719- 3 ,es );
726+ if (es -> analyze && es -> timing )
727+ {
728+ appendStringInfoSpaces (es -> str ,es -> indent * 2 );
729+ appendStringInfo (es -> str ,
730+ "Timing: %s %.3f ms, %s %.3f ms, %s %.3f ms, %s %.3f ms, %s %.3f ms\n" ,
731+ "Generation" ,1000.0 * INSTR_TIME_GET_DOUBLE (jc -> generation_counter ),
732+ "Inlining" ,1000.0 * INSTR_TIME_GET_DOUBLE (jc -> inlining_counter ),
733+ "Optimization" ,1000.0 * INSTR_TIME_GET_DOUBLE (jc -> optimization_counter ),
734+ "Emission" ,1000.0 * INSTR_TIME_GET_DOUBLE (jc -> emission_counter ),
735+ "Total" ,1000.0 * INSTR_TIME_GET_DOUBLE (total_time ));
736+ }
720737
721- ExplainPropertyBool ( "Optimization" , jc -> flags & PGJIT_OPT3 , es ) ;
722- if ( es -> analyze && es -> timing )
723- ExplainPropertyFloat ( "Optimization Time" , "ms" ,
724- 1000.0 * INSTR_TIME_GET_DOUBLE ( jc -> optimization_counter ),
725- 3 ,es );
738+ es -> indent -= 1 ;
739+ }
740+ else
741+ {
742+ ExplainPropertyInteger ( "Functions" , NULL , jc -> created_functions ,es );
726743
727- if (es -> analyze && es -> timing )
728- ExplainPropertyFloat ("Emission Time" ,"ms" ,
729- 1000.0 * INSTR_TIME_GET_DOUBLE (jc -> emission_counter ),
730- 3 ,es );
744+ ExplainOpenGroup ("Options" ,"Options" , true,es );
745+ ExplainPropertyBool ("Inlining" ,jc -> flags & PGJIT_INLINE ,es );
746+ ExplainPropertyBool ("Optimization" ,jc -> flags & PGJIT_OPT3 ,es );
747+ ExplainPropertyBool ("Expressions" ,jc -> flags & PGJIT_EXPR ,es );
748+ ExplainPropertyBool ("Deforming" ,jc -> flags & PGJIT_DEFORM ,es );
749+ ExplainCloseGroup ("Options" ,"Options" , true,es );
731750
732- ExplainCloseGroup ("JIT" ,"JIT" , true,es );
733- if (es -> format == EXPLAIN_FORMAT_TEXT )
734- {
735- es -> indent -= 1 ;
751+ if (es -> analyze && es -> timing )
752+ {
753+ ExplainOpenGroup ("Timing" ,"Timing" , true,es );
754+
755+ ExplainPropertyFloat ("Generation" ,"ms" ,
756+ 1000.0 * INSTR_TIME_GET_DOUBLE (jc -> generation_counter ),
757+ 3 ,es );
758+ ExplainPropertyFloat ("Inlining" ,"ms" ,
759+ 1000.0 * INSTR_TIME_GET_DOUBLE (jc -> inlining_counter ),
760+ 3 ,es );
761+ ExplainPropertyFloat ("Optimization" ,"ms" ,
762+ 1000.0 * INSTR_TIME_GET_DOUBLE (jc -> optimization_counter ),
763+ 3 ,es );
764+ ExplainPropertyFloat ("Emission" ,"ms" ,
765+ 1000.0 * INSTR_TIME_GET_DOUBLE (jc -> emission_counter ),
766+ 3 ,es );
767+ ExplainPropertyFloat ("Total" ,"ms" ,
768+ 1000.0 * INSTR_TIME_GET_DOUBLE (total_time ),
769+ 3 ,es );
770+
771+ ExplainCloseGroup ("Timing" ,"Timing" , true,es );
772+ }
736773}
774+
775+ ExplainCloseGroup ("JIT" ,"JIT" , true,es );
737776}
738777
739778/*