Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Addressed phantom frame log restart jobs #1787

Merged
merged 11 commits into from
Oct 29, 2024
3 changes: 2 additions & 1 deletion include/trick/DRAscii.hh
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ PROGRAMMERS:
#include "trick/DataRecordGroup.hh"

#ifdef SWIG
%feature("compactdefaultargs","0") ;
%feature("shadow") Trick::DRAscii::DRAscii(std::string in_name) %{
def __init__(self, *args):
this = $action(*args)
Expand Down Expand Up @@ -68,7 +69,7 @@ namespace Trick {
@code <my_drg> = trick.DRAscii("<in_name>") @endcode
@copydoc Trick::DataRecordGroup::DataRecordGroup(string in_name)
*/
DRAscii( std::string in_name) ;
DRAscii( std::string in_name, Trick::DR_Type dr_type = Trick::DR_Type::DR_Type_Ascii ) ;

/**
@copybrief Trick::DataRecordGroup::format_specific_header
Expand Down
2 changes: 1 addition & 1 deletion include/trick/DRBinary.hh
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ namespace Trick {
@code <my_drg> = trick.DRBinary("<in_name>") @endcode
@copydoc Trick::DataRecordGroup::DataRecordGroup(string in_name)
*/
DRBinary( std::string in_name, bool register_group = true ) ;
DRBinary( std::string in_name, bool register_group = true, Trick::DR_Type dr_type = Trick::DR_Type::DR_Type_Binary ) ;

/**
@copybrief Trick::DataRecordGroup::format_specific_header
Expand Down
3 changes: 2 additions & 1 deletion include/trick/DRHDF5.hh
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ PROGRAMMERS:
#endif

#ifdef SWIG
%feature("compactdefaultargs","0") ;
%feature("shadow") Trick::DRHDF5::DRHDF5(std::string in_name) %{
def __init__(self, *args):
this = $action(*args)
Expand Down Expand Up @@ -101,7 +102,7 @@ GROUP "/" {
@code <my_drg> = trick.DRHDF5("<in_name>") @endcode
@copydoc Trick::DataRecordGroup::DataRecordGroup(string in_name)
*/
DRHDF5( std::string in_name) ;
DRHDF5( std::string in_name, Trick::DR_Type dr_type = Trick::DR_Type::DR_Type_HDF5) ;

/**
@copybrief Trick::DataRecordGroup::format_specific_header
Expand Down
16 changes: 15 additions & 1 deletion include/trick/DataRecordGroup.hh
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,14 @@ namespace Trick {
DR_Not_Specified = 3 /**< Unknown type */
} ;

enum DR_Type {
DR_Type_None,
DR_Type_Ascii,
DR_Type_Binary,
DR_Type_HDF5,
DR_Type_FrameLogDataRecord
} ;

class DataRecordBuffer {
public:
char *buffer; /* ** generic holding buffer for data */
Expand Down Expand Up @@ -149,7 +157,7 @@ namespace Trick {
@brief Constructor that creates a new data recording group with the given @c in_name.
@param in_name - the new data recording group name
*/
DataRecordGroup( std::string in_name = "" ) ;
DataRecordGroup( std::string in_name = "", Trick::DR_Type dr_type = Trick::DR_Type::DR_Type_None ) ;

~DataRecordGroup() ;

Expand Down Expand Up @@ -405,6 +413,12 @@ namespace Trick {
*/
virtual int add_time_variable() ;

/**
@brief This function adds jobs to the DRG based on the dr type.
@returns void
*/
void configure_jobs(DR_Type type) ;

/** Check that a variable is supported by data recording. */
/** Variable must be a single primitive type - no STL, array, structured, string */
bool isSupportedType(REF2 * ref2, std::string& message);
Expand Down
2 changes: 1 addition & 1 deletion trick_source/sim_services/DataRecord/DRAscii.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
#include "trick/message_type.h"
#include "trick/bitfield_proto.h"

Trick::DRAscii::DRAscii( std::string in_name ) : Trick::DataRecordGroup( in_name ) {
Trick::DRAscii::DRAscii( std::string in_name, Trick::DR_Type dr_type ) : Trick::DataRecordGroup( in_name, dr_type ) {

ascii_float_format = "%20.8g" ;
ascii_double_format = "%20.16g" ;
Expand Down
4 changes: 2 additions & 2 deletions trick_source/sim_services/DataRecord/DRBinary.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
Other classes inherit from DRBinary. In these cases, we don't want to register the memory as DRBinary,
so register_group will be set to false.
*/
Trick::DRBinary::DRBinary( std::string in_name , bool register_group ) : Trick::DataRecordGroup(in_name) {
Trick::DRBinary::DRBinary( std::string in_name, bool register_group, Trick::DR_Type dr_type ) : Trick::DataRecordGroup(in_name, dr_type) {
if ( register_group ) {
register_group_with_mm(this, "Trick::DRBinary") ;
}
Expand Down Expand Up @@ -190,4 +190,4 @@ int Trick::DRBinary::format_specific_shutdown() {
close(fd) ;
}
return(0) ;
}
}
2 changes: 1 addition & 1 deletion trick_source/sim_services/DataRecord/DRHDF5.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
#include "trick/memorymanager_c_intf.h"
#include "trick/message_proto.h"

Trick::DRHDF5::DRHDF5( std::string in_name ) : Trick::DataRecordGroup(in_name) {
Trick::DRHDF5::DRHDF5( std::string in_name, Trick::DR_Type dr_type ) : Trick::DataRecordGroup(in_name, dr_type) {
register_group_with_mm(this, "Trick::DRHDF5") ;
}

Expand Down
36 changes: 23 additions & 13 deletions trick_source/sim_services/DataRecord/DataRecordGroup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ Trick::DataRecordBuffer::~DataRecordBuffer() {
free(ref) ;
}

Trick::DataRecordGroup::DataRecordGroup( std::string in_name ) :
Trick::DataRecordGroup::DataRecordGroup( std::string in_name, Trick::DR_Type dr_type ) :
record(true) ,
inited(false) ,
group_name(in_name) ,
Expand Down Expand Up @@ -96,18 +96,7 @@ Trick::DataRecordGroup::DataRecordGroup( std::string in_name ) :
// sim object name
name = std::string("trick_data_record_group_") + in_name ;

// add_jobs_to_queue will fill in job_id later
// make the init job run after all other initialization jobs but before the post init checkpoint
// job so users can allocate memory in initialization jobs and checkpointing data rec groups will work
add_job(0, 1, (char *)"initialization", NULL, cycle, (char *)"init", (char *)"TRK", 65534) ;
add_job(0, 2, (char *)"end_of_frame", NULL, 1.0, (char *)"write_data", (char *)"TRK") ;
add_job(0, 3, (char *)"checkpoint", NULL, 1.0, (char *)"checkpoint", (char *)"TRK") ;
add_job(0, 4, (char *)"post_checkpoint", NULL, 1.0, (char *)"clear_checkpoint_vars", (char *)"TRK") ;
// run the restart job in phase 60001
add_job(0, 5, (char *)"restart", NULL, 1.0, (char *)"restart", (char *)"TRK", 60001) ;
add_job(0, 6, (char *)"shutdown", NULL, 1.0, (char *)"shutdown", (char *)"TRK") ;

write_job = add_job(0, 99, (char *)job_class.c_str(), NULL, cycle, (char *)"data_record" , (char *)"TRK") ;
configure_jobs(dr_type) ;

add_time_variable() ;
}
Expand Down Expand Up @@ -429,6 +418,27 @@ int Trick::DataRecordGroup::init() {

}

void Trick::DataRecordGroup::configure_jobs(DR_Type type) {
switch(type) {
default:
// run the restart job in phase 60001
add_job(0, 5, (char *)"restart", NULL, 1.0, (char *)"restart", (char *)"TRK", 60001) ;

case DR_Type::DR_Type_FrameLogDataRecord:
// add_jobs_to_queue will fill in job_id later
// make the init job run after all other initialization jobs but before the post init checkpoint
// job so users can allocate memory in initialization jobs and checkpointing data rec groups will work
add_job(0, 1, (char *)"initialization", NULL, cycle, (char *)"init", (char *)"TRK", 65534) ;
add_job(0, 2, (char *)"end_of_frame", NULL, 1.0, (char *)"write_data", (char *)"TRK") ;
add_job(0, 3, (char *)"checkpoint", NULL, 1.0, (char *)"checkpoint", (char *)"TRK") ;
add_job(0, 4, (char *)"post_checkpoint", NULL, 1.0, (char *)"clear_checkpoint_vars", (char *)"TRK") ;
add_job(0, 6, (char *)"shutdown", NULL, 1.0, (char *)"shutdown", (char *)"TRK") ;

write_job = add_job(0, 99, (char *)job_class.c_str(), NULL, cycle, (char *)"data_record" , (char *)"TRK") ;
break ;
}
}

int Trick::DataRecordGroup::checkpoint() {
unsigned int jj ;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
-# All instances get the end_of_frame frame_log_clear job.
*/
Trick::FrameDataRecordGroup::FrameDataRecordGroup( int in_thread_id , std::string in_name )
: Trick::DRBinary(in_name, false) , thread_id(in_thread_id ) {
: Trick::DRBinary(in_name, false, Trick::DR_Type::DR_Type_FrameLogDataRecord ), thread_id(in_thread_id ) {
if ( thread_id > 0 ) {
add_job(thread_id, 1000, (char *)"top_of_frame", NULL, 1.0, (char *)"start_timer", (char *)"TRK", 1) ;
// Frame logging uses phase 65533 in FrameLog.ccp. Stop the timer just before that.
Expand Down
Loading