diff --git a/application/org.openjdk.jmc.feature.flightrecorder/feature.xml b/application/org.openjdk.jmc.feature.flightrecorder/feature.xml index f5d1b8eacb..1be101e2e0 100644 --- a/application/org.openjdk.jmc.feature.flightrecorder/feature.xml +++ b/application/org.openjdk.jmc.feature.flightrecorder/feature.xml @@ -191,4 +191,23 @@ install-size="0" version="0.0.0" unpack="false"/> + + + + diff --git a/application/org.openjdk.jmc.flightrecorder.cjfr/META-INF/MANIFEST.MF b/application/org.openjdk.jmc.flightrecorder.cjfr/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..39c5843336 --- /dev/null +++ b/application/org.openjdk.jmc.flightrecorder.cjfr/META-INF/MANIFEST.MF @@ -0,0 +1,17 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-RequiredExecutionEnvironment: JavaSE-21 +Bundle-Name: Condensed Flight Recording Plug-in +Bundle-SymbolicName: org.openjdk.jmc.flightrecorder.cjfr;singleton:=true +Bundle-Version: 10.0.0.qualifier +Bundle-Vendor: SAP SE +Require-Bundle: org.eclipse.ui, + org.eclipse.core.runtime, + org.openjdk.jmc.flightrecorder.ui, + me.bechberger.condensed.data.jmc, + org.openjdk.jmc.flightrecorder.writer +Import-Package: org.openjdk.jmc.ui, + me.bechberger.condensed, + me.bechberger.jfr +Bundle-ActivationPolicy: lazy +Automatic-Module-Name: org.openjdk.jmc.flightrecorder.cjfr diff --git a/application/org.openjdk.jmc.flightrecorder.cjfr/build.properties b/application/org.openjdk.jmc.flightrecorder.cjfr/build.properties new file mode 100644 index 0000000000..bf4f815c59 --- /dev/null +++ b/application/org.openjdk.jmc.flightrecorder.cjfr/build.properties @@ -0,0 +1,5 @@ +source.. = src/main/java/ +output.. = target/classes/ +bin.includes = META-INF/,\ + plugin.xml,\ + . diff --git a/application/org.openjdk.jmc.flightrecorder.cjfr/plugin.xml b/application/org.openjdk.jmc.flightrecorder.cjfr/plugin.xml new file mode 100644 index 0000000000..7bdddf542d --- /dev/null +++ b/application/org.openjdk.jmc.flightrecorder.cjfr/plugin.xml @@ -0,0 +1,14 @@ + + + + + + + + diff --git a/application/org.openjdk.jmc.flightrecorder.cjfr/pom.xml b/application/org.openjdk.jmc.flightrecorder.cjfr/pom.xml new file mode 100644 index 0000000000..6d50a72337 --- /dev/null +++ b/application/org.openjdk.jmc.flightrecorder.cjfr/pom.xml @@ -0,0 +1,22 @@ + + + + 4.0.0 + + org.openjdk.jmc + missioncontrol.application + ${revision}${changelist} + + org.openjdk.jmc.flightrecorder.cjfr + eclipse-plugin + + ${project.basedir}/../../configuration + + diff --git a/application/org.openjdk.jmc.flightrecorder.cjfr/src/main/java/org/openjdk/jmc/flightrecorder/cjfr/CjfrEditor.java b/application/org.openjdk.jmc.flightrecorder.cjfr/src/main/java/org/openjdk/jmc/flightrecorder/cjfr/CjfrEditor.java new file mode 100644 index 0000000000..1e53785794 --- /dev/null +++ b/application/org.openjdk.jmc.flightrecorder.cjfr/src/main/java/org/openjdk/jmc/flightrecorder/cjfr/CjfrEditor.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2026, SAP SE and/or its affiliates. All rights reserved. + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * The contents of this file are subject to the terms of either the Universal Permissive License + * v 1.0 as shown at https://oss.oracle.com/licenses/upl + */ +package org.openjdk.jmc.flightrecorder.cjfr; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; + +import org.eclipse.swt.widgets.Composite; +import org.openjdk.jmc.flightrecorder.ui.JfrEditor; +import org.openjdk.jmc.ui.MCPathEditorInput; + +import me.bechberger.condensed.CondensedInputStream; +import me.bechberger.jfr.BasicJFRReader; +import me.bechberger.jfr.WritingJFRReader; + +/** + * Eclipse editor for .cjfr (condensed JFR) files. Inflates the recording to a temporary .jfr file + * and delegates to the standard JFR loading machinery. + */ +public class CjfrEditor extends JfrEditor { + + public static final String EDITOR_ID = "org.openjdk.jmc.flightrecorder.cjfr.CjfrEditor"; //$NON-NLS-1$ + + @Override + public void createPartControl(Composite parent) { + File cjfrFile = MCPathEditorInput.getFile(getEditorInput()); + try { + File tempJfr = File.createTempFile("cjfr-inflate-", ".jfr"); //$NON-NLS-1$ //$NON-NLS-2$ + tempJfr.deleteOnExit(); + try (CondensedInputStream cin = new CondensedInputStream( + new BufferedInputStream(new FileInputStream(cjfrFile))); + FileOutputStream fos = new FileOutputStream(tempJfr)) { + WritingJFRReader.toJFRStream(new BasicJFRReader(cin), fos); + } + setInput(new MCPathEditorInput(tempJfr, false)); + } catch (IOException e) { + // Fall through: let RecordingLoader fail gracefully on the original file + } + super.createPartControl(parent); + } +} diff --git a/application/pom.xml b/application/pom.xml index 72b8317e36..43ce002cc8 100644 --- a/application/pom.xml +++ b/application/pom.xml @@ -90,6 +90,7 @@ org.openjdk.jmc.flightrecorder.pde org.openjdk.jmc.flightrecorder.rules.extensionprovider org.openjdk.jmc.flightrecorder.ui + org.openjdk.jmc.flightrecorder.cjfr org.openjdk.jmc.greychart org.openjdk.jmc.greychart.ui org.openjdk.jmc.ide.jdt @@ -140,6 +141,11 @@ flightrecorder ${revision}${changelist} + + org.openjdk.jmc + flightrecorder.writer + ${revision}${changelist} + org.openjdk.jmc flightrecorder.configuration diff --git a/releng/platform-definitions/platform-definition-2026-06/platform-definition-2026-06.target b/releng/platform-definitions/platform-definition-2026-06/platform-definition-2026-06.target index af39e98f25..8269af41d6 100644 --- a/releng/platform-definitions/platform-definition-2026-06/platform-definition-2026-06.target +++ b/releng/platform-definitions/platform-definition-2026-06/platform-definition-2026-06.target @@ -62,6 +62,7 @@ + diff --git a/releng/third-party/pom.xml b/releng/third-party/pom.xml index 873a91edd1..7ccb4afc0a 100644 --- a/releng/third-party/pom.xml +++ b/releng/third-party/pom.xml @@ -51,6 +51,7 @@ 11.0.15 3.3.0 + 0.1.3 2.0.5 2.0.3 2.1.4 @@ -215,6 +216,21 @@ org.pushingpixels.radiance.animation.api.* + + + me.bechberger:condensed-data:jar:jmc:${condensed-data.version} + false + false + true + + me.bechberger.condensed.data + Condensed Data + me.bechberger.* + *;resolution:=optional + +