diff --git a/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/CompositeBlockRenderer.razor b/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/CompositeBlockRenderer.razor index d142e201..38d1252d 100644 --- a/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/CompositeBlockRenderer.razor +++ b/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/CompositeBlockRenderer.razor @@ -1,7 +1,7 @@ @using FicusDashboard.Components.CaseInfo.ContextValues.Canvas.Graph.Flamegraph.Context @{ - var minWidth = @SpecifyMinWidth ? $"{Context.MinMainDim}: 100%" : string.Empty; + var minWidth = SpecifyMinWidth ? $"{Context.MinMainDim}: 100%" : string.Empty; }
@@ -80,7 +80,7 @@ } } -
+
diff --git a/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/Context/FlamegraphContext.cs b/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/Context/FlamegraphContext.cs index 3f0e677a..9a2ff761 100644 --- a/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/Context/FlamegraphContext.cs +++ b/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/Context/FlamegraphContext.cs @@ -100,6 +100,7 @@ public class FlamegraphRenderingContext public required bool LeftToRight { get; init; } public required bool RenderOcelAnnotation { get; init; } public required bool RenderOcelTypeNames { get; init; } + public required bool ShowObjectId { get; init; } public string MainDim => LeftToRight ? "height" : "width"; public string SecondDim => LeftToRight ? "width" : "height"; diff --git a/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/EdgeRenderer.razor b/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/EdgeRenderer.razor index dcf7959b..f1c16942 100644 --- a/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/EdgeRenderer.razor +++ b/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/EdgeRenderer.razor @@ -11,9 +11,8 @@ } } -
- - @if (!@Context.RenderOcelAnnotation && EnhancedEdge is { }) +
+ @if (!Context.RenderOcelAnnotation && EnhancedEdge is { }) {
diff --git a/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/FlamegraphConstants.cs b/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/FlamegraphConstants.cs index bf434233..3b0c8b35 100644 --- a/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/FlamegraphConstants.cs +++ b/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/FlamegraphConstants.cs @@ -3,6 +3,7 @@ internal static class FlamegraphConstants { public const int MainDimPx = 35; - public const int NodeWidthPx = 65; - public const int EdgeWidthPx = 40; + public const int NodeMinSecondDimPx = 20; + public const int EdgeMinSecondDimPx = 40; + public const int NodeMaxTextMainDimPx = 250; } \ No newline at end of file diff --git a/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/FlamegraphGraphRenderer.razor b/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/FlamegraphGraphRenderer.razor index 5c969e1d..6a06456f 100644 --- a/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/FlamegraphGraphRenderer.razor +++ b/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/FlamegraphGraphRenderer.razor @@ -79,7 +79,8 @@ else EventClassesAsName = Settings.UseEventClassesAsLabels, LeftToRight = Settings.UseLROrientation, RenderOcelAnnotation = Settings.RenderOcelAnnotation, - RenderOcelTypeNames = Settings.RenderOcelTypeNames + RenderOcelTypeNames = Settings.RenderOcelTypeNames, + ShowObjectId = Settings.ShowObjectId }; StateHasChanged(); diff --git a/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/Node/NodeObjectsStateObjectsBlock.razor b/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/Node/NodeObjectsStateObjectsBlock.razor index 77c03c3e..9a6dca7f 100644 --- a/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/Node/NodeObjectsStateObjectsBlock.razor +++ b/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/Node/NodeObjectsStateObjectsBlock.razor @@ -1,5 +1,6 @@ @inject IEntitiesColors Colors; +@using BlazorBootstrap @using FicusDashboard.Components.CaseInfo.ContextValues.Canvas.Graph.Flamegraph.Context @using FicusDashboard.Services @@ -16,7 +17,12 @@
- @id + + @if (Context.ShowObjectId) + { + @id + } +
}
diff --git a/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/Node/NodeRenderer.razor b/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/Node/NodeRenderer.razor index b5c7c695..592e4ef5 100644 --- a/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/Node/NodeRenderer.razor +++ b/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/Flamegraph/Node/NodeRenderer.razor @@ -1,3 +1,4 @@ +@using BlazorBootstrap @using FicusDashboard.Components.CaseInfo.ContextValues.Canvas.Graph.Flamegraph.Context @{ @@ -8,7 +9,7 @@ }
@@ -20,19 +21,24 @@ IsInitialState="@true"/> } -
- @foreach (var eventClass in Context.GetNodeName(Node)) - { -
- @eventClass -
- } -
+ +
+ @foreach (var eventClass in Context.GetNodeName(Node)) + { +
+ @eventClass +
+ } +
+
@if (Context.RenderOcelAnnotation) { diff --git a/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/GraphLikeEntitySettings.razor b/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/GraphLikeEntitySettings.razor index 828dc72d..bb034be4 100644 --- a/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/GraphLikeEntitySettings.razor +++ b/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/ContextValues/Canvas/Graph/GraphLikeEntitySettings.razor @@ -48,6 +48,10 @@ + +
} @@ -73,6 +77,7 @@ public bool RenderDagLcsInFlamegraphMode { get; private set; } public bool RenderOcelAnnotation { get; private set; } public bool RenderOcelTypeNames { get; private set; } + public bool ShowObjectId { get; private set; } public string? Filter { get; private set; } public bool UseLROrientation { get; private set; } = true; diff --git a/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/PipelinePartResultsRenderer.razor b/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/PipelinePartResultsRenderer.razor index 68bbd480..0aec8891 100644 --- a/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/PipelinePartResultsRenderer.razor +++ b/Ficus/src/front/FicusFrontend/FicusDashboard/Components/CaseInfo/PipelinePartResultsRenderer.razor @@ -49,14 +49,14 @@ @if (Results.Results.Count > 1) { -
+
@for (var index = 0; index < Results.Results.Count; ++index) { var currentIndex = index; var selectedClass = mySelectedExecutionResultIndex == index ? "pipeline-part-result-selection-button-selected" : string.Empty; var buttonClass = "pipeline-part-result-selection-button " + selectedClass; -
+
@index
} diff --git a/Ficus/src/front/FicusFrontend/FicusDashboard/Npm/src/canvas_size.ts b/Ficus/src/front/FicusFrontend/FicusDashboard/Npm/src/canvas_size.ts index 1a5bd454..1bfbc79c 100644 --- a/Ficus/src/front/FicusFrontend/FicusDashboard/Npm/src/canvas_size.ts +++ b/Ficus/src/front/FicusFrontend/FicusDashboard/Npm/src/canvas_size.ts @@ -9,6 +9,6 @@ export function setCanvasSizeFunctions() { const { width, height } = await canvasSize.maxArea({usePromise: true}); let maxDimensions: [number, number] = [width, height]; -export async function getMaxCanvasDimensions(): Promise<[number, number]> { +export function getMaxCanvasDimensions(): [number, number] { return maxDimensions; } \ No newline at end of file diff --git a/Ficus/src/front/FicusFrontend/FicusDashboard/Npm/src/colors_log/colors_log_renderer.ts b/Ficus/src/front/FicusFrontend/FicusDashboard/Npm/src/colors_log/colors_log_renderer.ts index 47c23609..7084f8ba 100644 --- a/Ficus/src/front/FicusFrontend/FicusDashboard/Npm/src/colors_log/colors_log_renderer.ts +++ b/Ficus/src/front/FicusFrontend/FicusDashboard/Npm/src/colors_log/colors_log_renderer.ts @@ -55,7 +55,7 @@ function getRectDimensions(widthScale: number, heightScale: number) { return [widthScale * DefaultRectWidth, heightScale * DefaultRectHeight]; } -async function drawColorsLog( +function drawColorsLog( log: GrpcColorsEventLog, widthScale: number, heightScale: number, @@ -69,7 +69,7 @@ async function drawColorsLog( } let additionalAxis = createAdditionalAxisList(log.adjustments); - let result = await calculateCanvasSize(canvas, log, widthScale, heightScale, additionalAxis.length); + let result = calculateCanvasSize(canvas, log, widthScale, heightScale, additionalAxis.length); if ('widthAdjustment' in result) { let adjustments = result; @@ -179,23 +179,22 @@ interface TooBigCanvas { interface CanvasDimensions { widthScale: number, - heightScale: number, rectWidth: number, rectHeight: number, canvasWidth: number, canvasHeight: number } -async function calculateCanvasSize(canvas: HTMLCanvasElement, - log: GrpcColorsEventLog, - widthScale: number, - heightScale: number, - additionalAxisCount: number): Promise { +function calculateCanvasSize(canvas: HTMLCanvasElement, + log: GrpcColorsEventLog, + widthScale: number, + heightScale: number, + additionalAxisCount: number): CanvasDimensions | TooBigCanvas { + let [origCanvasWidth, origCanvasHeight] = calculateCanvasWidthAndHeight(log, 1, 1, DefaultRectHeight, additionalAxisCount); let [rectWidth, rectHeight] = getRectDimensions(widthScale, heightScale); - let [canvasWidth, canvasHeight] = calculateCanvasWidthAndHeight(log, widthScale, rectWidth, rectHeight, additionalAxisCount); - let [maxCanvasWidth, maxCanvasHeight] = await getMaxCanvasDimensions(); + let [maxCanvasWidth, maxCanvasHeight] = getMaxCanvasDimensions(); if (canvasWidth > maxCanvasWidth || canvasHeight > maxCanvasHeight) { return { widthAdjustment: maxCanvasWidth / canvasWidth, @@ -210,11 +209,11 @@ async function calculateCanvasSize(canvas: HTMLCanvasElement, let minCanvasHeight = Math.max(MinCanvasHeight, parentHeight); if (canvasWidth < minCanvasWidth) { - widthScale = minCanvasWidth / canvasWidth; + widthScale = minCanvasWidth / origCanvasWidth; } if (canvasHeight < minCanvasHeight) { - heightScale = minCanvasHeight / canvasHeight; + heightScale = minCanvasHeight / origCanvasHeight; } [rectWidth, rectHeight] = getRectDimensions(widthScale, heightScale); @@ -222,7 +221,6 @@ async function calculateCanvasSize(canvas: HTMLCanvasElement, return { widthScale: widthScale, - heightScale: heightScale, rectWidth: rectWidth, rectHeight: rectHeight, canvasWidth: canvasWidth, diff --git a/Ficus/src/front/FicusFrontend/FicusDashboard/Npm/src/colors_log/constants.ts b/Ficus/src/front/FicusFrontend/FicusDashboard/Npm/src/colors_log/constants.ts index 4a9d2277..674f633a 100644 --- a/Ficus/src/front/FicusFrontend/FicusDashboard/Npm/src/colors_log/constants.ts +++ b/Ficus/src/front/FicusFrontend/FicusDashboard/Npm/src/colors_log/constants.ts @@ -2,7 +2,7 @@ export const AxisDelta = 5; export const AxisWidth = 2; export const DefaultRectWidth = 1; -export const DefaultRectHeight = 1; +export const DefaultRectHeight = 10; export const AxisTextHeight = 14; export const OverallXDelta = AxisDelta + AxisWidth + AxisDelta; diff --git a/Ficus/src/front/FicusFrontend/FicusDashboard/Npm/src/colors_log/event_handlers.ts b/Ficus/src/front/FicusFrontend/FicusDashboard/Npm/src/colors_log/event_handlers.ts index 03262f15..b66b6cb5 100644 --- a/Ficus/src/front/FicusFrontend/FicusDashboard/Npm/src/colors_log/event_handlers.ts +++ b/Ficus/src/front/FicusFrontend/FicusDashboard/Npm/src/colors_log/event_handlers.ts @@ -2,6 +2,7 @@ import tippy, {followCursor} from "tippy.js"; import {GrpcColorsEventLog} from "../protos/ficus/GrpcColorsEventLog"; import {AxisDelta, AxisWidth} from "./constants"; import bs from "binary-search"; +import {createTippyTooltipProps} from "../tooltip"; let pivot: HTMLElement = null; @@ -29,9 +30,9 @@ export function addColorsLogCanvasMouseMoveHandler(canvas: HTMLCanvasElement, } updatePivotElement(event, canvas); - showTooltip(log.mapping[event.colorIndex].name); + tippy(pivot, createTippyTooltipProps(log.mapping[event.colorIndex].name)); }; - + canvasIdsToListeners.set(canvas.id, listener); canvas.addEventListener("mousemove", listener); } @@ -108,18 +109,3 @@ function createPivotElement(event: CanvasEventCoordinate, canvas: HTMLCanvasElem return pivot; } - -function showTooltip(name: string) { - tippy(pivot, { - appendTo: document.fullscreenElement ? document.fullscreenElement : undefined, - content: ` -
- ${name} -
- `, - allowHTML: true, - zIndex: Number.MAX_VALUE, - duration: 0, - arrow: true, - }); -} \ No newline at end of file diff --git a/Ficus/src/front/FicusFrontend/FicusDashboard/Npm/src/graph/event_listeners.ts b/Ficus/src/front/FicusFrontend/FicusDashboard/Npm/src/graph/event_listeners.ts index 80a61333..68fab66b 100644 --- a/Ficus/src/front/FicusFrontend/FicusDashboard/Npm/src/graph/event_listeners.ts +++ b/Ficus/src/front/FicusFrontend/FicusDashboard/Npm/src/graph/event_listeners.ts @@ -1,5 +1,6 @@ import tippy, {Instance, Props} from "tippy.js"; import {getOrCreateColor} from "../utils"; +import {createTippyTooltipProps} from "../tooltip"; export function setGraphEventListeners() { addEventListener("mouseover", event => { @@ -13,7 +14,7 @@ export function setGraphEventListeners() { let tooltip = createTooltip(element, entries, "manual", true); tooltip.show(); }) - }); + }); } function executeIfHasTooltip(event: MouseEvent, handler: (entries: [string, number][], element: HTMLElement) => void) { @@ -30,30 +31,15 @@ function executeIfHasTooltip(event: MouseEvent, handler: (entries: [string, numb } function createTooltip(element: HTMLElement, histogramEntries: [string, number][], trigger: string, interactive: boolean): Instance { - let props = createTooltipBaseProps(histogramEntries); + let props = createTippyTooltipProps(createEventClassesDescription(histogramEntries).join('\n')); props.trigger = trigger; props.interactive = interactive; return tippy(element, props); } -function createTooltipBaseProps(histogramEntries: [string, number][]): Partial { - return { - appendTo: document.fullscreenElement ? document.fullscreenElement : undefined, - content: ` -
- ${createEventClassesDescription(histogramEntries).join('\n')} -
- `, - allowHTML: true, - zIndex: Number.MAX_VALUE, - duration: 0, - arrow: true, - } -} -function createEventClassesDescription(sortedHistogramEntries: [string, number][]) { +function createEventClassesDescription(sortedHistogramEntries: [string, number][]): string[] { let currentSum = sortedHistogramEntries.reduce((a, b) => a + b[1], 0); return sortedHistogramEntries.map((entry) => { diff --git a/Ficus/src/front/FicusFrontend/FicusDashboard/Npm/src/tooltip.ts b/Ficus/src/front/FicusFrontend/FicusDashboard/Npm/src/tooltip.ts new file mode 100644 index 00000000..7cd0869e --- /dev/null +++ b/Ficus/src/front/FicusFrontend/FicusDashboard/Npm/src/tooltip.ts @@ -0,0 +1,21 @@ +import {Props} from "tippy.js"; + +export function createTippyTooltipProps(text: string): Partial { + return { + appendTo: document.fullscreenElement ? document.fullscreenElement : undefined, + content: ` +
+ ${text} +
+ `, + allowHTML: true, + zIndex: Number.MAX_VALUE, + duration: 0, + arrow: true, + } +} diff --git a/Ficus/src/front/FicusFrontend/FicusDashboard/wwwroot/css/app.css b/Ficus/src/front/FicusFrontend/FicusDashboard/wwwroot/css/app.css index 58b9262b..dd063897 100644 --- a/Ficus/src/front/FicusFrontend/FicusDashboard/wwwroot/css/app.css +++ b/Ficus/src/front/FicusFrontend/FicusDashboard/wwwroot/css/app.css @@ -45,6 +45,7 @@ html, body { --seen-notification-color: grey; --flamegraph-node-background: #595959; + --flamegraph-node-hover-border-color: #f0f0f0; --flamegraph-edge-background: #3b3b3b; -moz-user-select: none; /* Firefox */ @@ -276,6 +277,14 @@ svg-pie-chart svg { flex-direction: column; } +.flamegraph-node-title-container { + border: 1px solid var(--flamegraph-node-background); +} + +.flamegraph-node-title-container:hover { + border-color: var(--flamegraph-node-hover-border-color); +} + .flamegraph-edge { background: var(--flamegraph-edge-background); padding: 2px; @@ -290,7 +299,10 @@ svg-pie-chart svg { } .flamegraph-node-title { - font-size: 18px; + font-size: 14px; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; } .flamegraph-ocel-annotation {