Merge branch 'master' into HeadlessJavaGUITests

This commit is contained in:
Marcus Rockwell 2024-03-28 16:31:29 -05:00
commit ab32e65068
11 changed files with 122 additions and 100 deletions

View File

@ -65,11 +65,11 @@ namespace Trick {
/** Thread start time */
long long start_time ;
/** Thread total frame scheduled time in tics*/
/** Thread total frame scheduled time in tics */
long long frame_sched_time ;
/** Thread total frame scheduled time in seconds*/
double frame_time ;
/** Thread total frame scheduled time in seconds */
double frame_time ; // trick_units(s)
} ;

View File

@ -17,7 +17,6 @@
#define IPPYTHON_HH
#include <string>
#include <pthread.h>
#include "trick/InputProcessor.hh"
namespace Trick {
@ -36,9 +35,6 @@ namespace Trick {
/** Returned value from event condition evaluation.\n */
int return_val ; /**< trick_io(**) trick_units(--) */
/** Input processor mutex for protection for var server and event processing.\n */
pthread_mutex_t ip_mutex; /**< trick_io(**) trick_units(--) */
/**
@brief Constructor.
*/

View File

@ -92,7 +92,7 @@ namespace Trick {
long long frame_time ; /**< trick_io(**) */
/** Cumulative time in seconds used for job in frame (rt_stop_time - rt_start_time) / time_tic_value */
double frame_time_seconds; /**< trick_io(s) */
double frame_time_seconds; /**< trick_io(**) trick_units(s) */
/** Sim_object_id.id (for job identification in timeline logging) */
double frame_id; /**< trick_io(**) */

View File

@ -1,6 +1,13 @@
#!/usr/bin/perl
package sie_concat;
use File::Basename ;
use FindBin qw($RealBin);
use lib "$RealBin/pm" ;
use get_paths ;
my @trick_python_paths = get_paths( "TRICK_PYTHON_PATH") ;
open(my $S_sie_resource, ">", "./S_sie.resource")
or die "cannot open S_sie.resource $!";
print $S_sie_resource "<?xml version=\"1.0\"?>\n\n<sie>\n\n";
@ -14,6 +21,17 @@ while(my $line = <$classes_resource>) {
close($classes_resource);
# Add trickified classes.resource if available
foreach my $path ( @trick_python_paths ) {
my $trickified_dir = dirname($path);
if (open(my $classes_resource, "<", "$trickified_dir/build/classes.resource")) {
while(my $line = <$classes_resource>) {
print $S_sie_resource $line;
}
close($classes_resource);
}
}
open(my $top_level_objects_resource, "<", "build/top_level_objects.resource")
or die "cannot open build/top_level_objects.resource";
while(my $line = <$top_level_objects_resource>) {

View File

@ -43,6 +43,13 @@
<trick_version>dev</trick_version>
</properties>
<repositories>
<repository>
<id>third-party</id>
<url>file://${basedir}/src/lib/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>junit</groupId>
@ -51,15 +58,9 @@
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jdesktop.bsaf</groupId>
<groupId>third-party</groupId>
<artifactId>bsaf</artifactId>
<version>1.9.2</version>
<exclusions>
<exclusion>
<groupId>javax.jnlp</groupId>
<artifactId>jnlp</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.jfree</groupId>

Binary file not shown.

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>third-party</groupId>
<artifactId>bsaf</artifactId>
<version>1.9.2</version>
<description>POM was created from install:install-file</description>
</project>

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<groupId>third-party</groupId>
<artifactId>bsaf</artifactId>
<versioning>
<release>1.9.2</release>
<versions>
<version>1.9.2</version>
</versions>
<lastUpdated>20240313142443</lastUpdated>
</versioning>
</metadata>

View File

@ -12,10 +12,10 @@
#include <sstream>
#include <vector>
#include <string>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include "trick/IPPython.hh"
#include "trick/MemoryManager.hh"
@ -31,6 +31,10 @@ Trick::IPPython::IPPython() : Trick::InputProcessor::InputProcessor() , units_co
return ;
}
// Need to save the state of the main thread to allow child threads to run PyRun variants.
static PyThreadState *_save = NULL;
/**
@details
-# Loops through all of the memorymanager allocations testing if a name handle was given.
@ -62,7 +66,9 @@ void Trick::IPPython::get_TMM_named_variables() {
ss << "trick.castAs" << user_type_name << "(int(" << alloc_info->start << "))" << std::endl ;
ss << "except AttributeError:" << std::endl ;
ss << " pass" << std::endl ;
PyGILState_STATE gstate = PyGILState_Ensure();
PyRun_SimpleString(ss.str().c_str()) ;
PyGILState_Release(gstate);
}
}
}
@ -84,12 +90,6 @@ int Trick::IPPython::init() {
FILE *input_fp ;
int ret ;
std::string error_message ;
pthread_mutexattr_t m_attr ;
/* Initialize a mutex to protect python processing for var server and events. */
pthread_mutexattr_init(&m_attr) ;
pthread_mutexattr_settype(&m_attr, PTHREAD_MUTEX_RECURSIVE) ;
pthread_mutex_init(&ip_mutex , &m_attr) ;
// Run Py_Initialze first for python 2.x
#if PY_VERSION_HEX < 0x03000000
@ -104,6 +104,7 @@ int Trick::IPPython::init() {
Py_Initialize();
#endif
// The following PyRun_ calls do not require the PyGILState guards because no threads are launched
/* Import simulation specific routines into interpreter. */
PyRun_SimpleString(
"import sys\n"
@ -149,18 +150,21 @@ int Trick::IPPython::init() {
}
fclose(input_fp) ;
return(0) ;
// Release the GIL from the main thread.
Py_UNBLOCK_THREADS
return(0) ;
}
//Command to parse the given string.
int Trick::IPPython::parse(std::string in_string) {
int ret ;
pthread_mutex_lock(&ip_mutex);
in_string += "\n" ;
PyGILState_STATE gstate = PyGILState_Ensure();
ret = PyRun_SimpleString(in_string.c_str()) ;
pthread_mutex_unlock(&ip_mutex);
PyGILState_Release(gstate);
return ret ;
@ -181,12 +185,12 @@ int Trick::IPPython::parse(std::string in_string) {
*/
int Trick::IPPython::parse_condition(std::string in_string, int & cond_return_val ) {
pthread_mutex_lock(&ip_mutex);
in_string = std::string("trick_ip.ip.return_val = ") + in_string + "\n" ;
// Running the simple string will set return_val.
PyGILState_STATE gstate = PyGILState_Ensure();
int py_ret = PyRun_SimpleString(in_string.c_str()) ;
PyGILState_Release(gstate);
cond_return_val = return_val ;
pthread_mutex_unlock(&ip_mutex);
return py_ret ;
@ -200,7 +204,10 @@ int Trick::IPPython::restart() {
}
int Trick::IPPython::shutdown() {
if ( Py_IsInitialized() ) {
// Obtain the GIL so that we can shut down properly
Py_BLOCK_THREADS
Py_Finalize();
}
return(0) ;

View File

@ -66,6 +66,7 @@ Trick::JobData::JobData(int in_thread, int in_id, std::string in_job_class_name
next_tics = 0 ;
frame_time = 0 ;
frame_time_seconds = 0.0 ;
}
void Trick::JobData::enable() {

View File

@ -5569,45 +5569,6 @@
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
"integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
},
"body-parser": {
"version": "1.20.1",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
"integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
"requires": {
"bytes": "3.1.2",
"content-type": "~1.0.4",
"debug": "2.6.9",
"depd": "2.0.0",
"destroy": "1.2.0",
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"on-finished": "2.4.1",
"qs": "6.11.0",
"raw-body": "2.5.1",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
},
"dependencies": {
"bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
},
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
}
}
},
"bonjour-service": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz",
@ -6082,11 +6043,6 @@
"safe-buffer": "~5.1.1"
}
},
"cookie": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
"integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw=="
},
"cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
@ -7898,16 +7854,16 @@
}
},
"express": {
"version": "4.18.2",
"resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
"integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
"version": "4.19.2",
"resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
"integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
"requires": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
"body-parser": "1.20.1",
"body-parser": "1.20.2",
"content-disposition": "0.5.4",
"content-type": "~1.0.4",
"cookie": "0.5.0",
"cookie": "0.6.0",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "2.0.0",
@ -7940,6 +7896,35 @@
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
},
"body-parser": {
"version": "1.20.2",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
"integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
"requires": {
"bytes": "3.1.2",
"content-type": "~1.0.5",
"debug": "2.6.9",
"depd": "2.0.0",
"destroy": "1.2.0",
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"on-finished": "2.4.1",
"qs": "6.11.0",
"raw-body": "2.5.2",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
}
},
"bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
},
"cookie": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
"integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw=="
},
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@ -7953,6 +7938,17 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"raw-body": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
"integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
"requires": {
"bytes": "3.1.2",
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
}
},
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@ -8193,9 +8189,9 @@
}
},
"follow-redirects": {
"version": "1.15.4",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz",
"integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw=="
"version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
"integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA=="
},
"font-atlas": {
"version": "2.1.0",
@ -14186,24 +14182,6 @@
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
},
"raw-body": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
"integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
"requires": {
"bytes": "3.1.2",
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
},
"dependencies": {
"bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
}
}
},
"react": {
"version": "16.8.6",
"resolved": "https://registry.npmjs.org/react/-/react-16.8.6.tgz",
@ -16887,9 +16865,9 @@
}
},
"webpack-dev-middleware": {
"version": "5.3.3",
"resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz",
"integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==",
"version": "5.3.4",
"resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz",
"integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==",
"requires": {
"colorette": "^2.0.10",
"memfs": "^3.4.3",