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.
- Added IMonitorHandle.GetValueAsObject() to get a monitored object without any formattig. As requrest in #26
- Fixed #23 Users can select the update rate of SceneHook in the Settings to Update, FixedUpdate, or LateUpdate
- Fixed #22 Grouped monitored objctes are now unregistered correctly (TextMeshPro)
- Fixed #20 WebGL UI is not updating. This was caused because the callback object was created during subsystem registration which seems to not work.
- Fixed #19 Creating a settings file creates an empty resources folder.
- Fixed a NullReferenceException when starting the game without a settings file as mentioned in #19.
- Fixed issue #18 ambiguous reference between 'UnityEditor.Compilation.AssemblyFlags' and ' System.Reflection.AssemblyFlags'
- Fixed an import issue that created multiple Resources folder.
- Added the option to allow updating monitors even when Time.timeScale is below 0.05
- Moved settings access from Window/Runtime Monitoring to Tools/Runtime Monitoring
- Fixed a NullReferenceException that occured when exiting playmode.
- Fixed runtime NullReferenceExceptions in MonitoringRegistry caused by race conditions during initialization.
- Fixed an invalid cast exception that happened in newer versions of unity.
- Fixed an error that happened when creating an new monitoring settings asset during import.
- Removed Thread Dispatcher (com.baracuda.thread-dispatcher) as a dependency.
- Moved settings access from Tools/Runtime Monitoring to Window/Runtime Monitoring
- Fixed an exception that occurred in builds when monitoring was set to editor only.
- Runtime Monitoring now works properly with Disabled Domain and Scene reloads in Enter Play Mode Options.
- ISettableValue is now deprecated.
- Added a filtering editor window: (menu: Tools > Runtime Monitoring > Filter Window)
- Added Documentation in multiple file formats to samples.
- MonitoringMetaAttributes can now be applied to interfaces.
- Settings are now accessed via: (menu: Tools > Runtime Monitoring > Settings)
- Changed multiple property types in IMonitoringRegistry from returning an IReadOnlyCollection to returning an IReadOnlyList.
- Monitoring structs that implement IEnumerable or IEnumerable are not monitored like a collection.
- Added better error handling for Editor and Debug builds.
- Refactored and reworked API to reduce complexity and improve accessibility.
- Removed service locator pattern since it introduced a lot of complexity without offering any benefit.
- Replaced Baracuda.Monitoring.MonitoringSystems with Baracuda.Monitoring.Monitor
- Improved static initialization.
- Updated documentation.
- Fixed an issue that occured when registering a monitor target during static initialization / construction.
- Fixed an issue when monitoring a non generic type with a generic IEnumerable interface.
- Baracuda.Monitoring.MonitoringSystems is now obsolete. Use Baracuda.Monitoring.Monitor instead!
- MonitoringSystems.Initialized is now obsolete. Use Monitor.Initialized instead!
- MonitoringSystems.Manager is now obsolete. Use Monitor, MonitoringEvents and MonitoringRegistry instead!
- MonitoringSystems.Settings is now obsolete. Use Monitor.Settings instead!
- MonitoringSystems.Utility is now obsolete. Use Baracuda.Monitor.Registry instead!
- MonitoringSystems.UI is now obsolete. Use Monitor.UI instead!
- MonitoringSystems.Resolve{T} is now obsolete. Use Baracuda.Monitoring.Monitor to access API instead!
- MonitoringSystems.Register{T} is now obsolete. Use Baracuda.Monitoring.Monitor to access API instead!
- MonitoringSystems.SystemNotRegisteredException is now obsolete.
- MonitoringExtensions.RegisterMonitor{T}(T target) is now obsolete. Use MonitoringExtensions.BeginMonitoring{T}(T target) instead!
- MonitoringExtensions.UnregisterMonitor{T}(T target) is now obsolete. Use MonitoringExtensions.EndMonitoring{T}(T target) instead!
- IMonitoringManager is now obsolete.
- IMonitoringManager.IsInitialized is now obsolete. Use Monitor.Initialized instead!
- IMonitoringManager.ProfilingCompleted is now obsolete. Use Monitor.Events.ProfilingCompleted instead!
- IMonitoringManager.UnitCreated is now obsolete. Use Monitor.Events.MonitorHandleCreated instead!
- IMonitoringManager.UnitDisposed is now obsolete. Use Monitor.Events.MonitorHandleDisposed!
- IMonitoringManager.RegisterTarget{T}(T target) is now obsolete. Use Monitor.BeginMonitoring instead!
- IMonitoringManager.UnregisterTarget{T}(T target) is now obsolete. Use Monitor.EndMonitoring!
- IMonitoringManager.GetStaticUnits() is now obsolete. Use Monitor.Registry.GetMonitorHandles(HandleTypes.Static) instead!
- IMonitoringManager.GetInstanceUnits() is now obsolete. Use Monitor.Registry.GetMonitorHandles(HandleTypes.Instance) instead!
- IMonitoringManager.GetAllMonitoringUnits() is now obsolete. Use Monitor.Registry.GetMonitorHandles() instead!
- IMonitoringUtility is now obsolete.
- IMonitoringUtility.IsFontHashUsed(int fontHash) is now obsolete. Use Baracuda.Monitor.Registry.UsedFonts instead!
- IMonitoringUtility.GetMonitorUnitsForTarget() is now obsolete. Use Baracuda.Monitor.Registry.GetMonitorHandlesForTarget instead!
- IMonitoringUtility.GetAllTags() is now obsolete. Use Baracuda.Monitor.Registry.UsedTags instead!
- IMonitoringUtility.GetAllTypeStrings() is now obsolete. Use Baracuda.Monitor.Registry.UsedTypes instead!
- IMonitoringManager.IsFontHashUsed(int fontHash) is now obsolete. Use Baracuda.Monitor.Registry.UsedFonts instead!
- IMonitoringManager.GetMonitorUnitsForTarget(object target) is now obsolete. Use Baracuda.Monitor.Registry.UsedFonts instead!
- IMonitoringManager.GetAllTags() is now obsolete. Use Baracuda.Monitor.Registry.UsedTags instead!
- IMonitoringManager.GetAllTypeStrings() is now obsolete. Use Baracuda.Monitor.Registry.UsedTypes instead!
- IMonitorUnit is now obsolete. Use IMonitorHandle instead!
- IMonitoringSubsystem{T} is now obsolete.
- IMonitorHandle.TargetName is now obsolete. Use IMonitorHandle.DisplayName instead!
- IMonitorSettings.UIController is now obsolete. Use MonitoringUIOverride instead!
- IMonitorSettings.EnableMonitoring is now obsolete. Use IMonitoringSettings.IsMonitoringEnabled instead!
- IMonitorSettings.AutoInstantiateUI is now obsolete.
- ProfilingCompletedListener is now obsolete. Use ProfilingCompletedDelegate instead!
- Added a temporary fix to prevent an exception during initialization.
- Updated system installation process and removed initialization from static constructor.
- Added a the new property 'Initialized' to MonitoringSystems.cs that returns true once systems are installed properly.
- Added experimental API to register targets before systems are installed.
- Fixed an exception that happened when disabling async profiling.
- Updated thread dispatcher version dependency.
- Removed deprecated code that occasionally caused the settings file to be marked as dirty.
- Fixed an exception that was caused by monitoring a struct with an IEnumerable interface.
- IL2CPP type def class is now generated with a random name to prevent potential duplicates.
- Removed a warning that was displayed when calling this.UnregisterMonitor() on an object that was not already registered.
- Fixed an issue that prevented the UIs visibility from being toggled.
- MShowIndexerAttribute is now obsolete. Use MShowIndexAttribute instead. Removing in [4.0.0]
- Fixed UI not updating when using the default IMGUI UI. (UI started to update after its visibility was changed manually)
- Added multiple font assets to "Resources/Monitoring" that are used by the default MonitoringUI. Additional fonts at this path will be available when using the default MonitoringUI.
- Reworked multiple aspects of the UI system. MonitoringUI instances can now be instantiated and destroyed at will during runtime.
- Selecting a MonitoringUI prefab in the settings window is no longer required. Instead you can now select an override prefab to replace the default IMGUI based UI.
- The default IMGUI based UI is no longer a readonly prefab but now created dynamically during runtime. You can still import an IMGUI based prefab / MonitoringUI from the samples.
- The 'Enable Monitoring' toggle in the settings window is now a selection with an additional editor only option.
- Updated samples for IMGUI, TextMeshPro and UIToolkit.
- Updated example scene.
- IMonitoringUI.IsVisible() is now obsolete. Use IMonitoringUI.Visible instead. Removing in [4.0.0]
- IMonitoringUI.Show() is now obsolete. Use IMonitoringUI.Visible instead. Removing in [4.0.0]
- IMonitoringUI.Hide() is now obsolete. Use IMonitoringUI.Visible instead. Removing in [4.0.0]
- IMonitoringUI.ToggleDisplay() is now obsoleteUse IMonitoringUI.Visible instead. Removing in [4.0.0]
- IMonitoringUI.GetActiveUIController() is now obsolete. Use IMonitoringUI.GetCurrent instead. Removing in [4.0.0]
- IMonitoringUI.GetActiveUIController() is now obsolete. Use IMonitoringUI.GetCurrent instead. Removing in [4.0.0]
- IMonitoringUI.CreateMonitoringUI() is now obsolete. Use IMonitoringUI.Visible instead. Removing in [4.0.0]
- IMonitoringSettings.UIController is now obsolete. Use different approach instead. Removing in [4.0.0]
- IMonitoringSettings.EnableMonitoring is now obsolete. Use IMonitoringSettings.IsMonitoringEnabled instead. Removing in [4.0.0]
- MonitoringUIController is now obsolete. Use MonitoringUI instead. Removing in [4.0.0]
- MonitoringUIController.IsVisible() is now obsolete. Use MonitoringUI.Visible instead. Removing in [4.0.0]
- MonitoringUIController.ShowMonitoringUI() is now obsolete. Use MonitoringUI.Visible instead. Removing in [4.0.0]
- MonitoringUIController.HideMonitoringUI() is now obsolete. Use MonitoringUI.Visible instead. Removing in [4.0.0]
- MonitoringUIController.OnUnitDisposed() is now obsolete. Use MonitoringUI.OnMonitorUnitDisposed instead. Removing in [4.0.0]
- MonitoringUIController.OnUnitCreated() is now obsolete. Use MonitoringUI.OnMonitorUnitCreated instead. Removing in [4.0.0]
- Removed com.baracuda.ui assembly.
- Fixed NullReferenceExceptions caused by missing dummy systems when disabling runtime monitoring.
- Fixed an issue with missing namespaces in newer Unity versions.
- Fixed a versioning issue with Open UPM
- Changed the project structure and layout to make it comply with UPM package conventions.
- Restructured the repository to make it compatible with UPM.
- Reworked IL2CPP type definition generation.
- Static struct member can now be monitored.
- Added multiple assemblies to be ignored during profiling by default. (List is part of the settings file)
- Added package manager dependencies for com.baracuda.thread-dispatcher
- Fixed an IL2CPP type definition issue caused by missing support for generic monitored types.
- Removed obsolete scripts, API and assemblies.
- Removed .unitpackages for UI assets. The same assets can now be imported via the samples section in the package manager window.
- Fixed some IL2CPP type generation issues caused by potentially inaccessible type generations being generated.
- Fixed some potential runtime exceptions caused by missing generic type checks.
- Fixed ExecutionEngineException (missing AOT code) that occurred in IL2CPP builds for custom IList{T} value processors.
- Improved value processor warning messages.
- Fixed an IL2CPP build issue caused by a missing namespace.
- Refactored internal classes and removed unused code.
- Deprecated Assembly-Baracuda-Pooling.
- Deprecated Assembly-Baracuda-Reflection.
- Scripts from obsolete assemblies are now contained in Assembly-Baracuda-Utilities.
- Note that obsolete assemblies and their contents can be removed and only exist because of update compatibility.
- The first MonitoringUIController instance in a scene will be used as the active MonitoringUIController. Only if no instance is located in a scene the selected prefab from the settings window is instantiated and used.
- Interface monitoring. Interface member can now be used as a target for any monitor attribute.
- Fixed the scale of some TMP UI elements
- Fixed an issue caused by unsafe code usage.
- Reworked the systems core structure. Systems are now managed and communicate using a Service Locator Pattern.
- Old static API is now obsolete.
- Refactored and moved internal classes and namespaces.
- Reworked how events are monitored. (more options, coloring & subscriber display)
- Reworked AOT file generation.
- Reworked dynamic filtering of monitored member.
- Reworked and optimized TMP & UIToolkit controller.
- Methods can now be monitored with support for out parameter.
- Added filtering options to the settings window. The example scene showcases new capabilities of the filtering system.
- Global value processor methods can be declared by adding the [GlobalValueProcessorAttribute] to a static method with a valid signature.
- Added validation logic to dynamically enable / disable monitored member during runtime.
- Added new MetaAttributes & Formatting options.
- Added attributes for custom text, background & group coloring.
- Added MFontAttribute to set the font asset for a monitored unit.
- Added multiple smaller options like text align etc.
- Added ConsoleMonitor Prefab as a preset to easily monitor console logs during runtime.
- Added SystemMonitor Prefab as a preset to easily visualize information about the current system during runtime.
- Added MColorAttribute to set the color of a monitored unit.
- Added profiling data to AOT type generation. AOT file now contains additional information about monitored types, member etc.
- Added multiple font assets.
- Fixed an issue that was caused when monitoring constant fields.
- Fixed conditional compilation using DISABLE_MONITORING
- Fixed WebGL runtime issues caused by WebGL initialization order.