RFR: 8324950: IGV: save the state to a file [v32]
Christian Hagedorn
chagedorn at openjdk.org
Thu Apr 18 10:52:01 UTC 2024
On Thu, 18 Apr 2024 08:19:21 GMT, Tobias Holenstein <tholenstein at openjdk.org> wrote:
>> The current workflow in IGV is the following:
>> 1) import an XML file with graphs or send via network
>> 2) open or more graphs in a tab
>> 3) extract a set of nodes to be displayed in the tab
>> 4) close IGV and start from 1) again
>>
>> The idea of this RFE is to save the opened graph tabs and extracted nodes of a graph in the `graph.xml` file.
>> ### The new workflow
>>
>> When opening IGV the user gets an empty workspace without any opened files.
>> - Graphs can be sent via the network to IGV
>> - Graph can be opened from an XML file
>> <img width="218" alt="empty" src="https://github.com/openjdk/jdk/assets/71546117/627a2dca-db65-4860-8377-de03696f1678">
>>
>> Unzipping this [example_graph.zip](https://github.com/openjdk/jdk/files/14946834/example_graph.zip) and opening `graphs.xml` shows the following graph. New with this RFE is that opened graph tabs and extracted nodes are saved to the `graph.xml` file and restored when re-opening the `graphs.xml`:
>>
>> <img width="728" alt="graph" src="https://github.com/openjdk/jdk/assets/71546117/e1801537-c3b2-4adf-aa18-d247ae54a228">
>>
>> A new `<graphStates>` is introduced in `graphs.xml` that stores the opened graphs and their visible nodes:
>>
>> <graphDocument>
>> <group>
>> <graph>
>> <properties>...</properties>
>> <nodes>...</nodes>
>> <edges>...</edges>
>> <controlFlow>...</controlFlow>
>> <graphStates>
>> <state>
>> <difference value="0"/>
>> <visibleNodes all="false">
>> <node id="0"/>
>> <node id="1"/>
>> <node id="3"/>
>> </visibleNodes >
>> </state>
>> </graphStates>
>> </graph>
>> </group>
>> </graphDocument>
>>
>>
>> The workspace menu is restructured:
>>
>> <img width="118" alt="open" src="https://github.com/openjdk/jdk/assets/71546117/baa871b7-6b73-42c9-8982-7a1601714e69">
>>
>> - `Open` allows the user to open an XML file. In IGV there is either no XML opened indicated as `untitled` or exactly one xml file opened. It's not possible to have two XML files opened at the same time:
>> - `Import`: Allows the user to import graphs from another XML file to the current opened XML file.
>>
>> <img width="101" alt="save" src="https://github.com/openjdk/jdk/assets/71546117/46a9e945-7f5c-4777-a66d-2fc8a95705c3">
>>
>> - `Save..` saves the current opened xml file. Create a ...
>
> Tobias Holenstein has updated the pull request incrementally with one additional commit since the last revision:
>
> open tabs in deterministic order (List instead of Set)
As discussed offline, the confusion was due to opening the tabs in a random order each time a file is opened. The fix now looks good.
Only a few minor comments - I'm not very familiar with the code. I've dong some testing with IGV and the features seem to work. Great job!
src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/OutlineTopComponent.java line 328:
> 326: this.clearWorkspace();
> 327: this.open(); // Reopen the OutlineTopComponent
> 328: this.requestActive();
`this` can probably be removed
Suggestion:
clearWorkspace();
open(); // Reopen the OutlineTopComponent
requestActive();
src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/OutlineTopComponent.java line 388:
> 386: }
> 387: frame.dispose();
> 388: return false;
Could be simplified to:
frame.dispose();
return result == JOptionPane.YES_OPTION;
src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/OutlineTopComponent.java line 499:
> 497: if (path == null || Files.notExists(Path.of(path))) {
> 498: return;
> 499: }
Can `path` really be `null` here?
src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/serialization/Parser.java line 405:
> 403: } else {
> 404: // Blocks and their nodes defined: add other nodes to an
> 405: // artificial "no block" block
Suggestion:
// artificial "no block" block
-------------
Marked as reviewed by chagedorn (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/17630#pullrequestreview-2008035346
PR Review Comment: https://git.openjdk.org/jdk/pull/17630#discussion_r1570456302
PR Review Comment: https://git.openjdk.org/jdk/pull/17630#discussion_r1570458917
PR Review Comment: https://git.openjdk.org/jdk/pull/17630#discussion_r1570464972
PR Review Comment: https://git.openjdk.org/jdk/pull/17630#discussion_r1570470708
More information about the hotspot-compiler-dev
mailing list