DEV Community

Query Filter
Query Filter

Posted on

bridge-33

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>QFFBridge Profiler Technical Briefing</title>
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
    <style>
        /* Modern light theme variables (No black backgrounds) */
        :root {
            --bg-page: #f8fafc;
            --bg-slide: #ffffff;
            --text-primary: #0f172a;
            --text-muted: #475569;
            --accent-blue: #2563eb;
            --accent-blue-hover: #1d4ed8;
            --accent-teal: #0d9488;
            --border-color: #e2e8f0;
            --code-bg: #f1f5f9;
            --code-text: #0f172a;
            --shadow-slide: 0 10px 25px -5px rgba(0, 0, 0, 0.05), 0 8px 10px -6px rgba(0, 0, 0, 0.05);
            --transition-speed: 0.3s;
        }

        * {
            box-sizing: border-box;
            margin: 0;
            padding: 0;
        }

        body {
            background-color: var(--bg-page);
            color: var(--text-primary);
            font-family: 'Plus Jakarta Sans', sans-serif;
            overflow: hidden;
            height: 100vh;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
        }

        /* Presentation Container */
        .presentation-container {
            width: 100%;
            max-width: 1120px;
            height: 630px; /* Standard 16:9 aspect ratio */
            position: relative;
            background-color: var(--bg-slide);
            border-radius: 16px;
            box-shadow: var(--shadow-slide);
            border: 1px solid var(--border-color);
            display: flex;
            flex-direction: column;
            overflow: hidden;
        }

        /* Slides Wrapper */
        .slides-wrapper {
            flex-grow: 1;
            position: relative;
            overflow: hidden;
        }

        /* Individual Slide */
        .slide {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            opacity: 0;
            visibility: hidden;
            transition: opacity var(--transition-speed) ease, visibility var(--transition-speed) ease;
            padding: 48px 64px;
            display: flex;
            flex-direction: column;
            justify-content: flex-start;
            z-index: 1;
        }

        .slide.active {
            opacity: 1;
            visibility: visible;
            z-index: 2;
        }

        /* Slide Titles */
        .slide-title {
            font-size: 32px;
            font-weight: 700;
            color: var(--text-primary);
            margin-bottom: 24px;
            display: flex;
            align-items: center;
            gap: 12px;
            border-bottom: 2px solid var(--border-color);
            padding-bottom: 12px;
        }

        .slide-title i {
            color: var(--accent-blue);
        }

        /* Title Slide Layout */
        .title-slide-content {
            height: 100%;
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            text-align: center;
            padding-bottom: 40px;
        }

        .title-slide-content h1 {
            font-size: 48px;
            font-weight: 800;
            line-height: 1.15;
            color: var(--text-primary);
            margin-bottom: 16px;
        }

        .title-slide-content h1 span {
            color: var(--accent-blue);
        }

        .title-slide-content p {
            font-size: 20px;
            color: var(--text-muted);
            max-width: 700px;
        }

        /* Two Column Layout */
        .two-column {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 40px;
            height: calc(100% - 60px);
            align-items: start;
        }

        /* Tree Directory (Live Rendered) */
        .tree-container {
            background-color: var(--code-bg);
            border-radius: 8px;
            padding: 20px;
            font-family: 'JetBrains Mono', monospace;
            font-size: 14px;
            color: var(--code-text);
            border: 1px solid var(--border-color);
            overflow-y: auto;
            max-height: 380px;
            line-height: 1.4;
        }

        .tree-line {
            margin-bottom: 4px;
        }

        .tree-folder {
            color: var(--accent-blue);
            font-weight: 600;
        }

        .tree-file {
            color: var(--text-muted);
        }

        /* Terminal Window Style */
        .terminal-window {
            background-color: #0f172a; /* Deep slate, classic terminal style */
            border-radius: 8px;
            border: 1px solid #334155;
            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
            overflow: hidden;
            font-family: 'JetBrains Mono', monospace;
            display: flex;
            flex-direction: column;
            height: 380px;
        }

        .terminal-header {
            background-color: #1e293b;
            padding: 8px 16px;
            display: flex;
            align-items: center;
            gap: 6px;
            border-bottom: 1px solid #334155;
        }

        .terminal-dot {
            width: 10px;
            height: 10px;
            border-radius: 50%;
        }

        .terminal-dot.red { background-color: #ef4444; }
        .terminal-dot.yellow { background-color: #eab308; }
        .terminal-dot.green { background-color: #22c55e; }

        .terminal-title {
            color: #94a3b8;
            font-size: 11px;
            margin-left: auto;
            margin-right: auto;
        }

        .terminal-body {
            padding: 16px;
            color: #f1f5f9;
            font-size: 11px;
            overflow-y: auto;
            flex-grow: 1;
            line-height: 1.4;
        }

        .terminal-prompt {
            color: #38bdf8;
            font-weight: bold;
        }

        .terminal-success {
            color: #4ade80;
            font-weight: bold;
        }

        .terminal-highlight {
            color: #fbbf24;
        }

        /* Grid Lists / Step Layouts */
        .steps-grid {
            display: grid;
            grid-template-columns: repeat(3, 1fr);
            gap: 16px;
            margin-top: 10px;
        }

        .step-card {
            background-color: #f8fafc;
            border: 1px solid var(--border-color);
            border-radius: 8px;
            padding: 16px;
            transition: transform 0.2s ease;
        }

        .step-card:hover {
            transform: translateY(-2px);
            border-color: var(--accent-blue);
        }

        .step-num {
            font-size: 13px;
            font-weight: 700;
            text-transform: uppercase;
            color: var(--accent-blue);
            margin-bottom: 6px;
            letter-spacing: 0.5px;
        }

        .step-title {
            font-size: 16px;
            font-weight: 700;
            color: var(--text-primary);
            margin-bottom: 8px;
        }

        .step-desc {
            font-size: 13px;
            color: var(--text-muted);
            line-height: 1.4;
        }

        /* Live Interceptor SVG/Canvas mockup styling */
        .diagram-container {
            border: 1px solid var(--border-color);
            border-radius: 8px;
            background-color: #f8fafc;
            height: 360px;
            display: flex;
            align-items: center;
            justify-content: center;
            position: relative;
        }

        /* Toggle switches */
        .toggle-switch-container {
            display: flex;
            align-items: center;
            gap: 16px;
            margin-top: 12px;
            background: #f8fafc;
            padding: 14px 20px;
            border-radius: 8px;
            border: 1px solid var(--border-color);
        }

        .toggle-switch {
            width: 52px;
            height: 28px;
            background-color: #cbd5e1;
            border-radius: 14px;
            position: relative;
            cursor: pointer;
            transition: background-color 0.2s;
        }

        .toggle-switch.active {
            background-color: var(--accent-teal);
        }

        .toggle-switch::after {
            content: '';
            position: absolute;
            width: 22px;
            height: 22px;
            background-color: white;
            border-radius: 50%;
            top: 3px;
            left: 3px;
            transition: transform 0.2s;
            box-shadow: 0 1px 3px rgba(0,0,0,0.15);
        }

        .toggle-switch.active::after {
            transform: translateX(24px);
        }

        /* High Impact Metrics */
        .metrics-wrapper {
            display: flex;
            align-items: center;
            justify-content: space-around;
            height: 100%;
            padding: 20px 0;
        }

        .metric-big {
            font-size: 120px;
            font-weight: 800;
            color: var(--accent-blue);
            line-height: 1;
            display: flex;
            align-items: baseline;
        }

        .metric-big span {
            font-size: 32px;
            color: var(--text-muted);
            margin-left: 8px;
        }

        .metric-label {
            font-size: 22px;
            font-weight: 600;
            color: var(--text-primary);
            margin-bottom: 8px;
        }

        .metric-desc {
            color: var(--text-muted);
            max-width: 450px;
            font-size: 15px;
        }

        /* Code Block Design */
        .code-snippet {
            font-family: 'JetBrains Mono', monospace;
            background-color: var(--code-bg);
            border-radius: 8px;
            padding: 16px;
            border: 1px solid var(--border-color);
            color: var(--code-text);
            font-size: 13px;
            line-height: 1.5;
            overflow-x: auto;
        }

        /* Table Design */
        .report-table-container {
            border: 1px solid var(--border-color);
            border-radius: 8px;
            overflow: hidden;
            background: white;
            max-height: 350px;
            overflow-y: auto;
        }

        .report-table {
            width: 100%;
            border-collapse: collapse;
            font-size: 12px;
        }

        .report-table th {
            background-color: #f1f5f9;
            color: var(--text-primary);
            font-weight: 700;
            padding: 10px 14px;
            text-align: left;
            border-bottom: 2px solid var(--border-color);
        }

        .report-table td {
            padding: 8px 14px;
            border-bottom: 1px solid var(--border-color);
            font-family: 'JetBrains Mono', monospace;
            color: var(--text-muted);
        }

        .report-table tr:hover {
            background-color: #f8fafc;
        }

        .flag-slow {
            color: #dc2626;
            background-color: #fee2e2;
            padding: 2px 6px;
            border-radius: 4px;
            font-weight: bold;
            font-size: 10px;
            display: inline-flex;
            align-items: center;
            gap: 4px;
        }

        /* Interactive navigation footer */
        .presentation-footer {
            height: 60px;
            background-color: #f8fafc;
            border-top: 1px solid var(--border-color);
            display: flex;
            align-items: center;
            justify-content: space-between;
            padding: 0 32px;
            font-size: 14px;
            font-weight: 500;
        }

        .nav-buttons {
            display: flex;
            gap: 12px;
        }

        .btn {
            background-color: white;
            border: 1px solid var(--border-color);
            padding: 8px 16px;
            border-radius: 6px;
            font-weight: 600;
            cursor: pointer;
            transition: all 0.2s;
            color: var(--text-primary);
            display: flex;
            align-items: center;
            gap: 8px;
        }

        .btn:hover {
            border-color: var(--accent-blue);
            color: var(--accent-blue);
            background-color: #f0f7ff;
        }

        .slide-counter {
            color: var(--text-muted);
            font-weight: 600;
        }

        /* Keyboard Info Bar */
        .keyboard-hint {
            color: var(--text-muted);
            font-size: 11px;
            display: flex;
            align-items: center;
            gap: 6px;
        }

        .keyboard-key {
            background: white;
            border: 1px solid var(--border-color);
            padding: 2px 6px;
            border-radius: 4px;
            box-shadow: 0 1px 1px rgba(0,0,0,0.1);
        }
    </style>
</head>
<body>

    <div class="presentation-container">
        <div class="slides-wrapper">

            <!-- SLIDE 1: TITLE SLIDE -->
            <div class="slide active" id="slide-1">
                <div class="title-slide-content">
                    <h1>QFFBridge <span>Profiler</span> Plugin</h1>
                    <p>High-Precision Runtime Profiling & Bottleneck Isolation for Enterprise Systems</p>
                    <div style="margin-top: 32px; font-size: 14px; font-weight: 600; color: var(--accent-blue);">
                        TECHNICAL BRIEFING
                    </div>
                </div>
            </div>

            <!-- SLIDE 2: FOLDER ARCHITECTURE -->
            <div class="slide" id="slide-2">
                <h2 class="slide-title"><i class="fa-solid fa-folder-tree"></i> Plugin Folder Architecture</h2>
                <div class="two-column">
                    <div>
                        <div class="tree-container">
                            <div class="tree-line"><span class="tree-folder">QFFBridgeProfiler/</span></div>
                            <div class="tree-line">├── <span class="tree-folder">additionalTargetClasses/</span></div>
                            <div class="tree-line">&nbsp;&nbsp; └── <span class="tree-file">external_classes.txt</span></div>
                            <div class="tree-line">├── <span class="tree-folder">java/</span></div>
                            <div class="tree-line">&nbsp;&nbsp; ├── <span class="tree-file">ProfilerAdditionalTargets.java</span></div>
                            <div class="tree-line">&nbsp;&nbsp; └── <span class="tree-file">ProfilerAgent.java</span></div>
                            <div class="tree-line">└── <span class="tree-folder">scripts/</span></div>
                            <div class="tree-line">&nbsp;&nbsp;&nbsp;&nbsp;├── <span class="tree-file">generate_profilerAdditionalTargets.sh</span></div>
                            <div class="tree-line">&nbsp;&nbsp;&nbsp;&nbsp;├── <span class="tree-file">generate_profilerAgent.sh</span></div>
                            <div class="tree-line">&nbsp;&nbsp;&nbsp;&nbsp;├── <span class="tree-file">generate_report.sh</span></div>
                            <div class="tree-line">&nbsp;&nbsp;&nbsp;&nbsp;├── <span class="tree-file">inject_bytebuddy.sh</span></div>
                            <div class="tree-line">&nbsp;&nbsp;&nbsp;&nbsp;├── <span class="tree-file">inject_profilerInit.sh</span></div>
                            <div class="tree-line">&nbsp;&nbsp;&nbsp;&nbsp;├── <span class="tree-file">install_QffBridgeProfilerPlugin.sh</span></div>
                            <div class="tree-line">&nbsp;&nbsp;&nbsp;&nbsp;└── <span class="tree-file">promote_AdditionalTargetsClass.sh</span></div>
                        </div>
                    </div>
                    <div style="display: flex; flex-direction: column; justify-content: center; gap: 16px;">
                        <h3 style="font-size: 20px; font-weight: 700;">Unified Shell & Automation Layout</h3>
                        <p style="color: var(--text-muted); font-size: 15px;">All operational automation components are isolated cleanly under the dedicated <code>scripts/</code> directory to prevent project tree clutter.</p>
                        <p style="color: var(--text-muted); font-size: 15px;">Target files are promoted dynamically to the correct module directories during the installation process, guaranteeing deterministic configurations.</p>
                    </div>
                </div>
            </div>

            <!-- SLIDE 3: MASTER INSTALL EXECUTION -->
            <div class="slide" id="slide-3">
                <h2 class="slide-title"><i class="fa-solid fa-terminal"></i> Master Install Execution</h2>
                <div class="two-column">
                    <div style="display: flex; flex-direction: column; justify-content: center; gap: 16px;">
                        <h3 style="font-size: 20px; font-weight: 700;">Zero-Overhead Automation</h3>
                        <p style="color: var(--text-muted); font-size: 14px;">The master installation is executed as a single shell command with the target repository path as its argument.</p>
                        <div class="code-snippet">
                            ./install_QffBridgeProfilerPlugin.sh /c/Users/ls61218/Downloads/QFFBridge/156783.comet.qff-bridge
                        </div>
                        <p style="color: var(--text-muted); font-size: 14px;">The installation utility automatically validates current state, injects code patterns safely, and sets up dependencies cleanly.</p>
                    </div>
                    <div>
                        <div class="terminal-window">
                            <div class="terminal-header">
                                <span class="terminal-dot red"></span>
                                <span class="terminal-dot yellow"></span>
                                <span class="terminal-dot green"></span>
                                <span class="terminal-title">bash - install_QffBridgeProfilerPlugin.sh</span>
                            </div>
                            <div class="terminal-body">
                                <span class="terminal-prompt">$</span> ./install_QffBridgeProfilerPlugin.sh /c/Users/ls61218/Downloads/QFFBridge/156783.comet.qff-bridge<br>
                                <span class="terminal-success">[INFO]</span> Part 1 of 5: Adding ByteBuddy dependency to Gradle...<br>
                                <span class="terminal-highlight">[PLUGIN]</span> Skip: ByteBuddy dependencies already present in build.gradle.<br>
                                <span class="terminal-success">[INFO]</span> Part 2 of 5: Generating help class to supply external targets...<br>
                                <span class="terminal-success">[INFO]</span> Part 3 of 5: Promoting help class to source tree...<br>
                                <span class="terminal-success">[SUCCESS]</span> ProfilerAdditionalTargets.java successfully copied.<br>
                                <span class="terminal-success">[INFO]</span> Part 4 of 5: Installing ProfilerAgent.java...<br>
                                <span class="terminal-success">[SUCCESS]</span> ProfilerAgent.java successfully copied.<br>
                                <span class="terminal-success">[INFO]</span> Part 5 of 5: Installing profiler initializer after main()...<br>
                                <span class="terminal-success">[SUCCESS]</span> Integration complete! Commit change into feature branches.
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- SLIDE 4: THE 5-STEP INSTALLATION -->
            <div class="slide" id="slide-4">
                <h2 class="slide-title"><i class="fa-solid fa-list-ol"></i> Dynamic 5-Step Installation Logic</h2>
                <div class="content-area">
                    <p style="color: var(--text-muted); font-size: 15px; margin-bottom: 20px;">The installation pipeline performs a multi-phase structural modification of the target repository:</p>
                    <div class="steps-grid">
                        <div class="step-card">
                            <div class="step-num">Step 1</div>
                            <div class="step-title">Gradle Configuration</div>
                            <div class="step-desc">Injects <code>bytebuddy</code> dependency directly into the module-level build descriptors.</div>
                        </div>
                        <div class="step-card">
                            <div class="step-num">Step 2</div>
                            <div class="step-title">Logic Generation</div>
                            <div class="step-desc">Reads <code>external_classes.txt</code> to compile target filters into a compiled Java configuration helper class.</div>
                        </div>
                        <div class="step-card">
                            <div class="step-num">Step 3</div>
                            <div class="step-title">Logic Promotion</div>
                            <div class="step-desc">Deploys configuration helpers into active classpath sources under the specified Java package.</div>
                        </div>
                        <div class="step-card">
                            <div class="step-num">Step 4</div>
                            <div class="step-title">Agent Installation</div>
                            <div class="step-desc">Promotes <code>ProfilerAgent.java</code>, containing the low-level interception runtime logic, into the source tree.</div>
                        </div>
                        <div class="step-card">
                            <div class="step-num">Step 5</div>
                            <div class="step-title">Application Init</div>
                            <div class="step-desc">Modifies the main class source code to auto-bootstrap the ByteBuddy Agent on application startup.</div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- SLIDE 5: BYTEBUDDY INTERCEPTOR -->
            <div class="slide" id="slide-5">
                <h2 class="slide-title"><i class="fa-solid fa-diagram-project"></i> Dynamic Method Interception</h2>
                <div class="two-column">
                    <div class="diagram-container">
                        <!-- High-Quality Clean Styled CSS-SVG Diagram representing ByteBuddy Interceptor -->
                        <svg width="400" height="280" viewBox="0 0 400 280" fill="none" xmlns="http://www.w3.org/2000/svg">
                            <!-- Class Box -->
                            <rect x="20" y="30" width="130" height="60" rx="6" fill="#eff6ff" stroke="#3b82f6" stroke-width="2"/>
                            <text x="35" y="65" fill="#1e40af" font-family="'Plus Jakarta Sans'" font-size="12" font-weight="bold">Target Methods</text>

                            <!-- Interceptor Box -->
                            <rect x="250" y="30" width="130" height="60" rx="6" fill="#f0fdf4" stroke="#22c55e" stroke-width="2"/>
                            <text x="265" y="65" fill="#166534" font-family="'Plus Jakarta Sans'" font-size="12" font-weight="bold">ProfilerInterceptor</text>

                            <!-- Arrow representing delegation -->
                            <path d="M160 60 H240" stroke="#475569" stroke-width="2" stroke-dasharray="4 4" marker-end="url(#arrow)"/>
                            <text x="172" y="50" fill="#475569" font-family="'Plus Jakarta Sans'" font-size="10">Delegates</text>

                            <!-- Timing Logic Flow -->
                            <rect x="20" y="150" width="360" height="100" rx="8" fill="#f8fafc" stroke="#cbd5e1" stroke-width="1.5"/>
                            <text x="35" y="180" fill="#0f172a" font-family="'Plus Jakarta Sans'" font-size="12" font-weight="bold">Low-Overhead Execution Tracking</text>
                            <text x="35" y="205" fill="#475569" font-family="'Plus Jakarta Sans'" font-size="11">1. Capture nanotime on Method Entry</text>
                            <text x="35" y="225" fill="#475569" font-family="'Plus Jakarta Sans'" font-size="11">2. Execute method body -> Capture nanotime on Exit -> Compute Delta</text>

                            <defs>
                                <marker id="arrow" viewBox="0 0 10 10" refX="6" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse">
                                    <path d="M 0 0 L 10 5 L 0 10 z" fill="#475569"/>
                                </marker>
                            </defs>
                        </svg>
                    </div>
                    <div style="display: flex; flex-direction: column; justify-content: center; gap: 16px;">
                        <h3 style="font-size: 20px; font-weight: 700;">Dynamic Bytecode Hooking</h3>
                        <p style="color: var(--text-muted); font-size: 14px;">Utilizes modern <strong>ByteBuddy Interceptors</strong> to hook method executions dynamically during class loading.</p>
                        <p style="color: var(--text-muted); font-size: 14px;">Interception is highly focused; only the target packages and classes specified in <code>ProfilerAdditionalTargets</code> are manipulated, avoiding global runtime degradation.</p>
                    </div>
                </div>
            </div>

            <!-- SLIDE 6: ACTIVATION CONTROL -->
            <div class="slide" id="slide-6">
                <h2 class="slide-title"><i class="fa-solid fa-sliders"></i> Activation Control & Safeguards</h2>
                <div class="two-column" style="align-items: center;">
                    <div>
                        <h3 style="font-size: 20px; font-weight: 700; margin-bottom: 12px;">The <code>ENABLE_PROFILING</code> Toggle</h3>
                        <p style="color: var(--text-muted); font-size: 15px; margin-bottom: 16px;">The system implements a fail-safe approach to runtime execution controlled strictly by an environment variable:</p>

                        <div class="toggle-switch-container">
                            <div class="toggle-switch active"></div>
                            <div>
                                <strong style="font-size: 14px;">ACTIVE BY DEFAULT (UNSET / true)</strong>
                                <p style="font-size: 12px; color: var(--text-muted);">Profiler runs dynamically, collecting high-fidelity trace results.</p>
                            </div>
                        </div>

                        <div class="toggle-switch-container" style="margin-top: 10px;">
                            <div class="toggle-switch"></div>
                            <div>
                                <strong style="font-size: 14px;">EXPLICITLY DISABLED (false)</strong>
                                <p style="font-size: 12px; color: var(--text-muted);">Safe deployment bypass: the agent remains completely dormant.</p>
                            </div>
                        </div>
                    </div>
                    <div class="code-snippet" style="height: 280px; display: flex; flex-direction: column; justify-content: center;">
                        <div style="color: #64748b; margin-bottom: 8px;"># Force Disable Profiling</div>
                        <div style="margin-bottom: 16px;"><span style="color: #ec4899;">export</span> ENABLE_PROFILING=false</div>

                        <div style="color: #64748b; margin-bottom: 8px;"># Start application normally</div>
                        <div>./gradlew QFF_Bridge1_dev</div>
                    </div>
                </div>
            </div>

            <!-- SLIDE 7: METRICS ACCUMULATION -->
            <div class="slide" id="slide-7">
                <h2 class="slide-title"><i class="fa-solid fa-hourglass-half"></i> Metrics Accumulation Cadence</h2>
                <div class="metrics-wrapper">
                    <div class="metric-big">60<span>SEC</span></div>
                    <div>
                        <div class="metric-label">Periodic Snapshot Flushes</div>
                        <p class="metric-desc">To deliver high performance under operational workloads, metric snapshots are accumulated efficiently in memory and persisted sequentially to disk at a default interval of exactly one minute.</p>
                        <p class="metric-desc" style="margin-top: 12px; color: var(--accent-blue); font-weight: 600;">This completely isolates resource-intensive I/O operations from transaction execution paths, guaranteeing microsecond-accurate trace accuracy.</p>
                    </div>
                </div>
            </div>

            <!-- SLIDE 8: PERSISTENT DATA STRUCTURE -->
            <div class="slide" id="slide-8">
                <h2 class="slide-title"><i class="fa-solid fa-database"></i> Persistent Data Structures</h2>
                <div class="content-area">
                    <p style="color: var(--text-muted); font-size: 15px; margin-bottom: 24px;">All profiling data is bound to the target execution log directory under predictable, fully structured files:</p>
                    <div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px;">
                        <div class="step-card" style="border-left: 4px solid var(--accent-blue);">
                            <div class="step-title" style="display: flex; align-items: center; gap: 8px;">
                                <i class="fa-solid fa-file-csv" style="color: #10b981;"></i> CSV Dataset
                            </div>
                            <p class="step-desc" style="margin-top: 8px;"><strong>profiler_combined_report.csv</strong></p>
                            <p class="step-desc" style="margin-top: 4px;">Contains the raw in-memory flush records: total executions, total duration (MS), average duration.</p>
                        </div>
                        <div class="step-card" style="border-left: 4px solid var(--accent-blue);">
                            <div class="step-title" style="display: flex; align-items: center; gap: 8px;">
                                <i class="fa-solid fa-file-lines" style="color: #3b82f6;"></i> Tabulated Summary
                            </div>
                            <p class="step-desc" style="margin-top: 8px;"><strong>performance_summary.txt</strong></p>
                            <p class="step-desc" style="margin-top: 4px;">Human-readable report cleanly compiled and formatted by the <code>./generate_report.sh</code> execution.</p>
                        </div>
                        <div class="step-card" style="border-left: 4px solid var(--accent-blue);">
                            <div class="step-title" style="display: flex; align-items: center; gap: 8px;">
                                <i class="fa-solid fa-folder-closed" style="color: #f59e0b;"></i> Log Location
                            </div>
                            <p class="step-desc" style="margin-top: 8px;"><strong>C:    emp\QFF_Bridge_dev\log</strong></p>
                            <p class="step-desc" style="margin-top: 4px;">Standard local storage path binding the raw metrics and compiled logs during runtime operations.</p>
                        </div>
                    </div>
                </div>
            </div>

            <!-- SLIDE 9: REPORTING WORKFLOW -->
            <div class="slide" id="slide-9">
                <h2 class="slide-title"><i class="fa-solid fa-file-chart-column"></i> Reporting & Bottleneck Analysis</h2>
                <div class="two-column">
                    <div style="display: flex; flex-direction: column; justify-content: center; gap: 16px;">
                        <h3 style="font-size: 20px; font-weight: 700;">Zero-Interruption Reports</h3>
                        <p style="color: var(--text-muted); font-size: 14px;">Generate updated tables at any point during active application runs. Stopping the application is completely <strong>optional</strong>.</p>
                        <p style="color: var(--text-muted); font-size: 14px;">The processing script reads the current CSV dataset state, aggregates metrics, and formats tabular reports instantly.</p>
                    </div>
                    <div>
                        <div class="code-snippet" style="height: 100%; display: flex; flex-direction: column; justify-content: center; font-size: 12px;">
                            <div style="color: #64748b; margin-bottom: 8px;"># Compile updated performance summary</div>
                            <div style="margin-bottom: 16px;">./generate_report.sh C:   emp\QFF_Bridge_dev\log\profiler_combined_report.csv</div>
                            <div style="color: #64748b; margin-bottom: 8px;"># Verify the generated text output</div>
                            <div>cat C: emp\QFF_Bridge_dev\log\performance_summary.txt</div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- SLIDE 10: QUANTITATIVE ANALYSIS -->
            <div class="slide" id="slide-10">
                <h2 class="slide-title"><i class="fa-solid fa-table-list"></i> Target Performance Analytics</h2>
                <div class="content-area">
                    <div class="report-table-container">
                        <table class="report-table">
                            <thead>
                                <tr>
                                    <th>Method Identifier</th>
                                    <th>Calls</th>
                                    <th>Total Duration (MS)</th>
                                    <th>Average (MS)</th>
                                    <th>Operational Alert</th>
                                </tr>
                            </thead>
                            <tbody>
                                <tr>
                                    <td>StatementExecutor.queryForList</td>
                                    <td>5595</td>
                                    <td>75432.81</td>
                                    <td>13.48</td>
                                    <td>-</td>
                                </tr>
                                <tr>
                                    <td>DataManagerFactory.createDataManager</td>
                                    <td>3</td>
                                    <td>58878.57</td>
                                    <td>19626.19</td>
                                    <td><span class="flag-slow"><i class="fa-solid fa-triangle-exclamation"></i> SLOW</span></td>
                                </tr>
                                <tr>
                                    <td>ProductLookup.getInstance</td>
                                    <td>1</td>
                                    <td>26343.11</td>
                                    <td>26343.11</td>
                                    <td><span class="flag-slow"><i class="fa-solid fa-triangle-exclamation"></i> SLOW</span></td>
                                </tr>
                                <tr>
                                    <td>BaseService.connect</td>
                                    <td>174</td>
                                    <td>25316.14</td>
                                    <td>145.49</td>
                                    <td><span class="flag-slow"><i class="fa-solid fa-triangle-exclamation"></i> SLOW</span></td>
                                </tr>
                                <tr>
                                    <td>ProductAPI.init</td>
                                    <td>1</td>
                                    <td>19814.20</td>
                                    <td>19814.20</td>
                                    <td><span class="flag-slow"><i class="fa-solid fa-triangle-exclamation"></i> SLOW</span></td>
                                </tr>
                            </tbody>
                        </table>
                    </div>
                    <p style="margin-top: 14px; color: var(--text-muted); font-size: 13px;">Execution threshold configured at <strong>&gt; 100.0ms</strong>. Methods exceeding constraints are flagged instantly to guide optimization tracks.</p>
                </div>
            </div>

            <!-- SLIDE 11: SYSTEM RUN SUMMARY -->
            <div class="slide" id="slide-11">
                <h2 class="slide-title"><i class="fa-solid fa-terminal"></i> Runtime Command Roadmap</h2>
                <div class="content-area">
                    <div style="display: grid; grid-template-columns: repeat(2, 1fr); gap: 24px; margin-top: 10px;">
                        <div>
                            <h3 style="font-size: 16px; font-weight: 700; margin-bottom: 8px; color: var(--accent-blue);">1. Installation Pipeline</h3>
                            <div class="code-snippet" style="font-size: 11px;">
                                ./install_QffBridgeProfilerPlugin.sh /c/Users/ls61218/Downloads/QFFBridge/156783.comet.qff-bridge
                            </div>

                            <h3 style="font-size: 16px; font-weight: 700; margin-top: 20px; margin-bottom: 8px; color: var(--accent-blue);">2. Runtime Operations</h3>
                            <div class="code-snippet" style="font-size: 11px;">
                                ./gradlew QFF_Bridge1_dev
                            </div>
                        </div>

                        <div>
                            <h3 style="font-size: 16px; font-weight: 700; margin-bottom: 8px; color: var(--accent-blue);">3. Report Aggregation</h3>
                            <div class="code-snippet" style="font-size: 11px;">
                                ./generate_report.sh C:/temp/QFF_Bridge_dev/log/profiler_combined_report.csv
                            </div>

                            <h3 style="font-size: 16px; font-weight: 700; margin-top: 20px; margin-bottom: 8px; color: var(--accent-blue);">4. Verification Check</h3>
                            <div class="code-snippet" style="font-size: 11px;">
                                cat /c/temp/QFF_Bridge_dev/log/performance_summary.txt
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- SLIDE 12: QUESTIONS & ANSWERS -->
            <div class="slide" id="slide-12">
                <h2 class="slide-title"><i class="fa-solid fa-circle-question"></i> Questions and Answers</h2>
                <div class="two-column" style="align-items: center;">
                    <div style="display: flex; flex-direction: column; gap: 16px;">
                        <p style="font-size: 18px; color: var(--text-muted);">The QFFBridge Profiler is optimized to provide maximum visibility with zero disruption to core operations.</p>
                        <div class="step-card" style="background-color: #f0fdf4; border-color: #bbf7d0;">
                            <strong style="color: #166534;"><i class="fa-solid fa-circle-check"></i> Integration Verified</strong>
                            <p style="font-size: 13px; color: #14532d; margin-top: 4px;">Proceed with installation into features branches for performance metrics baseline checks.</p>
                        </div>
                    </div>
                    <div style="display: flex; justify-content: center;">
                        <!-- Stylized modern vector illustration representing Q&A using beautiful light themed SVG -->
                        <svg width="240" height="240" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg">
                            <!-- Background Circles -->
                            <circle cx="100" cy="100" r="80" fill="#f1f5f9"/>
                            <circle cx="100" cy="100" r="50" fill="#e2e8f0"/>

                            <!-- Question Mark Silhouette -->
                            <path d="M90 75C90 63.9543 98.9543 55 110 55C121.046 55 130 63.9543 130 75C130 83.1818 124.545 88.1818 119.091 92.2727C114.545 95.9091 110 100 110 108" stroke="#2563eb" stroke-width="8" stroke-linecap="round"/>
                            <circle cx="110" cy="128" r="5" fill="#2563eb"/>

                            <!-- Help Chat Bubbles -->
                            <rect x="30" y="110" width="45" height="30" rx="6" fill="#2563eb"/>
                            <path d="M45 140 L45 148 L55 140 Z" fill="#2563eb"/>
                            <circle cx="45" cy="125" r="2" fill="white"/>
                            <circle cx="52" cy="125" r="2" fill="white"/>
                            <circle cx="59" cy="125" r="2" fill="white"/>
                        </svg>
                    </div>
                </div>
            </div>

        </div>

        <!-- Footer Control Bar -->
        <div class="presentation-footer">
            <div class="keyboard-hint">
                <span class="keyboard-key"><i class="fa-solid fa-arrow-left"></i></span>
                <span class="keyboard-key"><i class="fa-solid fa-arrow-right"></i></span>
                <span>or Keyboard arrows to navigate</span>
            </div>

            <div class="slide-counter">
                Slide <span id="current-slide-num">1</span> of 12
            </div>

            <div class="nav-buttons">
                <button class="btn" id="prev-btn"><i class="fa-solid fa-angle-left"></i> Prev</button>
                <button class="btn" id="next-btn">Next <i class="fa-solid fa-angle-right"></i></button>
            </div>
        </div>
    </div>

    <script>
        const slides = document.querySelectorAll('.slide');
        const currentNumEl = document.getElementById('current-slide-num');
        const prevBtn = document.getElementById('prev-btn');
        const nextBtn = document.getElementById('next-btn');
        let currentSlideIdx = 0;

        function updateSlidePosition() {
            slides.forEach((slide, idx) => {
                if (idx === currentSlideIdx) {
                    slide.classList.add('active');
                } else {
                    slide.classList.remove('active');
                }
            });
            currentNumEl.textContent = currentSlideIdx + 1;

            // Toggle switch interaction simulation on Slide 6
            const switches = document.querySelectorAll('.toggle-switch');
            switches.forEach(sw => {
                sw.onclick = function() {
                    sw.classList.toggle('active');
                }
            });

            // Hide Next button on the last slide (Slide 12)
            if (currentSlideIdx === slides.length - 1) {
                nextBtn.style.visibility = 'hidden';
            } else {
                nextBtn.style.visibility = 'visible';
            }

            // Hide Prev button on the first slide
            if (currentSlideIdx === 0) {
                prevBtn.style.visibility = 'hidden';
            } else {
                prevBtn.style.visibility = 'visible';
            }
        }

        function nextSlide() {
            if (currentSlideIdx < slides.length - 1) {
                currentSlideIdx++;
                updateSlidePosition();
            }
        }

        function prevSlide() {
            if (currentSlideIdx > 0) {
                currentSlideIdx--;
                updateSlidePosition();
            }
        }

        nextBtn.addEventListener('click', nextSlide);
        prevBtn.addEventListener('click', prevSlide);

        // Keyboard Navigation
        document.addEventListener('keydown', (e) => {
            if (e.key === 'ArrowRight' || e.key === ' ') {
                nextSlide();
            } else if (e.key === 'ArrowLeft') {
                prevSlide();
            }
        });

        // Initialize first position
        updateSlidePosition();
    </script>
</body>
</html>

Enter fullscreen mode Exit fullscreen mode

Top comments (0)