Skip to content

GUI: Handle display controls for multiple loaded technologies (Web GUI)#10348

Merged
maliberty merged 1 commit into
The-OpenROAD-Project:masterfrom
The-OpenROAD-Project-staging:multiple-tech-display-control
May 21, 2026
Merged

GUI: Handle display controls for multiple loaded technologies (Web GUI)#10348
maliberty merged 1 commit into
The-OpenROAD-Project:masterfrom
The-OpenROAD-Project-staging:multiple-tech-display-control

Conversation

@openroad-ci
Copy link
Copy Markdown
Collaborator

fix #10209

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 7, 2026

clang-tidy review says "All clean, LGTM! 👍"

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request implements a hierarchical layer management system, enabling the web interface to display and control layers organized by chiplet instances. It includes backend serialization of the chip hierarchy and a recursive frontend implementation for the layer tree and visibility controls. Feedback highlights the need for stable layer IDs based on instance names, the removal of redundant visibility checks, and a more consistent ID construction scheme to simplify fragile matching logic in the inspector.

Comment thread src/web/src/display-controls.js Outdated

if (hierarchyNode.instances && hierarchyNode.instances.length > 0) {
hierarchyNode.instances.forEach((inst, idx) => {
const instId = `${parentId}_inst_${idx}`;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

Using an index-based ID (inst${idx}) makes the layer visibility state dependent on the order of instances in the JSON and breaks compatibility with the instance_path used by the inspector. It is better to use the instance name provided in the hierarchy node to ensure stable and predictable IDs.

Suggested change
const instId = `${parentId}_inst_${idx}`;
const instId = parentId + "/" + (inst.name || idx);

Comment thread src/web/src/inspector.js Outdated
if (app.layerModel && layer_id) {
const nodeId = instance_path ? `layers_parent_${instance_path}_${layer_id}` : layer_id;
// Check layerModel visibility
if (app.layerModel.isVisible && !app.layerModel.isVisible(nodeId) && !app.layerModel.isVisible(`layers_parent/${instance_path}/${layer_id}`) && !app.layerModel.isVisible(`layers_parent_${instance_path}/${layer_id}`) && !app.layerModel.isVisible(`layers_parent_${instance_path}/${layer_id}`) && !app.layerModel.isVisible(instance_path ? `${instance_path}/${layer_id}` : layer_id)) {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

This condition contains a duplicate check for layers_parent_${instance_path}/${layer_id}.

Additionally, the logic relies on multiple guesses for the layer ID format (using both _ and / as separators). This is fragile and suggests that the ID scheme is not unified across the application. It is recommended to use a consistent ID construction method (e.g., always using / as a separator) in both display-controls.js and inspector.js to avoid this complex and error-prone matching logic.

Comment thread src/web/src/display-controls.js Outdated
const id = name;
layer._nodeId = id;

const visible = !savedHiddenLayers.has(name) && !savedHiddenLayers.has(id);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This check is redundant because id is already assigned the value of name on line 140.

Suggested change
const visible = !savedHiddenLayers.has(name) && !savedHiddenLayers.has(id);
const visible = !savedHiddenLayers.has(id);

@openroad-ci openroad-ci force-pushed the multiple-tech-display-control branch from b2bf1ca to 756c2e2 Compare May 7, 2026 01:10
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 7, 2026

clang-tidy review says "All clean, LGTM! 👍"

@openroad-ci openroad-ci force-pushed the multiple-tech-display-control branch from 756c2e2 to 7e59f70 Compare May 14, 2026 00:06
@openroad-ci openroad-ci requested review from a team as code owners May 14, 2026 00:06
@github-actions github-actions Bot added size/XL and removed size/M labels May 14, 2026
@github-actions
Copy link
Copy Markdown
Contributor

clang-tidy review says "All clean, LGTM! 👍"

@openroad-ci openroad-ci force-pushed the multiple-tech-display-control branch from 7e59f70 to e982c5e Compare May 14, 2026 01:26
@github-actions
Copy link
Copy Markdown
Contributor

clang-tidy review says "All clean, LGTM! 👍"

@jorge-ferreira-pii
Copy link
Copy Markdown
Contributor

jorge-ferreira-pii commented May 14, 2026

  1. Native Multi-Tech Support

    Simultaneous DB Support: The Web GUI backend now supports multiple technologies (db tech) concurrently, allowing for cross-platform integration within a single session.

  2. New Hierarchical Display Controls

    Session Chiplets: Introduced a dedicated control panel for design blocks. Users can now toggle the visibility of each chiplet independently to focus on specific areas of the design.

    Layer Hierarchy: Enhanced the "Layers" panel to logically group layers under their respective technology headers, featuring intuitive expand/collapse controls for better organization.

  3. Intelligent Highlight and Inspection (DRC)

    Visual Feedback: Improved highlight animations with a subtle "pulsing" effect. The highlight now fills the entire chiplet or cuboid (in 3D) with a distinct yellow fill for better visibility.

    Integrated 3D Visualization: DRC (violation) markers in the 3D viewer now feature active hitboxes. Double-clicking a violation in the 3D environment automatically:

    Sends the marker details to the Inspector panel.

    Populates the navigation history for quick backtracking.

  4. "True Z" Visualization in 3D

    Added the "True Z" graphical overlay, which positions layers based on their absolute Z-axis coordinates. This removes artificial stacking and provides a realistic view of how chiplets from different technologies physically interface.

@jorge-ferreira-pii
Copy link
Copy Markdown
Contributor

fix #10208

@openroad-ci openroad-ci force-pushed the multiple-tech-display-control branch from e982c5e to 31acd9d Compare May 17, 2026 23:32
@github-actions
Copy link
Copy Markdown
Contributor

clang-tidy review says "All clean, LGTM! 👍"

@maliberty
Copy link
Copy Markdown
Member

@codex review

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 31acd9d46a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines 189 to +190
node.data.layer.addTo(app.map);
app.visibleLayers.add(node.data.name);
app.visibleLayers.add(id);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Store backend layer names in visibleLayers

This callback now writes hierarchical node IDs (for example layers_parent/.../M1) into app.visibleLayers, but the same set is sent to the backend as visible_layers. The backend compares that filter against raw tech-layer names (layer->getName()), so after this change the filter values no longer match: net selection in selectAt drops all net hits, and pin rendering filters out all pin boxes whenever has_visible_layers is true. Keep UI node IDs separate from the wire-format layer-name filter (or translate IDs back to names before requests).

Useful? React with 👍 / 👎.

openroad-ci pushed a commit to The-OpenROAD-Project-staging/OpenROAD that referenced this pull request May 19, 2026
display-controls.js stored hierarchical UI node IDs
(e.g. "layers_parent/<tech>/M1") in app.visibleLayers, but the backend
filters compare against raw dbTechLayer::getName(). After PR The-OpenROAD-Project#10348 the
filter values no longer matched, so net selection (selectAt), pin tile
rendering and ruler snap all dropped every hit whenever a non-empty
visible_layers was sent.

Introduce app.visibleLayerNames as a parallel Set of raw layer names,
kept in sync with the hierarchical IDs in the CheckboxTreeModel
callback. The names set is rebuilt from scratch on every checkbox
change so that two layers sharing a getName() across different techs
don't drop each other.  Route the WebSocket tile, select and snap
requests through the new set; cookie persistence keeps using the
hierarchical IDs.

Adds a regression test in test-ruler.js asserting that the snap
request payload carries raw names, not hierarchical paths.

Signed-off-by: Jorge Ferreira <jorge.ferreira@precisioninno.com>
@jorge-ferreira-pii jorge-ferreira-pii requested review from a team and povik and removed request for a team May 19, 2026 21:01
@github-actions
Copy link
Copy Markdown
Contributor

clang-tidy review says "All clean, LGTM! 👍"

@maliberty
Copy link
Copy Markdown
Member

@codex review

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a8f7297842

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/web/src/display-controls.js Outdated
Comment on lines +223 to +226
if (trackChiplets && node.data && node.data.chipletPath) {
const path = node.data.chipletPath;
const want = !!node.checked;
if (app.visibleChiplets.has(path) !== want) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Preserve chiplet visibility for indeterminate layer nodes

When a chiplet node in the Layers tree is partially selected, CheckboxTreeModel sets indeterminate=true and checked=false; this code treats that state as hidden (want = !!node.checked) and pushes it into chipletModel.checkSet. In multi-chiplet designs, unchecking a single layer under a chiplet can therefore remove the entire chiplet from visible_chiplets, so other still-checked layers from that chiplet disappear from tile/select rendering. The mirror logic should treat indeterminate chiplet nodes as visible (or compute visibility from descendant leaf layers) instead of coercing only checked.

Useful? React with 👍 / 👎.

Signed-off-by: Jorge Ferreira <jorge.ferreira@precisioninno.com>
@openroad-ci openroad-ci force-pushed the multiple-tech-display-control branch from a8f7297 to 27fe6d1 Compare May 20, 2026 04:17
@github-actions
Copy link
Copy Markdown
Contributor

clang-tidy review says "All clean, LGTM! 👍"

@maliberty maliberty enabled auto-merge May 21, 2026 16:52
@maliberty maliberty merged commit b53c665 into The-OpenROAD-Project:master May 21, 2026
16 checks passed
@maliberty maliberty deleted the multiple-tech-display-control branch May 21, 2026 17:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

GUI: Handle display controls for multiple loaded technologies

3 participants