Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[0.13.2] - 2024-06-07

Fixed

  • Reshuffled the ExecutionController::compile_abi call inside ExecutionController::execute_abi and ExecutionController::executeDefinition_abi to occur before acquiring the execution-related mutex locks. This helps to prevent deadlocks that can occur when compile_abi is invoked within execution, which involves upgrading a read topology lock into a write lock.

[0.13.1] - 2024-04-02

Fixed

  • Refactored a piece of logic in nested isolate task execution so that full-stack task processing is done across all three scheduling types.

[0.13.0] - 2024-04-01

Fixed

  • Fixed and reactivated a bunch of faulty unit tests (mostly usage of condition variables and latches in said tests).

  • Fixed a somewhat-rare bug in ParallelScheduler that can cause hangs during nested isolation task processing if the first task in each task stack was originally added by a different ParallelSpawner instance than the one currently running.

  • Fixed a bug that could sometimes incorrectly decide that a call to execution was made recursively within a post- process task, thereby cancelling the operation when it could have proceeded without issue.

Removed

  • Removed the LockFreeStack implementation in favor of using carb’s LocklessStack, since the newly-improved version is now included in the carbonite package that’s utilized in kit 106.

[0.12.2] - 2024-02-05

Changed

  • Fix a deadlock that can occur during combined parallel-recursive on-demand execution that’s invoked via ExecutionController::executeDefinition.

Added

  • New unit test to validate the aforementioned change.

[0.12.1] - 2024-02-01

Changed

  • Fix debug assertion in ExecutionController.

[0.12.0] - 2024-02-01

Changed

  • Pre-process task lifetime management to clean up tasks originally enqueued from a different extension when said extension is about to be unloaded (thus preventing the task from potentially calling into now-unloaded code).

  • Pre-process tasks can no-longer be recursively scheduled from within pre-process task evaluation. Instead, pre-process tasks can be scheduled to “persist” (i.e. to always be evaluated as long as the module from which they came from stays loaded) or to act as “one-offs” (i.e. to be cleaned up immediately after their first evaluation).

  • Some unit tests to reflect the new behavior.

[0.11.1] - 2024-01-25

Changed

  • Pre-process tasks now always run before execution graph compilation rather than execution.

  • Modified a few unit tests for correctness.

  • Logging level for certain warnings to prevent unnecessary spamming of the console.

[0.11.0] - 2024-01-24

Changed

  • Modify TbbSchedulerState to utilize threadsafe LIFO data containers (lockless stacks) for storing enqueued tasks (helps in preventing stack overflows when dealing with execution graphs where the number of nodes per NodeGraphDef tends to be much larger than the depth of nested NodeGraphDefs).

  • Modify ParallelScheduler to prevent execution continuation via tasks that were enqueued by different/ non-local ParallelSpawner instances during nested isolate processing (helps in preventing stack overflows).

Added

  • New LockFreeStack implementation (borrowed from CVCUDA).

  • New unit tests to validate the aforementioned changes.

[0.10.1] - 2023-12-20

Changed

  • Force nested isolation tasks to bypass the scheduler and be executed directly in order to reduce the chance of stack overflow errors from occurring (OM-117092).

[0.10.0] - 2023-12-05

Changed

  • Consolidated pre- and post-process tasks onto the ExecutionController.

  • All execution and compilation that’s invoked from the ExecutionController is now serialized.

  • Relevant synchronization changes to make pre- and post-process task handling/scheduling thread-safe.

Added

  • New unit tests to validate the aforementioned changes.

[0.9.3] - 2023-11-30

Changed

  • PassPipeline instancing logic should only work with NodeGraphDefs.

[0.9.2] - 2023-11-15

Changed

  • ExecutionController::executeDefinition cannot be used to execute the top-level execution graph’s NodeGraphDef.

[0.9.1] - 2023-11-09

Changed

  • Make all derived omni::graph::exec::unstable::IExecutionContext execute methods private in the omni::kit::exec::core::unstable::IExecutionContext interface in order to prevent the latter interface from being utilized to directly compute a graph; prefer using the ExecutionController object for invoking execution at the kit-EF integration level.

  • ExecutionController::executeDefinition now returns early with a success status if one attempts to call the method on a null definition. This method now also uses its internal omni::kit::exec::core::unstable::ExecutionContext object to call the required execution methods rather than using the omni::kit::exec::core::unstable::IExecutionContext interface, since in the latter we’ve hidden all execution calls (as mentioned in the first bullet point).

Added

  • Unit tests to validate the new ExecutionController::executeDefinition behavior.

[0.9.0] - 2023-10-18

Added

  • Ability to register serial ‘pre-tasks’ that runs before compilation of graphs

[0.8.0] - 2023-10-18

Added

  • New synchronization mechanisms in the EF-kit integration layer that mainly target the ExecutionController, including:

    • Serialized, blocking execution graph compilation relative to other requests to to execute, traverse, or compile the same graph.

    • Logic to detect and gracefully handle recursive compilation-in-compilation, compilation-in execution, and execution-in-compilation calls.

    • Additional acquisition of a USD writer lock during graph compilation if said graph is explicitly associated with some USD context.

    • Continued allowance of concurrent graph execution/traversal, including multithreaded evaluation from a single and/or multiple different contexts.

  • Unit tests to validate the new additions.

Changed

  • Reintroduction of graph compilation prior to computing the pre- and post-render graphs.

[0.7.2] - 2023-10-16

Changed

  • Updated some documentation associated with ExecutionContext::isExecutingThread’s usage.

[0.7.1] - 2023-10-10

Changed

  • Fixed typo by renaming ITbbSchedulerState::geState to ITbbSchedulerState::getState.

[0.7.0] - 2023-10-09

Changed

  • Removed the execution mutex from ExecutionController.

  • Modified the ParallelScheduler to support multiple different execution contexts (potentially associated with the same execution graph) being kickstarted across multiple different threads (with many threads potentially being used to kickstart execution from a single context).

  • Added new unit tests for the ParallelScheduler.

[0.6.0] - 2023-08-24

Changed

  • Added mutex locks to ExecutionController::execute_abi and ExecutionController::executeDefinition_abi in order to prevent parallel execution of the same execution Graph within the same ExecutionContext.

[0.5.1] - 2023-07-21

Changed

  • Renamed Node::createForDef references to Node::create.

[0.5.0] - 2023-07-17

Changed

  • Renamed PassPipeline::execute_abi to PassPipeline::run_abi.

[0.4.1] - 2023-05-17

Changed

  • Expose the DumpTopology debugging setting as a Python binding.

  • DumpTopology setting is no longer a carb setting.

  • Remove logic that only generates the GraphViz file at execution graph “compile” time.

[0.4.0] - 2023-02-22

Changed

  • Renamed omni.kit.exec to omni.kit.exec.core

[0.3.0] - 2023-02-15

Changed

  • Execution Framework is enabled by default

[0.2.0] - 2023-02-08

Added

  • Added support for Isolate tasks

[0.1.1] - 2023-01-20

Changed

  • Simplification of serial tasks scheduling

[0.1.0] - 2022-11-14

Initial version