From 0525e762b4799d44714e6caf985808720d4d5da5 Mon Sep 17 00:00:00 2001 From: Alan Everett Date: Sun, 24 May 2026 13:05:10 -0400 Subject: [PATCH] Switch from FasterXML Jackson to Avaje Jsonb (#2503) ## Description WPILib switched from FasterXML Jackson to Avaje Jsonb for speed reasons in https://github.com/wpilibsuite/allwpilib/pull/8721. This does the same for PhotonVision. Some temporary Jackson adapters are present to allow compatibility with alpha-4 ahead of updating Photon's WPILib version. A few old backwards compatibility migrations were also dropped if they were difficult to port to Avaje Jsonb or otherwise complicated the code. ## Meta Merge checklist: - [x] Pull Request title is [short, imperative summary](https://cbea.ms/git-commit/) of proposed changes - [x] The description documents the _what_ and _why_, including events that led to this PR - [ ] If this PR changes behavior or adds a feature, user documentation is updated - [ ] If this PR touches photon-serde, all messages have been regenerated and hashes have not changed unexpectedly - [ ] If this PR touches configuration, this is backwards compatible with all settings going back to the previous seasons's last release (seasons end after champs ends) - [ ] If this PR touches pipeline settings or anything related to data exchange, the frontend typing is updated - [ ] If this PR addresses a bug, a regression test for it is added - [ ] If this PR adds a dependency, the license has been checked for compatibility and steps taken to follow it --------- Co-authored-by: samfreund Co-authored-by: Matt Morley --- .github/workflows/build.yml | 4 +- .wpiformat | 2 +- README.md | 2 +- build.gradle | 6 +- .../components/common/pv-camera-info-card.vue | 48 +++--- .../common/pv-camera-match-card.vue | 93 +++++------ .../components/dashboard/tabs/InputTab.vue | 2 +- photon-client/src/lib/PhotonUtils.ts | 22 +-- .../stores/settings/CameraSettingsStore.ts | 31 ++-- photon-client/src/types/SettingTypes.ts | 52 ++---- photon-client/src/types/WebsocketDataTypes.ts | 27 ++-- .../src/views/CameraMatchingView.vue | 84 ++++------ .../configuration/CameraConfiguration.java | 63 ++++---- .../common/configuration/ConfigManager.java | 11 +- .../common/configuration/HardwareConfig.java | 48 +++--- .../configuration/LegacyConfigProvider.java | 140 ++++------------ .../common/configuration/NetworkConfig.java | 38 ++--- .../NeuralNetworkModelManager.java | 10 +- .../NeuralNetworkModelsSettings.java | 79 ++++++--- .../configuration/PhotonConfiguration.java | 27 ++-- .../configuration/SqlConfigProvider.java | 134 ++++++++------- .../common/dataflow/DataChangeSubscriber.java | 2 +- .../networktables/NetworkTablesManager.java | 11 +- .../websocket/UICameraConfiguration.java | 8 +- .../dataflow/websocket/UIGeneralSettings.java | 2 + .../dataflow/websocket/UILightingConfig.java | 3 + .../dataflow/websocket/UINetConfig.java | 9 ++ .../websocket/UIPhotonConfiguration.java | 4 +- .../dataflow/websocket/UIProgramSettings.java | 2 + .../common/hardware/OsImageData.java | 22 ++- .../hardware/metrics/DeviceMetrics.java | 2 + .../common/networking/NetworkMode.java | 5 +- .../common/networking/NetworkUtils.java | 6 +- .../photonvision/common/util/TestUtils.java | 14 +- .../file/AprilTagFieldLayoutJsonAdapter.java | 83 ++++++++++ .../common/util/file/JacksonUtils.java | 152 ------------------ .../common/util/file/PathAdapter.java | 41 +++++ .../common/util/file/Pose3dJsonAdapter.java | 103 ++++++++++++ .../common/util/file/QuaternionMixIn.java | 45 ++++++ .../common/util/file/Rotation3dMixIn.java | 34 ++++ .../common/util/file/Translation3dMixIn.java | 41 +++++ .../common/util/numbers/DoubleCouple.java | 2 + .../common/util/numbers/IntegerCouple.java | 3 + .../common/util/numbers/NumberCouple.java | 3 - .../vision/calibration/BoardObservation.java | 35 ++-- .../CameraCalibrationCoefficients.java | 66 +++----- .../vision/calibration/JsonMatOfDouble.java | 22 +-- .../UICameraCalibrationCoefficients.java | 2 + .../vision/camera/FileVisionSource.java | 9 +- .../vision/camera/PVCameraInfo.java | 67 ++++---- .../vision/camera/QuirkyCamera.java | 20 +-- .../USBCameras/GenericUSBCameraSettables.java | 11 +- .../camera/csi/LibcameraGpuSettables.java | 37 ++--- .../pipeline/AdvancedPipelineSettings.java | 15 +- .../pipeline/AprilTagPipelineSettings.java | 2 - .../pipeline/ArucoPipelineSettings.java | 2 - .../vision/pipeline/CVPipelineSettings.java | 46 ++++-- .../ColoredShapePipelineSettings.java | 2 - .../pipeline/DriverModePipelineSettings.java | 4 +- .../pipeline/FocusPipelineSettings.java | 2 - .../pipeline/ReflectivePipelineSettings.java | 3 - .../vision/pipeline/UICalibrationData.java | 16 +- .../vision/processes/VisionModule.java | 25 +-- .../VisionModuleChangeSubscriber.java | 19 ++- .../vision/processes/VisionSourceManager.java | 3 +- .../processes/VisionSourceSettables.java | 16 +- .../vision/target/TargetModel.java | 36 ++--- .../common/configuration/ConfigTest.java | 56 ++----- .../configuration/NetworkConfigTest.java | 21 ++- .../NeuralNetworkPropertyManagerTest.java | 13 +- .../common/configuration/SQLConfigTest.java | 62 +++---- .../hardware/HardwareConfigTest.java | 10 +- .../photonvision/hardware/HardwareTest.java | 8 +- .../pipeline/CalibrationRotationPipeTest.java | 9 +- .../processes/VisionModuleManagerTest.java | 8 +- .../processes/VisionSourceManagerTest.java | 22 ++- .../simulation/SimCameraProperties.java | 84 +++++----- photon-server/build.gradle | 1 + .../src/main/java/org/photonvision/Main.java | 2 + .../server/DataSocketHandler.java | 87 +++++----- .../server/DataSocketMessageType.java | 1 - .../photonvision/server/RequestHandler.java | 97 +++++------ .../java/org/photonvision/server/Server.java | 2 +- .../server/TestRequestHandler.java | 8 +- .../server/UIInboundSubscriber.java | 4 +- .../server/UIOutboundSubscriber.java | 8 +- .../common/networktables/PacketPublisher.java | 9 +- .../jni/CombinedRuntimeLoader.java | 11 +- shared/common.gradle | 9 +- shared/javacommon.gradle | 4 +- .../network-ip-addr/networkSettings.json | 3 + .../networkSettings.json | 3 - .../networkSettings.json | 0 .../2026.3.4-windows/photon.sqlite | Bin 0 -> 163840 bytes .../photon.sqlite | Bin 7741440 -> 0 bytes 95 files changed, 1306 insertions(+), 1216 deletions(-) create mode 100644 photon-core/src/main/java/org/photonvision/common/util/file/AprilTagFieldLayoutJsonAdapter.java delete mode 100644 photon-core/src/main/java/org/photonvision/common/util/file/JacksonUtils.java create mode 100644 photon-core/src/main/java/org/photonvision/common/util/file/PathAdapter.java create mode 100644 photon-core/src/main/java/org/photonvision/common/util/file/Pose3dJsonAdapter.java create mode 100644 photon-core/src/main/java/org/photonvision/common/util/file/QuaternionMixIn.java create mode 100644 photon-core/src/main/java/org/photonvision/common/util/file/Rotation3dMixIn.java create mode 100644 photon-core/src/main/java/org/photonvision/common/util/file/Translation3dMixIn.java create mode 100644 test-resources/network-ip-addr/networkSettings.json delete mode 100644 test-resources/network-old-team-number/networkSettings.json rename test-resources/{network-new-team-number => network-team-number}/networkSettings.json (100%) create mode 100644 test-resources/old_configs/2026.3.4-windows/photon.sqlite delete mode 100644 test-resources/old_configs/photonvision_config_from_v2024.3.1/photon.sqlite diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index de6bd3dda..dad5142bd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -98,7 +98,7 @@ jobs: - name: Checkout code uses: actions/checkout@v6 - name: Install pnpm - uses: pnpm/action-setup@v4 + uses: pnpm/action-setup@v5 with: version: 10 - name: Setup Node.js @@ -239,7 +239,7 @@ jobs: include: # - os: windows-2022 # artifact-name: Win64 - - os: macos-26 + - os: macos-15 # TODO: Restore to macos-26 with WPILib alpha-6 artifact-name: macOS - os: ubuntu-24.04 artifact-name: Linux diff --git a/.wpiformat b/.wpiformat index f69dfcbe2..b35d711d2 100644 --- a/.wpiformat +++ b/.wpiformat @@ -2,7 +2,7 @@ cppHeaderFileInclude { \.h$ } -modifiableFileExclude { +generatedFileExclude { photon-lib/py/photonlibpy/generated/ photon-targeting/src/generated/ photon-targeting/src/main/native/cpp/photon/constrained_solvepnp/generate/ diff --git a/README.md b/README.md index 26515a19c..ab4a57191 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ PhotonVision was forked from [Chameleon Vision](https://github.com/Chameleon-Vis * [EJML](https://github.com/lessthanoptimal/ejml) * [Javalin](https://javalin.io/) * [JSON](https://json.org) -* [FasterXML](https://github.com/FasterXML) - Specifically [jackson](https://github.com/FasterXML/jackson) +* [Avaje](https://avaje.io) - Specifically [jsonb](https://avaje.io/jsonb/) * [MessagePack for Java](https://github.com/msgpack/msgpack-java) * [OSHI](https://github.com/oshi/oshi) * [QuickBuffers](https://github.com/HebiRobotics/QuickBuffers) diff --git a/build.gradle b/build.gradle index 174a59a9a..3e547d659 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { id "cpp" id "com.diffplug.spotless" version "8.1.0" id "org.wpilib.WPILibRepositoriesPlugin" version "2027.0.0" - id 'org.wpilib.NativeUtils' version '2027.4.1' apply false + id 'org.wpilib.NativeUtils' version '2027.5.1' apply false id 'org.wpilib.DeployUtils' version '2027.1.0' apply false id 'org.photonvision.tools.WpilibTools' version '3.0.0-photon' id 'com.google.protobuf' version '0.9.5' apply false @@ -40,6 +40,8 @@ ext { openCVversion = "4.10.0-3" ejmlVersion = "0.43.1"; jacksonVersion = "2.15.2"; + avajeJsonbVersion = "3.14-RC4"; + msgpackVersion = "0.9.0"; quickbufVersion = "1.3.3"; jacocoVersion = "0.8.14"; @@ -69,7 +71,7 @@ spotless { java { target fileTree('.') { include '**/*.java' - exclude '**/build/**', '**/build-*/**', '**/src/generated/**' + exclude '**/build/**', '**/build-*/**', '**/src/generated/**', "**/bin/generated-sources/**" } toggleOffOn() googleJavaFormat() diff --git a/photon-client/src/components/common/pv-camera-info-card.vue b/photon-client/src/components/common/pv-camera-info-card.vue index 9cf2704f5..43fd5512c 100644 --- a/photon-client/src/components/common/pv-camera-info-card.vue +++ b/photon-client/src/components/common/pv-camera-info-card.vue @@ -1,57 +1,51 @@