From 31b06f508ab6055d629c346f2e47375a2d9c4d11 Mon Sep 17 00:00:00 2001 From: Erwin Coumans Date: Tue, 4 Sep 2018 19:24:31 -0700 Subject: [PATCH] only add notifications if there is a plugin that needs them call the 'reportNotifications' in GRPC server main --- examples/SharedMemory/b3PluginManager.cpp | 26 ++++++++++++++++--- examples/SharedMemory/grpc/main.cpp | 1 + examples/SharedMemory/grpc/pybullet_client.py | 5 ++-- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/examples/SharedMemory/b3PluginManager.cpp b/examples/SharedMemory/b3PluginManager.cpp index cd50f9883..b3719692d 100644 --- a/examples/SharedMemory/b3PluginManager.cpp +++ b/examples/SharedMemory/b3PluginManager.cpp @@ -92,9 +92,11 @@ struct b3PluginManagerInternalData b3AlignedObjectArray m_notifications[2]; int m_activeNotificationsBufferIndex; int m_activeRendererPluginUid; + int m_numNotificationPlugins; b3PluginManagerInternalData() - :m_activeNotificationsBufferIndex(0), m_activeRendererPluginUid(-1) + :m_activeNotificationsBufferIndex(0), m_activeRendererPluginUid(-1), + m_numNotificationPlugins(0) { } }; @@ -150,7 +152,10 @@ void b3PluginManager::clearEvents() void b3PluginManager::addNotification(const struct b3Notification& notification) { - m_data->m_notifications[m_data->m_activeNotificationsBufferIndex].push_back(notification); + if (m_data->m_numNotificationPlugins>0) + { + m_data->m_notifications[m_data->m_activeNotificationsBufferIndex].push_back(notification); + } } int b3PluginManager::loadPlugin(const char* pluginPath, const char* postFixStr) @@ -187,8 +192,14 @@ int b3PluginManager::loadPlugin(const char* pluginPath, const char* postFixStr) plugin->m_preTickFunc = (PFN_TICK)B3_DYNLIB_IMPORT(pluginHandle, preTickPluginCallbackStr.c_str()); plugin->m_postTickFunc = (PFN_TICK)B3_DYNLIB_IMPORT(pluginHandle, postTickPluginCallback.c_str()); plugin->m_processNotificationsFunc = (PFN_TICK)B3_DYNLIB_IMPORT(pluginHandle, processNotificationsStr.c_str()); + if (plugin->m_processNotificationsFunc) + { + m_data->m_numNotificationPlugins++; + } + plugin->m_getRendererFunc = (PFN_GET_RENDER_INTERFACE)B3_DYNLIB_IMPORT(pluginHandle, getRendererStr.c_str()); - + + if (plugin->m_initFunc && plugin->m_exitFunc && plugin->m_executeCommandFunc) { @@ -251,6 +262,10 @@ void b3PluginManager::unloadPlugin(int pluginUniqueId) b3PluginHandle* plugin = m_data->m_plugins.getHandle(pluginUniqueId); if (plugin) { + if (plugin->m_processNotificationsFunc) + { + m_data->m_numNotificationPlugins--; + } b3PluginContext context = {0}; context.m_userPointer = plugin->m_userPointer; context.m_physClient = (b3PhysicsClientHandle) m_data->m_physicsDirect; @@ -373,6 +388,11 @@ int b3PluginManager::registerStaticLinkedPlugin(const char* pluginPath, PFN_INIT pluginHandle->m_userPointer = 0; + if (pluginHandle->m_processNotificationsFunc) + { + m_data->m_numNotificationPlugins++; + } + m_data->m_pluginMap.insert(pluginPath, pluginUniqueId); { diff --git a/examples/SharedMemory/grpc/main.cpp b/examples/SharedMemory/grpc/main.cpp index 8717238c7..1fbb4021f 100644 --- a/examples/SharedMemory/grpc/main.cpp +++ b/examples/SharedMemory/grpc/main.cpp @@ -135,6 +135,7 @@ private: if (cmdPtr) { bool hasStatus = m_comProc->processCommand(*cmdPtr, serverStatus, &buffer[0], buffer.size()); + m_comProc->reportNotifications(); double timeOutInSeconds = 10; b3Clock clock; double startTimeSeconds = clock.getTimeInSeconds(); diff --git a/examples/SharedMemory/grpc/pybullet_client.py b/examples/SharedMemory/grpc/pybullet_client.py index ab189ecca..dab9193bb 100644 --- a/examples/SharedMemory/grpc/pybullet_client.py +++ b/examples/SharedMemory/grpc/pybullet_client.py @@ -62,8 +62,9 @@ def run(): print("PyBullet client received: " , response) - - for i in range (1000): + i=0 + while(True): + i=i+1 print("submit StepSimulationCommand: ", i) response = stub.SubmitCommand(pybullet_pb2.PyBulletCommand(stepSimulationCommand=pybullet_pb2.StepSimulationCommand())) print("PyBullet client received: " , response.statusType)