void BenchmarkPlayback::Error(const MediaResult& aError) { MOZ_ASSERT(OnThread()); RefPtr<Benchmark> ref(mGlobalState); GlobalShutdown(); ref->Dispatch( NS_NewRunnableFunction("BenchmarkPlayback::Error", [ref, aError]() { ref->ReturnError(aError); })); }
void BenchmarkPlayback::Output(MediaDataDecoder::DecodedData&& aResults) { MOZ_ASSERT(OnThread()); MOZ_ASSERT(!mFinished); RefPtr<Benchmark> ref(mGlobalState); mFrameCount += aResults.Length(); if (!mDecodeStartTime && mFrameCount >= ref->mParameters.mStartupFrame) { mDecodeStartTime = Some(TimeStamp::Now()); } TimeStamp now = TimeStamp::Now(); uint32_t frames = mFrameCount - ref->mParameters.mStartupFrame; TimeDuration elapsedTime = now - mDecodeStartTime.refOr(now); if (((frames == ref->mParameters.mFramesToMeasure) && mFrameCount > ref->mParameters.mStartupFrame && frames > 0) || elapsedTime >= ref->mParameters.mTimeout || mDrained) { uint32_t decodeFps = frames / elapsedTime.ToSeconds(); GlobalShutdown(); ref->Dispatch(NS_NewRunnableFunction( "BenchmarkPlayback::Output", [ref, decodeFps]() { ref->ReturnResult(decodeFps); })); } }
//__________________________________________________________________________________ int main (int argc, char* argv[]) { mainArgCount = argc - 1; #ifdef __HYPHYMPI__ int rank, size; MPI_Init (&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); setParameter (mpiNodeID, (_Parameter)rank); setParameter (mpiNodeCount, (_Parameter)size); _hy_mpi_node_rank = rank; if (rank == 0) { #endif //for (long k=0; k<NSIG; k++) //{ // signal(k, &hyphyBreak); //} #ifdef __HYPHYMPI__ } #endif char curWd[4096], dirSlash = GetPlatformDirectoryChar (); getcwd (curWd,4096); _String baseDir (curWd), argFile; baseDir=baseDir & dirSlash; pathNames&& &baseDir; baseDirectory = baseDir; baseArgDir = baseDirectory; _ExecutionList ex; #ifdef _OPENMP systemCPUCount = omp_get_max_threads(); #endif for (long i=1; i<argc;i++) { _String thisArg (argv[i]); if (thisArg.sData[0]=='-') { ProcessConfigStr (thisArg); } else if (thisArg.beginswith ("BASEPATH=")) { baseArgDir = thisArg.Cut(9,-1); if (baseArgDir.sLength) { if (baseArgDir.sData[baseArgDir.sLength-1]!=dirSlash) baseArgDir = baseArgDir&dirSlash; baseDirectory = baseArgDir; } } else if (thisArg.beginswith ("USEPATH=")) { baseDir = thisArg.Cut(8,-1); errorFileName = baseDir & errorFileName; messageFileName = baseDir & messageFileName; pathNames.Delete (0); pathNames&& &baseDir; } else #ifdef __MP__ if (thisArg.beginswith ("CPU=")) { _String cpus = thisArg.Cut(4,-1); systemCPUCount = cpus.toNum(); if (systemCPUCount<1) systemCPUCount = 1; #ifdef __MP2__ pthread_setconcurrency (systemCPUCount+1); #endif } else #endif #ifdef __HYPHYMPI__ if (thisArg == _String("MPIOPTIMIZER")) { mpiParallelOptimizer = true; setParameter (mpiNodeCount, 0.0); } else if (thisArg == _String("MPIPARTITIONS")) { mpiPartitionOptimizer = true; setParameter (mpiNodeCount, 0.0); } else #endif argFile = thisArg; } GlobalStartup(); if (calculatorMode) { printf ("\nHYPHY is running in calculator mode. Type 'exit' when you are finished.\n"); while (ExpressionCalculator()) ; return 0; } if (pipeMode) { _String bfIn (stdin); _ExecutionList exIn (bfIn); exIn.Execute(); GlobalShutdown(); return 0; } // try to read the preferences _String prefFile (curWd); prefFile = prefFile & '/' & prefFileName; FILE * testPrefFile = fopen (prefFile.sData,"r"); if (!testPrefFile) { prefFile = baseArgDir & prefFileName; testPrefFile = fopen (prefFile.sData,"r"); } if (testPrefFile) { fclose(testPrefFile); ReadBatchFile (prefFile,ex); ex.Execute(); ex.Clear(); } //printf ("Node %d before mpiParallelOptimizer\n", rank); #ifdef __HYPHYMPI__ if (rank>0) { if (mpiParallelOptimizer || mpiPartitionOptimizer) mpiOptimizerLoop (rank, size); else mpiNormalLoop (rank, size, baseDir); /*argFile = "SHUTDOWN_CONFIRM"; MPISendString (argFile, senderID);*/ } else { #endif if (!argFile.sLength) { long selection = -2; if (!updateMode) selection = DisplayListOfChoices(); if (selection == -1) { dialogPrompt = "Batch file to run:"; _String fStr (ReturnDialogInput (true)); if (logInputMode) { _String tts = loggedFileEntry&fStr; loggedUserInputs && & tts; } PushFilePath (fStr); ReadBatchFile (fStr,ex); } else { _String templ; if (selection >= 0) templ = baseArgDir &"TemplateBatchFiles" & dirSlash; else templ = baseArgDir & "TemplateBatchFiles" & dirSlash & "WebUpdate.bf"; if (selection >= 0) templ= templ&*(_String*)(*(_List*)availableTemplateFiles(selection))(2); PushFilePath (templ); ReadBatchFile (templ,ex); } } else { #ifndef __MINGW32__ if (argFile.sData[0] != '/') argFile = baseDirectory & argFile; #else if (argFile.sData[1] != ':') // not an absolute path argFile = baseDirectory & argFile; #endif PushFilePath (argFile); ReadBatchFile (argFile,ex); } ex.Execute(); if (usePostProcessors && (!updateMode)) { ReadInPostFiles(); printf ("\n\n**********Continue with result processing (y/n)?"); _String c_str (StringFromConsole()); if (logInputMode) loggedUserInputs && & c_str; if (c_str.sData[0]!='n' && c_str.sData[0]!='N' ) { long choice = DisplayListOfPostChoices(); while (choice != -1) { _ExecutionList postEx; argFile = *(_String*)(*(_List*)availablePostProcessors(choice-1))(1); PushFilePath (argFile); ReadBatchFile (argFile, postEx); postEx.Execute(); PopFilePath (); printf ("\n\n**********Continue with result processing (y/n)?"); _String c_str (StringFromConsole()); if (logInputMode) loggedUserInputs && & c_str; if (c_str.sData[0]=='n' || c_str.sData[0]=='N' ) break; choice = DisplayListOfPostChoices(); } } } #ifdef __HYPHYMPI__ } argFile = _String ("Node ") & (long)rank & " is shutting down\n"; ReportWarning (argFile); #endif batchLanguageFunctions.Clear(); GlobalShutdown(); #ifdef __HYPHYMPI__ if (rank == 0) printf ("\n\n"); #endif }
//__________________________________________________________________________________ int main (int argc, char* argv[]) { mainArgCount = argc - 1; #ifdef __HYPHYMPI__ int rank, size; MPI_Init (&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); setParameter (mpiNodeID, (_Parameter)rank); setParameter (mpiNodeCount, (_Parameter)size); _hy_mpi_node_rank = rank; if (rank == 0) { mpiNodesThatCantSwitch.Populate (size,1,0); /* { char hostname[256]; gethostname(hostname, sizeof(hostname)); printf("PID %d on %s ready for attach\n", getpid(), hostname); fflush(stdout); //getchar (); } */ #endif //for (long k=0; k<NSIG; k++) //{ // signal(k, &hyphyBreak); //} #ifdef __HYPHYMPI__ } #endif char curWd[4096], dirSlash = GetPlatformDirectoryChar (); getcwd (curWd,4096); _String baseDir (curWd), argFile; baseDir=baseDir & dirSlash; pathNames&& &baseDir; baseDirectory = baseDir; baseArgDir = baseDirectory; _ExecutionList ex; #ifdef _OPENMP systemCPUCount = omp_get_max_threads(); #endif #ifdef _MINGW32_MEGA_ { char pid[16]; snprintf (pid,16,"%u", GetCurrentProcessId()); _String pipeName = _String("\\\\.\\pipe\\MEGAPipe") & pid; printf ("Pipe name = %s\n", pipeName.sData); if ((_HY_MEGA_Pipe = CreateFile(pipeName.sData, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE) { char* lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ); FlagError (_String("Failed to create a pipe named '") & pipeName & "' to send data from HyPhy to MEGA. Error: "&lpMsgBuf); } } #endif for (long i=1; i<argc;i++) { _String thisArg (argv[i]); if (thisArg.sData[0]=='-') { ProcessConfigStr (thisArg); } else if (thisArg.beginswith ("BASEPATH=")) { baseArgDir = thisArg.Cut(9,-1); if (baseArgDir.sLength) { if (baseArgDir.sData[baseArgDir.sLength-1]!=dirSlash) baseArgDir = baseArgDir&dirSlash; baseDirectory = baseArgDir; } } else if (thisArg.beginswith ("USEPATH=")) { baseDir = thisArg.Cut(8,-1); errorFileName = baseDir & errorFileName; messageFileName = baseDir & messageFileName; pathNames.Delete (0); pathNames&& &baseDir; } else #ifdef __MP__ if (thisArg.beginswith ("CPU=")) { _String cpus = thisArg.Cut(4,-1); systemCPUCount = cpus.toNum(); if (systemCPUCount<1) systemCPUCount = 1; pthread_setconcurrency (systemCPUCount+1); } else #endif argFile = thisArg; } GlobalStartup(); if (calculatorMode) { printf ("\nHYPHY is running in calculator mode. Type 'exit' when you are finished.\n"); while (ExpressionCalculator()) ; return 0; } if (pipeMode) { _String bfIn (stdin); _ExecutionList exIn (bfIn); exIn.Execute(); GlobalShutdown(); return 0; } // try to read the preferences _String prefFile (curWd); prefFile = prefFile & '/' & prefFileName; FILE * testPrefFile = fopen (prefFile.sData,"r"); if (!testPrefFile) { prefFile = baseArgDir & prefFileName; testPrefFile = fopen (prefFile.sData,"r"); } if (testPrefFile) { fclose(testPrefFile); ReadBatchFile (prefFile,ex); ex.Execute(); ex.Clear(); } //printf ("Node %d before mpiParallelOptimizer\n", rank); #ifdef __HYPHYMPI__ if (rank>0) { //if (mpiParallelOptimizer || mpiPartitionOptimizer) // mpiOptimizerLoop (rank, size); //else mpiNormalLoop (rank, size, baseDir); /*argFile = "SHUTDOWN_CONFIRM"; MPISendString (argFile, senderID);*/ } else { #endif if (!argFile.sLength) { long selection = -2; if (!updateMode) selection = DisplayListOfChoices(); if (selection == -1) { dialogPrompt = "Batch file to run:"; _String fStr (ReturnDialogInput (true)); if (logInputMode) { _String tts = loggedFileEntry&fStr; loggedUserInputs && & tts; } PushFilePath (fStr); ReadBatchFile (fStr,ex); } else { _String templ; if (selection >= 0) templ = baseArgDir &"TemplateBatchFiles" & dirSlash; else templ = baseArgDir & "TemplateBatchFiles" & dirSlash & "WebUpdate.bf"; if (selection >= 0) templ= templ&*(_String*)(*(_List*)availableTemplateFiles(selection))(2); PushFilePath (templ); ReadBatchFile (templ,ex); } } else { #ifndef __MINGW32__ if (argFile.sData[0] != '/') argFile = baseDirectory & argFile; #else if (argFile.sData[1] != ':') // not an absolute path argFile = baseDirectory & argFile; #endif PushFilePath (argFile); ReadBatchFile (argFile,ex); } ex.Execute(); if (usePostProcessors && (!updateMode)) { ReadInPostFiles(); printf ("\n\n**********Continue with result processing (y/n)?"); _String c_str (StringFromConsole()); if (logInputMode) loggedUserInputs && & c_str; if (c_str.getChar(0) !='n' && c_str.getChar(0)!='N' ) { long choice = DisplayListOfPostChoices(); while (choice != -1) { _ExecutionList postEx; argFile = *(_String*)(*(_List*)availablePostProcessors(choice-1))(1); PushFilePath (argFile); ReadBatchFile (argFile, postEx); postEx.Execute(); PopFilePath (); printf ("\n\n**********Continue with result processing (y/n)?"); c_str = StringFromConsole(); if (logInputMode) loggedUserInputs && & c_str; if (c_str.getChar(0)=='n' || c_str.getChar(0)=='N' ) break; choice = DisplayListOfPostChoices(); } } } #ifdef __HYPHYMPI__ } ReportWarning (_String ("Node ") & (long)rank & " is shutting down\n"); #endif #ifdef _MINGW32_MEGA_ if (_HY_MEGA_Pipe != INVALID_HANDLE_VALUE) CloseHandle (_HY_MEGA_Pipe); #endif PurgeAll (true); GlobalShutdown (); #ifdef __HYPHYMPI__ if (rank == 0) printf ("\n\n"); #endif }
int main( int argc, char *argv[] ) { #ifdef __HYPHYMPI__ int rank, size; MPI_Init (&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); _hy_mpi_node_rank = rank; setParameter (mpiNodeID, (_Parameter)rank); setParameter (mpiNodeCount, (_Parameter)size); if (rank == 0) #endif gtk_init (&argc, &argv); /* set up globals */ char curWd[4096]; getcwd (curWd,4096); _String baseDir (curWd); baseDir=baseDir&'/'; pathNames&& &baseDir; baseDirectory = baseDir; for (long i=1; i<argc;i++) { _String thisArg (argv[i]); if (thisArg.beginswith ("BASEPATH=")) { baseDirectory = thisArg.Cut(9,-1); if (baseDirectory.sLength) { if (baseDirectory.sData[baseDirectory.sLength-1]!='/') baseDirectory = baseDirectory&"/"; } } else if (thisArg.beginswith ("USEPATH=")) { _String baseArgDir (thisArg,8,-1); errorFileName = baseArgDir & errorFileName; messageFileName = baseArgDir & messageFileName; pathNames.Delete (0); pathNames&& &baseDir; } else if (thisArg.beginswith ("CPU=")) { #ifdef __MP__ _String cpus = thisArg.Cut(4,-1); systemCPUCount = cpus.toNum(); if (systemCPUCount<1) systemCPUCount = 1; #ifdef __MP2__ pthread_setconcurrency (systemCPUCount+1); #endif #endif } #ifdef __HYPHYMPI__ else if (thisArg == _String("MPIOPTIMIZER")) { mpiParallelOptimizer = true; setParameter (mpiNodeCount, 0.0); } else if (thisArg == _String("MPIPARTITIONS")) { mpiPartitionOptimizer = true; setParameter (mpiNodeCount, 0.0); } #endif } #ifdef __HYPHYMPI__ if (rank == 0) #endif { baseDir = baseDirectory & "GTKResources"; _List scanRes; ScanDirectoryForFileNames(baseDir,scanRes,false); if (scanRes.lLength == 0) { GtkWidget * noRez = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "HYPHY_GTK was unable to find a required GTKResources directory in %s. Please use BASEPATH= command line option to specify where the installation directory of HyPhy can be found.", baseDirectory.sData); gtk_dialog_run (GTK_DIALOG (noRez)); gtk_widget_destroy (noRez); return 1; } _String rcPath = baseDir & "/theme/theme.rc"; //printf ("Loading res files from %s\n", rcPath.sData); gtk_rc_parse (rcPath.sData); } GlobalStartup(); #ifdef __HYPHYMPI__ if (rank == 0) { #endif GdkDisplay * defDisplay = gdk_screen_get_display (gdk_screen_get_default()); hSizeCursor = gdk_cursor_new_for_display (defDisplay,GDK_SB_H_DOUBLE_ARROW); pickUpCursor = gdk_cursor_new_for_display (defDisplay,GDK_TARGET); dropOffCursor = gdk_cursor_new_for_display (defDisplay,GDK_TCROSS); screenPContext = gdk_pango_context_get_for_screen (gdk_screen_get_default()); tablePDMenuIcon = (GdkPixbuf*)ProcureIconResource(4020); /*{ GdkScreen * defD = gdk_screen_get_default(); fontConversionFactor = 72.27 / (gdk_screen_get_height (defD) *25.4 / gdk_screen_get_height_mm(defD)); printf ("Pango conversion factor computed at: %g\n", fontConversionFactor); }*/ ReadInTemplateFiles (); hyphyConsoleWindow = new _HYConsoleWindow ("HYPHY Console"); ReadPreferences (); SetStatusLine ("None","Idle","00:00:00"); while (gtk_events_pending()) gtk_main_iteration(); SetPreferences (); ReadGeneticCodes (); ReadModelTemplates (); ReadTreeProcessors (); MoveConsoleWindow (consolePositionRectangle); StringToConsole (hyphyCiteString); hyphyConsoleWindow->BringToFront(); #ifdef __HYPHYMPI__ { char statBuffer[1024]; sprintf (statBuffer,"MPI version of HyPhy running on %d nodes (a master and %d compute nodes) in %s mode\n", size, size-1, mpiPartitionOptimizer?"partition":(mpiParallelOptimizer?"rate heterogeneity":"normal")); BufferToConsole (statBuffer); } #endif g_timeout_add (100,GlobalQueueTimer,nil); g_timeout_add (1000,progressTimerFunction,nil); gtk_main (); WritePreferences(); #ifdef __HYPHYMPI__ } else // slave node { if (mpiParallelOptimizer || mpiPartitionOptimizer) mpiOptimizerLoop (rank, size); else mpiNormalLoop (rank, size, baseDir); } #endif GlobalShutdown(); return 0; }