#include #include #include #include "FuncCall.h" #include "CallInfoStructs.h" #include "Vm.h" using namespace std; extern ofstream prot; double grig_time_call=0.0; // =================================FuncCall ======================================= //temp #include "ModelStructs.h" extern _DArrayInfo * GetDArrayByIndex(long ID); //------------------------------ CONSTRUCTOR -------------------------------------- FuncCall::FuncCall(): call_time(0.0), ret_time(0.0), call_params(NULL), source_file(NULL) { vcall_time.resize(0); vret_time.resize(0); //temp // printf("temp debug\n"); // GetDArrayByIndex(0); } /* FuncCall::FuncCall(VectorTraceLine *traceLines) : ret_time(0.0), call_params(NULL) { int call_info_count = 0; char** call_info = NULL; // pointer to string vector with input function params int ret_info_count = 0; char** ret_info = NULL; // pointer to string vector with output function params TraceLine * tl = traceLines->current(); // 'call_xxxxxx' assert(traceLines->current()->line_type == Call_); func_id = tl->func_id; call_time = tl->func_time;//commented grig /rootVM->getProcPower(); grig_time_call+=tl->func_time; //grig add-on vcall_time.resize(currentVM->getProcCount()); int k; for(k=0;kgetProcCount();k++) { // printf("VRET[%d of %d]= %f / %f\n",k,currentVM->getProcCount(),tl->func_time,currentVM->getProcPower(k)); vcall_time[k]=tl->func_time/currentVM->getProcPower(k); } //\grig add-on source_line = tl->source_line; source_file = strdup(tl->source_file); // get effective parameters traceLines->next(); traceLines->GetUnknownLines(call_info_count, call_info); //'ret_xxxxxx assert(traceLines->current()->line_type == Ret_); //grig double rettimetemp; rettimetemp=traceLines->current()->func_time; //\grig ret_time = rettimetemp; //commented by grig / rootVM->getProcPower(); //grig add-on //int k; vret_time.resize(currentVM->getProcCount()); for(k=0;kgetProcCount();k++) { // fff=rettimetemp; vret_time[k]=rettimetemp/ currentVM->getProcPower(k); } //\grig add-on traceLines->next(); traceLines->GetUnknownLines(ret_info_count, ret_info); // Only for parameters passing TraceCall trc_call(func_id, source_line, source_file, call_info_count, call_info, ret_info_count, ret_info); // create FuncCall::params GetCallParams(trc_call, call_params); // free memory int i; for (i = 0; i < call_info_count; i++) delete call_info[i]; delete call_info; for (i = 0; i < ret_info_count; i++) delete ret_info[i]; delete ret_info; } */ // ------------------------------ DESTRUCTOR ------------------------------------- FuncCall::~FuncCall() { delete source_file; vcall_time.resize(0); vret_time.resize(0); switch (func_id) { case binter_ : case bsloop_ : case bploop_ : delete (binter_Info*) call_params; break; case crtamv_: delete (crtamv_Info*) call_params; break; case blkdiv_ : delete (blkdiv_Info*) call_params; break; case distr_ : delete (distr_Info*) call_params; break; case redis_ : delete (redis_Info*) call_params; break; case crtda_ : delete (crtda_Info*) call_params; break; case align_ : delete (align_Info*) call_params; break; case realn_ : delete (realn_Info*) call_params; break; case arrcpy_ : delete (arrcpy_Info*) call_params; break; case aarrcp_ : delete (arrcpy_Info*) call_params; break; case mappl_ : delete (mappl_Info*) call_params; break; case inssh_ : delete (inssh_Info*) call_params; break; case insshd_ : delete (inssh_Info*) call_params; break; case incsh_ : delete (inssh_Info*) call_params; break; case incshd_ : delete (inssh_Info*) call_params; break; case exfrst_ : delete (exfrst_Info*) call_params; break; case imlast_ : delete (imlast_Info*) call_params; break; case einter_ : delete (einter_Info*) call_params; break; case getam_ : delete (getam_Info*) call_params; break; case crtps_ : delete (crtps_Info*) call_params; break; case getps_ : delete (getps_Info*) call_params; break; case psview_ : delete (psview_Info*) call_params; break; case delps_ : delete (delps_Info*) call_params; break; case setelw_ : delete (setelw_Info*) call_params; break; case getamr_ : delete (getamr_Info*) call_params; break; case getamv_ : delete (getamv_Info*) call_params; break; case mapam_ : delete (mapam_Info*) call_params; break; case runam_ : delete (runam_Info*) call_params; break; case delamv_ : delete (delamv_Info*) call_params; break; case delda_ : delete (delda_Info*) call_params; break; case crtpl_ : delete (crtpl_Info*) call_params; break; case dopl_ : delete (dopl_Info*) call_params; break; case endpl_ : delete (endpl_Info*) call_params; break; case crtrg_ : delete (crtrg_Info*) call_params; break; case crtred_ : delete (crtred_Info*) call_params; break; case insred_ : delete (insred_Info*) call_params; break; case delrg_ : delete (delrg_Info*) call_params; break; case delred_ : delete (delred_Info*) call_params; break; case strtrd_ : delete (strtrd_Info*) call_params; break; case waitrd_ : delete (waitrd_Info*) call_params; break; case crtshg_ : delete (crtshg_Info*) call_params; break; case delshg_ : delete (delshg_Info*) call_params; break; case strtsh_ : delete (strtsh_Info*) call_params; break; case waitsh_ : delete (waitsh_Info*) call_params; break; case sendsh_ : delete (sendsh_Info*) call_params; break; case recvsh_ : delete (recvsh_Info*) call_params; break; case crtrbl_ : delete (crtrbl_Info*) call_params; break; case crtrbp_ : delete (crtrbp_Info*) call_params; break; default: delete call_params; break; } }