34 Commits

Author SHA1 Message Date
Your Name 8563a44211 Add SVG report for typical stroke mask pooling at warm 10th stroke
mandatory-regression-gate / deterministic-tests (push) Has been cancelled
mandatory-regression-gate / protected-performance-path (push) Has been cancelled
2026-07-24 23:43:42 +03:00
Your Name 844fd4a026 feat: enhance PlainSlider to eliminate visual artifacts and improve boundary handling
mandatory-regression-gate / deterministic-tests (push) Has been cancelled
mandatory-regression-gate / protected-performance-path (push) Has been cancelled
2026-07-24 19:11:01 +03:00
Your Name ee6ad2dc20 chore: configure criterion benchmarking for hcie-engine-api and update benchmark dependency handling
mandatory-regression-gate / deterministic-tests (push) Has been cancelled
mandatory-regression-gate / protected-performance-path (push) Has been cancelled
2026-07-24 18:42:53 +03:00
Your Name 6b02f19624 feat: add performance benchmarks for composite buffer pooling and effects pipeline skipping
mandatory-regression-gate / deterministic-tests (push) Has been cancelled
mandatory-regression-gate / protected-performance-path (push) Has been cancelled
2026-07-24 17:29:33 +03:00
Your Name a056419c24 kra_saver_fixed
mandatory-regression-gate / deterministic-tests (push) Has been cancelled
mandatory-regression-gate / protected-performance-path (push) Has been cancelled
2026-07-24 16:23:45 +03:00
Your Name 505562424b feat: implement layer mask editing support with scratch buffer and coordinate normalization
mandatory-regression-gate / deterministic-tests (push) Has been cancelled
mandatory-regression-gate / protected-performance-path (push) Has been cancelled
2026-07-24 06:01:30 +03:00
Your Name 7496f5e208 perf: eliminate crosshair input lag by using immediate cursor position and forced view redraws
mandatory-regression-gate / deterministic-tests (push) Has been cancelled
mandatory-regression-gate / protected-performance-path (push) Has been cancelled
2026-07-24 02:46:30 +03:00
Your Name fba10b753c fix: optimize performance by wrapping trace logs, adding captured drag event subscriptions, and adding regression tests for adjustment compositing. 2026-07-24 02:04:35 +03:00
Your Name f2cca7e6a1 feat: implement file opening logic in a new tab and streamline document loading process
mandatory-regression-gate / deterministic-tests (push) Has been cancelled
mandatory-regression-gate / protected-performance-path (push) Has been cancelled
2026-07-24 00:51:09 +03:00
Your Name a2264b130d 4K MULTI LAYEPERFORMANCE OK : SOL 5.6 HIGH feat(perf): add real-time canvas performance measurements
- Introduced a new performance module for the iced canvas to measure input queueing, engine drawing, CPU compositing/staging, GPU upload, and renderer preparation costs.
- Implemented a performance probe in the egui reference renderer for comparative diagnostics.
- Added methods to record durations, byte transfers, and input timestamps, enabling detailed performance analysis.
- Enhanced the CanvasShaderPipeline with a new method to upload full textures without rebuilding GPU resources.
- Updated the main application to conditionally log performance diagnostics based on an environment variable.
- Created a performance plan document outlining steps to measure and optimize drawing performance in the iced application.
2026-07-23 23:57:03 +03:00
Your Name e9dad7ef0c refactor: clamp canvas pointer movement, prioritize local pan offset, and remove debug logs
mandatory-regression-gate / deterministic-tests (push) Has been cancelled
mandatory-regression-gate / protected-performance-path (push) Has been cancelled
2026-07-23 19:44:13 +03:00
Your Name 3bac629045 feat: add unlock icon and update layer lock UI, and fix document loading index management and cache synchronization
mandatory-regression-gate / deterministic-tests (push) Has been cancelled
mandatory-regression-gate / protected-performance-path (push) Has been cancelled
2026-07-23 18:16:49 +03:00
Your Name 135ab8a628 feat: add local pan offset to eliminate one-frame panning latency in shader canvas
mandatory-regression-gate / deterministic-tests (push) Has been cancelled
mandatory-regression-gate / protected-performance-path (push) Has been cancelled
2026-07-23 18:00:58 +03:00
Your Name 513efcdcff Refactor dependencies and improve test runner diagnostics
mandatory-regression-gate / deterministic-tests (push) Has been cancelled
mandatory-regression-gate / protected-performance-path (push) Has been cancelled
- Updated `Cargo.toml` files across multiple crates to replace local `egui` and `eframe` dependencies with workspace references, ensuring consistent platform support.
- Enhanced `run_all_tests.bat` and `run_all_tests.sh` scripts to capture and report names of failed and skipped crates, improving test diagnostics.
- Fixed duplicate keys in `hcie-text/Cargo.toml` and ensured proper feature activation for Linux builds in affected crates.
- Added a new repair plan document outlining steps to address failing crates and improve overall test execution reliability.
2026-07-23 16:34:05 +03:00
Your Name 8447b2d796 Refactor code structure for improved readability and maintainability
mandatory-regression-gate / deterministic-tests (push) Has been cancelled
mandatory-regression-gate / protected-performance-path (push) Has been cancelled
2026-07-23 15:34:05 +03:00
Your Name 593522e83f feat: Add directory tree navigation with expand/collapse support and theme toggle functionality 2026-07-23 04:07:35 +03:00
Your Name 21175b98c1 feat: Update button padding and height in title bar for improved UI consistency
mandatory-regression-gate / deterministic-tests (push) Has been cancelled
mandatory-regression-gate / protected-performance-path (push) Has been cancelled
2026-07-23 03:49:02 +03:00
Your Name e509def0b2 feat: Add digital, dry, ink, and paint brush presets; implement regression testing hooks
mandatory-regression-gate / deterministic-tests (push) Has been cancelled
mandatory-regression-gate / protected-performance-path (push) Has been cancelled
- Introduced new crates for digital brushes, dry media brushes, ink brushes, and paint brushes, each containing various presets.
- Updated the menus to include "Paste Special" and "Paste as New Layer" options.
- Enhanced the feature scorecard tests to validate selection texture encoding.
- Added a regression gate workflow for automated testing on push and pull requests.
- Implemented Git hooks for pre-commit checks to ensure code formatting and run tests before commits.
- Created a settings file for local configurations.
2026-07-23 02:28:49 +03:00
phantom 2d5b7a37e8 feat: Enhance canvas texture management and selection encoding
- Introduced `SharedCompositePixels` for stable full-canvas pixel storage, enabling efficient pipeline creation and recovery.
- Added `TextureUpdate` struct for tightly packed dirty rectangle uploads, reducing unnecessary data copying.
- Refactored `upload_dirty_region` to utilize `TextureUpdate`, improving performance by eliminating full buffer scans.
- Implemented `encode_selection_texture` to generate an encoded R8 selection mask, optimizing selection rendering.
- Updated shader to sample selection texture only once, reducing GPU workload.
- Added comprehensive tests for texture updates, selection encoding, and performance diagnostics.
- Documented design decisions and validation sequences to ensure future performance stability.
2026-07-22 02:49:22 +03:00
phantom 7b4073e55b feat: Enhance brush settings and add new layer paste functionality
- Added brush color variant and variant amount settings to the brush panel.
- Introduced a checkbox for color variant and a slider for variant amount in the brush settings.
- Implemented "Paste as New Layer" functionality, allowing users to paste clipboard images directly onto a new layer.
- Updated menus to include the new paste option with a shortcut.
- Improved layer panel iconography by replacing text buttons with SVG icons for visibility and lock toggles.
- Created new SVG assets for closed eye and watercolor icons.
- Enhanced history panel to provide richer descriptions for brush strokes and vector shape modifications.
- Fixed the issue where the first brush stroke was missing from the history panel.
2026-07-21 17:40:41 +03:00
phantom e5d899d72d feat: add watercolor brush category with presets and splat renderer
- Implemented a new crate `hcie-watercolor-brushes` containing watercolor brush presets and a procedural splat preview renderer.
- Integrated watercolor brushes into the iced GUI's Brushes panel, adding a new category for watercolor brushes.
- Updated the `BrushCategory` enum to include `Watercolor` and modified the rendering logic to display watercolor presets.
- Added functionality to generate watercolor splat thumbnails using a noise-based algorithm.
- Ensured that existing brush styles and engine crates remain unmodified, adhering to project constraints.
2026-07-21 06:07:12 +03:00
phantom bc89eefa88 feat: add runtime build-ID management to increment and track application build numbers
- Implemented a new module for managing build IDs at runtime.
- Introduced functions to find the repository root, check for stale locks, and increment the build ID.
- Ensured atomic writes to the build ID file with proper locking mechanisms.
- The build version string is formatted as "0.1.0+build.{build_id}" for display purposes.
2026-07-21 05:41:27 +03:00
phantom cbe03f74a3 MiMo 2.5 feat: enhance vector shape handling with angle snapping and color state management 2026-07-21 05:08:08 +03:00
phantom b49106dc1d BIG REFACTOR GPT SOL
feat: Refactor Iced panel adapter and introduce build metadata management

- Updated Cargo.toml files across multiple crates to use workspace versioning.
- Enhanced the `iced-panel-adapter` to include a new `plain_slider` module and updated widget rendering to support theme colors.
- Added new theme color utilities for recessed and elevated surfaces in `iced-panel-adapter`.
- Introduced a new `hcie-build-info` crate to manage build metadata, including a build ID system.
- Created a build script to synchronize build IDs across the workspace.
- Added a Makefile for simplified build commands for the Iced application.
- Implemented regression tests for vector shape creation history in the engine API.
- Added a new script for managing Cargo commands with synchronized build ID increments.
- Updated line count report to reflect recent changes in codebase.
- Created a visual plan document for future improvements in the Iced history and panel systems.
2026-07-21 04:25:23 +03:00
phantom 325bd0d8e8 GOOD feat: add Layer Styles panel and enhance filter categories
- Introduced a new Layer Styles panel that displays effects with toggle checkboxes for quick enable/disable functionality.
- Updated the filters panel to support collapsible filter categories, allowing users to expand or collapse categories.
- Enhanced the application state to manage expanded filter categories using a HashMap.
- Modified the layout and sizing of various panels to accommodate the new Layer Styles panel.
- Updated theme colors for better visual consistency across the application.
- Improved the toolbar to streamline brush size and opacity controls.
2026-07-20 21:23:04 +03:00
phantom 3659b886ff Refactor and enhance the Iced GUI with new features and improvements
- Improved layout and styling in filter_params.rs for better visual consistency.
- Enhanced filters.rs to ensure scrollable parameters fill the available width.
- Added a new Custom Shapes panel to display user-defined SVG shapes.
- Updated menus.rs to include a new Custom Shapes menu item and adjusted related logic.
- Modified properties.rs to support additional spray tool properties (particle size and density).
- Adjusted title_bar.rs for improved menu button dimensions and layout.
- Enhanced toolbar.rs to include spray tool options in the toolbar.
- Fixed color persistence issues in settings.rs to ensure colors are saved and loaded correctly.
- Updated plain_slider.rs to ensure sliders utilize the full width of their containers.
- Created a visual polish plan to address various UI/UX issues and improve overall usability.
2026-07-20 20:24:40 +03:00
phantom 2fb47520b3 feat(svg-editor): implement interactive SVG node editor with parsing and editing capabilities
feat(debug-logger): add DebugSignalLogger plugin for event logging and inspection

feat(plugins): introduce built-in plugins module and integrate debug logger

feat(plugin-integration): create integration layer for mapping Iced Messages to CoreEvents

feat(plugin-registry): establish PluginRegistry for managing plugins and event dispatching
2026-07-20 01:43:22 +03:00
phantom 6e0d179be9 feat(svg-editor): Implement SVG shape loading and editing functionality
- Add SVG shape loading from disk, allowing users to customize shapes by placing SVG files in the designated directory.
- Introduce a new `ShapeCatalog` to manage SVG shapes, prioritizing user-defined shapes over built-in templates.
- Implement an SVG editor with node-based editing capabilities, enabling users to manipulate SVG paths directly.
- Create a new `SvgEditable` structure to represent editable SVG shapes, supporting operations like adding, removing, and moving nodes.
- Enhance the GUI with an SVG editor panel for visual editing of SVG shapes, including controls for node manipulation and saving changes.
- Ensure compatibility with existing shape tools and maintain a seamless user experience across the application.
2026-07-19 13:50:17 +03:00
phantom 5632c916ee feat: introduce SVG-based complex vector shapes
- Added `SvgShape` variant to `VectorShape` in `hcie-protocol`, allowing for SVG rendering of complex shapes.
- Updated serialization to skip old shape variants for backward compatibility.
- Implemented SVG generation functions in `svg_templates.rs` for various shapes (arrow, star, rhombus, etc.).
- Created `svg_render.rs` to parse SVG strings and tessellate paths using `usvg`.
- Modified rendering logic in `hcie-vector` to handle `SvgShape` and integrate with existing shape rendering.
- Updated shape creation API in `hcie-engine-api` to support SVG shapes.
- Enhanced property editing and shape synchronization in both `hcie-egui-app` and `hcie-iced-app` to accommodate new SVG shapes.
- Added comprehensive documentation for new features and changes.
2026-07-19 02:44:59 +03:00
phantom e90cb2d31d refactor: replace standard sliders with PlainSlider for better UI consistency 2026-07-19 01:53:51 +03:00
phantom 9388e6f096 GOOD Refactor GUI components and add PlainSlider widget
- Added a new `PlainSlider` widget for keyboard-editable numeric sliders.
- Updated various panels to utilize the new `PlainSlider` for better user interaction.
- Removed unused code and dead code warnings across multiple files.
- Improved organization of modules by adding a `widgets` module.
- Cleaned up imports in several files to streamline the codebase.
- Added Qodana configuration file for code analysis and quality checks.
2026-07-19 00:55:40 +03:00
phantom bbabd2acdb Refactor and enhance GUI components
- Improved code readability by formatting function parameters and conditionals.
- Updated tooltip implementations to use a consistent style across various components.
- Added vector angle property to tool settings and integrated it into the vector shape rendering logic.
- Enhanced the rendering of shapes such as Cross, Bolt, and Arrow4 to improve visual fidelity.
- Refactored dock and sidebar components for better organization and clarity.
- Fixed various minor issues and improved logging for better debugging.
2026-07-18 23:02:28 +03:00
phantom a2846d8b3a A GOOD MILESTONE : Refactor title bar and toolbar typography, improve tooltip styles, and enhance selection transform functionality
- Updated typography constants for menu bar and tooltips to improve readability and consistency.
- Adjusted button padding and widths in the title bar for better layout.
- Replaced tooltip implementation with a new balloon tooltip style for improved visual feedback.
- Enhanced selection transform logic to support rotation and resizing, ensuring accurate hit testing and bounds calculations.
- Added tests for selection clearing and transformed bounds to ensure functionality and prevent regressions.
- Introduced a new module for managing selection transform dirty bounds during interactive previews.
2026-07-18 20:31:31 +03:00
phantom b2c88e5471 feat(canvas): enhance composite shader with selection overlay and marching ants
- Updated the canvas composite shader to include a selection mask fill and animated marching ants border.
- Added new uniforms for animation time, selection mask presence, and quick mask mode.
- Modified the fragment shader to handle selection rendering, including color tinting for selected areas and a dash pattern for the marching ants effect.
- Refactored the OverlayProgram to remove the old marching ants rendering logic, now handled by the GPU shader.
- Introduced new data structures in the shader pipeline for managing selection mask textures and samplers.
- Implemented functionality to upload selection mask data to the GPU.
- Updated selection state handling to ensure correct bounds calculations.
- Enhanced sidebar tool button rendering with fallback for missing icons.
2026-07-17 23:15:27 +03:00
649 changed files with 60218 additions and 4863 deletions
+9
View File
@@ -1,3 +1,12 @@
[env]
PKG_CONFIG_PATH = "/tmp/dav1d-dev/usr/lib/x86_64-linux-gnu/pkgconfig"
LIBRARY_PATH = "/tmp/dav1d-dev/usr/lib/x86_64-linux-gnu"
[target.x86_64-unknown-linux-gnu]
rustflags = ["-C", "link-arg=-fuse-ld=mold"]
[target.x86_64-pc-windows-msvc]
linker = "rust-lld.exe"
[target.x86_64-pc-windows-gnu]
linker = "rust-lld.exe"
+17
View File
@@ -0,0 +1,17 @@
{
"permissions": {
"allow": [
"Bash(cargo build *)",
"Bash(cargo test *)",
"Bash(cargo check *)",
"Bash(cargo fix *)",
"Bash(grep -A 3 'name = \"eframe\"' /mnt/extra/extra1/00_PROJECTS/hcie-rust-v4/Cargo.lock 2>/dev/null || grep -A 3 'name = \"eframe\"' /mnt/extra/00_PROJECTS/hcie-rust-v4/Cargo.lock 2>/dev/null)",
"Read(//mnt/extra/extra1/00_PROJECTS/hcie-rust-v4/**)",
"Bash(find /home/dev-user/.cargo/registry/src -path \"*/egui-0.34*/src/containers/panel.rs\" 2>/dev/null | head -1)",
"Read(//home/dev-user/.cargo/registry/src/**)",
"Bash(find /home/dev-user/.cargo/registry/src -path \"*/egui-0.3*/src/containers/panel.rs\" 2>/dev/null | head -3)",
"Bash(sed -i 's/\\\\.close_menu\\(\\)/.close\\(\\)/g' /mnt/extra/00_PROJECTS/hcie-rust-v4/hcie-egui-app/crates/hcie-gui-egui/src/app/menus.rs)",
"Bash(sed -i 's/\\\\.close_menu\\(\\)/.close\\(\\)/g' /mnt/extra/00_PROJECTS/hcie-rust-v4/hcie-egui-app/crates/hcie-gui-egui/src/canvas/mod.rs)"
]
}
}
+26
View File
@@ -0,0 +1,26 @@
name: mandatory-regression-gate
on:
push:
pull_request:
jobs:
deterministic-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Reject commit whitespace errors
run: git show --check --oneline --no-patch HEAD
- name: Run deterministic workspace tests
run: |
cargo check --locked --workspace --exclude hcie-io --examples
cargo test --locked --workspace --exclude hcie-io --lib --tests -- --skip benchmark_4k_stroke_on_multilayer_document
- name: Run protected visual regression tests
run: cargo test --locked -p hcie-engine-api --test visual_regression
protected-performance-path:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Verify protected 4K stroke path
run: cargo test --locked -p hcie-engine-api --test performance_stroke_4k -- --nocapture
+13 -18
View File
@@ -1,21 +1,16 @@
#!/bin/bash
#!/usr/bin/env bash
set -Eeuo pipefail
CHANGED_FILES=$(git diff --cached --name-only)
if [ -z "$CHANGED_FILES" ]; then
exit 0
REPO_ROOT="$(git rev-parse --show-toplevel)"
cd "$REPO_ROOT"
echo "Running mandatory staged-change regression gate..."
"$REPO_ROOT/scripts/precommit-test-gate.sh"
CHANGED_FILES="$(git diff --cached --name-only --diff-filter=ACMRDTUXB)"
if [[ -n "$CHANGED_FILES" ]]; then
echo "Running semantic impact analysis..."
python3 "$REPO_ROOT/.githooks/semantic_analyzer.py" "$CHANGED_FILES"
fi
echo "🔍 Semantik etki analizi başlatılıyor..."
echo "Değişen dosyalar:"
echo "$CHANGED_FILES"
echo "--------------------------------------------------"
python3 .githooks/semantic_analyzer.py "$CHANGED_FILES"
ANALYSIS_RESULT=$?
if [ $ANALYSIS_RESULT -ne 0 ]; then
echo "❌ COMMIT ENGELLENDİ: Kritik bir modül risk altında veya testler başarısız."
exit 1
fi
exit 0
echo "Pre-commit checks passed."
+2 -7
View File
@@ -1,7 +1,6 @@
#!/usr/bin/env python3
import sys
import json
import subprocess
import os
def load_manifest():
@@ -42,13 +41,9 @@ def main():
log.write(report_line + "\n")
if high_risk_change:
print("🔄 Yüksek riskli alan değiştiği için Rust entegrasyon testleri zorunlu olarak çalıştırılıyor...")
result = subprocess.run("cargo test --all-features", shell=True)
if result.returncode != 0:
print("❌ Entegrasyon testleri başarısız oldu! Özellik kaybı var.")
sys.exit(1)
print("High-risk change detected; the mandatory pre-commit gate already ran the deterministic workspace tests.")
sys.exit(0)
if __name__ == "__main__":
main()
main()
@@ -0,0 +1,260 @@
# SVG-based Complex Vector Shapes
## Goal
Replace hard-coded vertex generation for complex `VectorShape` variants with SVG strings rendered at runtime via `usvg`. Simple primitives (Line, Rect, Circle, Polygon, FreePath) stay as-is.
## Design Decisions
| Decision | Choice |
|----------|--------|
| SVG coordinate system | `viewBox="0 0 1 1"` (normalized). Resize only updates x1,y1,x2,y2 — SVG never regenerated. |
| Shape kind field | `kind: String` in SvgShape ("arrow", "star", etc.) for property panel controls. |
| Backward compat | Keep old variants with `#[serde(skip_serializing)]`. Deserialized old variants stay as-is in memory but convert to SvgShape on first user edit. On serialize, only SvgShape writes out. |
| SVG path parser | `usvg` 0.43 (already workspace dep) — parse SVG, extract path segments, tessellate curves, scale to bounding box. |
| Both GUIs | egui + iced both updated. |
## Changes (17 files, 5 crates)
---
### 1. `hcie-protocol/src/lib.rs` — Add `SvgShape` variant
```rust
SvgShape {
x1: f32, y1: f32, x2: f32, y2: f32,
kind: String, // "arrow", "star", "rhombus", "cylinder", "heart", "bubble", "gear", "cross", "crescent", "bolt", "arrow4"
svg: String, // SVG with viewBox="0 0 1 1", path data in normalized coords
stroke: f32,
color: [u8; 4],
fill_color: [u8; 4],
fill: bool,
angle: f32,
opacity: f32,
hardness: f32,
}
```
Old variants (Arrow, Star, Rhombus, Cylinder, Heart, Bubble, Gear, Cross, Crescent, Bolt, Arrow4) keep `#[serde(skip_serializing)]` — they deserialize fine for backward compat but never serialize.
Update every exhaustive match arm in `impl VectorShape`:
- `bounds()` — add `SvgShape { x1,y1,x2,y2,.. }`
- `normalized_bounds()` — no change, delegates to bounds
- `color()` / `set_color()`
- `shape_opacity()` / `set_shape_opacity()`
- `hardness()` / `set_hardness()`
- `stroke()` / `set_stroke()` / `get_stroke_mut()`
- `angle()` / `set_angle()` / `get_angle_mut()` / `rotate()`
- `is_filled()` / `fill_color()` / `fill()` / `get_fill_mut()` / `get_fill_color_mut()`
- `coords_mut()`
- `set_bounds()` — SvgShape updates x1,y1,x2,y2 like other non-FreePath variants (no SVG regeneration needed since viewBox is normalized)
---
### 2. `hcie-vector/Cargo.toml` — Add dependency
```toml
usvg = { workspace = true }
```
---
### 3. `hcie-vector/src/svg_templates.rs` — NEW: SVG template functions
11 functions, each returns an SVG string with `viewBox="0 0 1 1"`:
```rust
pub fn arrow_svg(kind: &str, thick: bool) -> String;
pub fn star_svg(kind: &str, points: u32, inner_radius: f32) -> String;
pub fn rhombus_svg(kind: &str) -> String;
pub fn cylinder_svg(kind: &str) -> String;
pub fn heart_svg(kind: &str) -> String;
pub fn bubble_svg(kind: &str) -> String;
pub fn gear_svg(kind: &str) -> String;
pub fn cross_svg(kind: &str) -> String;
pub fn crescent_svg(kind: &str) -> String;
pub fn bolt_svg(kind: &str) -> String;
pub fn arrow4_svg(kind: &str) -> String;
```
Each generates SVG path data mathematically equivalent to the current Rust vertex code. For example, `arrow_svg` (non-thick):
```svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1 1">
<path d="M 0,1 L 1,0.5 L 0,0 L 0.2,0.5 Z"/>
</svg>
```
(`arrow4_svg` has 4 arrowheads → returns `<path d="..."/>` with the full 12-point cross+arrowhead polygon.)
Also add a registry function:
```rust
pub fn create_svg(kind: &str, params: &HashMap<String, f32>) -> String {
match kind {
"arrow" => arrow_svg(kind, params.get("thick").copied().unwrap_or(0.0) > 0.5),
"star" => star_svg(kind, params.get("points").copied().unwrap_or(5.0) as u32, params.get("inner_radius").copied().unwrap_or(0.5)),
// ... etc
}
}
```
---
### 4. `hcie-vector/src/svg_render.rs` — NEW: SVG path tessellator
Uses `usvg` to parse SVG string, extract path segments, tessellate curves, scale to bounding box:
```rust
/// Parse SVG string, extract all path polygons, scale to fit (x1,y1)-(x2,y2).
/// Returns one polygon per subpath.
pub fn svg_to_points(svg: &str, x1: f32, y1: f32, x2: f32, y2: f32) -> Result<Vec<Vec<(f32, f32)>>, String>;
```
Implementation:
1. `usvg::Tree::from_data(svg.as_bytes(), &usvg::Options::default())`
2. Traverse `tree.root()` children, collect `usvg::Node::Path` nodes
3. For each path:
- Get `path.data().segments()`
- Accumulate points per subpath (separate Vec per `MoveTo` after `Close`)
- Tessellate `CubicTo` and `QuadTo` via cubic/quad bezier splitting (use `hcie-io/src/svg_import.rs` pattern)
- Apply viewBox → bounding-box scaling: since viewBox is `0 0 1 1`, map point (px,py) → (x1 + px*(x2-x1), y1 + py*(y2-y1))
4. Return `Vec<Vec<(f32,f32)>>`
Edge cases:
- Empty SVG → return empty vec
- No `<path>` elements → return empty vec
- Invalid SVG → return `Err` with usvg error message
---
### 5. `hcie-vector/src/lib.rs` — Update render entry points
Add modules:
```rust
pub mod svg_render;
```
Update `render_shape` match:
```rust
SvgShape { svg, x1, y1, x2, y2, fill, color, fill_color, stroke, opacity, hardness, .. } => {
let points_list = svg_render::svg_to_points(svg, *x1, *y1, *x2, *y2).unwrap_or_default();
let alpha = (color[3] as f32 * opacity).round() as u8;
let px_color = [color[0], color[1], color[2], alpha];
if *fill {
let fill_alpha = (fill_color[3] as f32 * opacity).round() as u8;
let px_fill = [fill_color[0], fill_color[1], fill_color[2], fill_alpha];
for poly in &points_list { fill_polygon(layer, poly, px_fill); }
}
for poly in &points_list {
for i in 0..poly.len() {
let j = (i + 1) % poly.len();
draw_line(layer, poly[i].0, poly[i].1, poly[j].0, poly[j].1, px_color, *stroke, None);
}
}
}
```
Update `get_shape_hardness` — add `SvgShape { hardness, .. }` arm.
Update `rotate_shape` / `set_shape_angle` — add `SvgShape { angle, .. }` arm.
---
### 6. `hcie-vector/examples/vector_test.rs` — Update creation
Replace old variant construction with SvgShape, calling `svg_templates::create_svg()` and wrapping in `VectorShape::SvgShape { ... }`.
---
### 7. `hcie-engine-api/src/lib.rs` — Add shape creation API
```rust
pub fn create_vector_shape(kind: &str, x1: f32, y1: f32, x2: f32, y2: f32, params: &HashMap<String, f32>) -> VectorShape;
```
Add `hcie-vector = { path = "../hcie-vector" }` dependency.
Implementation: call `hcie_vector::svg_templates::create_svg(kind, params)`, return `VectorShape::SvgShape { svg, kind, x1, y1, x2, y2, stroke: 2.0, color: [0,0,0,255], fill_color: [255,255,255,255], fill: true, angle: 0.0, opacity: 1.0, hardness: 1.0 }`.
---
### 8. `hcie-egui-app/…/canvas/mod.rs` — Update shape creation (~lines 21792379)
Each `Tool::VectorXxx` arm:
```
Tool::VectorArrow => {
let params = HashMap::from([("thick".into(), if thick { 1.0 } else { 0.0 })]);
Some(engine.create_vector_shape("arrow", x1, y1, x2, y2, &params))
}
Tool::VectorStar => { /* params: points, inner_radius */ }
Tool::VectorRhombus => { /* no params */ }
// ... etc for all 11 complex shapes
```
---
### 9. `hcie-egui-app/…/canvas/render.rs` — `get_shape_key_points` SvgShape arm
Add:
```rust
VectorShape::SvgShape { x1, y1, x2, y2, .. } => {
let r = normalized_rect(*x1, *y1, *x2, *y2);
vec![(r.0, r.1), (r.2, r.1), (r.2, r.3), (r.0, r.3)]
}
```
---
### 10. `hcie-egui-app/…/app/mod.rs` — Property editing
In the property editing match (~line 4151 area), add `SvgShape { kind, svg, fill, fill_color, .. }` arm. When user changes star points/inner_radius (via kind-specific UI), regenerate SVG via `create_vector_shape` and update the `svg` field.
---
### 11. `hcie-egui-app/…/tools/geometry_panel.rs` — Labels + kind UI
Add `SvgShape { kind, .. }` to the label matching and shape-type dropdown. Show kind-specific controls (e.g., points slider for "star", thick toggle for "arrow").
---
### 12. `hcie-egui-app/…/tools/shape_sync.rs` — Param sync
Handle `SvgShape` in the sync match arms: read/write `kind` field, regenerate SVG on param changes.
---
### 13-17. `hcie-iced-app/…` — Mirror of steps 8-12
Same pattern in the iced GUI crate:
- `app.rs` — shape creation
- `panels/properties.rs` — labels
- `panels/geometry.rs` — labels + editing
- `shape_sync.rs` — param sync
---
### 18. `hcie-io/src/svg_import.rs` — No change needed
Already uses `usvg` correctly. SVG files imported via `import_svg()` already convert to `FreePath` — fine as-is.
---
## Validation
```bash
# Compile all crates
cargo check -p hcie-protocol -p hcie-vector -p hcie-engine-api -p hcie-gui-egui -p hcie-iced-gui
# Run vector engine tests
cargo test -p hcie-vector --lib
cargo test -p hcie-vector --examples
# Run all tests
cargo test -p hcie-vector -p hcie-protocol -p hcie-engine-api
```
## Risk Mitigation
| Risk | Mitigation |
|------|------------|
| SVG path differs from old vertex code visually | Compare screenshots before/after for each shape kind |
| Old documents fail to load | Old variants still deserialize (kept with `#[serde(skip_serializing)]`), stay as old enum variants in memory |
| Performance regression from usvg parsing at render time | usvg parse is fast (<0.1ms for our tiny SVGs). Cache can be added later if needed |
| Bezier tessellation quality differs | Use same tessellation density as current code (8 steps per curve quad, matching existing) |
@@ -0,0 +1,222 @@
# ICED GUI Migration Plan — EGUI Full Parity
## Hedef
EGUI (`hcie-egui-app`) üzerindeki tüm özellik, panel, menü, dialog ve fonksiyonların ICED (`hcie-iced-app`) tarafına taşınarak %100 görsel ve işlevsel paritenin sağlanması.
## Kararlar
| Karar | Seçim |
|-------|-------|
| Panel crate yapısı | Gömülü kal (mevcut `hcie-iced-gui/src/panels/` içinde) |
| Plugin sistemi | Kapsama al — EGUI'deki PluginHost ICED'e taşınacak |
| SVG Editor | Kapsama al — yeni panel olarak eklenecek |
| Menü placeholder'ları | Tümü aktifleştirilecek (full parity) |
---
## Faz 1: Kritik Eksik Yapılar (Temel)
### 1.1 Plugin Sistemi (`hcie-iced-gui/src/plugins/`)
- [ ] **Kaynak:** `hcie-egui-app/crates/hcie-gui-egui/src/plugins/`
- [ ] **Hedef:** `hcie-iced-app/crates/hcie-iced-gui/src/plugins/`
- [ ] **Dosyalar:**
- `mod.rs` — PluginHost struct, `dispatch_app_event()`, plugin lifecycle
- `registry.rs` — PluginRegistry, kayıtlı plugin yönetimi
- `integration.rs` — EGUI plugin UI'dan EventBus olay dağıtımı
- `built_in/` — Built-in plugin örnekleri (debug_logger)
- [ ] **Bağımlılık:** PluginHost `HcieApp` yerine `IcedDocument`+`ToolState` kullanacak şekilde adapte edilmeli
- [ ] **Integration:** `app.rs` update() içinde `message` döngüsüne plugin dispatch eklenmeli
### 1.2 SVG Editor Panel
- [ ] **Kaynak:** `hcie-egui-app/crates/hcie-gui-egui/src/app/panels/svg_editor_panel.rs`
- [ ] **Hedef:** `hcie-iced-app/crates/hcie-iced-gui/src/panels/svg_editor.rs`
- [ ] **Durum:** EGUI'de `SvgEditorState` struct + `show_svg_editor()` fonksiyonu. ICED'e `SvgEditorState` + view/update olarak taşınacak
- [ ] **App state:** `HcieIcedApp` içine `svg_editor_state: Option<SvgEditorState>` eklenecek
- [ ] **Panel:** view fonksiyonu normal panel gibi `panels/mod.rs` üzerinden erişilebilir
### 1.3 Save Error Dialog
- [ ] **Kaynak:** EGUI `SaveErrorState` + error dialog render
- [ ] **Hedef:** ICED `ActiveDialog::SaveError` varyantı + dialog view
- [ ] **Özellik:** Kaydetme hatasında alternatif yol önerisi gösteren modal
### 1.4 Canvas Expand Dialog
- [ ] **Kaynak:** EGUI `show_expand_dialog` + paste overflow handling
- [ ] **Hedef:** ICED `ActiveDialog::ExpandCanvas` varyantı
- [ ] **Özellik:** Clipboard paste sırasında tuval boyutunu aşan içerik için genişletme onayı
---
## Faz 2: Menü Eksikleri (Full Parity)
### 2.1 File Menüsü Eksikleri
| EGUI Öğesi | ICED Task |
|---|---|
| Import… | `MenuCommand::ImportFile``rfd::FileDialog` ile dosya seç, engine'e yükle |
| Import SVG… | `MenuCommand::ImportSvg` — SVG dosyası aç, engine.import_svg() çağır |
| Import Brushes… | `MenuCommand::ImportBrushes` — ABR/KPP parser, brush_presets'e ekle |
| Export… | `MenuCommand::Export` — Save As ile aynı akış, farklı etiket |
### 2.2 Edit Menüsü Eksikleri
| EGUI Öğesi | ICED Task |
|---|---|
| Paste Special (Ctrl+Shift+V) | `MenuCommand::PasteSpecial` — Paste internal clipboard (transform olarak) |
| Fill… (Shift+F5) | `MenuCommand::Fill` — Primary color ile seçim/layer doldurma |
| Stroke… | `MenuCommand::Stroke` — Placeholder dialog (EGUI'de de placeholder) |
| Free Transform (Ctrl+T) | `MenuCommand::FreeTransform``TransformStart` event'i, selection transform başlatma |
| Preferences (Ctrl+K) | `MenuCommand::Preferences``ActiveDialog::Settings` dialog'u |
### 2.3 Tools Menüsü
- [ ] EGUI `tools` menüsündeki tüm tool'lar için `MenuCommand::SelectTool(Tool)` eklenecek
- [ ] **Tool listesi:** Eyedropper, Pen, Brush, Eraser, Spray, FloodFill, MagicWand, Select, Lasso, PolygonSelect, Move, Crop, Text, Gradient
- [ ] **Retouch alt menüsü:** `MenuCommand::SelectTool(Tool::RedEyeRemoval)`, `SpotRemoval`, `SmartPatch`
- [ ] **AI alt menüsü:** `MenuCommand::SelectTool(Tool::AiObjectRemoval)`, `SmartSelect`, `VisionSelect`
### 2.4 Image Menüsü Eksikleri
| EGUI Öğesi | ICED Task |
|---|---|
| Image Rotation > 90° CW | `MenuCommand::Rotate90CW` → engine.rotate_canvas(90) |
| Image Rotation > 90° CCW | `MenuCommand::Rotate90CCW` → engine.rotate_canvas(-90) |
| Image Rotation > 180° | `MenuCommand::Rotate180` → engine.rotate_canvas(180) |
| Flip Horizontal | `MenuCommand::FlipHorizontal` → engine.flip_horizontal() |
| Flip Vertical | `MenuCommand::FlipVertical` → engine.flip_vertical() |
| Crop | `MenuCommand::ImageCrop` → selection_rect varsa engine.crop() |
| Invert / Negative | `MenuCommand::InvertNegative` → apply_filter("invert") |
### 2.5 Filter Menüsü Eksikleri
- [ ] **Distort:** `MenuCommand::FilterDistort(Pinch)`, `FilterDistort(Twirl)` — parametre dialog'u
- [ ] **Noise:** `MenuCommand::FilterNoise(AddNoise)`, `FilterNoise(NoisePattern)`
- [ ] **Pixelate:** `MenuCommand::FilterPixelate(Crystallize)`, `FilterPixelate(Mosaic)`
- [ ] **Render:** `MenuCommand::FilterRender(Clouds)` — procedural texture
- [ ] **Restore:** `MenuCommand::FilterRestore(Dehaze)`
- [ ] **Stylize:** `FilterStylize(Emboss)`, `FilterStylize(FindEdges)`, `FilterStylize(OilPaint)`
- [ ] **Procedural Textures (14 tür):** `FilterTexture(Grass)`, `FilterTexture(Sand)`, `FilterTexture(Dirt)`, `FilterTexture(Water)`, `FilterTexture(Rain)`, `FilterTexture(Stone)`, `FilterTexture(Bricks)`, `FilterTexture(Oak)`, `FilterTexture(Pine)`, `FilterTexture(DarkWood)`, `FilterTexture(Steel)`, `FilterTexture(Gold)`, `FilterTexture(Copper)`, `FilterTexture(Linen)`, `FilterTexture(Glass)`, `FilterTexture(SkyReplacement)`
- [ ] **Kaynak:** EGUI `shell/menus.rs:ui_filter_menu()` fonksiyonundaki tüm filtre çağrıları
### 2.6 Select Menüsü Eksikleri
- [ ] **Erode Border:** `MenuCommand::ErodeBorder` → engine.selection_erode()
- [ ] **Fade Border:** `MenuCommand::FadeBorder` → engine.selection_fade()
### 2.7 View Menüsü Eksikleri
- [ ] **Reset Pan:** `MenuCommand::ResetPan``doc.pan_offset = Vector::ZERO`
### 2.8 Window Menüsü Eksikleri
- [ ] **Open Documents list:** Aktif doküman listesi gösterimi, seçili olana focus
- [ ] **Reset Layout:** Varsayılan dock düzenine dön
### 2.9 Layer Menüsü Eksikleri
- [ ] **Align:** `MenuCommand::AlignLayer(AlignAxis)` — tüm axis'ler için engine.align_active_layer()
### 2.10 Help Menüsü
- [ ] **About:** `ActiveDialog::About``dialogs/about.rs` mevcut, menü bağlantısı eklenecek
---
## Faz 3: Panel İçerik İyileştirmeleri
### 3.1 AI Assistant — ComfyUI Sekmesi
- [ ] EGUI'de AI paneli 2 sekme: ComfyUI + AI Chat
- [ ] ICED'de sadece AI Chat var
- [ ] **Task:** ComfyUI pipeline görüntüleyici sekmesi eklenecek
### 3.2 Title Bar Özellikleri
- [ ] **Search box:** EGUI title bar'da `title_search` alanı + TextEdit
- [ ] **Panel list popup:** EGUI'de hamburger menü ikonu ile panel list toggle
- [ ] **Window controls:** EGUI kendi minimize/maximize/close çiziyor. ICED'de `decorations(false)` ile aynı pattern
### 3.3 Thumbnails Panel
- [ ] `panels/thumbnails.rs` mevcut — EGUI layers panel içinde thumbnail gösterimi ile uyum kontrolü
- [ ] Layer thumbnail boyutları, badge'ler, efekt ikonları EGUI ile eşleştirilecek
---
## Faz 4: Dialog İyileştirmeleri
### 4.1 Filter Dialogları
- [ ] EGUI'de her filter kategorisi için ayrı dialog flag'leri: `show_blur_dialog`, `show_sharpen_dialog`, `show_distort_dialog`, `show_stylize_dialog`, `show_color_light_dialog`, `show_restore_dialog`, `show_noise_pattern_dialog`, `show_procedural_textures_dialog`
- [ ] ICED'de `ActiveDialog::FilterParams(FilterType)` ile tek dialog — yeterli mi kontrol et
- [ ] EGUI `filter_dialogs.rs` ve `modern_dialogs.rs`'deki parametre UI'ları incelenmeli
### 4.2 Selection Op Dialog
- [ ] EGUI `SelectionOpDialogState` ile Grow/Shrink/Feather/Erode/Fade için değer girişi
- [ ] ICED `ActiveDialog::SelectionOp` mevcut ama Erode/Fade eklenmeli
---
## Faz 5: Viewer Mode Parity
### 5.1 Viewer Mode (FastStone-like)
- [ ] EGUI viewer (`shell/viewer.rs`): `ViewerState`, thumbnail grid, directory tree, fullscreen
- [ ] ICED viewer (`viewer/`): Mevcut, EGUI ile karşılaştırılmalı
- [ ] **Eksik olabilir:** Önceki/Sonraki navigasyon, fullscreen toggle, thumbnail cache
---
## Faz 6: Görsel Tutarlılık
### 6.1 gui_layout.json Sistemi
- [ ] EGUI'de `shell/gui_layout.rs` ile tüm panel boyut/padding/renk override'ları
- [ ] ICED'de benzer bir sistem yok
- [ ] **Task:** ICED için basitleştirilmiş layout override mekanizması
### 6.2 Tema Paletleri
- [ ] EGUI'de 5 tema: Photoshop, PhotoshopLight, Amoled, ProDark, ProLight
- [ ] ICED'de `ThemePreset` aynı seti kapsıyor mu kontrol et
- [ ] `iced-panel-adapter` içindeki renk token'ları EGUI `ThemeColors` ile eşleştirilmeli
---
## Faz 7: Kod Temizliği ve Doğrulama
### 7.1 Dead Code Temizliği
- [ ] EGUI `_dead_code_candidates_/` klasöründeki dosyalar incelenmeli
- [ ] `panel_layout.rs`, `dock_controller.rs`, `dock_engine.rs`, `history.rs`
### 7.2 Test ve Doğrulama
- [ ] `cargo test -p hcie-iced-gui` — mevcut testler
- [ ] Görsel screenshot karşılaştırması
- [ ] Her Faz sonunda `cargo check -p hcie-iced-gui` ile derleme kontrolü
---
## Faz Sıralaması ve Bağımlılıklar
```
Faz 1 (Kritik Yapılar) ──→ Faz 2 (Menüler) ──→ Faz 3 (Paneller) ──→ Faz 4 (Dialoglar) ──→ Faz 5 (Viewer) ──→ Faz 6 (Görsel)
│ │
└── Plugin sistemi └── Tüm menü komutları aktif
└── SVG Editor └── Import/Export
└── Save Error Dialog
└── Expand Canvas Dialog
```
Her faz kendi içinde bağımsız çalışabilir. Faz 1 ön koşuldur çünkü yeni state alanları ve dialog varyantları sonraki fazlarda kullanılır.
---
## Riskler
1. **Plugin sistemi:** EGUI `EventBus` tabanlı, ICED Message tabanlı. Uyumlama sırasında event→message dönüşümü dikkatli yapılmalı
2. **SVG Editor:** EGUI'de `hcie_engine_api::SvgEditable` kullanılıyor. Aynı API ICED'de de mevcut
3. **Procedural Textures (14 adet):** Her biri ayrı filter_id + parametre seti. EGUI'deki parametre isimleri birebir korunmalı (örn. `"texture_grass"`, `"scale": 1.0, "roughness": 0.5`)
4. **ComfyUI sekmesi:** EGUI'de AI paneli içinde iki sekme var. ICED'de AI panel widget'ının tab desteği eklenmeli
---
## Implementation Notları
- **Yeni dosyalar eklenirken mevcut değiştirilmez** kuralı: Menü komutları `panels/menus.rs`'e, dialoglar `dialogs/`'a, yeni paneller `panels/`'e ek dosya olarak
- `app.rs` `update()` fonksiyonuna yeni Message varyantları eklenecek
- `app.rs` `view()` fonksiyonuna yeni panel/dialog view'ları bağlanacak
- Engine API çağrıları EGUI ile birebir aynı (`hcie_engine_api::Engine`)
- Görsel stiller `iced-panel-adapter::theme::ThemeColors` üzerinden
@@ -0,0 +1,146 @@
# ICED GUI Visual Parity with egui
## Context
The current Iced GUI has the same panels as the egui version but several visual/behavioral gaps remain. The goal is to bring the Iced GUI to egui-level polish. This plan is based on a side-by-side pixel-level comparison of `_images/egui.png` (target) vs the current Iced GUI.
---
## Gap Analysis (egui vs Iced)
| # | Area | egui | Iced | Gap |
|---|------|------|------|-----|
| 1 | **Menu bar** | File, Edit, Tools, Image, Layer, Filter, Select, View, Window, Help (10 items) | File, Edit, Image, Select, View, Filter, Plugin, Window, More, AI, Help (11 items) | Iced has extra Plugin/AI/More menus cluttering the bar; egui has Tools/Layer menus instead |
| 2 | **Toolbar** | Compact: Brush dropdown + Size + Opacity | Long: Brush Size + Opacity + Hardness + Tolerance + Feather + Blur Radius + brush tip icons | Iced toolbar is too wide/cluttered; egui is minimal |
| 3 | **Brushes grid** | 3-column grid with thumbnail previews | 2-column grid (constrained by narrow dock width) | Iced grid needs more horizontal space |
| 4 | **Filter list** | Categorized + collapsible (Blur ▸, Sharpen ▸, Pixelate ▸, Distort ▸, Stylize ▸, Color & Light ▸) | Flat list with no categories | Iced filters need categories + collapsible groups |
| 5 | **Layer panel** | Clean: thumbnail + name + eye + lock; opacity/blending inline; +Lay/+Vec/+Grp/Flatten toolbar | Shows "opacity: unavailable in hcie-engine-api fx" debug text; missing layer action buttons | Ugly debug text visible; missing quick-action buttons |
| 6 | **Color Palette** | Prominent: large color wheel, FG/BG swatches, Hex input, W/H/G tabs | Same panels exist but ColorPicker is squashed at bottom of right column | ColorPicker needs more vertical space |
| 7 | **Properties panel** | Shows: layer name, Opacity, Visible checkbox, Blend Mode dropdown, Type, Tool Settings (Size/Opacity/Hardness/Flow/Spacing/Color Variant) | Exists but layout differs | Should match egui's grouped layout |
| 8 | **Right column layout** | ColorPalette (top-right) + LayerStyles/History tabs (mid-right) + Properties (bottom-right) | Filters + Layers + ColorPicker + Properties all stacked | Right column overcrowded; Filters shouldn't be on right |
| 9 | **Background** | Consistent dark theme `#2b2b2b` with `#353535` panel bg | Lighter warm theme with inconsistent panel colors | Theme needs refinement for darker, more consistent panels |
| 10 | **Status bar** | Tool name + Mouse coords + Canvas size + Zoom% + Zoom slider | Similar but slightly different styling | Minor; acceptable |
---
## Tasks
### 1. Fix layer panel debug text and add action buttons
**Problem:** Layer panel shows "opacity: unavailable in hcie-engine-api fx" which is debug text leaking into the UI. Also missing the `+Lay`, `+Vec`, `+Grp`, `Flatten` quick-action buttons that egui has.
**Files:**
- `hcie-iced-app/crates/hcie-iced-gui/src/panels/layers.rs`
**Changes:**
- Remove or hide any debug/error text about "unavailable in hcie-engine-api fx"
- Add a row of action buttons at the bottom of the layer panel: `+Layer`, `+Group`, `Flatten`, matching egui's `[+Lay] [+Vec] [+Grp] [Flatten]` bar
- Wire buttons to existing messages (`LayerAdd`, `LayerFlatten`, etc.)
---
### 2. Refactor Filters panel into categorized collapsible groups
**Problem:** egui shows filters organized into expandable categories (Blur ▸, Sharpen ▸, Pixelate ▸, Distort ▸, Stylize ▸, Color & Light ▸). Iced shows a flat unordered list.
**Files:**
- `hcie-iced-app/crates/hcie-iced-gui/src/panels/filters.rs`
**Changes:**
- Define filter categories with labels: "Blur", "Sharpen", "Pixelate", "Distort", "Stylize", "Color & Light"
- Each category is a collapsible section (▶/▼ toggle) containing its filter items
- Add a `FilterCategoryExpanded` state field in `HcieIcedApp` to track which categories are open (default: all open)
- Add a `Message::FilterCategoryToggle(String)` message
- When no filter is selected, show "Filter Selection" header as in egui
- Keep existing filter selection + parameter panel behavior
---
### 3. Simplify the merged toolbar to match egui
**Problem:** The Iced toolbar shows too many inline sliders (Size, Opacity, Hardness, Tolerance, Feather, Blur Radius, brush tip icons). egui shows only: Brush dropdown + Size + Opacity.
**Files:**
- `hcie-iced-app/crates/hcie-iced-gui/src/panels/toolbar.rs`
**Changes:**
- Reduce toolbar to: [Tool Icon] [Brush Style Dropdown] [Size: ____] [Opacity: ____]
- Move Hardness, Tolerance, Feather, Blur Radius to the Properties/Tool Settings panel
- Keep brush tip icon row only when a brush tool is active
- Make the toolbar narrower and less cluttered
---
### 4. Add Layer Styles panel tab alongside History
**Problem:** egui has a tabbed right panel with "Layer Styles" / "History" / "AI Assistant" tabs. Iced has no Layer Styles panel.
**Files:**
- `hcie-iced-app/crates/hcie-iced-gui/src/panels/layer_styles.rs` (new)
- `hcie-iced-app/crates/hcie-iced-gui/src/dock/state.rs` (add `PaneType::LayerStyles`)
- `hcie-iced-app/crates/hcie-iced-gui/src/dock/view.rs` (wire panel)
**Changes:**
- Create a minimal Layer Styles panel that lists common effects: Drop Shadow, Inner Shadow, Outer Glow, Inner Glow, Bevel & Emboss, Satin, Color Overlay, Gradient Overlay, Pattern Overlay, Stroke
- Each effect has a checkbox to enable and an expandable settings section
- Wire to existing `LayerStyle*` messages
- This is a display-only first pass; detailed per-effect parameter editing can follow
---
### 5. Widen the right column for Color Palette prominence
**Problem:** Color Palette is squeezed at the bottom of the right column in Iced. In egui, it's prominent with a large color wheel occupying the top-right area.
**Files:**
- `hcie-iced-app/crates/hcie-iced-gui/src/dock/state.rs` (adjust default layout ratios)
- `hcie-iced-app/crates/hcie-iced-gui/src/dock/sizing.rs` (adjust minimum sizes)
**Changes:**
- Swap the default right-column layout: put ColorPicker on top (with more space) and Layers below
- Adjust the right_col1 ratio from 0.5 to ~0.6 (more space for ColorPicker)
- Ensure ColorPicker minimum height is at least 400px
- Remove Properties/History from the right column entirely (move to auto-hide or tabbed)
---
### 6. Darken theme panel backgrounds for consistency
**Problem:** Iced panels use slightly lighter/warmer backgrounds than egui's `#353535`. The overall look feels less polished.
**Files:**
- `hcie-iced-app/crates/iced-panel-adapter/src/theme.rs`
**Changes:**
- Darken `bg_panel` in all themes by ~5% to match egui's darker panel backgrounds
- Ensure `border_low` is subtle (~0.2 opacity) for clean panel separation
- Verify `bg_active` provides enough contrast for selected items
- Do NOT change accent colors; only adjust background/border tones
---
### 7. Add document tab bar with proper styling
**Problem:** egui shows a document tab bar ("Untitled") above the canvas with a clear active tab style. Iced has a tab bar but it needs polish.
**Files:**
- `hcie-iced-app/crates/hcie-iced-gui/src/dock/view.rs` (document tab bar)
**Changes:**
- Style the active tab with a bottom accent border (matching egui)
- Add a `+` button for new document at the right end of the tab bar
- Ensure the tab bar uses `bg_panel` background, not `bg_active`
---
## Validation Plan
1. `cargo check -p hcie-iced-gui`
2. `cargo test -p hcie-iced-gui`
3. Screenshot comparison after changes:
- F12 full viewport screenshot
- Compare right-column layout: ColorPicker should be prominent on top
- Filters panel should show categorized collapsible groups
- Layer panel should have no debug text, should show action buttons
- Toolbar should be simplified (3-4 items, not 7+)
- Theme colors should be consistently darker
@@ -0,0 +1,195 @@
# ICED GUI — Advanced SVG Editor and UI/Color Fixes
## Scope
Implement the requested ICED improvements:
1. Replace the SVG coordinate-list dialog with an interactive visual node editor.
2. Make filter-history behavior explicit and regression-tested.
3. Widen filter sliders.
4. Open Brushes when Brush is selected.
5. Open Filters when a filter is selected from the menu.
6. Add secondary-color selection by right-click in the color picker.
The following requests are already implemented and require verification rather than duplicate code:
- Recent colors persist in `~/.config/hcie-iced/colors.json`.
- Foreground/background colors persist in the same file.
- Recent color swatches already use `.on_right_press(Message::BgColorChanged(c))`.
- Committed filters already enter history through `Engine::apply_filter()` and `push_draw_snapshot("Filter: <id>")`; only live preview uses `apply_filter_preview()` and correctly avoids history entries.
## Decisions
| Area | Decision |
|---|---|
| SVG geometry | Support polygon/line paths represented by existing `SvgEditable`; bezier/curve SVGs remain unsupported because the locked engine API rejects them. |
| SVG live editing | Update the visible canvas preview and engine SVG on every node drag; create one logical edit session. Cancel restores the original SVG; Save keeps the current SVG. Do not create per-mouse-move history entries. |
| SVG editor interaction | Add node drag, node hit testing, edge-midpoint node insertion, node deletion, polygon selection, numeric X/Y editing, zoom/pan, fit-to-view, grid/background, selection highlighting, keyboard Delete/Backspace, and Save/Cancel. |
| SVG rendering | Use an `iced::widget::canvas::Canvas`/`canvas::Program`, following `canvas/viewport.rs` event and coordinate-mapping patterns. Keep the existing modal overlay and `Message`-driven app state. |
| SVG engine history | Out of scope for GUI-only changes because `set_vector_shape_svg()` does not expose a vector-history snapshot API. Record this as a residual limitation; do not modify locked engine crates. |
| Filter history | No behavior rewrite. Add regression coverage or an auditable helper around the existing `apply_filter()` path to prove committed filters are undoable and previews are not committed. |
| Filter slider width | Make filter parameter sliders fill the available Filters pane width and ensure the Filters pane has a minimum width that leaves at least approximately 150px for the track. Use the existing responsive pane sizing rather than a hard-coded global width. |
| Brush auto-open | On `Message::ToolSelected(Tool::Brush)`, reopen the Brushes pane only if it is closed. Never toggle an already-open pane closed. |
| Filter auto-open | In the central `Message::FilterSelect` handler, reopen the Filters pane only if it is closed. This covers menu commands and other filter entry points consistently. |
| Right-click secondary color | Add right-click handling to the HSL/color-picker canvas. Keep the main canvas right-click context menu unchanged. Recent swatch right-click behavior remains as-is. |
## Current Findings
- `panels/svg_editor.rs` currently displays polygon buttons and a coordinate list only; it has no visual canvas, no drag state, and no numeric editing.
- EGUIs reference editor has `svg_to_screen`, `screen_to_svg`, polygon rendering, node circles, midpoint hit testing, node dragging, add/remove controls, and a resizable canvas.
- `SvgEditable` exposes `view_box`, `polygons`, `add_node`, `remove_node`, `move_node`, `from_svg`, and `to_svg`.
- ICED already has interactive Canvas examples in `canvas/viewport.rs` and color picker programs in `color_picker.rs`.
- `set_vector_shape_svg()` marks the vector layer/composite dirty and modified but does not push a vector history snapshot.
- `Engine::apply_filter()` already snapshots the pre-filter pixels with description `Filter: <id>`; `apply_filter_preview()` intentionally does not.
- `plain_slider()` uses `Length::Fill` internally, but filter content/pane sizing can leave its parent too narrow. The fix should make the filter slider row explicitly fill the panel and increase Filters sizing minimum if needed.
- `Message::ToolSelected` currently changes the active tool but does not reopen Brushes.
- `Message::FilterSelect` currently selects/preview-starts a filter but does not reopen Filters.
- `recent_colors`/`fg_color`/`bg_color` load from and save to `colors.json`; recent swatches already support right-click secondary selection.
## Affected Files
### Advanced SVG editor
- `hcie-iced-app/crates/hcie-iced-gui/src/panels/svg_editor.rs`
- Replace list-only layout with a visual editor canvas.
- Extend editor state with drag state, original SVG/session state, zoom, pan, hover/selection state, and any fit/grid state needed by the canvas program.
- Add coordinate conversion using `SvgEditable.view_box`, preserving aspect ratio and centering the viewBox.
- Draw polygon fills/outlines, node handles, edge midpoint handles, grid/background, and selected-node styling.
- Handle primary click/drag for node selection and movement, midpoint click for insertion, and wheel/secondary gestures for zoom/pan without interfering with modal buttons.
- Keep controls for polygon selection, Add Node, Remove Node, X/Y numeric editing, Fit, Zoom +/- or reset, Save, and Cancel.
- `hcie-iced-app/crates/hcie-iced-gui/src/app.rs`
- Add SVG canvas messages for pointer press/move/release, zoom/pan/fit, numeric X/Y changes, and any explicit node action needed by the new Program.
- Update existing SVG editor handlers to mutate `SvgEditable` and immediately call `set_vector_shape_svg()` for live engine preview.
- Capture the original SVG when opening; restore it on Cancel.
- Keep Save/Cancel dialog lifecycle intact and ensure editor drag sessions do not create per-event history entries.
- `hcie-iced-app/crates/hcie-iced-gui/src/dock/view.rs` or editor call site only if required by the new state/signature.
### Filter and panel behavior
- `hcie-iced-app/crates/hcie-iced-gui/src/app.rs`
- In `Message::ToolSelected`, call a new local helper or `dock.reopen_pane(PaneType::Brushes)` only when `!dock.is_pane_open(PaneType::Brushes)` and the selected tool is `Tool::Brush`.
- In `Message::FilterSelect`, ensure `PaneType::Filters` is open before starting the preview.
- Preserve the existing filter preview/commit lifecycle.
- Add focused tests or testable helper coverage proving `apply_filter()` creates a history entry and `apply_filter_preview()` does not create a committed entry, if the current test architecture permits without engine changes.
- Keep existing persistence code; add tests only if needed to prove colors/recent colors survive serialization/deserialization.
- `hcie-iced-app/crates/hcie-iced-gui/src/panels/filter_params.rs`
- Make `float_slider()` and `int_slider()` return a control wrapped with `Length::Fill` at the row/container level so the track consumes the available panel width.
- Avoid changing numeric behavior, labels, ranges, or parameter messages.
- `hcie-iced-app/crates/hcie-iced-gui/src/dock/sizing.rs`
- Increase the Filters pane minimum/preferred width enough for a roughly 150px slider after label/value columns, while preserving responsive resizing and existing other-pane policies.
### Color picker
- `hcie-iced-app/crates/hcie-iced-gui/src/color_picker.rs`
- Extend the interactive color wheel/picker Canvas program so right-click emits `Message::BgColorChanged` while left-click/drag continues emitting foreground changes.
- Keep current color calculations and alpha behavior.
- Ensure the pickers displayed source color remains stable and right-click does not alter foreground.
- Preserve existing recent-swatch `.on_right_press(Message::BgColorChanged(c))` behavior.
- `hcie-iced-app/crates/hcie-iced-gui/src/app.rs`
- Confirm `BgColorChanged` updates secondary color, shape synchronization, and persistence state as appropriate.
- Do not change main canvas right-click context-menu behavior.
## Ordered Implementation Tasks
### 1. SVG editor state and messages
1. Extend `SvgEditorState` with:
- `original_svg: String` for Cancel restoration.
- `drag_node: Option<(usize, usize)>`.
- `zoom: f32` and `pan: Vector` or equivalent.
- `hovered_node`/`hovered_midpoint` and fit/grid state if needed.
2. Add `Message` variants for:
- canvas pointer pressed/moved/released;
- node X/Y field changes;
- zoom/pan/fit/reset;
- retain existing polygon/node/add/remove/save/cancel messages where reusable.
3. On SVG editor open, store the original SVG alongside the parsed editable state.
### 2. SVG coordinate and rendering model
4. Implement `svg_to_screen()` and `screen_to_svg()` using the viewBox, canvas bounds, margin, zoom, and pan. Preserve aspect ratio so nodes are not distorted.
5. Implement a Canvas Program that:
- draws the viewBox background/grid;
- draws each polygon/path fill and outline;
- draws node handles with selected/hovered styles;
- draws smaller edge midpoint handles;
- uses `Cursor::position_in(bounds)` for hit testing;
- maps drag positions back to SVG coordinates.
6. Implement hit testing for nearest node and edge midpoint with screen-space thresholds that remain usable at different zoom levels.
### 3. SVG live editing behavior
7. On node press, select the polygon/node and begin drag.
8. On node drag, call `editable.move_node(...)`, update the numeric fields, and immediately emit/apply the current `to_svg()` to the active vector shape for live canvas preview.
9. On midpoint click, call `editable.add_node(...)` and update selection/live preview.
10. On Delete/Backspace or Remove button, remove the selected node when valid and update/live-preview.
11. Numeric X/Y edits update the selected node and live-preview.
12. Save keeps the current SVG, clears the original/session state, closes the editor, and requests composite refresh.
13. Cancel calls `set_vector_shape_svg()` with `original_svg`, refreshes the composite, clears session state, and closes without retaining edits.
14. Handle empty polygons, invalid selection indices, unsupported bezier SVGs, and zero-sized viewBoxes without panics.
### 4. Filter/panel behavior
15. Add a small `ensure_pane_open(PaneType)` helper if repeated logic is useful; otherwise use `is_pane_open` + `reopen_pane` directly.
16. Call it for Brush selection and Filter selection as specified above.
17. Widen filter slider rows and increase Filters pane minimum sizing. Verify at narrow and wide pane widths.
18. Verify committed filter history by applying a filter, checking the history description, undoing, and redoing. Do not add history entries during preview slider movement.
### 5. Color behavior
19. Add right-click output support to the color-wheel/picker Canvas Program.
20. Verify left-click changes foreground, right-click changes background, recent swatch right-click changes background, and both colors/recent colors persist across restart.
## Risks and Edge Cases
1. **SVG curve limitation:** `SvgEditable::from_svg()` rejects QuadTo/CubicTo. Show/retain a clear parse failure path; do not silently flatten curves.
2. **Live SVG update cost:** Updating the full SVG string on every drag is acceptable for the small vector shape payload, but avoid cloning unrelated document pixels.
3. **Cancel correctness:** Capture the original SVG before the first live update. Cancel must restore it exactly, including after multiple node additions/removals.
4. **SVG history limitation:** The public GUI-facing API has no vector snapshot method for `set_vector_shape_svg()`. Do not modify locked engine crates in this scope; document that SVG edits are not currently represented as a dedicated undo entry.
5. **Filter history semantics:** Do not push history from slider-preview events. Only the final `FilterApply`/direct `apply_filter` call should be undoable.
6. **Pane reopening:** Use `reopen_pane` only when closed; calling `toggle_pane` would incorrectly close an already visible pane.
7. **Color picker right-click:** Keep canvas context-menu right-click untouched; limit the new behavior to color picker surfaces.
8. **Color persistence:** Avoid resetting `recent_colors`, `fg_color`, or `bg_color` during app initialization after `load_colors()`.
## Validation
1. `cargo check -p hcie-iced-gui`.
2. `cargo test -p hcie-iced-gui` and existing menu tests.
3. SVG manual flow:
- Open a supported polygon SVG.
- Select a node and drag it; verify the SVG and main canvas update during the drag.
- Insert a node through an edge midpoint and move it.
- Edit X/Y numerically.
- Delete a node and verify minimum-node safeguards.
- Cancel after several edits and verify exact original restoration.
- Reopen, edit, Save, close, and verify the updated SVG persists.
- Try a bezier SVG and verify a controlled unsupported-geometry failure.
4. Filter history flow:
- Select a filter and change sliders; verify preview movement does not create multiple history records.
- Apply the filter; verify one `Filter: <id>` history entry.
- Undo and redo; verify pixels restore/reapply.
5. Panel flow:
- Close Brushes, select Brush via sidebar/shortcut/menu, verify Brushes opens.
- Close Filters, choose a filter from the Filter menu, verify Filters opens and the selected filter is shown.
6. Slider flow:
- Test Filters pane at minimum and expanded widths; verify slider track is at least approximately 150px or consumes the available panel width.
7. Color flow:
- Left-click picker changes foreground only.
- Right-click picker changes background only.
- Right-click recent swatch changes background only.
- Restart app and verify foreground, background, and recent colors persist.
8. Capture a focused Filters panel and SVG editor screenshot after the UI changes for visual verification.
## Explicitly Unchanged / Already Satisfied
- No engine crate modifications.
- No replacement of the main canvas context menu.
- No per-mouse-move SVG history entries.
- No duplicate recent-color persistence implementation.
- No duplicate filter-history implementation; existing engine snapshot behavior is retained and verified.
- Bezier/curve SVG editing remains a separate engine/API scope.
@@ -0,0 +1,358 @@
# SVG Shape File Loading + SVG Editor
## Goal
- SVG şekilleri diskten `.svg` dosyaları olarak yüklenip kullanılabilsin
- Kullanıcı kendi SVG'lerini shapes klasörüne kopyalayıp toolbox'ta görebilsin
- Built-in şekiller (`svg_templates.rs`) diskte yoksa yedek olarak kullanılsın, varsa diskteki dosyalar öncelikli
- SVG şekilleri buton ikonları olarak da kullanılsın (dinamik yükleme)
- SVG Editor (node tabanlı path düzenleyici) planı
## Design Decisions
| Decision | Choice |
|----------|--------|
| Shapes directory | App data dizini (`~/.local/share/hcie/shapes/`) — ilk çalıştırmada built-in SVGs buraya kopyalanır |
| Custom shape tool | `Tool::CustomShape(u32)``u32` index, `Copy` korunur. Serialization ile uyumlu |
| Toolbox UX | Mevcut slot sistemine ek olarak dinamik "Custom" slot. Tıklayınca popup'ta diskteki tüm SVG'ler listelenir |
| Icon rendering | `usvg` parse + `resvg` render → küçük RGBA pixmap → `egui::ColorImage` / `iced::image::Handle` |
| SVG Editor scope (V1) | Node editor: path noktalarını sürükle, yeni nokta ekle/sil, canlı preview, SVG'yi kaydet |
## Affected Crates
| # | Crate | Files |
|---|-------|-------|
| 1 | `hcie-protocol` (locked) | `src/tools.rs``Tool::CustomShape(u32)` variant |
| 2 | `hcie-vector` (locked) | `src/svg_templates.rs``all_templates()` fn |
| 3 | `hcie-engine-api` (locked) | `src/shape_catalog.rs` NEW, `src/lib.rs` — init + re-export |
| 4 | `hcie-gui-egui` (open) | `tools/toolbox.rs`, `canvas/mod.rs`, `app/mod.rs` |
| 5 | `hcie-iced-gui` (open) | `sidebar/mod.rs`, `app.rs`, `canvas/mod.rs` |
---
## Phase 1 — SVG File Loading
### Step 1 — `hcie-protocol/src/tools.rs` — Add `Tool::CustomShape(u32)`
```rust
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, Default)]
pub enum Tool {
#[default]
Pen,
// ... existing variants ...
CustomShape(u32),
}
```
Update:
- `label()` — CustomShape(index) => `"Custom Shape"`
- `icon()` — CustomShape(index) => `"○"` (placeholder, real icon loaded dynamically)
- `is_shape_tool()` — return true
- `allowed_layer_type()` — Vector
- `is_vector()` — return true
- `has_separator_before()` — return true (after existing shape tools)
Do NOT add to `ALL` const — custom shapes are dynamic.
### Step 2 — `hcie-vector/src/svg_templates.rs` — Add `all_templates()`
```rust
pub struct TemplateEntry {
pub kind: &'static str,
pub svg: &'static str,
}
pub fn all_templates() -> Vec<TemplateEntry> {
vec![
TemplateEntry { kind: "arrow", svg: &arrow_svg(false) },
TemplateEntry { kind: "star", svg: &star_svg(5, 0.5) },
// ... all 11 kinds ...
]
}
```
Each `svg` is the actual SVG string from the respective template function. The `kind` matches the filename stem that will be written to disk.
### Step 3 — `hcie-vector/src/svg_render.rs` — Fix viewBox scaling
Current code assumes `viewBox="0 0 1 1"`. Custom SVGs have arbitrary viewBox values. Fix `svg_to_points` to read the actual viewBox from `usvg::Tree::size()`:
```rust
pub fn svg_to_points(
svg: &str,
x1: f32,
y1: f32,
x2: f32,
y2: f32,
) -> Result<Vec<Vec<(f32, f32)>>, String> {
// ... parse SVG ...
let tree_size = tree.size(); // (width, height) from viewBox
let svg_w = tree_size.width().max(1.0);
let svg_h = tree_size.height().max(1.0);
let target_w = (x2 - x1).abs().max(1.0);
let target_h = (y2 - y1).abs().max(1.0);
let ox = x1.min(x2);
let oy = y1.min(y2);
// Scale: px -> ox + (px / svg_w) * target_w
collect_paths(tree.root(), &mut result, ox, oy, target_w, target_h, svg_w, svg_h);
}
```
This makes any viewBox work — both our normalized `0 0 1 1` templates and user SVGs with arbitrary viewBox.
### Step 4 — `hcie-engine-api/src/shape_catalog.rs` (NEW)
```rust
pub struct ShapeCatalog {
entries: Vec<ShapeEntry>,
shapes_dir: PathBuf,
builtin_kinds: HashMap<String, String>, // kind -> SVG string
}
pub struct ShapeEntry {
pub index: u32,
pub kind: String, // filename stem (e.g. "star", "my_shape")
pub label: String, // human-readable (filename stem, capitalized)
pub svg: String, // full SVG content
}
```
**Methods:**
- `new(shapes_dir: PathBuf, builtins: HashMap<String, String>) -> Self`
- Creates directory if not exists
- Writes built-in SVGs to disk (one `.svg` file per template) — SKIP if file already exists
- Scans `shapes_dir` for `*.svg` files
- For each file: read content, create `ShapeEntry`
- If a built-in file exists on disk AND in templates, disk version wins (user may have edited it)
- If a file has the same name as a built-in and is MISSING from disk, fall back to builtin SVG string
- Result: entries list = all found SVG files (disk) + builtins not on disk
- `refresh(&mut self)` — rescans directory
- `len(&self) -> usize`
- `get(&self, index: u32) -> Option<&ShapeEntry>`
- `all(&self) -> &[ShapeEntry]`
- `shapes_dir(&self) -> &Path`
- `write_to_disk(&self, path: &Path, svg: &str) -> io::Result<()>` — for SVG Editor save
**Built-in SVGs written to disk:**
Files written on first run to `shapes/`:
- `arrow.svg`, `star.svg`, `rhombus.svg`, `cylinder.svg`, `heart.svg`, `bubble.svg`, `gear.svg`, `cross.svg`, `crescent.svg`, `bolt.svg`, `arrow4.svg`
Each file contains the SVG string from the corresponding template function (with default parameters: star=5 points, arrow=non-thick).
### Step 5 — `hcie-engine-api/src/lib.rs` — Wire up ShapeCatalog
Add to `Engine` struct:
```rust
pub shape_catalog: ShapeCatalog,
```
Init in `Engine::new_with_options`:
```rust
let shapes_dir = /* app data dir */;
let builtins = hcie_vector::svg_templates::all_templates();
self.shape_catalog = ShapeCatalog::new(shapes_dir, builtins);
```
Re-export:
```rust
pub use crate::shape_catalog::{ShapeCatalog, ShapeEntry};
```
Add helper:
```rust
impl Engine {
pub fn refresh_shape_catalog(&mut self) {
let builtins = hcie_vector::svg_templates::all_templates();
self.shape_catalog = ShapeCatalog::new(
self.shape_catalog.shapes_dir().to_path_buf(),
builtins,
);
}
}
```
### Step 6 — `hcie-egui-app/.../tools/toolbox.rs` — Custom shape slot
After the static TOOL_SLOTS rendering, add a dynamic section for custom shapes:
```rust
// After all static slots:
let catalog = &app.documents[app.active_doc].doc.shape_catalog;
if catalog.len() > 0 {
// Render a slot header "Custom" or with an SVG icon
// The current custom tool selection is Tool::CustomShape(active_idx)
// Show a popup with all catalog entries, each with:
// - SVG icon rendered to 24x24 image
// - Label text
// When user clicks an entry, set active_tool = Tool::CustomShape(entry.index)
}
```
Icon rendering helper:
```rust
fn load_svg_icon(svg: &str, size: u32) -> Option<egui::ColorImage> {
// 1. Parse SVG with usvg
// 2. Render to tiny_skia Pixmap with resvg
// 3. Convert to egui::ColorImage
// 4. Cache result
}
```
Cache the rendered icons so we don't re-render every frame.
### Step 7 — `hcie-egui-app/.../canvas/mod.rs` — CustomShape shape creation
In the shape creation match, add:
```rust
Tool::CustomShape(idx) => {
let catalog = /* get shape catalog */;
if let Some(entry) = catalog.get(*idx) {
// Create shape from entry.svg content, NOT from template
VectorShape::SvgShape {
x1, y1, x2, y2,
kind: entry.kind.clone(),
svg: entry.svg.clone(),
stroke: config.stroke_size,
color: [0, 0, 0, 255],
fill_color: [255, 255, 255, 255],
fill: config.fill_shape,
angle: 0.0,
opacity: config.opacity,
hardness: config.hardness,
}
}
}
```
### Step 8 — `hcie-iced-app/.../sidebar/mod.rs` — Custom shape slot
Same pattern: render a custom shapes section after static slots. Each entry:
- SVG icon rendered via `resvg` to `iced::widget::image::Handle`
- Click to set `Tool::CustomShape(idx)`
- Tool parameter panel updates when custom shape is selected
### Step 9 — `hcie-iced-app/.../app.rs` + `canvas/mod.rs`
Handle `Tool::CustomShape(idx)` in shape creation match (same as Step 7 pattern).
---
## Phase 2 — SVG Editor (Node-based)
### Step 10 — New crate: `hcie-svg-editor` or module in `hcie-engine-api`
**Location:** `hcie-engine-api/src/svg_editor.rs` (keeps it in the API crate, no new crate needed)
**Public API:**
```rust
/// Represents a single node in an SVG path.
#[derive(Debug, Clone)]
pub struct SvgNode {
pub x: f32,
pub y: f32,
}
/// Parsed editable representation of an SVG shape.
#[derive(Debug, Clone)]
pub struct SvgEditable {
pub view_box: (f32, f32, f32, f32), // min_x, min_y, width, height
pub polygons: Vec<Vec<SvgNode>>, // one per subpath
}
impl SvgEditable {
/// Parse an SVG string into editable nodes.
pub fn from_svg(svg: &str) -> Result<Self, String>;
/// Reconstruct SVG string from edited nodes.
pub fn to_svg(&self) -> String;
/// Add a node at the midpoint of edge `edge_idx` in polygon `poly_idx`.
pub fn add_node(&mut self, poly_idx: usize, edge_idx: usize);
/// Remove a node (only if polygon would still have ≥3 nodes for closed paths).
pub fn remove_node(&mut self, poly_idx: usize, node_idx: usize);
/// Move a node to new (x, y).
pub fn move_node(&mut self, poly_idx: usize, node_idx: usize, x: f32, y: f32);
/// Normalize all coordinates to 0..1 relative to bounding box.
pub fn normalize(&mut self);
}
```
**Implementation details:**
`from_svg`:
1. Parse SVG with `usvg::Tree::from_data`
2. Extract viewBox from `tree.size()`
3. For each `<path>`, extract segments via `path.data().segments()`
4. Convert MoveTo/LineTo/Close segments to `SvgNode` list
5. Reject quadratic/cubic beziers for V1 (or tessellate and mark as non-editable)
`to_svg`:
1. Build `<svg>` with viewBox
2. For each polygon, emit `<path d="M x,y L x,y ... Z" />`
### Step 11 — `hcie-egui-app/.../panels/svg_editor.rs` (NEW)
egui panel that opens when editing an `SvgShape`:
- Button in the shape's property panel: "Open SVG Editor"
- Modal panel or dock widget
- Shows:
- Preview canvas (renders the SVG at current edit state)
- Node list with draggable handles on the preview
- Add/Delete node buttons
- On save: updates the shape's `svg` field
- If shape came from a disk file: "Save to disk" button that writes to `shapes_dir`
### Step 12 — `hcie-iced-app/.../panels/svg_editor.rs` (NEW)
Same SVG editor UI using iced widgets.
### Step 13 — `hcie-egui-app/.../app/mod.rs` — Wire SVG editor
Add SVG editor state to `HcieApp`:
```rust
pub svg_editor_state: Option<SvgEditorState>,
pub struct SvgEditorState {
pub shape_layer_id: u64,
pub shape_idx: usize,
pub editable: SvgEditable,
pub preview_pixels: egui::ColorImage,
}
```
Property panel: when editing an `SvgShape`, add "Edit SVG" button that opens the editor.
---
## Validation
```bash
# Compile all
cargo check -p hcie-protocol -p hcie-vector -p hcie-engine-api -p hcie-gui-egui -p hcie-iced-gui
# Test
cargo test -p hcie-protocol
```
## Manual verification
1. Run the app, verify shapes/ directory is created with SVG files
2. Verify all built-in shapes still render correctly
3. Add a new SVG file to shapes/, verify it appears in the toolbox
4. Edit an SVG file in shapes/, verify the change appears in the tool
5. Draw a custom SVG shape on canvas
6. Open SVG Editor, move nodes, save, verify shape updates
## Edge Cases
- shapes/ directory doesn't exist → create it, write built-ins
- SVG file has invalid syntax → skip with warning, don't crash
- User deletes all SVGs → fall back to built-in templates
- 100+ custom SVGs → scrollable popup, lazy icon rendering
- SVG has no viewBox → use `0 0 1 1` as default
- SVG has curves (C, Q) → V1 treats them as non-editable, shows "Edit not supported" warning
@@ -0,0 +1,71 @@
# Iced History, Panel, Visual, and Slider Improvements
## Scope And Decisions
- Target the Iced workspace under `hcie-iced-app/`; use `hcie-egui-app/` only as a behavioral/design reference.
- Visual scope: shared design system plus main chrome (title/menu/sidebar/dock/dialogs) and History, Custom Shapes, and Brushes & Tips. Canvas rendering and AI/script plugin internals are out of scope.
- Brush filters: `All`, `Drawing`, `Painting`, `Effects`, `Custom`, and `Imported`; combine built-in/default presets, every engine `BrushStyle`, and imported ABR presets. New custom-preset authoring/rename/delete is out of scope.
- Slider input: typing a numeric character while hovering enters edit mode; Enter commits, Escape or focus loss cancels. Clicking the value area also enters edit mode.
- First shape on a non-vector layer is one atomic `Add Vector Shape` history action; Undo removes the auto-created vector layer and shape together, Redo restores both.
- Preserve all current uncommitted work and protected GPU/dirty-region behavior.
## Implementation Plan
1. **Make vector creation an atomic engine history operation.**
- Temporarily unlock `hcie-document` and `hcie-engine-api` with the repository scripts; relock them after edits.
- In `hcie-document/src/lib.rs`, add a documented vector-layer creation path that constructs the final vector layer (including its first shape) before recording history. Record one layer-add action whose captured redo layer is already `LayerType::Vector` and contains the shape; label it `Add Vector Shape`.
- In `hcie-engine-api/src/lib.rs::Engine::add_vector_shape`, retain `push_vector_snapshot` for an existing vector layer. Replace the current non-vector path (`add_layer` followed by mutation) with the atomic document operation so no intermediate raster-layer history entry is created.
- Ensure undo/redo/jump leave `active_layer` valid after the generated layer is removed/restored; clamp or restore selection through the existing engine history wrapper rather than changing protected compositing caches.
- In `hcie-iced-gui/src/app.rs::VectorDrawEnd`, keep the single `add_vector_shape` call, then refresh cached layers/history through the existing composite refresh path. Add a small helper for refreshing `cached_history` if tests show no composite dirty flag after a history-only transition.
- Add engine tests for: first shape on raster layer adds exactly one named entry; second shape on existing vector layer adds exactly one entry; undo/redo restores layer count, layer type, and shape count; cancelled/zero-result custom shape creates no entry. Add an Iced update-level regression test confirming `cached_history` exposes the new entry after `VectorDrawEnd`.
2. **Convert Custom Shapes from a list to a responsive grid.**
- Refactor `hcie-iced-gui/src/panels/custom_shapes.rs` to build cards through `iced::widget::responsive`, deriving columns from available width rather than fixing a one-column list.
- Use a theme-safe minimum cell width around 7284 px, 46 px gaps, at least two columns when the pane permits, and row chunking that recomputes whenever dock width changes.
- Keep SVG preview, readable label, selected accent border, click behavior, refresh button, path hint, and empty state. Truncate/wrap long labels without expanding a cell beyond the grid width.
- Extract/test a pure `grid_column_count(available_width, cell_min, gap)` helper for narrow, normal, and wide panes.
3. **Build a complete, filterable Brushes & Tips catalog.**
- Add a public GUI-side `BrushCategory`/filter type and transient `brush_category` state to `HcieIcedApp`, plus `Message::BrushCategorySelected` and `Message::BrushPresetSelected` as needed.
- Replace the partial 22-entry `BRUSH_PRESETS` list in `panels/brushes.rs` with a canonical GUI catalog covering every currently exported `BrushStyle` variant, including inactive/missing styles such as Round, Square, Rock, Meadow, Wood, WetPaint, Dirt, Tree, Bristle, Mixer, Blender, and Bitmap.
- Initialize built-in runtime presets from `BrushPreset::all_defaults()`, merge `ToolState.imported_brushes`, deduplicate by preset ID, and pass the resulting slices plus active category into `brushes::view` from `dock/view.rs`.
- Port eguis category mapping: Drawing = Basic/Sketch and drawing styles; Painting = Paint/Ink and painting styles; Effects = Texture/Effect/Nature/Mixer and effect styles; Custom matches custom presets; Imported matches Imported and Imported (ABR). Keep all six filter controls visible even when a category is empty.
- Make category controls functional and visually selected; show an explicit empty-filter message. Imported ABR completion should switch to or visibly populate `Imported` without dropping existing entries.
- Use responsive rows for style/preset cells, cached previews, selected styling, and tooltips. Selecting a preset applies its complete `BrushTip`/style data; selecting a style-only cell updates the style while retaining current size/opacity/hardness unless the egui reference explicitly applies a preset.
- Add tests for exhaustive category mapping, imported/custom matching, deduplication, and filter state transitions.
4. **Introduce a shared Photoshop-inspired surface system.**
- Extend `iced-panel-adapter/src/theme.rs::ThemeColors` with explicit recessed/elevated surface and shadow/highlight tokens, or documented derivation helpers, for every theme preset. Do not hard-code dark-only colors; use `is_light` and active theme tokens.
- In `panels/styles.rs`, add reusable styles for recessed controls, raised cards/buttons, focused cards, pane headers, menus, and dialogs. Use a restrained 1 px highlight edge, low-contrast lower border, 26 px shadow blur, and 26 px corner radii; avoid heavy shadows on dense lists.
- Apply the shared styles to title/menu/sidebar/dock headers and cards, common dialog surfaces, History rows, Custom Shape cards, and Brush filter/preset cells. Preserve the independent opaque surface layers already required to stay above the custom canvas shader.
- Match the supplied Photoshop references hierarchy: darkest workspace, mid-level panels, slightly raised headers/controls, compact typography, clear selected states. The “soft 3D” treatment should come from elevation/highlight/shadow, not large gradients or oversized rounded cards.
- Capture before/after screenshots for the full viewport and each changed panel; verify both one dark and one light theme.
5. **Replace `plain_slider` with an event-aware custom Iced widget.**
- Rewrite `hcie-iced-gui/src/widgets/plain_slider.rs` as a documented `iced::advanced::Widget` instead of the deprecated `Component`, because hover-triggered keyboard entry requires direct event/cursor handling.
- Store editing/buffer state in the widget tree; support click/drag on the track, step increments in the right spinner area, hover-started numeric typing, click-to-edit, Enter commit, Escape/blur cancel, range clamping, decimal/comma parsing, suffix formatting, normalized percentages, and event capture while editing so global shortcuts do not fire.
- Render a 22 px compact progress-bar control modeled on egui: theme-derived recessed track, subtle vertical gradient on the filled accent portion, narrow value handle, centered label/value, right-side up/down spinner, focus/hover border, and lightweight hover shadow. Derive every color from `ThemeColors`.
- Preserve a builder/convenience API for label, range, step, suffix, decimals, width, optional logarithmic mapping, and optional snap steps. Keep parent-owned values and emit messages only for committed typing or pointer/spinner changes.
- Add focused unit/widget tests for parsing, formatting, clamping, hover-to-edit, Enter/Escape/blur, percentage conversion, drag endpoints, spinner steps, logarithmic mapping, and theme-derived style output.
6. **Migrate every Iced slider call site.**
- Replace existing `plain_slider` calls to pass `ThemeColors` and adopt the new API in dialogs (`new_image`, `confirm`, `adjustments`), properties, filters, layers, tool settings, and any other current users.
- Replace direct `iced::widget::slider` calls in `color_picker.rs`, `toolbar.rs`, `tool_options.rs`, `geometry.rs`, `layer_styles.rs`, `brushes.rs`, `text_editor.rs`, and `status_bar.rs`, preserving ranges, steps, units, integer conversions, and compact layout requirements.
- Update `iced-panel-adapter/src/lib.rs` so engine-described `WidgetDescription::Slider` also uses the same control and receives active theme colors through its render API.
- Use compact labels for RGB/HSL/zoom sliders and avoid duplicated external labels where the new control already displays one. Confirm no raw slider imports/calls remain with a repository grep, except internal implementation details or explicitly documented non-numeric controls.
7. **Validation and regression protection.**
- Run formatting and `git diff --check` without reverting unrelated work.
- Run `cargo check -p hcie-iced-gui`, `cargo test -p hcie-iced-gui --tests`, and the relevant document/engine API tests.
- Because locked engine crates are touched, run `cargo test -p hcie-engine-api --test visual_regression` and `cargo test -p hcie-engine-api --test performance_stroke_4k -- --nocapture`; confirm no protected pooling, cache, dirty-region, tile, or shader code changed.
- Exercise vector creation on raster, vector, and locked-vector starting layers; confirm each successful creation adds one visible History row and Undo/Redo is exact.
- Use built-in screenshot flows for `History`, `Custom Shapes`, and `Brushes & Tips`, plus full-viewport/dialog captures. Verify responsive grids at narrow/default/wide dock widths, all six brush filters, imported ABR visibility, dark/light themes, slider typing and dragging, and no transparency regression over the shader canvas.
## Risks And Guardrails
- The history fix crosses locked engine boundaries; use the sanctioned unlock/lock scripts and stage only intended files.
- Do not emulate atomic vector history solely in the GUI or push a pixel snapshot; that would leave redo with the wrong layer type/content.
- Keep brush preview generation cached; generating all style/preset thumbnails every frame would regress panel performance.
- Hover typing must only start when the pointer is inside the slider and the text event is numeric; otherwise tool shortcuts remain unaffected.
- Maintain the protected Iced shader layering and partial-upload mechanisms. New shadows/surfaces must be ordinary GUI layers above the shader, not changes to `shader_canvas.rs`.
- No persisted-data migration is required: brush category and slider edit buffers are transient. Existing settings, imported brush behavior, dock layouts, and theme preset serialization remain compatible.
@@ -0,0 +1,224 @@
# Iced GUI UX Improvements Plan
## Goal
Implement five requested UI/UX and functional improvements in the `hcie-iced-gui` workspace, plus fix the reported regression where the first brush stroke does not appear in the History panel.
## Scope & Boundaries
- **Open layer:** `hcie-iced-app/crates/hcie-iced-gui/`, plus the new SVG asset.
- **Locked layers touched only for history fixes:** `hcie-engine-api` and `hcie-document` must be unlocked with the repo scripts, edited, and re-locked.
- All other improvements are GUI-only.
- Preserve protected GPU/dirty-region, partial-upload, and shader-layering behavior.
## Out of Scope
- egui GUI changes (except if a trivial parity icon is needed, noted below).
- New brush engine styles or engine-side brush changes.
- Layer duplicate / mask / rasterize functionality (toolbar placeholders stay as-is; only iconography changes).
---
## 1. History Panel Enhancements + First-Brush-Stroke Fix
### 1.1 Bug: first brush stroke missing from History
**Root cause:** `end_stroke()` creates the undo snapshot on a background thread and stores it in `pending_history`. The GUI calls `commit_pending_history()` once immediately after `end_stroke()`, but the thread may not have finished, so the snapshot is never committed and `cached_history` is never refreshed.
**Fix (engine side):**
- In `hcie-engine-api/src/stroke_cache.rs`:
- Change `commit_pending_history()` to return `bool``true` if it committed at least one pending snapshot, `false` otherwise.
- Add `pub fn has_pending_history(&self) -> bool` that returns whether the `pending_history` mutex still has uncommitted items.
- In `hcie-document/src/lib.rs`:
- Ensure `push_draw_snapshot_subrect` and `push_draw_snapshot` still skip no-change snapshots (preserve existing behaviour); no new logic needed.
**Fix (GUI side):**
- In `hcie-iced-gui/src/app.rs` `Message::CanvasPointerReleased` brush-stroke cleanup block:
- After `end_stroke`, call `commit_pending_history()`.
- If `commit_pending_history()` returned `false` **and** `engine.has_pending_history()` is true, schedule a delayed `CompositeRefresh` chain (e.g. 8 ms, 16 ms, 32 ms) using `tokio::time::sleep` inside `Task::perform`, each time re-checking and re-committing until pending is drained.
- Always finish with `refresh_composite_if_needed()` so `cached_history` is updated.
**Regression test:**
- Add a new engine test `hcie-engine-api/tests/brush_stroke_history.rs`:
- Create a 16×16 engine, set a Round brush, `begin_stroke`, `stroke_to` to a different pixel, `end_stroke`, `commit_pending_history()`.
- Assert `history_len()` increased by exactly one and `history_description(...)` is `"Brush Stroke"` (or the enhanced description after 1.2).
- Assert undo restores the blank layer.
- Add an iced-level test in `hcie-iced-app/crates/hcie-iced-gui/tests/` (or extend `feature_scorecard.rs`) that simulates the message sequence `CanvasPointerPressed``CanvasPointerMoved``CanvasPointerReleased` for a brush stroke and asserts `cached_history` grows.
### 1.2 Rich history descriptions
**Engine side:**
- In `hcie-engine-api/src/stroke_brush.rs`:
- `draw_stroke()` currently pushes `"Brush Stroke"`. Change it to include the brush style label, e.g. `"Brush Stroke (Round)"`, `"Brush Stroke (Watercolor)"`, etc.
- `draw_line()``"Line"`, `draw_rect()``"Rectangle"`, `draw_filled_rect_rgba()``"Fill Rectangle"`, `draw_ellipse()``"Ellipse"`.
- In `hcie-engine-api/src/stroke_cache.rs` background thread:
- The interactive `end_stroke()` path currently hard-codes `"Brush Stroke"`. Replace with a description that includes `self.current_tip.style` label (e.g. `"Brush Stroke (Oil)"`).
- In `hcie-engine-api/src/lib.rs` vector mutators:
- `add_vector_shape`: keep `"Add Vector Shape"` but append the shape kind/name when known: `"Add Vector Shape (Rect)"`, `"Add Vector Shape (Path 12 pts)"`, etc.
- `delete_vector_shape`: push a vector snapshot with description `"Delete Vector Shape (<kind>)"`.
- `set_vector_shape_bounds`: `"Resize Vector Shape (<kind>)"`.
- `set_vector_shape_angle`: `"Rotate Vector Shape (<kind>)"`.
- `set_vector_shape_color`: `"Set Stroke Color"`.
- `set_vector_shape_fill_color`: `"Set Fill Color"`.
- `set_vector_shape_fill`: `"Toggle Fill"`.
- `set_vector_shape_stroke`: `"Set Stroke Width"`.
- `set_vector_shape_opacity`: `"Set Shape Opacity"`.
- `set_vector_shape_hardness`: `"Set Shape Hardness"`.
- `reorder_vector_shape`: `"Reorder Vector Shape"`.
- `boolean_vector_shapes`: already has `"Path Boolean ({op})"`; keep.
**Helper to add in `hcie-engine-api/src/lib.rs`:**
- `fn vector_shape_kind(shape: &VectorShape) -> &'static str` mapping each `VectorShape` variant to a short label.
- `fn vector_shape_name_or_kind(shape: &VectorShape) -> String` returning `shape.name()` if non-empty, else the kind label.
**Note:** vector property mutators currently do **not** push snapshots, so undo does not cover them. Adding snapshots here fixes both the history description and makes these operations undoable, which is required for a 9/10 History score.
**GUI side:**
- In `hcie-iced-gui/src/panels/history.rs`:
- Keep the list layout but widen the text column so longer descriptions are not clipped. Reduce index prefix formatting noise: keep `"{}: {}"` but ensure the container does not hard-wrap at 30 chars.
- Add a subtle muted style for future entries and accent style for current (already exists); verify contrast.
---
## 2. Clipboard: Paste as New Layer
### Goal
Add a workflow to paste clipboard pixels directly as a new raster layer, instead of always entering floating transform mode.
### Changes
**Menu / command:**
- In `hcie-iced-gui/src/panels/menus.rs`:
- Add `MenuCommand::PasteAsNewLayer`.
- Add a menu item under Edit: `"Paste as New Layer"` with shortcut `Ctrl+Shift+V` (replace the existing `Paste Special` shortcut mapping; keep `Paste Special` label as a placeholder or map it to the same command if preferred).
- Add the same item to `canvas_context_menu` between `Paste` and `New Layer`.
**Message:**
- In `hcie-iced-gui/src/app.rs` `Message` enum:
- Add `PasteAsNewLayer`.
**Handler (in `Message` dispatch):**
- On `PasteAsNewLayer`:
1. Prefer `internal_clipboard` if present; otherwise read system clipboard via `io/clipboard::paste_image_from_clipboard()`.
2. If clipboard image exceeds canvas, show the existing `ExpandCanvas` dialog first, then proceed.
3. Compute target size:
- If oversized and user accepted expand: use clipboard width/height as new canvas size.
- Otherwise: keep current canvas size.
4. Create a new layer via `engine.add_layer("Pasted Layer")`.
5. Center the clipboard pixels in the new layer using `engine.set_layer_pixels(new_layer_id, centered_pixels)`.
6. Push an undo snapshot on the new layer with description `"Paste as New Layer"`.
7. Set the new layer as active.
8. Call `refresh_composite_if_needed()` and return `CompositeRefresh`.
**Helper to add:**
- In `hcie-iced-gui/src/selection/clipboard.rs` or a new `hcie-iced-gui/src/clipboard.rs`:
- `fn centered_layer_pixels(pixels: &[u8], img_w: u32, img_h: u32, canvas_w: u32, canvas_h: u32) -> Vec<u8>` that returns a full canvas-sized RGBA buffer with the image centered.
**Note:** avoid changing the existing `PasteImage` floating-transform path; add the new path in parallel.
---
## 3. Layers Panel Iconography
### Goal
Replace text-only controls in the Layers panel with intuitive icon buttons, and specifically fix the visibility toggle to use a standard eye/eye-slash icon.
### Changes
**New SVG asset:**
- Create `hcie-iced-app/assets/icons/eye_closed.svg` for hidden layers.
- Existing `hcie-iced-app/assets/icons/visible.svg` can be reused as the open eye.
**Helper for small SVG buttons:**
- In `hcie-iced-gui/src/panels/layers.rs` (or `styles.rs`):
- Add a helper `fn svg_icon_btn<'a>(icon_path: &str, tip: &str, msg: Message, colors: ThemeColors, enabled: bool) -> Element<'a, Message>` that loads the SVG from the absolute assets path (falling back to text) and wraps it in a small flat button with a tooltip.
**Row controls:**
- Replace the visibility text button (`"\u{1F441}"`) with `visible.svg` / `eye_closed.svg` based on `info.visible`.
- Replace the lock text (`"L"` / `"-"`) with `lock.svg` for locked and a subtle open-lock or empty placeholder for unlocked.
- Keep the same `Message::LayerToggleVisibility` / `LayerToggleLock` messages.
**Toolbar controls:**
- Replace text toolbar buttons with icon buttons:
- `+Layer``new_file.svg` or `panel-layers.svg` plus tooltip
- `+Group` → a folder/group SVG (use `panel-layers.svg` if no group icon exists)
- `Flatten` → a merge/layers SVG (keep text if no icon)
- `▲` / `▼` move arrows keep unicode arrows but use consistent size
- `X` delete keep unicode but ensure visible
- `fx` keep as text because it's a convention
- Wrap each in the same `svg_icon_btn` helper where an icon exists; for missing icons keep compact text buttons.
**No engine changes.**
---
## 4. Vector Transform Preview Performance
### Goal
Eliminate latency during vector rotate/scale so the preview updates in real time.
### Root cause
`VectorSelectDragMove` throttles preview updates to ~60 FPS and draws only the rotated bounding box of the preview shape, not the actual shape geometry. The 60 FPS throttle intentionally drops pointer events, which feels laggy, and the wireframe box is a weak visual proxy.
### Changes (all in GUI)
**Remove throttle:**
- In `hcie-iced-gui/src/app.rs` `Message::VectorSelectDragMove`:
- Remove the `vector_drag_last_render` 60 FPS throttle block. Update `vector_drag_preview` on every `DragMove`.
- Keep `vector_drag_last` for pointer tracking.
**Draw actual shape geometry in overlay:**
- In `hcie-iced-gui/src/canvas/mod.rs` `OverlayProgram::draw()`:
- Where `vector_drag_preview` is rendered (around line 1297), replace the simple rotated rectangle stroke with a shape-specific renderer:
- For `VectorShape::Rect`, `Circle`, `Line`, `Arrow`, `Star`, `Polygon`, `Rhombus`, `Cylinder`, `Heart`, `Bubble`, `Gear`, `Cross`, `Crescent`, `Bolt`, `Arrow4`, `SvgShape`:
- Draw the same geometry as `vector_draw` preview already does for in-progress shapes (ellipse, line, star, polygon, rounded rect paths).
- Apply the preview's `angle` and `normalized_bounds()` transform so the preview exactly matches the committed shape.
- For `VectorShape::FreePath`:
- Draw the path points transformed by the preview bounds/angle.
- Use the same bright green stroke style (`[0.2, 0.9, 0.4, 0.95]`) and keep the edit handles drawn over it.
**Shared preview renderer:**
- Extract the existing vector-shape preview drawing code from `vector_draw` block in `canvas/mod.rs` into a helper `fn draw_vector_shape_preview(frame: &mut Frame, shape: &VectorShape, origin_x: f32, origin_y: f32, zoom: f32, stroke_color: iced::Color, line_width: f32)`.
- Reuse it both for in-progress `vector_draw` and for `vector_drag_preview`.
**No engine changes.**
---
## 5. Brush Panel: Distinct Watercolor Icon
### Goal
Replace the Watercolor category tab icon so it is not identical to the Painting tab.
### Changes
**New SVG asset:**
- Create `hcie-iced-app/assets/icons/watercolor.svg` — a droplet/splat shape, using `fill="currentColor"` like the other icons.
**GUI change:**
- In `hcie-iced-app/crates/hcie-iced-gui/src/panels/brushes.rs` category tabs array:
- Change Watercolor tab from `"icons/brush.svg"` to `"icons/watercolor.svg"`.
**No engine changes.**
---
## Implementation Order
1. **Vector transform preview** (#4) — pure GUI, safe to start.
2. **Layers panel icons** (#3) — pure GUI.
3. **Watercolor icon** (#5) — pure asset + one-line GUI change.
4. **Paste as new layer** (#2) — pure GUI, can be done in parallel with #1#3.
5. **History enhancements + first-stroke fix** (#1) — requires unlocking engine crates; do this last to minimize locked-crate exposure.
## Validation
- `cargo check -p hcie-iced-gui`
- `cargo test -p hcie-iced-gui`
- `cargo test -p hcie-engine-api --test visual_regression`
- `cargo test -p hcie-engine-api --test performance_stroke_4k -- --nocapture`
- `cargo test --test feature_scorecard`
- Manual / screenshot verification:
- Draw one brush dab with no drag → History panel shows the entry.
- Draw a second stroke with a different brush style → description includes style name.
- Create a vector shape, change its fill/color/rotate/resize → each appears in History with shape kind and action.
- Copy a selection, use "Paste as New Layer" → new layer appears with pasted pixels.
- Toggle layer visibility → eye icon changes between open/closed.
- Rotate/scale a vector shape → preview follows pointer without frame drops.
- Open Brushes panel, select Watercolor category → new droplet icon is visible.
## Risks & Guardrails
- **Locked crates:** Only unlock `hcie-engine-api` and `hcie-document` for history changes. Re-lock immediately after.
- **Background thread race:** The first-stroke fix relies on delayed `CompositeRefresh` tasks; ensure tasks are cancelled or no-op if the document/engine state changes before they fire.
- **Performance:** Removing the vector drag throttle increases overlay redraws, but overlay drawing is cheap vector geometry on a small canvas; verify no regression on 4K docs.
- **Icon fallback:** SVG icon helper must fall back to text if the icon file is missing, matching `toolbar.rs` behaviour.
- **No protocol changes:** Do not add new `VectorShape` variants or new `BrushStyle` variants.
@@ -0,0 +1,180 @@
# Watercolor Brush Category — Implementation Plan
## Goal
Add a new **Watercolor** brush category to the iced GUI's Brushes panel. Each brush has a watercolor-splat preview (not the standard sine-wave stroke). The brushes simulate realistic watercolor effects. Implemented as a new crate with zero modification to existing brush/engine crates.
## Architecture Overview
### Existing brush flow
1. `hcie-brush-engine` defines `BrushStyle` enum (33 variants including `Watercolor`) and `BrushPreset` struct
2. `hcie-engine-api` re-exports `BrushPreset` and provides `draw_specialized_stroke` → dispatches to `draw_watercolor_brush` for `BrushStyle::Watercolor`
3. `hcie-iced-gui/src/panels/brushes.rs` defines `BrushCategory` enum, `BRUSH_STYLES` static array, and `generate_brush_preview()` for thumbnails
4. When a preset is selected → `Message::BrushPresetSelected(preset)` → sets `tool_state.brush_style`, `brush_size`, `brush_opacity`, `brush_hardness`, `brush_spacing`, `active_brush_preset`
### Key constraint
Engine crates (`hcie-brush-engine`, `hcie-protocol`, `hcie-engine-api`, `hcie-draw`) are **locked** — agents must not modify them. The new crate lives in the GUI layer and reuses the engine's existing `BrushStyle::Watercolor` rendering path.
### New crate strategy
- Define watercolor presets using existing `BrushPreset` (from `hcie-engine-api`) with `style: BrushStyle::Watercolor`
- Provide a **watercolor splat preview renderer** that generates RGBA pixels for thumbnails
- The brushes panel integrates the new crate's presets under a "Watercolor" category tab
- Actual drawing uses the engine's existing watercolor brush rendering — no engine changes needed
---
## Step 1: Create the new crate `hcie-watercolor-brushes`
**Path:** `hcie-iced-app/crates/hcie-watercolor-brushes/`
### `Cargo.toml`
```toml
[package]
name = "hcie-watercolor-brushes"
version.workspace = true
edition.workspace = true
[dependencies]
hcie-engine-api = { path = "../../../hcie-engine-api" }
```
### `src/lib.rs` — Presets + Preview Renderer
Exports:
- `pub fn watercolor_presets() -> Vec<BrushPreset>` — returns 8 watercolor brush presets
- `pub fn render_watercolor_splat(style: BrushStyle, base_color: [u8; 3]) -> Vec<u8>` — generates 64×64 RGBA watercolor splat preview
#### Presets (8 brushes)
| ID | Name | Size | Opacity | Hardness | Spacing | Description |
|----|------|------|---------|----------|---------|-------------|
| `wc_wash` | Watercolor Wash | 80 | 0.25 | 0.0 | 0.08 | Large, transparent wash |
| `wc_wet` | Wet Watercolor | 60 | 0.35 | 0.0 | 0.06 | Medium, wet-on-wet |
| `wc_dry` | Dry Brush | 30 | 0.70 | 0.6 | 0.12 | Small, textured, high opacity |
| `wc_glaze` | Glazing | 50 | 0.15 | 0.0 | 0.10 | Very transparent, layered |
| `wc_splat` | Splatter | 40 | 0.50 | 0.2 | 0.30 | Scattered droplets |
| `wc_bleed` | Color Bleed | 70 | 0.30 | 0.0 | 0.07 | Heavy diffusion edges |
| `wc_grain` | Granulation | 45 | 0.40 | 0.3 | 0.09 | Visible paper grain texture |
| `wc_bloom` | Bloom | 90 | 0.20 | 0.0 | 0.05 | Soft, blooming edges |
All use `BrushStyle::Watercolor` as the engine style — the engine's existing `draw_watercolor_brush` handles the actual stroke rendering.
#### Watercolor Splat Preview Algorithm (64×64 RGBA)
The splat is generated procedurally using multi-octave value noise:
1. **Base shape:** Radial gradient from center, `alpha = (1 - dist/radius)^1.5`
2. **Edge displacement:** Displace the radius at each angle using 3-octave value noise → irregular organic boundary
3. **Multiple layers:** 3-5 overlapping semi-transparent blobs at slightly offset positions
4. **Color variation:** Shift hue slightly per layer (±10°) for color separation
5. **Granulation:** High-frequency noise modulates alpha in the outer 40% of the radius
6. **Wet edge:** Slightly darker/more saturated ring near the boundary (wet-edge accumulation effect)
The noise function is a simple hash-based value noise (no external deps):
```rust
fn value_noise(x: f32, y: f32) -> f32 {
// hash-based pseudo-random, returns 0.0..1.0
}
fn fbm(x: f32, y: f32, octaves: u32) -> f32 {
// fractal Brownian motion using value_noise
}
```
---
## Step 2: Register the crate in the workspace
**File:** `Cargo.toml` (workspace root)
Add to `[workspace] members`:
```toml
"hcie-iced-app/crates/hcie-watercolor-brushes",
```
---
## Step 3: Add `hcie-watercolor-brushes` dependency to `hcie-iced-gui`
**File:** `hcie-iced-app/crates/hcie-iced-gui/Cargo.toml`
Add:
```toml
hcie-watercolor-brushes = { path = "../hcie-watercolor-brushes" }
```
---
## Step 4: Update the Brushes panel
**File:** `hcie-iced-app/crates/hcie-iced-gui/src/panels/brushes.rs`
### 4a. Add `Watercolor` variant to `BrushCategory`
```rust
pub enum BrushCategory {
All,
Drawing,
Painting,
Watercolor, // ← NEW
Effects,
Custom,
Imported,
}
```
### 4b. Update `category_matches_style` for the new variant
```rust
BrushCategory::Watercolor => style_category == BrushCategory::Watercolor,
```
### 4c. Add Watercolor tab to the category tabs array
```rust
(BrushCategory::Watercolor, "Watercolor", "icons/brush.svg"),
```
### 4d. Render watercolor presets when Watercolor category is active
When `active_category == BrushCategory::Watercolor`:
- Call `hcie_watercolor_brushes::watercolor_presets()` to get the preset list
- For each preset, call `hcie_watercolor_brushes::render_watercolor_splat(...)` for the thumbnail
- Render as a grid (same 2-column layout as existing brushes)
- Each cell sends `Message::BrushPresetSelected(preset)` on click
### 4e. Update `view` function signature
The function already accepts `imported_presets: &[BrushPreset]`. No signature change needed — the watercolor presets are fetched internally from the new crate.
### 4f. Update test `catalog_contains_every_engine_brush_style`
The test asserts `BRUSH_STYLES.len() == 34`. This doesn't change (watercolor presets are separate from `BRUSH_STYLES`). The test remains valid.
---
## Step 5: Add "Watercolor" to the egui GUI category filter (optional, for parity)
**File:** `hcie-egui-app/crates/hcie-gui-egui/src/app/tools/brushes_panel.rs`
Add "Watercolor" to the categories array and update `matches_style_category` to map it to `BrushStyle::Watercolor`. This is a minimal change for parity — the watercolor presets themselves would need separate integration in the egui panel if desired.
**Note:** This step is optional for the initial implementation. The user's request focuses on the iced GUI.
---
## Files Changed
| File | Change |
|------|--------|
| `hcie-iced-app/crates/hcie-watercolor-brushes/Cargo.toml` | **New** — crate manifest |
| `hcie-iced-app/crates/hcie-watercolor-brushes/src/lib.rs` | **New** — presets + splat renderer |
| `Cargo.toml` (workspace root) | Add member `hcie-iced-app/crates/hcie-watercolor-brushes` |
| `hcie-iced-app/crates/hcie-iced-gui/Cargo.toml` | Add dependency `hcie-watercolor-brushes` |
| `hcie-iced-app/crates/hcie-iced-gui/src/panels/brushes.rs` | Add `Watercolor` category, tab, and grid rendering |
**Files NOT modified:** All engine crates (`hcie-brush-engine`, `hcie-protocol`, `hcie-engine-api`, `hcie-draw`), existing brush definitions, existing `BRUSH_STYLES` array.
---
## Validation
1. `cargo check -p hcie-watercolor-brushes` — new crate compiles
2. `cargo check -p hcie-iced-gui` — GUI compiles with new dependency
3. `cargo test -p hcie-iced-gui` — all existing tests pass
4. `cargo test -p hcie-watercolor-brushes` — new crate tests pass
5. `cargo test --test feature_scorecard` — scorecard passes
6. Visual: launch the app, open Brushes panel, click "Watercolor" tab → 8 watercolor presets with splat previews appear
7. Visual: select a watercolor brush → draw on canvas → realistic watercolor stroke rendered
8. Regression: existing Drawing/Painting/Effects brushes unchanged
@@ -0,0 +1,159 @@
# Iced Drawing Performance Regression Plan
## Goal
Restore low-latency 4K drawing while preserving the protected tiled compositor, persistent wgpu texture, dirty-bound `RefCell` union, viewport mapping, and nearest-neighbor sampler. Add deterministic transfer/work-budget tests and a repeatable latency diagnostic so future UI changes cannot silently restore full-canvas work.
## Historical Root Cause
The history contains three cumulative causes, not one isolated regression:
| Commit | Date | Finding | Scope |
|---|---|---|---|
| `266183a` | 2026-07-12 | Introduced the persistent wgpu texture, but also introduced `Arc::get_mut` for the shader-visible full composite. During iced `update()`, the existing widget/primitive still owns another `Arc`, so uniqueness fails and the fallback clones the full 4K RGBA canvas. The GPU upload is partial, but CPU staging can still copy 33,177,600 bytes per refresh. | All raster drawing; latent flaw in the original optimization |
| `b2c88e5` | 2026-07-17 | Added GPU selection rendering and retained/reworked the full-canvas Arc fallback. Every composite refresh clones and rescans the unchanged 8,294,400-byte 4K selection mask, marks it GPU-dirty, and uploads it again. The fragment shader also performs one center plus eight neighbor mask samples for every selected fragment, about 75 million R8 samples per frame for a full 4K selection. | Severe when drawing with an active selection |
| `7b4073e` | 2026-07-21 | Changed watercolor from one raster dab per sample to roughly 7-37 dabs (core, satellites, splatter, blooms). At common 24-64 px sizes it usually performs about 28-37 dabs per interpolated sample. | Watercolor brush |
Supporting evidence:
- `git log -G 'Arc::get_mut'` identifies `266183a`, `b2c88e5`, and later transform work as the ownership-sensitive composite path history.
- `git blame` attributes all nine `selection_texture` samples in `canvas.wgsl` and unconditional selection dirty marking to `b2c88e5`.
- `git diff 7b4073e^ 7b4073e -- hcie-brush-engine/src/lib.rs` shows the one-dab to multi-dab watercolor expansion.
- `hcie-engine-api/tests/performance_stroke_4k.rs` only exercises a round brush and engine compositing. It is explicitly non-gating and excludes iced staging, selection synchronization, fragment cost, GPU payloads, and input-to-present delay.
- The recorded engine baseline is approximately 18.8 ms average composite and 53 segments/s. It is useful as an engine reference, not as an iced end-to-end latency baseline.
- Preserve the unrelated current worktree edit that exposes `stroke_brush`; never overwrite or revert it.
## Concrete Transfer Design
Add `hcie-iced-app/crates/hcie-iced-gui/src/canvas/texture_update.rs` with two focused types:
- `SharedCompositePixels`: stable `Arc<RwLock<Vec<u8>>>` full-canvas backing storage used for pipeline creation/recreation and full uploads.
- `TextureUpdate`: a tightly packed immutable partial payload containing `[x0, y0, x1, y1]`, `bytes_per_row`, and `Arc<[u8]>` pixels.
The data flow will be:
1. `refresh_composite_if_needed()` calls `render_composite_region()` exactly as today.
2. For a normal dirty rectangle, it copies only dirty rows into both existing `composite_raw` and `SharedCompositePixels`; no copy-on-write and no full-canvas allocation occurs.
3. The existing `dirty_region: RefCell<Option<[u32; 4]>>` continues unioning every update received before `view()`.
4. `canvas::view()` consumes the union once and packs that final rectangle from `composite_raw` into one `TextureUpdate`. This costs one additional dirty-area copy and avoids stale payloads when several Elm updates occur in one frame.
5. `CanvasShaderPrimitive::prepare()` sends `TextureUpdate` directly to `queue.write_texture()` with no full-buffer scan, row extraction, or per-prepare allocation.
6. If shader storage is absent, dimensions changed, or `full_upload` is set, `prepare()` takes a short read lock on `SharedCompositePixels` and creates/replaces the full texture. It does not also apply the partial payload because the shared backing already contains the latest pixels.
7. Normal `prepare()` calls never lock the full buffer. The lock is held only for small row writes in `update()` or rare full texture creation/replacement, never across engine compositing and never longer than the corresponding `queue.write_texture()` input borrow requires.
Expected ordinary 48x48 update budget:
- Dirty RGBA payload: 9,216 bytes.
- CPU copies: at most 27,648 bytes (engine scratch to `composite_raw`, engine scratch to shared recovery backing, `composite_raw` to packed upload).
- GPU upload: exactly 9,216 bytes.
- Forbidden ordinary-frame behavior: a 33,177,600-byte clone, texture recreation, or full upload.
## Selection Design
Make selection rendering event-driven and reduce the shader to one mask sample:
1. Keep the GUI's raw selection mask available for move/transform flows, but store it as `Option<Arc<Vec<u8>>>` so shader/view construction is O(1).
2. Add a separate `Option<Arc<Vec<u8>>>` encoded selection texture and a `selection_model_dirty` marker. Continue using `selection_mask_dirty` only for “encoded texture requires GPU upload.”
3. Add one synchronization helper that runs only after a selection mutation. It clones the engine/local raw mask once, computes exact bounds, and builds one R8 encoded texture:
- `0`: unselected
- `128`: selected interior
- `255`: selected border using the existing eight-neighbor, alpha-greater-than-127 semantics
4. Preserve current edge behavior at canvas boundaries by treating out-of-bounds neighbors as clamped/selected, matching the current `ClampToEdge` shader rather than introducing a new outer border.
5. Update `canvas.wgsl` to sample `selection_texture` once. Values above `0.75` receive animated black/white border color; values above `0.25` receive normal/quick-mask fill.
6. Animation remains uniform-only. Marching-ants ticks do not rebuild, clone, fingerprint, or upload selection data, and remain disabled while drawing.
7. Remove obsolete CPU structures that became dead when `b2c88e5` moved selection rendering to the shader: `SelectionEdgeCache`, `marching_ants_edges`, `selection_fill_spans`, their underscored overlay fields, and `selected_spans()`. Delete `canvas/edge_cache.rs` after confirming no remaining consumers.
8. Mark selection state dirty at every engine/local mutation family: rectangle, magic wand, lasso, polygon, select-all, combine mode, invert, grow/shrink/feather/border/smooth, load, clear/deselect, selection undo, move-start engine clear with local retained mask, transform apply/cancel, and menu/script paths.
9. Keep conditional synchronization at the end of `refresh_composite_if_needed()` so selection-only changes still reach the GPU even when the document composite is clean. The condition is a cheap boolean on normal brush refreshes.
## Watercolor Design
Retain the richer watercolor appearance but impose a hard per-sample budget:
- Unlock `hcie-brush-engine` with `unlock.sh hcie-brush-engine`, make the change, and relock it with `lock.sh hcie-brush-engine`.
- Refactor watercolor planning into an RNG-parameterized private helper so a seeded unit test can verify its maximum work and footprint.
- Budget at most eight raster dabs per interpolated sample: one irregular full-size core, up to two smaller satellites, up to four tiny splatters, and at most one probabilistic faint bloom.
- Keep all non-core dabs materially smaller than the core; do not permit multiple near-full-size core/bloom dabs per sample.
- Preserve pressure, mask, eraser, opacity, and hardness behavior.
- If the measured p95 still exceeds the budget after this cap, restore the pre-`7b4073e` one-dab implementation. Do not weaken GPU/tile/composite protections to compensate for brush simulation cost.
## Diagnostic And Regression Tests
### 1. Deterministic Iced Transfer Tests
Place unit tests beside `texture_update.rs` so private binary canvas code remains testable without expanding the public library API.
- Hold shader-side clones of `SharedCompositePixels`, apply 120 48x48 updates to a 3840x2160 buffer, and assert the shared allocation identity remains stable.
- Assert each packed payload length is `dirty_width * dirty_height * 4` and no ordinary update is classified as full.
- Assert cumulative CPU copy accounting is no more than three times cumulative dirty bytes and cumulative GPU bytes equal cumulative dirty bytes.
- Include a test-only reproduction of the old COW branch: hold a second `Arc`, show that `Arc::get_mut` fails, and account for a 33,177,600-byte clone. This consistently demonstrates the regression without retaining legacy behavior in production.
- Verify two or more dirty rectangles accumulated before `view()` produce the exact union payload containing final pixels from all updates.
- Verify first frame, resize, document replacement, and file load still select the full-upload path and contain valid complete pixels.
- Verify malformed/out-of-bounds rectangles are rejected or clamped safely without pointer arithmetic underflow.
### 2. Deterministic Selection Tests
- Encode empty, rectangular, irregular, feathered, and edge-touching masks; assert exact `0/128/255` classification and bounds.
- Synchronize one 4K mask, then process 120 normal drawing refreshes with `selection_model_dirty == false`; assert zero additional raw clones, encodes, bounds scans, and selection texture uploads.
- Replace and clear a selection; assert exactly one upload per mutation and no stale `has_selection` state.
- Add a shader contract test using `include_str!("canvas.wgsl")` that asserts exactly one `textureSample(selection_texture, ...)` occurrence. This deterministic gate catches reintroduction of per-fragment neighbor sampling.
### 3. Watercolor Work And Timing Tests
- Seed the private watercolor planner and assert every generated sample contains one core and no more than eight total dabs across small, normal, and large sizes.
- Assert planned satellite/splatter/bloom extents remain within the dirty-radius contract used by `stroke_brush.rs`.
- Add an ignored diagnostic benchmark for Round and Watercolor at 24, 64, and 128 px, warming up before collecting 100 samples and printing p50/p95/max.
- Gate only the deterministic maximum dab count and a generous catastrophic timing ratio; do not use a tight absolute wall-clock threshold in CI.
### 4. End-To-End Diagnostic Harness
Add an ignored iced drawing-pipeline unit test, runnable with `--ignored --nocapture`, that creates a 3840x2160 10-layer engine document and replays 120 pointer samples in four scenarios:
- Round, no selection.
- Round, full-canvas selection.
- Watercolor, no selection.
- Watercolor, full-canvas selection.
Discard the first 10 samples as warm-up. Report p50/p95/max separately for stroke, engine composite, GUI row copy, upload packing, selection synchronization, and total event processing, plus dirty bytes, CPU copied bytes, GPU payload bytes, full-upload count, and estimated sustainable FPS. This benchmark is diagnostic; deterministic byte/work tests are the CI gate.
For historical confirmation, run the standalone/reproducible portions in isolated temporary worktrees at `266183a^`, `266183a`, `b2c88e5^`, `b2c88e5`, `7b4073e^`, and `7b4073e` where those revisions build. Do not check out commits in the user's dirty main worktree. Static `git diff`/`blame` evidence remains authoritative if an old revision no longer builds.
## File-Level Change Map
- Add `hcie-iced-app/crates/hcie-iced-gui/src/canvas/texture_update.rs`: shared recovery backing, packed update type, byte accounting, deterministic tests, diagnostic test.
- Update `hcie-iced-app/crates/hcie-iced-gui/src/canvas/mod.rs`: register the module, consume dirty union, build packed payload, pass encoded selection texture, remove dead edge/span overlay fields.
- Update `hcie-iced-app/crates/hcie-iced-gui/src/canvas/shader_canvas.rs`: accept shared full backing plus optional packed payload; direct partial upload; rare full recovery upload; remove current region extraction allocation.
- Update `hcie-iced-app/crates/hcie-iced-gui/src/canvas/canvas.wgsl`: one-sample encoded selection branch.
- Update `hcie-iced-app/crates/hcie-iced-gui/src/app.rs`: document fields/constructors, partial row writes, full replacement paths, conditional selection synchronization and mutation markers.
- Update `hcie-iced-app/crates/hcie-iced-gui/src/selection/state.rs`: encoded overlay generation and tests; remove unused span extraction.
- Delete `hcie-iced-app/crates/hcie-iced-gui/src/canvas/edge_cache.rs` after removing all consumers.
- Update `hcie-brush-engine/src/lib.rs`: bounded watercolor planner/renderer and internal deterministic tests.
- Extend or add a focused engine benchmark without changing protected engine caching behavior.
## Validation Sequence
1. Run focused unit tests for transfer packing, dirty union, selection encoding, shader sample contract, and watercolor work budget.
2. Run the ignored four-scenario diagnostic with `--nocapture` and save before/after numbers in the final report.
3. Run `cargo test -p hcie-engine-api --test visual_regression`.
4. Run `cargo test -p hcie-engine-api --test performance_stroke_4k -- --nocapture`.
5. Run all `hcie-iced-gui` tests, `cargo check -p hcie-iced-gui`, and `cargo clippy -p hcie-iced-gui`.
6. Run focused brush-engine tests/checks, then confirm the crate is relocked.
7. Launch iced in release mode with a 4K 10-layer document. Replay Round and Watercolor strokes with no selection and a full-canvas selection. Confirm no ordinary full upload, no repeated selection upload, correct dirty payload sizes, and materially improved p95 input processing.
8. Capture and inspect an iced screenshot after the GUI change. Verify canvas alignment, nearest-neighbor output, selection tint/ants, brush cursor, and drawn pixels. Screenshot correctness complements, but does not replace, latency telemetry.
## Acceptance Criteria
- A normal 48x48 4K drawing refresh uploads 9,216 bytes and performs at most 27,648 bytes of GUI CPU copies; it never clones/uploads 33,177,600 bytes.
- Multiple updates before one `view()` preserve the complete dirty union and final pixels.
- An unchanged active 4K selection causes zero mask clone/encode/upload work during drawing after initial synchronization.
- The selection shader contains one selection texture sample, not nine, while preserving tint, quick-mask color, and animated border appearance.
- Watercolor performs at most eight planned raster dabs per interpolated sample and shows no catastrophic p95 regression against `7b4073e^`.
- Round-brush output and the protected tile/composite/GPU mechanisms remain unchanged.
- Visual regression, focused tests, compile/lint checks, manual 4K replay, and screenshot inspection pass without missing tiles, coordinate drift, seams, stale selection state, or first-frame failure.
## Risks And Controls
- Renderer-thread lock contention: normal partial uploads use immutable packed payloads and do not lock; full backing locks are limited to short row writes or rare recreation.
- Lost dirty regions: retain the existing `RefCell` union and consume only in `view()`; test multiple updates per frame.
- Pipeline recreation with only a partial payload: initialize from `SharedCompositePixels`, which always contains the latest full image.
- Selection mutation coverage: centralize marking/synchronization and audit all 32 current selection-engine call sites found in `app.rs`.
- GPU timing variability: gate shader sample count and transfer volume deterministically; use runtime timings only for trend diagnosis.
- Watercolor visual change: use seeded planner tests and screenshot/visual regression checks; fall back to the known pre-regression renderer if the bounded richer version misses the latency target.
@@ -0,0 +1,71 @@
# Failing Crates Repair Plan
## Goal
Make the bulk Linux and Windows test runners complete without platform-feature build failures, preserve compilation coverage for the existing egui visual examples, and report the exact names of failed crates instead of only a count.
## Confirmed Findings
- `hcie-blend` fails because its `eframe` dev-dependency disables defaults without enabling either Linux backend; `winit 0.30.13` therefore emits “platform ... not supported”.
- The same manifest defect exists in `hcie-draw`, `hcie-filter`, `hcie-text`, and `hcie-vector`.
- `hcie-brush-engine` succeeds because it enables `x11`; `hcie-io` enables both `x11` and `wayland`.
- The root workspace already defines the intended cross-platform `eframe` configuration with `wayland` and `x11`.
- `hcie-text/Cargo.toml` currently repeats `proptest` and `approx`, which is a duplicate-key manifest error and must be fixed before any Cargo validation.
- The supplied terminal output proves one named failure (`hcie-blend`) and six failures in total. It does not expose all six names, so the prior six-name claim must not be treated as authoritative.
- `run_all_tests.*` and `run_tests_categorized.*` only retain failure counts. Their `--no-4k` command also places `--skip` on the Cargo side instead of after Cargos `--` test-harness separator.
## Implementation Steps
1. **Restore a valid workspace manifest.**
- Remove the duplicate `proptest` and `approx` entries from `hcie-text/Cargo.toml`.
- Run `cargo metadata --no-deps` immediately; stop if any other manifest error remains.
2. **Centralize visual-example GUI dev-dependencies.**
- In `hcie-blend`, `hcie-brush-engine`, `hcie-draw`, `hcie-filter`, `hcie-text`, `hcie-vector`, and `hcie-io`, replace crate-local `egui = "0.34"` and custom `eframe` feature lists with `egui = { workspace = true }` and `eframe = { workspace = true }` under `[dev-dependencies]`.
- Preserve all non-GUI dev-dependencies and existing visual examples.
- Do not add GUI dependencies to runtime `[dependencies]` and do not modify engine source files.
- This intentionally reuses the roots `default_fonts`, `glow`, `persistence`, `wayland`, and `x11` configuration so platform support cannot drift between crates.
3. **Verify feature resolution before compiling.**
- Use `cargo tree -p <crate> -e features -i winit` for the five confirmed failing crates and the two known-good comparison crates.
- Confirm Linux builds activate at least one backend and the standardized configuration activates both `winit/x11` and `winit/wayland`.
4. **Improve test-runner diagnostics in both platform versions.**
- Update `run_all_tests.sh`, `run_all_tests.bat`, `run_tests_categorized.sh`, and `run_tests_categorized.bat` to append every failed crate name to a failure list and every skipped crate name to a skip list.
- Print those lists in the final summary while preserving pass/fail/skip counts and non-zero exit status.
- In shell scripts, use arrays for Cargo arguments rather than a space-split string.
- Fix the 4K exclusion to invoke `cargo test -p hcie-engine-api -- --skip benchmark_4k_stroke_on_multilayer_document`; apply equivalent quoting and argument ordering in `.bat` files.
- Keep default `cargo test -p <crate>` behavior so examples are compiled; do not hide the defect by globally switching to `--tests`.
5. **Run focused crate validation.**
- Run `cargo check -p <crate> --examples` and `cargo test -p <crate>` for `hcie-blend`, `hcie-draw`, `hcie-filter`, `hcie-text`, and `hcie-vector`.
- Re-run `hcie-brush-engine` and `hcie-io` to detect regressions from dependency centralization.
- For `hcie-io`, distinguish build/test failures from missing external PSD fixtures; fixture-dependent early returns are not platform compilation failures.
6. **Identify and repair the sixth failure from evidence.**
- Run the improved Linux bulk runner first with `--no-io --no-4k` for deterministic feedback.
- Read the emitted failed-crate list. If a failure remains outside the five confirmed manifests, capture its first compiler/test error and fix that crates actual cause rather than assuming another `winit` defect.
- Re-run only the remaining failed crate until green, then repeat the deterministic bulk run.
7. **Complete end-to-end validation.**
- Run `./run_all_tests.sh --no-io --no-4k`; require zero failed crates and verify the summary names no failures.
- Run `cargo test -p hcie-io` separately with the expected fixture set or record fixture skips distinctly.
- Run the 4K engine test explicitly with the protected command from `AGENTS.md` rather than silently omitting performance coverage.
- Validate `.bat` parity on Windows (or Windows CI): targeted five-crate tests, `run_all_tests.bat --no-io --no-4k`, correct failed-name reporting, and non-zero exit code on an intentional failing command.
## Risks And Guardrails
- Enabling `x11`/`wayland` compiles native backend support but does not launch windows during tests; headless execution remains safe because examples are only compiled.
- Do not use cached success as proof. At least one validation pass should use a fresh dedicated target directory (`CARGO_TARGET_DIR=target/platform-test`) rather than deleting the shared target directory.
- Do not alter locked engine logic or protected performance mechanisms; this repair is confined to manifests and test runners unless the newly identified sixth failure proves independent.
- Do not relocate the visual examples in this repair. Removing all GUI dev-dependencies from engine crates would require a separate architecture migration into the GUI workspace.
- The Linux environment cannot establish Windows batch correctness alone; Windows execution is a required validation gate, not an inferred result.
## Acceptance Criteria
- `cargo metadata --no-deps` succeeds with no duplicate manifest keys.
- The five confirmed crates compile their examples and pass their tests on Linux.
- The bulk runner reports failed crate names and exits zero when all selected crates pass.
- `./run_all_tests.sh --no-io --no-4k` reports zero failed crates from a fresh target directory.
- Windows `.bat` behavior matches Linux for argument handling, result lists, and exit status.
- Any sixth failure is named and resolved from its own diagnostic output, not from dependency-based speculation.
@@ -0,0 +1,54 @@
# Iced Gercek Zamanli Cizim Performansi Plani
## Hedef
Aktif iced uygulamasini egui referansiyla ayni 3840x2160, 10 katman, 100 segment firca senaryosunda olcmek; input, motor, CPU staging, GPU upload ve frame pacing maliyetlerini ayirmak; kanitlanan iced darboğazlarini GUI katmaninda gidermek.
## Mevcut Mimari ve Kararlar
- egui immediate-mode akista pointer durumunu ve motor cagrilarini ayni UI gecisinde isler; aktif cizimde acikca `request_repaint()` kullanir. Dusuk ek yuku olan surekli frame yenilemesine dogal olarak uygundur.
- iced Elm/declarative akista her pointer olayi `Message -> update -> view -> diff/layout -> prepare/render` zincirinden gecer. Mevcut kod her hareket mesajinda senkron motor isi yapar ve gorunur kompoziti yeni pointer mesajinin gelmesine bagli 16 ms esigiyle yeniler.
- Aktif iced canvas GPU hizlandirmalidir: `canvas/shader_canvas.rs` kalici wgpu texture, tek quad draw call ve dirty-region `queue.write_texture()` kullanir. Eski tam-frame `ImageHandle` yolu `canvas/viewport.rs` icinde devre disidir.
- Her iki GUI ayni engine-side sparse tile ve dirty-region kompozit yolunu kullanir. GPU tile atlas yoktur, fakat normal firca guncellemesinde buna ihtiyac olmadan kismi texture upload yapilir. Olcum buyuk/full dirty region gostermedikce yeni tiled GPU renderer yapilmayacak.
- iced normal dirty update'te yalnizca kirli satirlari tasir. egui ise kismi GPU upload'dan once motorun tam 4K tamponunu yaklasik 33 MB kopyalar (`hcie-egui-app/.../canvas/render.rs:169-178`). Bu nedenle mevcut bulgular iced'deki sorunu salt GPU bant genisligiyle aciklamiyor.
- Mevcut makinede Intel Iris Xe, `i915`, donanim hizlandirmali OpenGL ve Intel Vulkan vardir; Vulkan ayrica llvmpipe listeler. Runtime adapter secimi olculmeden GPU varsayimi yapilmayacak.
- Engine ve korumali performans mekanizmalari degistirilmeyecek. Calisma `hcie-iced-app/crates/hcie-iced-gui` ile gerekli karsilastirma olcumleri icin `hcie-egui-app/crates/hcie-gui-egui` sinirinda kalacak.
## Uygulama Adimlari
1. **Tekrarlanabilir performans gozlemi ekle.** Her iki GUI'de varsayilan olarak kapali, ortam degiskeniyle etkinlesen hafif bir canvas performans probu ekle. Ayni adlarla su evreleri p50/p95/max ve sayac olarak raporla: pointer-event-to-update, brush/pen engine call, `render_composite_region`, dirty CPU row copy/pack, GPU prepare/upload, prepare araligi, dirty piksel/byte orani, full-upload sayisi ve stroke basina gorunur update sayisi. Iced `TextureUpdate` ile son input zamanini/generation'i shader `prepare` asamasina tasiyarak input-to-GPU-prepare gecikmesini olc; bunu gercek present gecikmesi olarak adlandirma. Raporu stroke sonunda tek satir/ozet halinde yaz ve hot path'te her olay icin `info` log uretme.
2. **GPU backend'i kanitla.** Performans calistirmasinda wgpu adapter/backend adini kaydet veya wgpu baslangic loglarindan dogrula. Intel Vulkan yerine llvmpipe/software adapter secilmisse once backend/adapter tercihini donanim Vulkan'a sabitleyecek en kucuk iced baslangic ayarini uygula; donanim adapter zaten seciliyse renderer secimini degistirme.
3. **Baseline'i ayristir.** 4K, 10 katman ve 100 segmentte uc isinmali tekrar al. Once engine'in mevcut `performance_stroke_4k` sonucunu kaydet, sonra egui ve iced GUI problarini ayni firca boyutu, spacing, zoom ve efekt/selection kapali durumda karsilastir. Ikinci matris olarak selection acik ve efektli katman senaryosunu ayri raporla. Darbogazi su sirayla siniflandir: software GPU, engine/composite, iced update/view scheduling, CPU staging, GPU upload. Optimizasyon oncesi metrik olmadan pipeline yeniden yazma.
4. **Iced cizim ve frame zamanlamasini ayir.** `CanvasPointerMoved` hot path'inde brush/pen noktalarini motora isle, fakat her hareket mesajinda kompozit alma. Cizim surerken yaklasik 16 ms'lik gercek `iced::time::every` subscription'i ile ayri bir canvas-frame mesaji uret; bu mesaj dirty ise yalnizca canvas kompozit/staging yapar. Ilk dab ve release son kompoziti hemen yapmaya devam et. Mevcut olay-gelmesine-bagli `last_composite_refresh` esigini kaldir veya yalnizca duplicate tick korumasi olarak kullan. Timer sadece aktif stroke boyunca calissin; daha once pointer starvation olusturan hemen-hazir async donguyu geri getirme.
5. **Kompozit hot path'ini panel cache isinden ayir.** `refresh_composite_if_needed` sorumluluklarini minimum iki kapsama bol: canvas-only ve document-metadata. Canvas-frame tick yalnizca engine dirty region, kismi CPU copy, dirty union ve gerekli selection senkronunu yapsin. `layer_infos`, layer thumbnail, tum history aciklamalari ve `thumb_gen` yenilemesini stroke release/undo/redo/layer islemleri veya kisa idle sonrasina ertele. Mevcut dirty flag temizleme sirasi nedeniyle thumbnail'larin stale kalmamasini saglamak icin render oncesi kirli/aktif layer kimligini yakala ve deferred metadata yenilemesinde kullan; cizim sirasinda tam layer pixel clone yapma.
6. **Nadir full upload yolunu ucuzlat.** `CanvasShaderPrimitive::prepare` icinde ayni boyutlu `full_upload` talebinde texture, selection texture ve bind group'u yeniden yaratma. Boyut degismediyse mevcut texture'a tam `queue.write_texture()` uygula; `resize_texture` yalnizca gercek boyut/format degisiminde calissin. Normal partial-upload, `RefCell` dirty union, viewport mapping ve nearest sampler kodunu aynen koru.
7. **Yalniz metrik gerekirse ikinci kademe optimizasyon yap.** Ilk duzeltmelerden sonra `view/diff/layout` p95 hala frame butcesini asiyorsa shader widget'inin yayinladigi hareket mesajlarini guvenli bir ust frekansta birlestir veya sinirla; son koordinati ve release olayini kaybetme, engine interpolasyon/spacing davranisini koru. Overlay `Canvas` geometri olusturma maliyeti baskinsa yalniz aktif preview/cursor durumlarini cache'le. Dirty pack allocation veya lock maliyeti anlamli degilse staging buffer havuzu ya da GPU tile atlas ekleme.
8. **Karsilastirma raporunu sonuclandir.** Once/sonra tablosunda engine zamani, iced update/composite/staging/upload p95, input-to-GPU-prepare p95, gorunur update hizi, upload byte miktari ve full-upload sayisini ver. Sonucu paradigmayla dogru bagla: immediate mode tek basina hiz garantisi degildir; bu uygulamada egui'nin acik repaint davranisi ile iced'in event-driven Elm zinciri ve hot-path yan isleri fark yaratir. GPU/tile hipotezinin hangi metriklerle elendigi veya dogrulandigini belirt.
## Dogrulama
- `cargo test -p hcie-engine-api --test visual_regression`
- `cargo test -p hcie-engine-api --test performance_stroke_4k -- --nocapture`
- `cargo test -p hcie-iced-gui`
- `cargo test -p hcie-iced-gui diagnostic_4k_dirty_staging_latency -- --ignored --nocapture`
- `cargo test -p hcie-gui-egui`
- Debug profile yerine mevcut optimize edilmis dev profile ve release'te ayri baseline al; sonuclari profil adi ve secilen GPU adapter ile etiketle.
- 4K/10 katman/100 segment senaryosunda normal stroke boyunca full upload sifir, upload byte miktari dirty rectangle ile orantili ve software renderer kullanimi yok olmalidir.
- Hedef: steady-state gorunur canvas yenilemesi yaklasik 60 Hz, input-to-GPU-prepare p95 en fazla 16.7 ms veya ayni makinedeki egui referansina esit/daha iyi; engine tek basina 16.7 ms'yi asiyorsa GUI hedefini engine maliyetinden ayri raporla ve locked engine'i bu calismada degistirme.
- Brush, pen, eraser ve spray icin ilk dab, surekli stroke, kisa duraklama ve release son pikselinin gorunmesi; hizli stroke sirasinda eksik dirty bolge olmamasi; pan/zoom koordinat hizasi ve selection shader goruntusu regresyon testinden gecmelidir.
- Her GUI degisikliginden sonra proje talimatina uygun screenshot al. Performans goruntuden anlasilamayacagi icin screenshot'i metriklerin yerine kullanma; ilk frame, canvas hizasi ve overlay regresyonunu kontrol etmek icin kullan.
## Riskler ve Sinirlar
- `iced::time::every` cok sik veya stroke disinda calistirilirsa pointer starvation geri gelebilir; subscription aktif stroke ile sinirli ve 16 ms paced olmalidir.
- Pointer mesajlarini birlestirmek stroke noktalari kaybettirebilir; bu adim kosullu olacak ve release/son nokta zorunlu korunacaktir.
- `full_upload` ayni boyutta texture yenilemeden yapilirken pipeline recovery ve document switch davranisi korunmalidir.
- Gercek display present zamani iced shader API'sinden dogrudan elde edilmiyorsa input-to-prepare metriği acikca proxy olarak raporlanmalidir.
- GPU tile atlas bu planin parcasi degildir. Dirty upload'larin beklenmedik bicimde full-canvas oldugu kanitlanirsa once dirty bounds kaynagi duzeltilir; atlas ancak ayri bir tasarim karari olarak ele alinir.
+163
View File
@@ -0,0 +1,163 @@
# KRA Format Fix Plan
## Root Causes (confirmed by analysis)
### 1. VERSION Header Mismatch — Krita Crash + Self-Import Failures
**File:** `hcie-kra/src/kra_saver.rs` lines 324329, 409415
The saver writes `VERSION 2\n` in the VERS tile header, but the compressed payload uses
version byte `1` (meaning **no** delta decoding). Krita's VERS parser sees VERSION 2 and
applies delta decoding after decompression, producing garbage or a crash.
Our own importer (`hcie-kra/src/lib.rs` line 158) also checks `if version >= 2` and
would apply delta decoding, producing wrong pixel data.
**Fix:** Change both `encode_layer_vers` and `encode_mask_vers` to write `VERSION 1`
instead of `VERSION 2`.
### 2. Fake "LZF" Compression — Bloated Files + Non-Standard
**File:** `hcie-kra/src/kra_saver.rs` lines 308316, 394403
The "LZF" compression is a custom RLE scheme that adds 513 bytes of overhead per tile
(1 version byte + 512 control bytes), making files **larger** than uncompressed. A full
1920×1080 layer (510 tiles) goes from 8.29 MB to 8.62 MB (+4%). The format happens to
look like real LZF literal runs, so our `lzf_decompress` function processes it correctly,
but a real LZF decoder would fail on tiles requiring back-references.
**Fix:** Store tiles as RAW (uncompressed). Remove the fake compression logic and write
raw planar pixel data. Label tiles as `RAW` instead of `LZF` in the tile header. The
importer already handles RAW tiles correctly (lib.rs line 166168).
### 3. Invalid UUID Format — Krita Rejects Our XML
**File:** `hcie-kra/src/kra_saver.rs` line 240
UUIDs are generated from a single `u64` (8 bytes) and formatted as 32 hex digits with
leading zeros: `{00000000000000003aeba3f7cf423ad9}`. Proper UUIDs are 128 bits (16 bytes)
with dashed formatting: `{3aeba3f7-cf42-3ad9-…}`. Krita may validate UUID format and
reject our non-standard forms.
**Fix:** Generate proper 128-bit random UUIDs using two `rand::random::<u64>()` calls
and format with dashes per standard UUID layout.
### 4. Color Space / Bit Depth Ignored — Wrong Colors on Import
**File:** `hcie-kra/src/lib.rs` lines 647698
The importer reads `colorspacename`, `channeldepth`, and `profile` attributes from the
`<IMAGE>` and `<layer>` tags but ignores them. If the source file uses a non-RGBA color
space (e.g., CMYK, Grayscale) or 16-bit channel depth, the raw pixel bytes are
misinterpreted, producing wrong colors.
**Fix:** At minimum, validate on import that:
- `colorspacename` is `"RGBA"`
- `channeldepth` is `"U8"` or `"U16"` (for U16, convert to U8 via shifting)
- Return an error if the format is unsupported
### 5. Silent Layer Failures — Data Loss Without Notice
**File:** `hcie-kra/src/lib.rs` lines 790, 808, 814, 837
When a layer file can't be found, VERS parsing fails, or image decoding fails, the
layer is silently skipped or turned into a transparent layer. The user has no indication
that data was lost.
**Fix:** Add `log::warn!` calls at each failure point, including the layer name and
reason for failure.
### 6. Missing `layers.xml` Fallback
**File:** `hcie-kra/src/lib.rs` line 626
The main importer only tries `maindoc.xml`. Some Krita variants write `layers.xml`
instead. The v2 loader (`custom_loaders_kra_v2.rs`) has this fallback but it's separate.
**Fix:** Add `layers.xml` as a secondary attempt in `try_import_krita_maindoc`.
### 7. Inconsistent `DATA` Line Format
**File:** `hcie-kra/src/kra_saver.rs` lines 329 vs 415
`encode_layer_vers` writes `DATA {tiles.len()}\n` but `encode_mask_vers` writes `DATA\n`
(no count). The parser handles both, but it's inconsistent.
**Fix:** Make both use `DATA\n` (no count) — the parser ignores the count anyway, and
removing it avoids an extra format requirement.
---
## Implementation Tasks
### Task A: Fix VERS header and compression (`kra_saver.rs`)
1. Change `writeln!(output, "VERSION 2")``writeln!(output, "VERSION 1")` in `encode_layer_vers`
2. Change `b"VERSION 2\n"``b"VERSION 1\n"` in `encode_mask_vers`
3. Remove the fake LZF compression loop in `encode_layer_vers` (lines 308316)
4. Replace with writing raw planar pixel data directly (no version byte, no control bytes)
5. Update tile header tag from `"LZF"` to `"RAW"` (line 333)
6. Repeat steps 35 for `encode_mask_vers` (lines 394403)
### Task B: Fix UUID format (`kra_saver.rs`)
7. Replace `let uuid = format!("{{{:032x}}}", layer.id)` with proper 128-bit UUID:
```rust
let high = rand::random::<u64>();
let low = rand::random::<u64>();
let uuid = format!(
"{{{:08x}-{:04x}-{:04x}-{:04x}-{:012x}}}",
(high >> 32) as u32,
(high >> 16) as u16 & 0xFFFF,
high as u16,
(low >> 48) as u16,
low & 0x0000_FFFF_FFFF_FFFF
);
```
8. Apply same fix to mask UUID generation on line 257
### Task C: Add color space validation (`lib.rs`)
9. In `try_import_krita_maindoc`, after reading width/height from `<IMAGE>`:
- Read `colorspacename` and `channeldepth` attributes
- If `colorspacename != "RGBA"`, return error: "Unsupported color space: {name}"
- If `channeldepth != "U8"`, return error: "Unsupported channel depth: {depth}"
- (Future: add U16→U8 conversion)
### Task D: Add error logging (`lib.rs`)
10. Add `log::warn!` before each `continue` / silent fallback:
- Line 790 (layer file not found): warn with layer name
- Line 808 (SVG rasterization failed): warn with layer name
- Line 814 (VERS parse failed): warn with layer name
- Line 837 (image load failed): warn with layer name
### Task E: Add `layers.xml` fallback (`lib.rs`)
11. In `try_import_krita_maindoc`, after the `maindoc.xml` attempt fails, try
`archive.by_name("layers.xml")` before returning `Ok(vec![])`.
### Task F: Normalize `DATA` line format (`kra_saver.rs`)
12. Change line 329: `writeln!(output, "DATA {}", tiles.len())` → `writeln!(output, "DATA")`
13. The mask encoder already uses `b"DATA\n"` — leave unchanged.
---
## Files to Modify
| File | Changes |
|------|---------|
| `hcie-kra/src/kra_saver.rs` | Tasks A, B, F |
| `hcie-kra/src/lib.rs` | Tasks C, D, E |
---
## Validation
After implementing, verify with:
1. **Roundtrip test:** Save a multi-layer document as KRA, then import it back. Compare
pixels and layer names against the original.
2. **Krita compatibility:** Open the exported KRA in Krita ≥ 5.x. Verify it opens without
crash and displays correct colors. Also open the PSD→KRA exported file and verify it
matches the mergedimage.png preview.
3. **Existing test suite:** Run `cargo test -p hcie-kra` and
`cargo test -p hcie-engine-api --test visual_regression` to ensure no regressions.
4. **Edge cases:**
- Empty layers (all-transparent pixels)
- Layers with masks
- Group layers
- Layer names containing special characters (`&`, `<`, `>`, Unicode)
- Error on unsupported color space (e.g., CMYK, Grayscale)
- Error on unsupported bit depth (e.g., U16, F16)
@@ -0,0 +1,149 @@
# Fix Iced PlainSlider Visual Artifacts and Boundary Handling
## Goal
Clean up the horizontal rendering artifacts on the Iced `PlainSlider` track and ensure the slider can be dragged to the absolute minimum (0 %) and maximum (100 %) values even when the mouse cursor moves slightly outside the widget bounds.
## Scope
Only the Iced GUI slider implementation is in scope:
- `hcie-iced-app/crates/hcie-iced-gui/src/widgets/plain_slider.rs`
- Re-exported by `hcie-iced-app/crates/iced-panel-adapter/src/lib.rs`
The egui `PlainSlider` is explicitly out of scope (user chose option A).
## Root Cause Analysis
### 1. Horizontal lines / visual artifacts
The value fill is currently drawn as 4 horizontal bands:
```rust
let bands = 4;
for band in 0..bands {
let t = band as f32 / (bands - 1) as f32;
let mut fill = mix_color(...);
frame.fill_rectangle(
Point::new(0.0, bounds.height * band as f32 / bands as f32),
Size::new(fill_width, bounds.height / bands as f32 + 0.5),
fill,
);
}
```
The `+ 0.5` height overlap and sub-pixel band edges create visible horizontal seams/aliasing, especially on high-DPI displays or when the widget height is small (22 px). The vertical handle line drawn on top also adds to the perceived noise.
### 2. Cannot reach 0 % / 100 % with the mouse
The current drag handler only processes `CursorMoved` while `local` (cursor position in bounds) is `Some`:
```rust
canvas::Event::Mouse(mouse::Event::CursorMoved { .. }) if state.dragging => {
if let Some(position) = local {
let value = self.value_at(position.x, bounds.width);
...
}
(canvas::event::Status::Captured, None)
}
```
When the user drags past the left or right edge of the slider, Iced stops reporting a local position, so the value is never clamped to the endpoint. The slider gets stuck just short of 0 % or 100 %.
In addition, `value_at` normalizes against `track_width = width - SPINNER_WIDTH`, so the effective draggable area is narrower than the full widget. The rightmost spinner region is reserved for step buttons, but the boundary between track and spinner is sensitive to small mouse movements.
## Implementation Plan
### Change A: Remove band-based fill artifact
Replace the 4-band gradient loop with a single rounded rectangle fill.
Suggested draw code:
```rust
let track_width = (bounds.width - SPINNER_WIDTH).max(0.0);
let fill_width = track_width * self.fraction();
if fill_width > 0.0 {
let fill = self.colors.accent;
let fill_rect = Path::rounded_rectangle(
Point::new(0.0, 0.0),
Size::new(fill_width, bounds.height),
radius,
);
frame.fill(&fill_rect, fill);
}
```
This eliminates:
- The `+ 0.5` band overlap
- Sub-pixel horizontal edges
- The separate vertical handle line (the filled rounded rectangle itself acts as the value indicator)
If a gradient is still desired, use `canvas::Gradient` or a single linear gradient path instead of multiple overlapping rectangles.
### Change B: Clamp to endpoints when dragging outside bounds
Use the global cursor position during an active drag so the slider value can continue updating even when the cursor leaves the widget.
In `update`:
1. Store `dragging` state as already done.
2. In the `CursorMoved` branch, if `state.dragging`:
- If `local` is `Some`, use `position.x`.
- If `local` is `None`, fall back to `cursor.position()` (global) and convert it to widget-local X by subtracting `bounds.x`.
- Clamp the resulting X to `[0.0, track_width]`.
- Compute the value with `value_at` and emit `on_change`.
Suggested helper:
```rust
fn drag_value(&self, cursor: mouse::Cursor, bounds: Rectangle) -> f32 {
let track_width = (bounds.width - SPINNER_WIDTH).max(1.0);
let x = match cursor.position_in(bounds) {
Some(local) => local.x,
None => cursor.position().map_or(0.0, |p| p.x - bounds.x),
}
.clamp(0.0, track_width);
self.value_at(x, bounds.width)
}
```
This ensures:
- Dragging left of the widget clamps to `range.start()` (0 %).
- Dragging right of the widget clamps to `range.end()` (100 %).
- Normal in-bounds dragging still works exactly as before.
### Change C: Preserve spinner step behavior while improving boundary feel
Do **not** remove the spinner buttons. Keep the existing step-button logic in `ButtonPressed`:
```rust
if position.x >= bounds.width - SPINNER_WIDTH {
// up/down step
}
```
The boundary fix in Change B applies only during active drags. A click in the spinner area still performs a single step; a drag that started in the track area can now overshoot the track/spinner boundary and clamp correctly.
### Change D: Update or add unit tests
The existing test `pointer_mapping_respects_endpoints_and_step` already covers in-bounds endpoint mapping. Extend it with out-of-bounds cases:
```rust
#[test]
fn pointer_mapping_clamps_outside_track() {
let slider = test_slider("");
assert_eq!(slider.value_at(-10.0, 124.0), 0.0);
assert_eq!(slider.value_at(120.0, 124.0), 1.0);
}
```
Add a test for the global-to-local conversion logic if it is extracted into a testable helper.
## Validation Steps
1. Run the existing widget tests:
```bash
cargo test -p hcie-iced-gui widgets::plain_slider
```
2. Build the iced GUI crate:
```bash
cargo check -p hcie-iced-gui
cargo check -p iced-panel-adapter
```
3. Manual visual check (if running the app):
- Open a panel with a slider such as Opacity / Alpha.
- Verify no horizontal streaks across the slider fill.
- Drag the mouse left past the widget edge: value should snap to 0 %.
- Drag the mouse right past the widget edge: value should snap to 100 %.
- Verify spinner arrows still increment/decrement the value by one step.
## Risks and Mitigations
| Risk | Mitigation |
|------|------------|
| Removing the gradient makes the slider look too flat | Use a single `canvas::Gradient` linear fill if the design requires a gradient; do not reintroduce overlapping bands. |
| Global cursor fallback reports incorrect position on multi-window / scaled displays | Iced's `cursor.position()` is in logical window coordinates; subtracting `bounds.x` (also logical) is safe. Test on the target platform. |
| Spinner clicks accidentally interpreted as drags | The `ButtonPressed` branch already returns `Captured` immediately for spinner clicks. Drags are only detected via `CursorMoved` after a non-spinner press, so the distinction remains. |
## Open Questions
None — the user confirmed Iced-only scope (option A) and the design direction is straightforward.
@@ -0,0 +1,189 @@
# Plan: Relocate Criterion Results + Optimize to 2× gold_standard
## Context
Criterion benchmarks exist under `target/criterion/` with gold-standard baselines
already saved. The `criterion-test` branch introduced benchmarks; the current
`performance-optimization` branch added `bench = false` and reverted `blend_mode`.
**Current gold_standard timings (mean):**
| Benchmark | ns (mean) | ~seconds |
|---|---|---|
| `below_cache_reuse/first_stroke_cache_build` | 807,729,115 | 0.81 s |
| `below_cache_reuse/second_stroke_cache_reuse` | 14,573,274 | 0.015 s |
| `composite_scratch_pooling/cold_composite` | 1,048,196,885 | 1.05 s |
| `composite_scratch_pooling/warm_composite` | 10,073,839 | 0.010 s |
| `effects_skip/no_effects_composite` | 14,340,411 | 0.014 s |
| `effects_skip/with_one_dropshadow` | 14,780,582 | 0.015 s |
| `stroke_mask_pooling/cold_first_stroke` | 46,427,571 | 0.046 s |
| `stroke_mask_pooling/warm_10th_stroke` | 16,749,902 | 0.017 s |
Dominant costs: **first_stroke_cache_build** (0.81 s) and **cold_composite** (1.05 s).
**Target:** 2× faster on cold/first-stroke paths; zero regressions on warm paths.
---
## Phase 1 — Relocate `target/criterion` to project root
### 1.1: Move the results directory
```bash
mv target/criterion ./criterion
```
### 1.2: Update `.gitignore`
Add `!/criterion` exception. The current rule `/target/` won't affect root-level `criterion/` but `/target/` plus `**/target/` should be reviewed. Actually `/target/` only matches the root `target/` dir, and `**/target/` matches nested ones, so `criterion/` at root is fine. No `.gitignore` change needed.
### 1.3: Configure criterion output directory
Criterion 0.5 uses `CRITERION_HOME` env var (defaults to `target/criterion`). After move, either:
**Option A (preferred):** Set `CRITERION_HOME` via `.cargo/config.toml`:
```toml
[env]
CRITERION_HOME = "criterion"
```
**Option B:** Export before benching:
```bash
CRITERION_HOME=criterion cargo bench -p hcie-engine-api
```
### 1.4: Update `criterion.md`
Replace `./target/criterion/report/index.html``./criterion/report/index.html`.
### 1.5: Update `notlar.txt`
Update the bench command section to reflect `CRITERION_HOME=criterion` usage.
---
## Phase 2 — Fix benchmark correctness
### 2.1: Remove `bench = false` from `hcie-engine-api/Cargo.toml`
Line 37: `bench = false` must be removed for `[[bench]]` targets to work correctly.
This was a workaround from commit `ee6ad2d`.
### 2.2: Verify `effects_skip.rs` blend_mode
Current `"Normal".to_string()` matches `LayerStyle::DropShadow { blend_mode: String }` — correct. The `criterion-test` branch had `hcie_engine_api::BlendMode::Normal` which is a type mismatch. No change needed.
---
## Phase 3 — Optimization loop targeting 2× on cold paths
**Prerequisite:** Engine crates are locked (`chmod 444`). Use `./unlock.sh <crate>` to modify, `./lock.sh <crate>` after.
### 3.0: Save current state as gold_standard baseline
```bash
cargo bench -p hcie-engine-api -- --save-baseline gold_standard
```
### 3.1: Optimize `below_cache` construction (first_stroke_cache_build: 0.81 s → ≤0.40 s)
**Unlock:** `./unlock.sh hcie-engine-api`
**File:** `hcie-engine-api/src/stroke_cache.rs:513-608``rebuild_below_cache_if_needed()`
The function calls `tiled::composite_tiled_into()` for the full canvas (3840×2160). Optimization candidates:
1. **Parallelize the below-cache tile build loop** (line 547-561). Currently iterates layers sequentially to build tiles. Use `par_iter` for tile construction.
2. **Skip fully invisible layers in below-cache.** Check `tl.visible` before compositing.
3. **Pre-fill with topmost opaque Normal-blend layer.** Walk bottom→top, find the first fully opaque Normal-blend layer, fill everything below it at once.
4. **Reduce zero-fill cost.** The 33 MB `cache.fill(0)` at line 564 is sequential. Consider `unsafe { std::ptr::write_bytes }` for SIMD-accelerated zeroing.
**Lock:** `./lock.sh hcie-engine-api`
### 3.2: Optimize cold composite (cold_composite: 1.05 s → ≤0.52 s)
**Unlock:** `./unlock.sh hcie-engine-api`
**File:** `hcie-engine-api/src/partial_composite.rs:90-228``render_composite_region()` cold path (lines 194-222)
The cold path zeroes the scratch buffer then composites all layers. Optimization candidates:
1. **Parallel scratch buffer zeroing.** Replace row-by-row `buf[start..end].fill(0)` with `par_chunks_exact_mut`.
2. **Merge zero-fill with first-layer composite.** Instead of fill(0) then composite, start the first layer's composite directly (it overwrites anyway if using Normal blend).
3. **Skip tile sync for unchanged layers.** In `apply_effects_and_sync_tiles()`, the `sync_dirty_tiles()` re-tiles every dirty layer even if pixels haven't changed since last sync.
4. **Cache the tile compositing results.** If the same layer stack was composited before, reuse intermediate results.
**Lock:** `./lock.sh hcie-engine-api`
### 3.3: Optimize tiled compositing inner loop
**Unlock:** `./unlock.sh hcie-composite`
**File:** `hcie-composite/src/tiled.rs`
The `composite_tiled_into()` function handles small-region vs full-canvas compositing. The AGENTS.md note says small regions use sequential, large regions use `par_chunks_exact_mut`. Verify the full-canvas path (below-cache build and cold composite) actually uses parallel compositing.
Optimization candidates:
1. **Ensure `par_chunks_exact_mut` is used for full-canvas compositing** in tiled.rs.
2. **Reduce per-tile overhead.** Check if tile lookups, bounds checks, or branching in the hot loop can be eliminated.
**Lock:** `./lock.sh hcie-composite`
### 3.4: Validate after each optimization
After EACH change:
```bash
# Pixel-perfect correctness (MUST pass)
cargo test -p hcie-engine-api --test visual_regression
# Regression check vs gold_standard (MUST show improvement, no regressions)
cargo bench -p hcie-engine-api -- --baseline gold_standard
# Performance regression test
cargo test -p hcie-engine-api --test performance_stroke_4k -- --nocapture
```
### 3.5: Re-save gold_standard after achieving target
```bash
cargo bench -p hcie-engine-api -- --save-baseline gold_standard
```
---
## Phase 4 — Re-lock all engine crates
```bash
./lock.sh hcie-engine-api
./lock.sh hcie-composite
```
---
## Files Modified
| File | Change |
|---|---|
| `target/criterion/``./criterion/` | Directory move |
| `.cargo/config.toml` | Add `CRITERION_HOME = "criterion"` |
| `criterion.md` | Update output path |
| `notlar.txt` | Update bench instructions |
| `hcie-engine-api/Cargo.toml` | Remove `bench = false` |
| `hcie-engine-api/src/stroke_cache.rs` | below_cache optimization |
| `hcie-engine-api/src/partial_composite.rs` | Cold composite optimization |
| `hcie-composite/src/tiled.rs` | Tiled compositing optimization |
---
## Risks
| Risk | Mitigation |
|---|---|
| `CRITERION_HOME` doesn't work with criterion 0.5 | Fallback: use `--output-dir criterion` flag or `.cargo/config.toml` `[env]` section |
| Engine optimizations break pixel-perfect rendering | Run `visual_regression` test after every change |
| Changes to hot path break AGENTS.md-protected mechanisms | Verify all protected mechanisms still pass; no changes to pooling logic correctness |
| 2× target not achievable with these optimizations | Profile further; consider SIMD, parallelism in deeper layers |
---
## Validation Commands
```bash
cargo bench -p hcie-engine-api -- --baseline gold_standard
cargo test -p hcie-engine-api --test visual_regression
cargo test -p hcie-engine-api --test performance_stroke_4k -- --nocapture
cargo bench -p hcie-engine-api --no-run
```
@@ -0,0 +1,115 @@
# Color Palette Panel — Persistence & Layout Fixes
## Problem Statement
The iced GUI color palette panel has several issues:
1. **Colors don't persist between sessions** — bg color changes are never saved (bug in `BgColorChanged` handler), and save failures are silently ignored
2. **Reset button** should return to black/white (already works correctly)
3. **Recent colors don't persist** — same root cause as #1 (dirty flag issue)
4. **Panel minimum height** is too low (180px) — contents get clipped, especially the color wheel (220px canvas)
## Root Cause Analysis
### Bug 1: BgColorChanged never persists (PRIMARY ISSUE)
In `app.rs:2352-2356`, the `BgColorChanged` handler does NOT set `self.colors_dirty = true`:
```rust
Message::BgColorChanged(color) => {
self.bg_color = color;
// MISSING: self.colors_dirty = true;
crate::shape_sync::sync_shape_from_tool(self);
self.refresh_composite_if_needed();
}
```
Compare with `FgColorChanged` (line 2347) which DOES set it. This means background color changes are never written to disk.
### Bug 2: Save order issue
In `app.rs:8845-8848`, the dirty flag is cleared BEFORE the save:
```rust
if self.colors_dirty {
self.colors_dirty = false; // cleared first
save_colors(...); // save second — if this fails, flag is already cleared
}
```
If `save_colors` fails (e.g., directory doesn't exist), the flag is already cleared and the save won't retry.
### Bug 3: Silent save failures
`save_colors()` uses `let _ = std::fs::write(...)` which discards errors. If `~/.config/hcie-iced/` doesn't exist, writes fail silently.
## Implementation Plan
### Step 1: Fix BgColorChanged persistence
**File:** `hcie-iced-app/crates/hcie-iced-gui/src/app.rs` (line ~2354)
Add `self.colors_dirty = true;` to the handler.
### Step 2: Fix save order
**File:** `hcie-iced-app/crates/hcie-iced-gui/src/app.rs` (line 8845-8848)
Swap the order — save first, then clear the flag:
```rust
if self.colors_dirty {
save_colors(self.fg_color, self.bg_color, &self.recent_colors);
self.colors_dirty = false;
}
```
### Step 3: Add directory creation in save_colors
**File:** `hcie-iced-app/crates/hcie-iced-gui/src/app.rs` (line 93-101)
Add `create_dir_all` before writing:
```rust
fn save_colors(fg: [u8; 4], bg: [u8; 4], recent: &[[u8; 4]]) {
let path = colors_path();
if let Some(parent) = path.parent() {
let _ = std::fs::create_dir_all(parent);
}
// ... rest unchanged
}
```
### Step 4: Increase panel minimum height
**File:** `hcie-iced-app/crates/hcie-iced-gui/src/dock/sizing.rs` (line 70-73)
Change ColorPicker policy:
```rust
PaneType::ColorPicker => PaneSizePolicy {
width: axis(180.0, 280.0, 380.0, 1),
height: axis(300.0, 420.0, 500.0, 1),
}
```
Rationale for values:
- **Min 300px**: Shows swatch row, hex input, alpha slider, tab bar, and start of color wheel
- **Preferred 420px**: Shows full color wheel (220px canvas) + header + recent colors without scrolling
- **Max 500px**: Bounded to prevent stealing vertical space from sibling panels (Layers has grow_priority=35 vs color's 1)
### Step 5: Update test assertions
**File:** `hcie-iced-app/crates/hcie-iced-gui/src/dock/sizing.rs`
Tests to update:
1. `policy_values_prioritize_canvas_and_bound_color_picker` (line 437-441): Update preferred/max values
2. `subtree_constraints_follow_split_axis` (line 453): Update `height.max` assertion (Layers has INFINITY max, so shared axis max becomes INFINITY)
3. `color_picker_does_not_receive_vertical_surplus_with_list_sibling` (line 494): Update max bound check
## Files to Modify
1. `hcie-iced-app/crates/hcie-iced-gui/src/app.rs` — 3 changes (BgColorChanged fix, save order, create_dir_all)
2. `hcie-iced-app/crates/hcie-iced-gui/src/dock/sizing.rs` — policy update + 3 test updates
## Verification
1. Launch app, change both fg and bg colors, close and reopen — both should be restored
2. Click "D" button — fg=black, bg=white
3. Select several colors, close/reopen — recent colors preserved
4. Resize color palette pane to minimum — color wheel and recent colors visible
5. `cargo test -p hcie-iced-gui` — all tests pass
+1
View File
@@ -0,0 +1 @@
,dev-user,hc-20w1s30u2j,24.07.2026 16:44,file:///home/dev-user/.config/libreoffice/4;
Generated
+295 -4
View File
@@ -69,6 +69,12 @@ dependencies = [
"memchr",
]
[[package]]
name = "aliasable"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd"
[[package]]
name = "aligned"
version = "0.4.3"
@@ -127,6 +133,12 @@ dependencies = [
"libc",
]
[[package]]
name = "anes"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
[[package]]
name = "anstream"
version = "1.0.0"
@@ -753,6 +765,12 @@ dependencies = [
"wayland-client",
]
[[package]]
name = "cast"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
[[package]]
name = "cc"
version = "1.2.65"
@@ -792,6 +810,58 @@ dependencies = [
"libc",
]
[[package]]
name = "ciborium"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e"
dependencies = [
"ciborium-io",
"ciborium-ll",
"serde",
]
[[package]]
name = "ciborium-io"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757"
[[package]]
name = "ciborium-ll"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9"
dependencies = [
"ciborium-io",
"half",
]
[[package]]
name = "clap"
version = "4.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d91e0c145792ef73a6ad36d27c75ac09f1832222a3c209689d90f534685ee5b7"
dependencies = [
"clap_builder",
]
[[package]]
name = "clap_builder"
version = "4.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f09628afdcc538b57f3c6341e9c8e9970f18e4a481690a64974d7023bd33548b"
dependencies = [
"anstyle",
"clap_lex",
]
[[package]]
name = "clap_lex"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9"
[[package]]
name = "clipboard-win"
version = "5.4.1"
@@ -1021,6 +1091,42 @@ dependencies = [
"cfg-if",
]
[[package]]
name = "criterion"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f"
dependencies = [
"anes",
"cast",
"ciborium",
"clap",
"criterion-plot",
"is-terminal",
"itertools 0.10.5",
"num-traits",
"once_cell",
"oorandom",
"plotters",
"rayon",
"regex",
"serde",
"serde_derive",
"serde_json",
"tinytemplate",
"walkdir",
]
[[package]]
name = "criterion-plot"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1"
dependencies = [
"cast",
"itertools 0.10.5",
]
[[package]]
name = "crossbeam-deque"
version = "0.8.6"
@@ -1193,6 +1299,15 @@ dependencies = [
"dirs-sys 0.4.1",
]
[[package]]
name = "dirs"
version = "6.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e"
dependencies = [
"dirs-sys 0.5.0",
]
[[package]]
name = "dirs-sys"
version = "0.3.7"
@@ -1200,7 +1315,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
dependencies = [
"libc",
"redox_users",
"redox_users 0.4.6",
"winapi",
]
@@ -1212,10 +1327,22 @@ checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
dependencies = [
"libc",
"option-ext",
"redox_users",
"redox_users 0.4.6",
"windows-sys 0.48.0",
]
[[package]]
name = "dirs-sys"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab"
dependencies = [
"libc",
"option-ext",
"redox_users 0.5.2",
"windows-sys 0.61.2",
]
[[package]]
name = "dispatch"
version = "0.2.0"
@@ -1333,7 +1460,7 @@ version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e92f10a49176cbffacaedabfaa11d51db1ea0f80a83c26e1873b43cd1742c24"
dependencies = [
"heck",
"heck 0.5.0",
"proc-macro2",
"proc-macro2-diagnostics",
]
@@ -2549,6 +2676,10 @@ dependencies = [
"serde",
]
[[package]]
name = "hcie-build-info"
version = "0.1.0"
[[package]]
name = "hcie-color"
version = "0.1.0"
@@ -2574,6 +2705,13 @@ dependencies = [
"rstest",
]
[[package]]
name = "hcie-digital-brushes"
version = "0.1.0"
dependencies = [
"hcie-engine-api",
]
[[package]]
name = "hcie-document"
version = "0.1.0"
@@ -2601,11 +2739,20 @@ dependencies = [
"rstest",
]
[[package]]
name = "hcie-dry-media-brushes"
version = "0.1.0"
dependencies = [
"hcie-engine-api",
]
[[package]]
name = "hcie-engine-api"
version = "0.1.0"
dependencies = [
"approx",
"criterion",
"dirs 6.0.0",
"hcie-blend",
"hcie-brush-engine",
"hcie-composite",
@@ -2633,6 +2780,7 @@ dependencies = [
"serde",
"serde_json",
"sha2",
"usvg 0.43.0",
]
[[package]]
@@ -2683,6 +2831,7 @@ dependencies = [
"egui_extras",
"env_logger",
"evdev",
"hcie-build-info",
"hcie-engine-api",
"image 0.25.10",
"log",
@@ -2720,7 +2869,13 @@ dependencies = [
"env_logger",
"evdev",
"futures-util",
"hcie-build-info",
"hcie-digital-brushes",
"hcie-dry-media-brushes",
"hcie-engine-api",
"hcie-ink-brushes",
"hcie-paint-brushes",
"hcie-watercolor-brushes",
"iced",
"iced-panel-adapter",
"image 0.25.10",
@@ -2730,9 +2885,17 @@ dependencies = [
"serde",
"serde_json",
"tokio",
"usvg 0.43.0",
"zip",
]
[[package]]
name = "hcie-ink-brushes"
version = "0.1.0"
dependencies = [
"hcie-engine-api",
]
[[package]]
name = "hcie-io"
version = "0.1.0"
@@ -2792,6 +2955,13 @@ dependencies = [
"serde_json",
]
[[package]]
name = "hcie-paint-brushes"
version = "0.1.0"
dependencies = [
"hcie-engine-api",
]
[[package]]
name = "hcie-protocol"
version = "0.1.0"
@@ -2861,6 +3031,7 @@ dependencies = [
"proptest",
"rstest",
"serde",
"usvg 0.43.0",
]
[[package]]
@@ -2884,6 +3055,19 @@ dependencies = [
"tokio",
]
[[package]]
name = "hcie-watercolor-brushes"
version = "0.1.0"
dependencies = [
"hcie-engine-api",
]
[[package]]
name = "heck"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
[[package]]
name = "heck"
version = "0.5.0"
@@ -3226,6 +3410,7 @@ dependencies = [
"iced_runtime",
"num-traits",
"once_cell",
"ouroboros",
"rustc-hash 2.1.2",
"thiserror 1.0.69",
"unicode-segmentation",
@@ -3469,12 +3654,32 @@ version = "2.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2"
[[package]]
name = "is-terminal"
version = "0.4.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46"
dependencies = [
"hermit-abi",
"libc",
"windows-sys 0.61.2",
]
[[package]]
name = "is_terminal_polyfill"
version = "1.70.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695"
[[package]]
name = "itertools"
version = "0.10.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
dependencies = [
"either",
]
[[package]]
name = "itertools"
version = "0.14.0"
@@ -4535,6 +4740,12 @@ version = "1.70.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
[[package]]
name = "oorandom"
version = "11.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e"
[[package]]
name = "openssl"
version = "0.10.81"
@@ -4614,6 +4825,30 @@ dependencies = [
"pin-project-lite",
]
[[package]]
name = "ouroboros"
version = "0.18.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e0f050db9c44b97a94723127e6be766ac5c340c48f2c4bb3ffa11713744be59"
dependencies = [
"aliasable",
"ouroboros_macro",
"static_assertions",
]
[[package]]
name = "ouroboros_macro"
version = "0.18.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c7028bdd3d43083f6d8d4d5187680d0d3560d54df4cc9d752005268b41e64d0"
dependencies = [
"heck 0.4.1",
"proc-macro2",
"proc-macro2-diagnostics",
"quote",
"syn 2.0.118",
]
[[package]]
name = "owned_ttf_parser"
version = "0.25.1"
@@ -4845,6 +5080,34 @@ version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6"
[[package]]
name = "plotters"
version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747"
dependencies = [
"num-traits",
"plotters-backend",
"plotters-svg",
"wasm-bindgen",
"web-sys",
]
[[package]]
name = "plotters-backend"
version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df42e13c12958a16b3f7f4386b9ab1f3e7933914ecea48da7139435263a4172a"
[[package]]
name = "plotters-svg"
version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "51bae2ac328883f7acdfea3d66a7c35751187f870bc81f94563733a154d7a670"
dependencies = [
"plotters-backend",
]
[[package]]
name = "png"
version = "0.17.16"
@@ -4989,6 +5252,7 @@ dependencies = [
"quote",
"syn 2.0.118",
"version_check",
"yansi",
]
[[package]]
@@ -5224,7 +5488,7 @@ dependencies = [
"built",
"cfg-if",
"interpolate_name",
"itertools",
"itertools 0.14.0",
"libc",
"libfuzzer-sys",
"log",
@@ -5350,6 +5614,17 @@ dependencies = [
"thiserror 1.0.69",
]
[[package]]
name = "redox_users"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac"
dependencies = [
"getrandom 0.2.17",
"libredox",
"thiserror 2.0.18",
]
[[package]]
name = "regex"
version = "1.12.4"
@@ -6399,6 +6674,16 @@ dependencies = [
"zerovec",
]
[[package]]
name = "tinytemplate"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
dependencies = [
"serde",
"serde_json",
]
[[package]]
name = "tinyvec"
version = "1.11.0"
@@ -7951,6 +8236,12 @@ version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a5a4b21e1a62b67a2970e6831bc091d7b87e119e7f9791aef9702e3bef04448"
[[package]]
name = "yansi"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049"
[[package]]
name = "yazi"
version = "0.1.6"
+14 -2
View File
@@ -1,6 +1,7 @@
[workspace]
resolver = "2"
members = [
"hcie-build-info",
"hcie-protocol",
"hcie-color",
"hcie-blend",
@@ -33,11 +34,21 @@ members = [
"hcie-iced-app/crates/iced-panel-adapter",
"hcie-iced-app/crates/iced-panel-script",
"hcie-iced-app/crates/iced-panel-ai-chat",
"hcie-iced-app/crates/hcie-watercolor-brushes",
"hcie-iced-app/crates/hcie-dry-media-brushes",
"hcie-iced-app/crates/hcie-ink-brushes",
"hcie-iced-app/crates/hcie-paint-brushes",
"hcie-iced-app/crates/hcie-digital-brushes",
"tools/screenshot-diff",
"tools/panel-tuner",
]
[workspace.package]
version = "0.1.0"
edition = "2021"
[workspace.dependencies]
hcie-build-info = { path = "hcie-build-info" }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
image = { version = "0.25", default-features = false, features = ["png", "jpeg", "webp"] }
@@ -62,7 +73,7 @@ eframe = { version = "0.34", default-features = false, features = ["default
egui_extras = { version = "0.34", features = ["svg", "image"] }
egui_dock = { version = "0.19", features = ["serde"] }
rfd = "0.15"
iced = { version = "0.13", features = ["tokio", "image", "svg", "canvas", "wgpu", "advanced"] }
iced = { version = "0.13", features = ["tokio", "image", "svg", "canvas", "wgpu", "advanced", "lazy"] }
# Utilities
base64 = "0.22"
@@ -73,6 +84,7 @@ anyhow = "1.0"
futures-util = "0.3"
arboard = "3.4"
env_logger = "0.11"
dirs = "6.0"
# Test frameworks
rstest = "0.23"
@@ -90,7 +102,7 @@ approx = "0.5"
[profile.dev]
opt-level = 1
codegen-units = 1
codegen-units = 256
[profile.dev.package."*"]
opt-level = 3
+17
View File
@@ -0,0 +1,17 @@
@echo off
REM Canonical HCIE workspace build entry point (Windows)
REM Usage: build.bat [cargo-flags...]
setlocal enabledelayedexpansion
set ROOT_DIR=%~dp0
if "%~1"=="" (
set CARGO_ARGS=--workspace
) else (
set CARGO_ARGS=%*
)
call "%ROOT_DIR%scripts\cargo-with-build-id.bat" build %CARGO_ARGS%
exit /b %ERRORLEVEL%
Executable
+12
View File
@@ -0,0 +1,12 @@
#!/usr/bin/env bash
# Canonical HCIE workspace build entry point.
set -euo pipefail
ROOT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
if [[ $# -eq 0 ]]; then
set -- --workspace
fi
"${ROOT_DIR}/scripts/cargo-with-build-id.sh" build "$@"
+37
View File
@@ -0,0 +1,37 @@
@echo off
REM Build AI/Vision dynamic library plugins and copy to plugins directory (Windows)
REM Usage: build_and_copy_plugins.bat [debug]
setlocal enabledelayedexpansion
set PROFILE=release
set CARGO_FLAGS=--release
if /I "%~1"=="debug" (
set PROFILE=debug
set CARGO_FLAGS=
echo === Compiling plugins in DEBUG mode ===
) else (
echo === Compiling plugins in RELEASE mode ===
)
set PROJECT_DIR=C:\Projects\hcie-rust-v4
set PLUGINS_DIR=%PROJECT_DIR%\plugins
mkdir "%PLUGINS_DIR%" 2>nul
echo === Building AI/Vision dynamic libraries ===
echo 1. Building hcie-ai...
cargo build --manifest-path "%PROJECT_DIR%\hcie-ai\Cargo.toml" %CARGO_FLAGS% --features ffi
echo 2. Building hcie-vision...
cargo build --manifest-path "%PROJECT_DIR%\hcie-vision\Cargo.toml" %CARGO_FLAGS% --features ffi
REM On Windows, the output would be .dll files
REM Adjust the copy commands as needed for your Windows environment
copy "%PROJECT_DIR%\target\%PROFILE%\hcie_ai.dll" "%PLUGINS_DIR%\" 2>nul
copy "%PROJECT_DIR%\target\%PROFILE%\hcie_vision.dll" "%PLUGINS_DIR%\" 2>nul
echo ====================================================
echo AI/Vision plugins built and copied to %PLUGINS_DIR% in %PROFILE% mode!
echo ====================================================
+61
View File
@@ -0,0 +1,61 @@
@echo off
REM ============================================================
REM countlines.bat — HCIE-Rust Line Counter (Windows)
REM ============================================================
setlocal enabledelayedexpansion
set PROJECT_DIR=%~dp0
set OUTPUT_FILE=line_count_report.txt
echo ========================================= > "%OUTPUT_FILE%"
echo LINE COUNT REPORT >> "%OUTPUT_FILE%"
echo Project: HCIE-Rust v4 >> "%OUTPUT_FILE%"
echo Location: %PROJECT_DIR% >> "%OUTPUT_FILE%"
echo Timestamp: %DATE% %TIME% >> "%OUTPUT_FILE%"
echo ========================================= >> "%OUTPUT_FILE%"
echo. >> "%OUTPUT_FILE%"
REM === RUST FILES (.rs) ===
echo -----------------------------------------
echo RUST (.rs) — hcie-* directories
echo -----------------------------------------
set GRAND_TOTAL_RUST=0
for /d %%d in ("%PROJECT_DIR%hcie-*") do (
set CRATE_LINES=0
for /r "%%d" %%f in (*.rs) do (
set "FPATH=%%f"
echo !FPATH! | findstr /i /c:"\tests\" >nul
if errorlevel 1 (
echo !FPATH! | findstr /i "test_" >nul
if errorlevel 1 (
for /f "usebackq" %%c in (`find /c /v "" "%%f"`) do (
if %%c gtr 0 (
set /a CRATE_LINES+=%%c
)
)
)
)
)
if !CRATE_LINES! gtr 0 (
set "CRATE_NAME=%%~nxd"
echo !CRATE_NAME! !CRATE_LINES! lines
set /a GRAND_TOTAL_RUST+=!CRATE_LINES!
)
)
echo.
echo RUST TOTAL: %GRAND_TOTAL_RUST% lines
echo.
REM === GRAND TOTAL ===
echo ========================================= >> "%OUTPUT_FILE%"
echo GRAND TOTAL LINES OF CODE >> "%OUTPUT_FILE%"
echo ========================================= >> "%OUTPUT_FILE%"
echo Rust: %GRAND_TOTAL_RUST% >> "%OUTPUT_FILE%"
echo. >> "%OUTPUT_FILE%"
echo Report saved to: %CD%\%OUTPUT_FILE%
echo.
echo Line count report saved to: %OUTPUT_FILE%
+41
View File
@@ -0,0 +1,41 @@
# Canvas Performance Regression Protection — Walkthrough
HCIE v4 engine API'si üzerindeki 4K tuval optimizasyonlarının yanlışlıkla bozulmasını (regresyon) engellemek için `criterion` kütüphanesi entegre edildi ve dört kritik mekanizma için kalıcı benchmark testleri yazıldı.
## Neler Yapıldı?
1. **`hcie-engine-api/Cargo.toml` Güncellemesi**
- `criterion` kütüphanesi dev-dependency olarak eklendi.
- Her benchmark için özel `[[bench]]` kayıtları tanımlandı.
2. **`active_stroke_mask` Pooling Koruması**
- [benches/stroke_mask_pooling.rs](file:///mnt/extra/00_PROJECTS/hcie-rust-v3.05/hcie-engine-api/benches/stroke_mask_pooling.rs)
- Brush engine'in kullandığı ~8 MB mask buffer'ın `end_stroke()` sırasında serbest bırakılıp bırakılmadığını kontrol eder.
- İlk tahsis (cold) ile sonraki ardışık strokların (warm) sürelerini karşılaştırır.
3. **`composite_scratch` Pooling Koruması**
- [benches/composite_scratch_pooling.rs](file:///mnt/extra/00_PROJECTS/hcie-rust-v3.05/hcie-engine-api/benches/composite_scratch_pooling.rs)
- ~33 MB composite render buffer'ın `render_composite_region()` içinde yeniden kullanıldığını doğrular.
4. **`below_cache` Ardışık Stroke Reuse Koruması**
- [benches/below_cache_reuse.rs](file:///mnt/extra/00_PROJECTS/hcie-rust-v3.05/hcie-engine-api/benches/below_cache_reuse.rs)
- Aynı katmanda birden çok stroke atıldığında alttaki katmanların yeniden derlenmek yerine (cache rebuild) mevcut cache'in kullanıldığını test eder.
- 4K çözünürlükte, 10 katmanlı senaryoda cache build (ilk vuruş) ve cache reuse (ikinci vuruş) maliyetlerini ayırır.
5. **`effects_dirty` Conditional Skip Koruması**
- [benches/effects_skip.rs](file:///mnt/extra/00_PROJECTS/hcie-rust-v3.05/hcie-engine-api/benches/effects_skip.rs)
- Efekt/stili olmayan katmanlarda pahalı effects pipeline (ve 33 MB buffer kopyası) adımının bypass edildiğinden emin olur.
## Doğrulama Sonuçları
- Yeni criterion testlerinin API erişimleri (özellikle `update_layer_style` fonksiyon imzası) ve bağımlılıkları derlenip onaylandı.
- Eski golden testler olan `visual_regression.rs` çalıştırılarak yeni performans testlerinin deterministik render sonuçlarını (pixel-perfect) bozmadığı **doğrulandı** (8/8 başarılı).
- Eski performans testi `performance_stroke_4k.rs` de sorunsuz çalıştırıldı.
> [!TIP]
> **Tüm Benchmark'ları Çalıştırmak İçin:**
> Terminal üzerinden engine dizinine giderek şu komutu kullanabilirsiniz:
> ```bash
> cargo bench -p hcie-engine-api
> ```
> _Not: Bu testler 4K ve çok katmanlı benchmarklar içerdiğinden belleği yoğun kullanır. Sonuçlar `./criterion/report/index.html` olarak dökülecektir._
@@ -0,0 +1 @@
{"group_id":"below_cache_reuse","function_id":"first_stroke_cache_build","value_str":null,"throughput":null,"full_id":"below_cache_reuse/first_stroke_cache_build","directory_name":"below_cache_reuse/first_stroke_cache_build","title":"below_cache_reuse/first_stroke_cache_build"}
@@ -0,0 +1 @@
{"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":951849109.6060001,"upper_bound":997651459.8389999},"point_estimate":974726514.46,"standard_error":11692756.962205948},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":964333717.5,"upper_bound":1008235925.5},"point_estimate":997231071.5,"standard_error":10129990.438525524},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":69473355.28280139,"upper_bound":111001765.58222473},"point_estimate":82373110.72538495,"standard_error":11488167.256345619},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":100220051.94789164,"upper_bound":134052914.81567669},"point_estimate":117989793.53891322,"standard_error":8675705.832319831}}
@@ -0,0 +1 @@
{"sampling_mode":"Flat","iters":[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0],"times":[766746117.0,762780503.0,802092317.0,810590059.0,785041479.0,833094129.0,797319443.0,781000772.0,824826845.0,838767365.0,791226110.0,829267788.0,781862950.0,779800184.0,771607272.0,789280774.0,945732988.0,910218833.0,917873393.0,940920778.0,947424737.0,923242219.0,931625753.0,919991609.0,913492448.0,916444409.0,950341592.0,923541197.0,928591390.0,995396149.0,1004683636.0,1011866867.0,1070420231.0,1166316467.0,1004262906.0,1011788215.0,1005062028.0,965194005.0,1011232148.0,1036411621.0,1132321236.0,1000067767.0,955373101.0,1003324041.0,1078142864.0,1049865974.0,1161677421.0,1053145913.0,1062159998.0,1063995056.0,1027989008.0,1047439652.0,1071278744.0,1022373315.0,1029988264.0,1023854165.0,982070928.0,996018276.0,1014625316.0,997491612.0,1027984925.0,1038370019.0,1002373050.0,1037010034.0,1093033883.0,1052436036.0,1031065937.0,1120454718.0,1063462438.0,1116641430.0,1047847072.0,1022917719.0,1007374935.0,1051745013.0,997741814.0,972218953.0,991919297.0,1207522671.0,1086048497.0,1030363359.0,973244186.0,994653301.0,948561347.0,943817508.0,952406570.0,956448482.0,953828399.0,1106507324.0,1314654041.0,1169445937.0,1278647220.0,1002822645.0,1064879109.0,996265656.0,996970531.0,947121336.0,754580294.0,758791074.0,740759124.0,749133185.0]}
@@ -0,0 +1 @@
[567805984.25,745117775.375,1217949218.375,1395261009.5]
@@ -0,0 +1 @@
{"group_id":"below_cache_reuse","function_id":"first_stroke_cache_build","value_str":null,"throughput":null,"full_id":"below_cache_reuse/first_stroke_cache_build","directory_name":"below_cache_reuse/first_stroke_cache_build","title":"below_cache_reuse/first_stroke_cache_build"}
@@ -0,0 +1 @@
{"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":802628791.64,"upper_bound":813040484.75625},"point_estimate":807729115.66,"standard_error":2659045.297504378},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":795640433.0,"upper_bound":811508409.0},"point_estimate":802601736.5,"standard_error":3949402.862673317},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":20569345.92322111,"upper_bound":31956485.414358974},"point_estimate":26899691.986835003,"standard_error":3013983.96001046},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":22212337.25510467,"upper_bound":30449660.487286024},"point_estimate":26573217.06894172,"standard_error":2097572.804009924}}
@@ -0,0 +1 @@
{"sampling_mode":"Flat","iters":[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0],"times":[790268733.0,778077824.0,777753927.0,790748016.0,774874563.0,795354479.0,830986321.0,774933025.0,795640433.0,781222991.0,783034032.0,779584961.0,860249621.0,824591352.0,770614531.0,793335010.0,793120148.0,798457837.0,789556400.0,791420744.0,824640662.0,786581195.0,833347053.0,819516805.0,806814155.0,799358662.0,823386809.0,809103800.0,809246261.0,798475071.0,822390064.0,814365804.0,766813870.0,801503376.0,785641800.0,829493669.0,807809674.0,818182313.0,782331838.0,802600901.0,828619321.0,865375932.0,847686000.0,868990008.0,865904316.0,836130205.0,829871107.0,879545539.0,811999444.0,804613012.0,812123871.0,832134920.0,821824032.0,811624727.0,843506464.0,809350841.0,788414381.0,828658428.0,813950594.0,824437606.0,799515634.0,801852171.0,789206101.0,777631654.0,819295064.0,817602677.0,844474444.0,817757416.0,857198407.0,891795835.0,797757772.0,807208096.0,792158260.0,788329122.0,829061221.0,802602572.0,803586470.0,813557418.0,814978517.0,867225429.0,834303995.0,829183844.0,786379472.0,780827692.0,785952512.0,781295034.0,781292589.0,785193215.0,781383953.0,781449903.0,783723070.0,791816434.0,782836286.0,778115079.0,780737656.0,783681127.0,797553564.0,767112383.0,811508409.0,795581591.0]}
@@ -0,0 +1 @@
[674142403.25,730207567.625,879714672.625,935779837.0]
@@ -0,0 +1 @@
{"group_id":"below_cache_reuse","function_id":"first_stroke_cache_build","value_str":null,"throughput":null,"full_id":"below_cache_reuse/first_stroke_cache_build","directory_name":"below_cache_reuse/first_stroke_cache_build","title":"below_cache_reuse/first_stroke_cache_build"}
@@ -0,0 +1 @@
{"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":802628791.64,"upper_bound":813040484.75625},"point_estimate":807729115.66,"standard_error":2659045.297504378},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":795640433.0,"upper_bound":811508409.0},"point_estimate":802601736.5,"standard_error":3949402.862673317},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":20569345.92322111,"upper_bound":31956485.414358974},"point_estimate":26899691.986835003,"standard_error":3013983.96001046},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":22212337.25510467,"upper_bound":30449660.487286024},"point_estimate":26573217.06894172,"standard_error":2097572.804009924}}
@@ -0,0 +1 @@
{"sampling_mode":"Flat","iters":[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0],"times":[790268733.0,778077824.0,777753927.0,790748016.0,774874563.0,795354479.0,830986321.0,774933025.0,795640433.0,781222991.0,783034032.0,779584961.0,860249621.0,824591352.0,770614531.0,793335010.0,793120148.0,798457837.0,789556400.0,791420744.0,824640662.0,786581195.0,833347053.0,819516805.0,806814155.0,799358662.0,823386809.0,809103800.0,809246261.0,798475071.0,822390064.0,814365804.0,766813870.0,801503376.0,785641800.0,829493669.0,807809674.0,818182313.0,782331838.0,802600901.0,828619321.0,865375932.0,847686000.0,868990008.0,865904316.0,836130205.0,829871107.0,879545539.0,811999444.0,804613012.0,812123871.0,832134920.0,821824032.0,811624727.0,843506464.0,809350841.0,788414381.0,828658428.0,813950594.0,824437606.0,799515634.0,801852171.0,789206101.0,777631654.0,819295064.0,817602677.0,844474444.0,817757416.0,857198407.0,891795835.0,797757772.0,807208096.0,792158260.0,788329122.0,829061221.0,802602572.0,803586470.0,813557418.0,814978517.0,867225429.0,834303995.0,829183844.0,786379472.0,780827692.0,785952512.0,781295034.0,781292589.0,785193215.0,781383953.0,781449903.0,783723070.0,791816434.0,782836286.0,778115079.0,780737656.0,783681127.0,797553564.0,767112383.0,811508409.0,795581591.0]}
@@ -0,0 +1 @@
[674142403.25,730207567.625,879714672.625,935779837.0]
@@ -0,0 +1,84 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
below_cache_reuse/first_stroke_cache_build:MAD
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Density (a.u.)
</text>
<text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average time (ms)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
<text x="77" y="433" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.02
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,433 86,433 "/>
<text x="77" y="373" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.04
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,373 86,373 "/>
<text x="77" y="313" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.06
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,313 86,313 "/>
<text x="77" y="253" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.08
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,253 86,253 "/>
<text x="77" y="193" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,193 86,193 "/>
<text x="77" y="132" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.12
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,132 86,132 "/>
<text x="77" y="72" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.14
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,72 86,72 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
<text x="129" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
20
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="129,473 129,478 "/>
<text x="250" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
22
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="250,473 250,478 "/>
<text x="372" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
24
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="372,473 372,478 "/>
<text x="493" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
26
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="493,473 493,478 "/>
<text x="614" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
28
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="614,473 614,478 "/>
<text x="736" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
30
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="736,473 736,478 "/>
<text x="857" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
32
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="857,473 857,478 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,466 88,465 90,465 92,464 93,463 95,463 97,462 98,462 100,461 102,461 103,461 105,460 107,460 109,459 110,459 112,459 114,458 115,458 117,457 119,457 120,456 122,456 124,455 125,455 127,454 129,454 131,453 132,452 134,452 136,451 137,450 139,449 141,448 142,447 144,446 146,445 147,444 149,443 151,441 153,440 154,438 156,436 158,435 159,433 161,431 163,429 164,426 166,424 168,422 169,419 171,417 173,414 175,411 176,409 178,406 180,404 181,401 183,399 185,396 186,394 188,392 190,390 191,388 193,386 195,385 197,383 198,382 200,381 202,380 203,379 205,379 207,378 208,378 210,377 212,377 214,377 215,376 217,376 219,376 220,376 222,375 224,375 225,374 227,374 229,374 230,373 232,372 234,372 236,371 237,370 239,369 241,368 242,367 244,366 246,365 247,364 249,362 251,361 252,359 254,358 256,356 258,354 259,351 261,349 263,347 264,344 266,341 268,338 269,335 271,332 273,329 274,325 276,322 278,318 280,314 281,311 283,307 285,304 286,300 288,296 290,293 291,289 293,286 295,283 296,279 298,276 300,273 302,270 303,266 305,263 307,260 308,257 310,254 312,251 313,248 315,246 317,243 318,240 320,237 322,234 324,231 325,229 327,226 329,223 330,221 332,218 334,216 335,213 337,211 339,208 341,206 342,203 344,201 346,199 347,196 349,194 351,191 352,189 354,187 356,185 357,182 359,180 361,178 363,176 364,174 366,171 368,169 369,167 371,165 373,164 374,162 376,160 378,158 379,157 381,155 383,154 385,152 386,151 388,150 390,149 391,147 393,146 395,145 396,144 398,143 400,141 401,140 403,139 405,138 407,136 408,135 410,133 412,131 413,130 415,128 417,126 418,124 420,121 422,119 423,117 425,115 427,112 429,110 430,107 432,105 434,103 435,101 437,99 439,98 440,96 442,95 444,94 445,94 447,94 449,94 451,94 452,95 454,96 456,98 457,100 459,102 461,104 462,106 464,109 466,111 468,113 469,116 471,118 473,120 474,121 476,123 478,124 479,124 481,125 483,125 484,125 486,125 488,124 490,123 491,122 493,121 495,120 496,119 498,118 500,117 501,116 503,115 505,115 506,114 508,114 510,113 512,113 513,113 515,113 517,113 518,114 520,114 522,115 523,115 525,116 527,116 528,117 530,118 532,119 534,120 535,121 537,123 539,124 540,126 542,128 544,130 545,133 547,135 549,138 550,142 552,145 554,149 556,153 557,157 559,161 561,166 562,170 564,175 566,179 567,183 569,187 571,191 573,195 574,198 576,201 578,204 579,206 581,208 583,210 584,211 586,211 588,212 589,212 591,211 593,211 595,210 596,208 598,207 600,205 601,204 603,202 605,200 606,198 608,197 610,195 611,194 613,193 615,191 617,191 618,190 620,189 622,189 623,189 625,189 627,189 628,189 630,190 632,190 633,191 635,192 637,192 639,193 640,194 642,195 644,195 645,196 647,197 649,198 650,199 652,200 654,201 655,202 657,204 659,205 661,206 662,207 664,209 666,210 667,212 669,213 671,215 672,216 674,217 676,219 677,220 679,221 681,223 683,224 684,225 686,226 688,227 689,229 691,230 693,231 694,232 696,234 698,235 700,237 701,239 703,240 705,242 706,244 708,246 710,248 711,250 713,253 715,255 716,257 718,259 720,262 722,264 723,266 725,269 727,271 728,273 730,276 732,278 733,281 735,284 737,286 738,289 740,292 742,294 744,297 745,300 747,303 749,305 750,308 752,311 754,314 755,316 757,319 759,321 760,324 762,326 764,329 766,331 767,333 769,335 771,337 772,339 774,341 776,343 777,344 779,346 781,347 782,349 784,350 786,352 788,353 789,354 791,356 793,357 794,358 796,360 798,361 799,362 801,363 803,365 804,366 806,368 808,369 810,370 811,372 813,373 815,374 816,376 818,377 820,378 821,380 823,381 825,382 827,384 828,385 830,387 832,388 833,390 835,391 837,393 838,395 840,396 842,398 843,400 845,402 847,404 849,406 850,407 852,409 854,411 855,413 857,415 859,417 860,419 862,421 864,423 865,425 867,427 869,429 871,431 872,433 874,435 876,437 877,438 879,440 881,442 882,443 884,445 886,447 887,448 889,450 891,451 893,452 894,454 896,455 898,456 899,458 901,459 903,460 904,461 906,462 908,463 909,464 911,465 913,466 915,467 916,468 918,468 920,469 921,470 923,470 925,471 926,471 928,472 930,472 932,472 "/>
<polygon opacity="0.25" fill="#1F78B4" points="164,426 166,424 168,422 169,419 171,417 173,414 175,411 176,409 178,406 180,404 181,401 183,399 185,396 186,394 188,392 190,390 191,388 193,386 195,385 197,383 198,382 200,381 202,380 203,379 205,379 207,378 208,378 210,377 212,377 214,377 215,376 217,376 219,376 220,376 222,375 224,375 225,374 227,374 229,374 230,373 232,372 234,372 236,371 237,370 239,369 241,368 242,367 244,366 246,365 247,364 249,362 251,361 252,359 254,358 256,356 258,354 259,351 261,349 263,347 264,344 266,341 268,338 269,335 271,332 273,329 274,325 276,322 278,318 280,314 281,311 283,307 285,304 286,300 288,296 290,293 291,289 293,286 295,283 296,279 298,276 300,273 302,270 303,266 305,263 307,260 308,257 310,254 312,251 313,248 315,246 317,243 318,240 320,237 322,234 324,231 325,229 327,226 329,223 330,221 332,218 334,216 335,213 337,211 339,208 341,206 342,203 344,201 346,199 347,196 349,194 351,191 352,189 354,187 356,185 357,182 359,180 361,178 363,176 364,174 366,171 368,169 369,167 371,165 373,164 374,162 376,160 378,158 379,157 381,155 383,154 385,152 386,151 388,150 390,149 391,147 393,146 395,145 396,144 398,143 400,141 401,140 403,139 405,138 407,136 408,135 410,133 412,131 413,130 415,128 417,126 418,124 420,121 422,119 423,117 425,115 427,112 429,110 430,107 432,105 434,103 435,101 437,99 439,98 440,96 442,95 444,94 445,94 447,94 449,94 451,94 452,95 454,96 456,98 457,100 459,102 461,104 462,106 464,109 466,111 468,113 469,116 471,118 473,120 474,121 476,123 478,124 479,124 481,125 483,125 484,125 486,125 488,124 490,123 491,122 493,121 495,120 496,119 498,118 500,117 501,116 503,115 505,115 506,114 508,114 510,113 512,113 513,113 515,113 517,113 518,114 520,114 522,115 523,115 525,116 527,116 528,117 530,118 532,119 534,120 535,121 537,123 539,124 540,126 542,128 544,130 545,133 547,135 549,138 550,142 552,145 554,149 556,153 557,157 559,161 561,166 562,170 564,175 566,179 567,183 569,187 571,191 573,195 574,198 576,201 578,204 579,206 581,208 583,210 584,211 586,211 588,212 589,212 591,211 593,211 595,210 596,208 598,207 600,205 601,204 603,202 605,200 606,198 608,197 610,195 611,194 613,193 615,191 617,191 618,190 620,189 622,189 623,189 625,189 627,189 628,189 630,190 632,190 633,191 635,192 637,192 639,193 640,194 642,195 644,195 645,196 647,197 649,198 650,199 652,200 654,201 655,202 657,204 659,205 661,206 662,207 664,209 666,210 667,212 669,213 671,215 672,216 674,217 676,219 677,220 679,221 681,223 683,224 684,225 686,226 688,227 689,229 691,230 693,231 694,232 696,234 698,235 700,237 701,239 703,240 705,242 706,244 708,246 710,248 711,250 713,253 715,255 716,257 718,259 720,262 722,264 723,266 725,269 727,271 728,273 730,276 732,278 733,281 735,284 737,286 738,289 740,292 742,294 744,297 745,300 747,303 749,305 750,308 752,311 754,314 755,316 757,319 759,321 760,324 762,326 764,329 766,331 767,333 769,335 771,337 772,339 774,341 776,343 777,344 779,346 781,347 782,349 784,350 786,352 788,353 789,354 791,356 793,357 794,358 796,360 798,361 799,362 801,363 803,365 804,366 806,368 808,369 810,370 811,372 813,373 815,374 816,376 818,377 820,378 821,380 823,381 825,382 827,384 828,385 830,387 832,388 833,390 835,391 837,393 838,395 840,396 842,398 843,400 845,402 847,404 849,406 850,407 852,409 852,473 164,473 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="3" points="548,473 548,136 "/>
<text x="798" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Bootstrap distribution
</text>
<text x="798" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Confidence interval
</text>
<text x="798" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Point estimate
</text>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,73 788,73 "/>
<rect x="768" y="83" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,103 788,103 "/>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1,108 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
below_cache_reuse/first_stroke_cache_build:SD
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Density (a.u.)
</text>
<text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average time (ms)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
<text x="77" y="452" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.02
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,452 86,452 "/>
<text x="77" y="411" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.04
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,411 86,411 "/>
<text x="77" y="369" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.06
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,369 86,369 "/>
<text x="77" y="327" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.08
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,327 86,327 "/>
<text x="77" y="285" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,285 86,285 "/>
<text x="77" y="244" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.12
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,244 86,244 "/>
<text x="77" y="202" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.14
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,202 86,202 "/>
<text x="77" y="160" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.16
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,160 86,160 "/>
<text x="77" y="118" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.18
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,118 86,118 "/>
<text x="77" y="77" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,77 86,77 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
<text x="145" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
22
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="145,473 145,478 "/>
<text x="229" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
23
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="229,473 229,478 "/>
<text x="313" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
24
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="313,473 313,478 "/>
<text x="397" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
25
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="397,473 397,478 "/>
<text x="481" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
26
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="481,473 481,478 "/>
<text x="565" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
27
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="565,473 565,478 "/>
<text x="649" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
28
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="649,473 649,478 "/>
<text x="733" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
29
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="733,473 733,478 "/>
<text x="817" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
30
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="817,473 817,478 "/>
<text x="901" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
31
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="901,473 901,478 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,472 88,472 90,472 92,471 93,471 95,470 97,469 98,469 100,468 102,467 103,467 105,466 107,465 109,464 110,464 112,463 114,462 115,461 117,460 119,459 120,459 122,458 124,457 125,456 127,455 129,454 131,453 132,452 134,452 136,451 137,450 139,449 141,448 142,447 144,446 146,445 147,444 149,443 151,442 153,441 154,440 156,439 158,438 159,437 161,436 163,435 164,434 166,433 168,431 169,430 171,429 173,428 175,426 176,425 178,424 180,423 181,421 183,420 185,419 186,417 188,416 190,415 191,414 193,412 195,411 197,410 198,409 200,407 202,406 203,405 205,404 207,402 208,401 210,400 212,399 214,397 215,396 217,395 219,394 220,392 222,391 224,389 225,388 227,386 229,384 230,383 232,381 234,379 236,377 237,376 239,374 241,372 242,370 244,368 246,366 247,364 249,362 251,360 252,358 254,356 256,355 258,353 259,351 261,349 263,348 264,346 266,344 268,343 269,341 271,339 273,338 274,336 276,335 278,333 280,331 281,330 283,328 285,326 286,325 288,323 290,321 291,319 293,317 295,315 296,313 298,311 300,309 302,306 303,304 305,302 307,300 308,297 310,295 312,292 313,290 315,288 317,285 318,283 320,281 322,278 324,276 325,273 327,271 329,269 330,266 332,264 334,261 335,259 337,256 339,254 341,251 342,248 344,246 346,243 347,240 349,238 351,235 352,232 354,229 356,226 357,224 359,221 361,218 363,215 364,213 366,210 368,208 369,205 371,203 373,201 374,198 376,196 378,194 379,192 381,190 383,188 385,186 386,184 388,183 390,181 391,179 393,177 395,176 396,174 398,172 400,171 401,169 403,168 405,166 407,165 408,164 410,162 412,161 413,160 415,159 417,158 418,156 420,155 422,154 423,153 425,152 427,151 429,150 430,149 432,147 434,146 435,145 437,143 439,142 440,140 442,139 444,137 445,136 447,134 449,132 451,131 452,129 454,127 456,125 457,124 459,122 461,120 462,119 464,117 466,115 468,114 469,112 471,111 473,110 474,108 476,107 478,106 479,105 481,104 483,103 484,103 486,102 488,101 490,101 491,100 493,99 495,99 496,98 498,98 500,97 501,97 503,96 505,96 506,96 508,95 510,95 512,94 513,94 515,94 517,94 518,94 520,94 522,94 523,94 525,94 527,94 528,95 530,95 532,96 534,97 535,98 537,98 539,99 540,100 542,101 544,102 545,103 547,104 549,105 550,106 552,107 554,107 556,108 557,109 559,110 561,111 562,112 564,113 566,114 567,115 569,116 571,117 573,118 574,120 576,121 578,122 579,124 581,126 583,127 584,129 586,131 588,133 589,135 591,137 593,139 595,141 596,143 598,145 600,147 601,149 603,151 605,153 606,155 608,157 610,158 611,160 613,162 615,164 617,166 618,168 620,170 622,172 623,173 625,175 627,177 628,179 630,180 632,182 633,184 635,185 637,187 639,188 640,190 642,192 644,193 645,195 647,197 649,198 650,200 652,202 654,204 655,206 657,208 659,210 661,212 662,214 664,217 666,219 667,222 669,224 671,227 672,229 674,232 676,234 677,237 679,239 681,242 683,244 684,247 686,249 688,251 689,254 691,256 693,258 694,260 696,262 698,264 700,266 701,268 703,270 705,272 706,274 708,276 710,279 711,281 713,283 715,285 716,287 718,290 720,292 722,294 723,297 725,299 727,301 728,304 730,306 732,309 733,312 735,314 737,317 738,319 740,322 742,324 744,327 745,329 747,332 749,334 750,337 752,339 754,341 755,343 757,346 759,348 760,350 762,352 764,354 766,355 767,357 769,359 771,361 772,362 774,364 776,365 777,367 779,368 781,370 782,371 784,372 786,374 788,375 789,377 791,378 793,380 794,382 796,383 798,385 799,387 801,389 803,390 804,392 806,394 808,396 810,398 811,400 813,401 815,403 816,405 818,407 820,408 821,410 823,411 825,413 827,414 828,416 830,417 832,419 833,420 835,421 837,422 838,424 840,425 842,426 843,427 845,428 847,429 849,430 850,431 852,432 854,433 855,434 857,435 859,436 860,437 862,438 864,439 865,439 867,440 869,441 871,442 872,443 874,444 876,444 877,445 879,446 881,447 882,448 884,449 886,450 887,451 889,452 891,453 893,453 894,454 896,455 898,456 899,457 901,458 903,459 904,460 906,461 908,462 909,462 911,463 913,464 915,465 916,465 918,466 920,467 921,467 923,468 925,468 926,469 928,470 930,470 932,471 "/>
<polygon opacity="0.25" fill="#1F78B4" points="164,434 166,433 168,431 169,430 171,429 173,428 175,426 176,425 178,424 180,423 181,421 183,420 185,419 186,417 188,416 190,415 191,414 193,412 195,411 197,410 198,409 200,407 202,406 203,405 205,404 207,402 208,401 210,400 212,399 214,397 215,396 217,395 219,394 220,392 222,391 224,389 225,388 227,386 229,384 230,383 232,381 234,379 236,377 237,376 239,374 241,372 242,370 244,368 246,366 247,364 249,362 251,360 252,358 254,356 256,355 258,353 259,351 261,349 263,348 264,346 266,344 268,343 269,341 271,339 273,338 274,336 276,335 278,333 280,331 281,330 283,328 285,326 286,325 288,323 290,321 291,319 293,317 295,315 296,313 298,311 300,309 302,306 303,304 305,302 307,300 308,297 310,295 312,292 313,290 315,288 317,285 318,283 320,281 322,278 324,276 325,273 327,271 329,269 330,266 332,264 334,261 335,259 337,256 339,254 341,251 342,248 344,246 346,243 347,240 349,238 351,235 352,232 354,229 356,226 357,224 359,221 361,218 363,215 364,213 366,210 368,208 369,205 371,203 373,201 374,198 376,196 378,194 379,192 381,190 383,188 385,186 386,184 388,183 390,181 391,179 393,177 395,176 396,174 398,172 400,171 401,169 403,168 405,166 407,165 408,164 410,162 412,161 413,160 415,159 417,158 418,156 420,155 422,154 423,153 425,152 427,151 429,150 430,149 432,147 434,146 435,145 437,143 439,142 440,140 442,139 444,137 445,136 447,134 449,132 451,131 452,129 454,127 456,125 457,124 459,122 461,120 462,119 464,117 466,115 468,114 469,112 471,111 473,110 474,108 476,107 478,106 479,105 481,104 483,103 484,103 486,102 488,101 490,101 491,100 493,99 495,99 496,98 498,98 500,97 501,97 503,96 505,96 506,96 508,95 510,95 512,94 513,94 515,94 517,94 518,94 520,94 522,94 523,94 525,94 527,94 528,95 530,95 532,96 534,97 535,98 537,98 539,99 540,100 542,101 544,102 545,103 547,104 549,105 550,106 552,107 554,107 556,108 557,109 559,110 561,111 562,112 564,113 566,114 567,115 569,116 571,117 573,118 574,120 576,121 578,122 579,124 581,126 583,127 584,129 586,131 588,133 589,135 591,137 593,139 595,141 596,143 598,145 600,147 601,149 603,151 605,153 606,155 608,157 610,158 611,160 613,162 615,164 617,166 618,168 620,170 622,172 623,173 625,175 627,177 628,179 630,180 632,182 633,184 635,185 637,187 639,188 640,190 642,192 644,193 645,195 647,197 649,198 650,200 652,202 654,204 655,206 657,208 659,210 661,212 662,214 664,217 666,219 667,222 669,224 671,227 672,229 674,232 676,234 677,237 679,239 681,242 683,244 684,247 686,249 688,251 689,254 691,256 693,258 694,260 696,262 698,264 700,266 701,268 703,270 705,272 706,274 708,276 710,279 711,281 713,283 715,285 716,287 718,290 720,292 722,294 723,297 725,299 727,301 728,304 730,306 732,309 733,312 735,314 737,317 738,319 740,322 742,324 744,327 745,329 747,332 749,334 750,337 752,339 754,341 755,343 757,346 759,348 760,350 762,352 764,354 766,355 767,357 769,359 771,361 772,362 774,364 776,365 777,367 779,368 781,370 782,371 784,372 786,374 788,375 789,377 791,378 793,380 794,382 796,383 798,385 799,387 801,389 803,390 804,392 806,394 808,396 810,398 811,400 813,401 815,403 816,405 818,407 820,408 821,410 823,411 825,413 827,414 828,416 830,417 832,419 833,420 835,421 837,422 838,424 840,425 842,426 843,427 845,428 847,429 849,430 850,431 852,432 852,473 164,473 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="3" points="529,473 529,95 "/>
<text x="798" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Bootstrap distribution
</text>
<text x="798" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Confidence interval
</text>
<text x="798" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Point estimate
</text>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,73 788,73 "/>
<rect x="768" y="83" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,103 788,103 "/>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

@@ -0,0 +1,193 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>below_cache_reuse/first_stroke_cache_build - Criterion.rs</title>
<style type="text/css">
body {
font: 14px Helvetica Neue;
text-rendering: optimizelegibility;
}
.body {
width: 960px;
margin: auto;
}
th {
font-weight: 200
}
th,
td {
padding-right: 3px;
padding-bottom: 3px;
}
a:link {
color: #1F78B4;
text-decoration: none;
}
th.ci-bound {
opacity: 0.6
}
td.ci-bound {
opacity: 0.5
}
.stats {
width: 80%;
margin: auto;
display: flex;
}
.additional_stats {
flex: 0 0 60%
}
.additional_plots {
flex: 1
}
h2 {
font-size: 36px;
font-weight: 300;
}
h3 {
font-size: 24px;
font-weight: 300;
}
#footer {
height: 40px;
background: #888;
color: white;
font-size: larger;
font-weight: 300;
}
#footer a {
color: white;
text-decoration: underline;
}
#footer p {
text-align: center
}
</style>
</head>
<body>
<div class="body">
<h2>below_cache_reuse/first_stroke_cache_build</h2>
<div class="absolute">
<section class="plots">
<table width="100%">
<tbody>
<tr>
<td>
<a href="pdf.svg">
<img src="pdf_small.svg" alt="PDF of Slope" width="450" height="300" />
</a>
</td>
<td>
<a href="iteration_times.svg">
<img src="iteration_times_small.svg" alt="Iteration Times" width="450" height="300" />
</a>
</td>
</tr>
</tbody>
</table>
</section>
<section class="stats">
<div class="additional_stats">
<h4>Additional Statistics:</h4>
<table>
<thead>
<tr>
<th></th>
<th title="0.95 confidence level" class="ci-bound">Lower bound</th>
<th>Estimate</th>
<th title="0.95 confidence level" class="ci-bound">Upper bound</th>
</tr>
</thead>
<tbody>
<tr>
<td>R&#xb2;</td>
<td class="ci-bound">0.0020310</td>
<td>0.0021064</td>
<td class="ci-bound">0.0020248</td>
</tr>
<tr>
<td>Mean</td>
<td class="ci-bound">802.63 ms</td>
<td>807.73 ms</td>
<td class="ci-bound">813.04 ms</td>
</tr>
<tr>
<td title="Standard Deviation">Std. Dev.</td>
<td class="ci-bound">22.212 ms</td>
<td>26.573 ms</td>
<td class="ci-bound">30.450 ms</td>
</tr>
<tr>
<td>Median</td>
<td class="ci-bound">795.64 ms</td>
<td>802.60 ms</td>
<td class="ci-bound">811.51 ms</td>
</tr>
<tr>
<td title="Median Absolute Deviation">MAD</td>
<td class="ci-bound">20.569 ms</td>
<td>26.900 ms</td>
<td class="ci-bound">31.956 ms</td>
</tr>
</tbody>
</table>
</div>
<div class="additional_plots">
<h4>Additional Plots:</h4>
<ul>
<li>
<a href="typical.svg">Typical</a>
</li>
<li>
<a href="mean.svg">Mean</a>
</li>
<li>
<a href="SD.svg">Std. Dev.</a>
</li>
<li>
<a href="median.svg">Median</a>
</li>
<li>
<a href="MAD.svg">MAD</a>
</li>
</ul>
</div>
</section>
<section class="explanation">
<h4>Understanding this report:</h4>
<p>The plot on the left displays the average time per iteration for this benchmark. The shaded region
shows the estimated probability of an iteration taking a certain amount of time, while the line
shows the mean. Click on the plot for a larger view showing the outliers.</p>
<p>The plot on the right shows the average time per iteration for the samples. Each point
represents one sample.</p>
<p>See <a href="https://bheisler.github.io/criterion.rs/book/user_guide/command_line_output.html#additional-statistics">the
documentation</a> for more details on the additional statistics.</p>
</section>
</div>
</div>
<div id="footer">
<p>This report was generated by
<a href="https://github.com/bheisler/criterion.rs">Criterion.rs</a>, a statistics-driven benchmarking
library in Rust.</p>
</div>
</body>
</html>
@@ -0,0 +1,194 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
below_cache_reuse/first_stroke_cache_build
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Average Iteration Time (ms)
</text>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="163" y1="472" x2="163" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="247" y1="472" x2="247" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="332" y1="472" x2="332" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="416" y1="472" x2="416" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="501" y1="472" x2="501" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="585" y1="472" x2="585" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="670" y1="472" x2="670" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="754" y1="472" x2="754" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="839" y1="472" x2="839" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="923" y1="472" x2="923" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="428" x2="932" y2="428"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="361" x2="932" y2="361"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="294" x2="932" y2="294"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="227" x2="932" y2="227"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="160" x2="932" y2="160"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="93" x2="932" y2="93"/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
<text x="77" y="428" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
780.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,428 86,428 "/>
<text x="77" y="361" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
800.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,361 86,361 "/>
<text x="77" y="294" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
820.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,294 86,294 "/>
<text x="77" y="227" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
840.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,227 86,227 "/>
<text x="77" y="160" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
860.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,160 86,160 "/>
<text x="77" y="93" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
880.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,93 86,93 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
<text x="163" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
10
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="163,473 163,478 "/>
<text x="247" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
20
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="247,473 247,478 "/>
<text x="332" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
30
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="332,473 332,478 "/>
<text x="416" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
40
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="416,473 416,478 "/>
<text x="501" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
50
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="501,473 501,478 "/>
<text x="585" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
60
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="585,473 585,478 "/>
<text x="670" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
70
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="670,473 670,478 "/>
<text x="754" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
80
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="754,473 754,478 "/>
<text x="839" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
90
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="839,473 839,478 "/>
<text x="923" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
100
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="923,473 923,478 "/>
<circle cx="87" cy="394" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="95" cy="435" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="103" cy="436" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="112" cy="392" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="120" cy="445" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="129" cy="377" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="137" cy="257" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="146" cy="445" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="154" cy="376" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="163" cy="424" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="171" cy="418" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="179" cy="430" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="188" cy="159" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="196" cy="279" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="205" cy="460" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="213" cy="384" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="222" cy="384" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="230" cy="366" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="239" cy="396" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="247" cy="390" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="256" cy="279" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="264" cy="406" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="272" cy="249" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="281" cy="296" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="289" cy="338" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="298" cy="363" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="306" cy="283" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="315" cy="331" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="323" cy="330" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="332" cy="366" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="340" cy="286" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="348" cy="313" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="357" cy="472" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="365" cy="356" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="374" cy="409" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="382" cy="262" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="391" cy="335" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="399" cy="300" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="408" cy="420" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="416" cy="353" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="425" cy="265" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="433" cy="142" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="441" cy="201" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="450" cy="130" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="458" cy="140" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="467" cy="240" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="475" cy="261" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="484" cy="95" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="492" cy="321" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="501" cy="346" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="509" cy="321" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="517" cy="254" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="526" cy="288" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="534" cy="322" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="543" cy="215" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="551" cy="330" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="560" cy="400" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="568" cy="265" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="577" cy="314" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="585" cy="279" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="594" cy="363" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="602" cy="355" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="610" cy="397" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="619" cy="436" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="627" cy="297" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="636" cy="302" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="644" cy="212" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="653" cy="302" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="661" cy="169" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="670" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="678" cy="369" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="686" cy="337" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="695" cy="388" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="703" cy="400" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="712" cy="264" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="720" cy="353" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="729" cy="349" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="737" cy="316" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="746" cy="311" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="754" cy="136" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="763" cy="246" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="771" cy="263" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="779" cy="407" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="788" cy="426" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="796" cy="408" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="805" cy="424" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="813" cy="424" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="822" cy="411" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="830" cy="424" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="839" cy="423" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="847" cy="416" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="855" cy="389" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="864" cy="419" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="872" cy="435" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="881" cy="426" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="889" cy="416" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="898" cy="369" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="906" cy="471" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="915" cy="323" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="923" cy="376" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<text x="132" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Sample
</text>
<circle cx="112" cy="73" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

@@ -0,0 +1,187 @@
<svg width="450" height="300" viewBox="0 0 450 300" xmlns="http://www.w3.org/2000/svg">
<text x="15" y="130" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 15, 130)">
Average Iteration Time (ms)
</text>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="107" y1="244" x2="107" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="143" y1="244" x2="143" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="179" y1="244" x2="179" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="215" y1="244" x2="215" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="250" y1="244" x2="250" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="286" y1="244" x2="286" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="322" y1="244" x2="322" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="358" y1="244" x2="358" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="394" y1="244" x2="394" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="430" y1="244" x2="430" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="220" x2="434" y2="220"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="184" x2="434" y2="184"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="147" x2="434" y2="147"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="110" x2="434" y2="110"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="74" x2="434" y2="74"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="37" x2="434" y2="37"/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="74,15 74,244 "/>
<text x="65" y="220" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
780.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,220 74,220 "/>
<text x="65" y="184" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
800.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,184 74,184 "/>
<text x="65" y="147" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
820.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,147 74,147 "/>
<text x="65" y="110" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
840.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,110 74,110 "/>
<text x="65" y="74" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
860.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,74 74,74 "/>
<text x="65" y="37" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
880.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,37 74,37 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="75,245 434,245 "/>
<text x="107" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
10
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="107,245 107,250 "/>
<text x="143" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
20
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="143,245 143,250 "/>
<text x="179" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
30
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="179,245 179,250 "/>
<text x="215" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
40
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="215,245 215,250 "/>
<text x="250" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
50
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="250,245 250,250 "/>
<text x="286" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
60
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="286,245 286,250 "/>
<text x="322" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
70
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="322,245 322,250 "/>
<text x="358" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
80
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="358,245 358,250 "/>
<text x="394" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
90
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="394,245 394,250 "/>
<text x="430" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
100
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="430,245 430,250 "/>
<circle cx="75" cy="202" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="78" cy="224" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="82" cy="224" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="85" cy="201" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="89" cy="230" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="92" cy="192" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="96" cy="127" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="100" cy="230" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="103" cy="192" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="107" cy="218" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="110" cy="215" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="114" cy="221" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="118" cy="73" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="121" cy="139" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="125" cy="238" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="128" cy="196" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="132" cy="196" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="136" cy="187" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="139" cy="203" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="143" cy="199" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="146" cy="139" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="150" cy="208" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="153" cy="123" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="157" cy="148" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="161" cy="171" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="164" cy="185" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="168" cy="141" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="171" cy="167" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="175" cy="167" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="179" cy="186" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="182" cy="143" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="186" cy="157" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="189" cy="244" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="193" cy="181" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="197" cy="210" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="200" cy="130" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="204" cy="169" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="207" cy="150" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="211" cy="216" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="215" cy="179" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="218" cy="131" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="222" cy="64" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="225" cy="96" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="229" cy="57" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="232" cy="63" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="236" cy="117" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="240" cy="129" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="243" cy="38" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="247" cy="162" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="250" cy="175" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="254" cy="161" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="258" cy="125" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="261" cy="144" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="265" cy="162" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="268" cy="104" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="272" cy="167" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="276" cy="205" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="279" cy="131" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="283" cy="158" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="286" cy="139" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="290" cy="185" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="293" cy="180" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="297" cy="203" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="301" cy="225" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="304" cy="148" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="308" cy="151" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="311" cy="102" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="315" cy="151" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="319" cy="79" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="322" cy="15" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="326" cy="188" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="329" cy="170" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="333" cy="198" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="337" cy="205" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="340" cy="130" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="344" cy="179" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="347" cy="177" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="351" cy="159" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="355" cy="156" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="358" cy="61" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="362" cy="121" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="365" cy="130" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="369" cy="209" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="372" cy="219" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="376" cy="209" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="380" cy="218" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="383" cy="218" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="387" cy="211" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="390" cy="218" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="394" cy="218" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="398" cy="214" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="401" cy="199" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="405" cy="215" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="408" cy="224" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="412" cy="219" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="416" cy="214" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="419" cy="188" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="423" cy="244" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="426" cy="163" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="430" cy="192" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

@@ -0,0 +1,88 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
below_cache_reuse/first_stroke_cache_build:mean
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Density (a.u.)
</text>
<text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average time (ms)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
<text x="77" y="441" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.02
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,441 86,441 "/>
<text x="77" y="388" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.04
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,388 86,388 "/>
<text x="77" y="335" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.06
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,335 86,335 "/>
<text x="77" y="281" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.08
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,281 86,281 "/>
<text x="77" y="228" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,228 86,228 "/>
<text x="77" y="175" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.12
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,175 86,175 "/>
<text x="77" y="121" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.14
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,121 86,121 "/>
<text x="77" y="68" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.16
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,68 86,68 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
<text x="122" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
802
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="122,473 122,478 "/>
<text x="254" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
804
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="254,473 254,478 "/>
<text x="387" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
806
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="387,473 387,478 "/>
<text x="520" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
808
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="520,473 520,478 "/>
<text x="653" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
810
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="653,473 653,478 "/>
<text x="786" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
812
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="786,473 786,478 "/>
<text x="918" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
814
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="918,473 918,478 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,472 88,471 90,471 92,470 93,469 95,469 97,468 98,467 100,466 102,466 103,465 105,464 107,463 109,463 110,462 112,461 114,460 115,459 117,459 119,458 120,457 122,456 124,455 125,454 127,453 129,452 131,451 132,450 134,449 136,448 137,447 139,446 141,445 142,444 144,443 146,442 147,440 149,439 151,438 153,437 154,435 156,434 158,433 159,431 161,430 163,428 164,427 166,426 168,424 169,423 171,421 173,420 175,419 176,417 178,416 180,414 181,413 183,412 185,410 186,409 188,407 190,406 191,404 193,403 195,401 197,399 198,398 200,396 202,394 203,393 205,391 207,389 208,388 210,386 212,384 214,383 215,381 217,379 219,378 220,376 222,375 224,373 225,372 227,370 229,369 230,368 232,366 234,365 236,364 237,362 239,361 241,360 242,358 244,357 246,355 247,354 249,352 251,351 252,349 254,347 256,345 258,343 259,341 261,339 263,337 264,335 266,332 268,330 269,327 271,325 273,322 274,320 276,317 278,314 280,312 281,309 283,306 285,304 286,301 288,298 290,296 291,293 293,290 295,288 296,285 298,283 300,280 302,278 303,276 305,273 307,271 308,269 310,266 312,264 313,262 315,259 317,257 318,255 320,252 322,250 324,248 325,245 327,243 329,241 330,238 332,236 334,234 335,231 337,229 339,227 341,225 342,222 344,220 346,218 347,216 349,213 351,211 352,209 354,206 356,204 357,202 359,200 361,197 363,195 364,193 366,190 368,188 369,186 371,183 373,181 374,179 376,176 378,174 379,172 381,169 383,167 385,165 386,162 388,160 390,158 391,156 393,154 395,152 396,149 398,147 400,145 401,143 403,141 405,140 407,138 408,136 410,134 412,133 413,131 415,130 417,128 418,127 420,126 422,125 423,124 425,123 427,123 429,122 430,121 432,121 434,121 435,120 437,120 439,119 440,119 442,119 444,118 445,118 447,117 449,117 451,116 452,115 454,115 456,114 457,113 459,112 461,111 462,110 464,109 466,108 468,108 469,107 471,106 473,105 474,104 476,103 478,102 479,101 481,100 483,99 484,98 486,97 488,97 490,96 491,95 493,95 495,94 496,94 498,94 500,94 501,94 503,94 505,94 506,94 508,95 510,95 512,96 513,97 515,98 517,99 518,100 520,101 522,102 523,103 525,104 527,106 528,107 530,108 532,110 534,111 535,112 537,114 539,115 540,116 542,117 544,119 545,120 547,121 549,122 550,123 552,124 554,125 556,126 557,127 559,127 561,128 562,128 564,129 566,130 567,130 569,131 571,131 573,132 574,132 576,133 578,133 579,134 581,135 583,136 584,137 586,139 588,140 589,142 591,143 593,145 595,147 596,149 598,152 600,154 601,156 603,159 605,161 606,164 608,167 610,169 611,172 613,174 615,177 617,179 618,182 620,184 622,187 623,189 625,191 627,194 628,196 630,198 632,200 633,202 635,205 637,207 639,209 640,211 642,213 644,215 645,217 647,219 649,221 650,223 652,225 654,227 655,229 657,231 659,233 661,235 662,238 664,240 666,242 667,244 669,246 671,248 672,250 674,252 676,254 677,256 679,258 681,260 683,262 684,264 686,266 688,268 689,270 691,272 693,275 694,277 696,279 698,281 700,284 701,286 703,289 705,291 706,293 708,296 710,298 711,301 713,303 715,306 716,308 718,311 720,313 722,315 723,318 725,320 727,322 728,324 730,326 732,328 733,330 735,332 737,334 738,336 740,338 742,340 744,341 745,343 747,345 749,347 750,348 752,350 754,352 755,354 757,355 759,357 760,359 762,360 764,362 766,363 767,365 769,367 771,368 772,369 774,371 776,372 777,374 779,375 781,376 782,378 784,379 786,380 788,382 789,383 791,385 793,386 794,388 796,389 798,391 799,393 801,394 803,396 804,398 806,400 808,401 810,403 811,405 813,407 815,409 816,411 818,413 820,414 821,416 823,418 825,420 827,421 828,423 830,424 832,426 833,427 835,429 837,430 838,431 840,432 842,433 843,434 845,435 847,436 849,437 850,438 852,439 854,440 855,441 857,442 859,443 860,444 862,444 864,445 865,446 867,447 869,448 871,448 872,449 874,450 876,451 877,452 879,452 881,453 882,454 884,455 886,455 887,456 889,457 891,458 893,458 894,459 896,460 898,460 899,461 901,462 903,462 904,463 906,463 908,464 909,465 911,465 913,466 915,466 916,467 918,468 920,468 921,469 923,469 925,470 926,471 928,471 930,472 932,472 "/>
<polygon opacity="0.25" fill="#1F78B4" points="164,427 166,426 168,424 169,423 171,421 173,420 175,419 176,417 178,416 180,414 181,413 183,412 185,410 186,409 188,407 190,406 191,404 193,403 195,401 197,399 198,398 200,396 202,394 203,393 205,391 207,389 208,388 210,386 212,384 214,383 215,381 217,379 219,378 220,376 222,375 224,373 225,372 227,370 229,369 230,368 232,366 234,365 236,364 237,362 239,361 241,360 242,358 244,357 246,355 247,354 249,352 251,351 252,349 254,347 256,345 258,343 259,341 261,339 263,337 264,335 266,332 268,330 269,327 271,325 273,322 274,320 276,317 278,314 280,312 281,309 283,306 285,304 286,301 288,298 290,296 291,293 293,290 295,288 296,285 298,283 300,280 302,278 303,276 305,273 307,271 308,269 310,266 312,264 313,262 315,259 317,257 318,255 320,252 322,250 324,248 325,245 327,243 329,241 330,238 332,236 334,234 335,231 337,229 339,227 341,225 342,222 344,220 346,218 347,216 349,213 351,211 352,209 354,206 356,204 357,202 359,200 361,197 363,195 364,193 366,190 368,188 369,186 371,183 373,181 374,179 376,176 378,174 379,172 381,169 383,167 385,165 386,162 388,160 390,158 391,156 393,154 395,152 396,149 398,147 400,145 401,143 403,141 405,140 407,138 408,136 410,134 412,133 413,131 415,130 417,128 418,127 420,126 422,125 423,124 425,123 427,123 429,122 430,121 432,121 434,121 435,120 437,120 439,119 440,119 442,119 444,118 445,118 447,117 449,117 451,116 452,115 454,115 456,114 457,113 459,112 461,111 462,110 464,109 466,108 468,108 469,107 471,106 473,105 474,104 476,103 478,102 479,101 481,100 483,99 484,98 486,97 488,97 490,96 491,95 493,95 495,94 496,94 498,94 500,94 501,94 503,94 505,94 506,94 508,95 510,95 512,96 513,97 515,98 517,99 518,100 520,101 522,102 523,103 525,104 527,106 528,107 530,108 532,110 534,111 535,112 537,114 539,115 540,116 542,117 544,119 545,120 547,121 549,122 550,123 552,124 554,125 556,126 557,127 559,127 561,128 562,128 564,129 566,130 567,130 569,131 571,131 573,132 574,132 576,133 578,133 579,134 581,135 583,136 584,137 586,139 588,140 589,142 591,143 593,145 595,147 596,149 598,152 600,154 601,156 603,159 605,161 606,164 608,167 610,169 611,172 613,174 615,177 617,179 618,182 620,184 622,187 623,189 625,191 627,194 628,196 630,198 632,200 633,202 635,205 637,207 639,209 640,211 642,213 644,215 645,217 647,219 649,221 650,223 652,225 654,227 655,229 657,231 659,233 661,235 662,238 664,240 666,242 667,244 669,246 671,248 672,250 674,252 676,254 677,256 679,258 681,260 683,262 684,264 686,266 688,268 689,270 691,272 693,275 694,277 696,279 698,281 700,284 701,286 703,289 705,291 706,293 708,296 710,298 711,301 713,303 715,306 716,308 718,311 720,313 722,315 723,318 725,320 727,322 728,324 730,326 732,328 733,330 735,332 737,334 738,336 740,338 742,340 744,341 745,343 747,345 749,347 750,348 752,350 754,352 755,354 757,355 759,357 760,359 762,360 764,362 766,363 767,365 769,367 771,368 772,369 774,371 776,372 777,374 779,375 781,376 782,378 784,379 786,380 788,382 789,383 791,385 793,386 794,388 796,389 798,391 799,393 801,394 803,396 804,398 806,400 808,401 810,403 811,405 813,407 815,409 816,411 818,413 820,414 821,416 823,418 825,420 827,421 828,423 830,424 832,426 833,427 835,429 837,430 838,431 840,432 842,433 843,434 845,435 847,436 849,437 850,438 852,439 852,473 164,473 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="3" points="502,473 502,94 "/>
<text x="798" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Bootstrap distribution
</text>
<text x="798" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Confidence interval
</text>
<text x="798" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Point estimate
</text>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,73 788,73 "/>
<rect x="768" y="83" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,103 788,103 "/>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1,100 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
below_cache_reuse/first_stroke_cache_build:median
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Density (a.u.)
</text>
<text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average time (ms)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
<text x="77" y="430" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.02
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,430 86,430 "/>
<text x="77" y="383" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.04
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,383 86,383 "/>
<text x="77" y="336" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.06
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,336 86,336 "/>
<text x="77" y="289" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.08
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,289 86,289 "/>
<text x="77" y="241" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,241 86,241 "/>
<text x="77" y="194" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.12
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,194 86,194 "/>
<text x="77" y="147" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.14
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,147 86,147 "/>
<text x="77" y="100" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.16
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,100 86,100 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
<text x="92" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
794
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="92,473 92,478 "/>
<text x="179" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
796
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="179,473 179,478 "/>
<text x="266" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
798
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="266,473 266,478 "/>
<text x="353" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
800
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="353,473 353,478 "/>
<text x="440" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
802
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="440,473 440,478 "/>
<text x="528" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
804
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="528,473 528,478 "/>
<text x="615" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
806
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="615,473 615,478 "/>
<text x="702" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
808
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="702,473 702,478 "/>
<text x="789" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
810
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="789,473 789,478 "/>
<text x="876" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
812
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="876,473 876,478 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,470 88,470 90,470 92,470 93,470 95,469 97,469 98,469 100,469 102,468 103,468 105,468 107,468 109,468 110,468 112,467 114,467 115,467 117,467 119,467 120,466 122,466 124,465 125,464 127,463 129,462 131,461 132,460 134,458 136,457 137,455 139,453 141,451 142,449 144,447 146,445 147,443 149,441 151,440 153,438 154,437 156,436 158,435 159,435 161,435 163,435 164,435 166,436 168,437 169,437 171,439 173,440 175,441 176,442 178,443 180,444 181,445 183,445 185,446 186,446 188,446 190,446 191,446 193,446 195,446 197,445 198,445 200,444 202,444 203,443 205,443 207,443 208,442 210,442 212,442 214,441 215,441 217,440 219,439 220,438 222,437 224,436 225,434 227,432 229,430 230,428 232,425 234,421 236,418 237,414 239,410 241,405 242,401 244,396 246,391 247,386 249,380 251,375 252,369 254,363 256,358 258,352 259,346 261,340 263,334 264,329 266,323 268,317 269,312 271,306 273,301 274,296 276,291 278,287 280,282 281,279 283,275 285,272 286,269 288,266 290,264 291,262 293,261 295,259 296,258 298,257 300,256 302,256 303,255 305,254 307,254 308,253 310,253 312,253 313,253 315,253 317,254 318,255 320,256 322,258 324,261 325,264 327,267 329,272 330,276 332,282 334,288 335,294 337,300 339,306 341,313 342,319 344,325 346,331 347,336 349,340 351,344 352,347 354,349 356,351 357,351 359,352 361,351 363,350 364,349 366,348 368,346 369,345 371,343 373,342 374,341 376,340 378,340 379,339 381,339 383,340 385,340 386,341 388,341 390,341 391,341 393,341 395,340 396,338 398,335 400,332 401,328 403,323 405,317 407,311 408,303 410,295 412,286 413,277 415,268 417,258 418,247 420,237 422,227 423,217 425,207 427,198 429,189 430,180 432,171 434,163 435,156 437,148 439,141 440,135 442,128 444,122 445,117 447,112 449,107 451,103 452,99 454,96 456,94 457,93 459,92 461,92 462,94 464,96 466,99 468,103 469,108 471,114 473,121 474,128 476,136 478,145 479,153 481,163 483,172 484,181 486,190 488,199 490,207 491,216 493,224 495,231 496,238 498,245 500,251 501,257 503,263 505,268 506,273 508,277 510,282 512,286 513,290 515,294 517,298 518,302 520,305 522,309 523,312 525,315 527,318 528,321 530,324 532,326 534,329 535,331 537,334 539,336 540,338 542,340 544,342 545,344 547,346 549,348 550,350 552,353 554,355 556,357 557,359 559,361 561,364 562,366 564,368 566,370 567,372 569,373 571,375 573,376 574,377 576,377 578,377 579,377 581,377 583,376 584,376 586,375 588,374 589,373 591,372 593,371 595,370 596,369 598,369 600,369 601,369 603,370 605,371 606,372 608,373 610,375 611,377 613,379 615,381 617,383 618,385 620,386 622,387 623,388 625,388 627,387 628,386 630,384 632,381 633,378 635,374 637,369 639,363 640,357 642,351 644,344 645,338 647,331 649,324 650,318 652,311 654,306 655,300 657,296 659,292 661,288 662,286 664,284 666,283 667,283 669,283 671,284 672,286 674,289 676,291 677,295 679,298 681,302 683,306 684,311 686,315 688,319 689,323 691,327 693,331 694,335 696,338 698,341 700,344 701,347 703,349 705,351 706,353 708,354 710,356 711,357 713,358 715,359 716,359 718,360 720,360 722,360 723,359 725,359 727,358 728,357 730,356 732,355 733,354 735,352 737,350 738,348 740,347 742,345 744,343 745,342 747,341 749,341 750,341 752,342 754,343 755,345 757,347 759,350 760,354 762,359 764,364 766,369 767,375 769,381 771,387 772,393 774,399 776,405 777,410 779,415 781,420 782,424 784,428 786,431 788,434 789,436 791,438 793,440 794,441 796,442 798,442 799,443 801,443 803,443 804,444 806,444 808,444 810,445 811,445 813,446 815,446 816,447 818,448 820,449 821,449 823,450 825,451 827,451 828,451 830,451 832,451 833,451 835,450 837,450 838,449 840,448 842,446 843,445 845,443 847,441 849,440 850,438 852,437 854,435 855,434 857,433 859,432 860,431 862,431 864,431 865,431 867,431 869,432 871,433 872,434 874,436 876,437 877,439 879,441 881,443 882,445 884,447 886,449 887,451 889,453 891,455 893,457 894,458 896,460 898,461 899,463 901,464 903,465 904,466 906,467 908,468 909,468 911,469 913,469 915,470 916,470 918,471 920,471 921,471 923,471 925,472 926,472 928,472 930,472 932,472 "/>
<polygon opacity="0.25" fill="#1F78B4" points="164,435 166,436 168,437 169,437 171,439 173,440 175,441 176,442 178,443 180,444 181,445 183,445 185,446 186,446 188,446 190,446 191,446 193,446 195,446 197,445 198,445 200,444 202,444 203,443 205,443 207,443 208,442 210,442 212,442 214,441 215,441 217,440 219,439 220,438 222,437 224,436 225,434 227,432 229,430 230,428 232,425 234,421 236,418 237,414 239,410 241,405 242,401 244,396 246,391 247,386 249,380 251,375 252,369 254,363 256,358 258,352 259,346 261,340 263,334 264,329 266,323 268,317 269,312 271,306 273,301 274,296 276,291 278,287 280,282 281,279 283,275 285,272 286,269 288,266 290,264 291,262 293,261 295,259 296,258 298,257 300,256 302,256 303,255 305,254 307,254 308,253 310,253 312,253 313,253 315,253 317,254 318,255 320,256 322,258 324,261 325,264 327,267 329,272 330,276 332,282 334,288 335,294 337,300 339,306 341,313 342,319 344,325 346,331 347,336 349,340 351,344 352,347 354,349 356,351 357,351 359,352 361,351 363,350 364,349 366,348 368,346 369,345 371,343 373,342 374,341 376,340 378,340 379,339 381,339 383,340 385,340 386,341 388,341 390,341 391,341 393,341 395,340 396,338 398,335 400,332 401,328 403,323 405,317 407,311 408,303 410,295 412,286 413,277 415,268 417,258 418,247 420,237 422,227 423,217 425,207 427,198 429,189 430,180 432,171 434,163 435,156 437,148 439,141 440,135 442,128 444,122 445,117 447,112 449,107 451,103 452,99 454,96 456,94 457,93 459,92 461,92 462,94 464,96 466,99 468,103 469,108 471,114 473,121 474,128 476,136 478,145 479,153 481,163 483,172 484,181 486,190 488,199 490,207 491,216 493,224 495,231 496,238 498,245 500,251 501,257 503,263 505,268 506,273 508,277 510,282 512,286 513,290 515,294 517,298 518,302 520,305 522,309 523,312 525,315 527,318 528,321 530,324 532,326 534,329 535,331 537,334 539,336 540,338 542,340 544,342 545,344 547,346 549,348 550,350 552,353 554,355 556,357 557,359 559,361 561,364 562,366 564,368 566,370 567,372 569,373 571,375 573,376 574,377 576,377 578,377 579,377 581,377 583,376 584,376 586,375 588,374 589,373 591,372 593,371 595,370 596,369 598,369 600,369 601,369 603,370 605,371 606,372 608,373 610,375 611,377 613,379 615,381 617,383 618,385 620,386 622,387 623,388 625,388 627,387 628,386 630,384 632,381 633,378 635,374 637,369 639,363 640,357 642,351 644,344 645,338 647,331 649,324 650,318 652,311 654,306 655,300 657,296 659,292 661,288 662,286 664,284 666,283 667,283 669,283 671,284 672,286 674,289 676,291 677,295 679,298 681,302 683,306 684,311 686,315 688,319 689,323 691,327 693,331 694,335 696,338 698,341 700,344 701,347 703,349 705,351 706,353 708,354 710,356 711,357 713,358 715,359 716,359 718,360 720,360 722,360 723,359 725,359 727,358 728,357 730,356 732,355 733,354 735,352 737,350 738,348 740,347 742,345 744,343 745,342 747,341 749,341 750,341 752,342 754,343 755,345 757,347 759,350 760,354 762,359 764,364 766,369 767,375 769,381 771,387 772,393 774,399 776,405 777,410 779,415 781,420 782,424 784,428 786,431 788,434 789,436 791,438 793,440 794,441 796,442 798,442 799,443 801,443 803,443 804,444 806,444 808,444 810,445 811,445 813,446 815,446 816,447 818,448 820,449 821,449 823,450 825,451 827,451 828,451 830,451 832,451 833,451 835,450 837,450 838,449 840,448 842,446 843,445 845,443 847,441 849,440 850,438 852,437 852,473 164,473 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="3" points="467,473 467,101 "/>
<text x="798" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Bootstrap distribution
</text>
<text x="798" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Confidence interval
</text>
<text x="798" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Point estimate
</text>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,73 788,73 "/>
<rect x="768" y="83" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,103 788,103 "/>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

@@ -0,0 +1,161 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
below_cache_reuse/first_stroke_cache_build
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Iterations
</text>
<text x="480" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average Time (ms)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
<text x="77" y="472" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,472 86,472 "/>
<text x="77" y="431" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,431 86,431 "/>
<text x="77" y="389" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,389 86,389 "/>
<text x="77" y="347" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.3
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,347 86,347 "/>
<text x="77" y="305" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,305 86,305 "/>
<text x="77" y="263" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,263 86,263 "/>
<text x="77" y="221" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,221 86,221 "/>
<text x="77" y="179" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.7
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,179 86,179 "/>
<text x="77" y="137" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,137 86,137 "/>
<text x="77" y="95" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.9
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,95 86,95 "/>
<text x="77" y="53" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,53 86,53 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 872,473 "/>
<text x="114" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
740
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="114,473 114,478 "/>
<text x="196" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
760
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="196,473 196,478 "/>
<text x="278" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
780
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="278,473 278,478 "/>
<text x="359" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
800
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="359,473 359,478 "/>
<text x="441" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
820
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="441,473 441,478 "/>
<text x="523" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
840
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="523,473 523,478 "/>
<text x="604" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
860
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="604,473 604,478 "/>
<text x="686" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
880
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="686,473 686,478 "/>
<text x="768" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
900
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="768,473 768,478 "/>
<text x="849" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
920
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="849,473 849,478 "/>
<text x="933" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(90, 933, 263)">
Density (a.u.)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,53 873,473 "/>
<text x="883" y="473" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,473 878,473 "/>
<text x="883" y="418" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.002
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,418 878,418 "/>
<text x="883" y="362" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.004
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,362 878,362 "/>
<text x="883" y="306" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.006
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,306 878,306 "/>
<text x="883" y="250" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.008
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,250 878,250 "/>
<text x="883" y="194" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.01
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,194 878,194 "/>
<text x="883" y="138" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.012
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,138 878,138 "/>
<text x="883" y="82" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.014
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,82 878,82 "/>
<polygon opacity="0.5" fill="#1F78B4" points="87,473 88,473 90,473 91,473 93,473 94,473 96,473 98,473 99,473 101,473 102,473 104,473 105,472 107,472 109,472 110,472 112,472 113,472 115,472 116,471 118,471 120,471 121,471 123,471 124,470 126,470 127,470 129,469 131,469 132,469 134,468 135,468 137,467 138,467 140,466 142,466 143,465 145,465 146,464 148,463 150,462 151,461 153,461 154,460 156,459 157,458 159,456 161,455 162,454 164,453 165,451 167,450 168,448 170,446 172,445 173,443 175,441 176,439 178,437 179,435 181,432 183,430 184,428 186,425 187,422 189,419 190,416 192,413 194,410 195,407 197,404 198,400 200,396 201,393 203,389 205,385 206,380 208,376 209,372 211,367 213,363 214,358 216,353 217,348 219,343 220,338 222,332 224,327 225,321 227,316 228,310 230,304 231,298 233,292 235,286 236,280 238,274 239,268 241,261 242,255 244,249 246,242 247,236 249,230 250,223 252,217 253,211 255,204 257,198 258,192 260,186 261,180 263,174 264,168 266,162 268,156 269,150 271,145 272,140 274,134 276,129 277,124 279,119 280,115 282,110 283,106 285,101 287,97 288,93 290,90 291,86 293,83 294,80 296,77 298,74 299,71 301,69 302,67 304,65 305,63 307,61 309,60 310,58 312,57 313,56 315,55 316,55 318,54 320,54 321,54 323,53 324,54 326,54 327,54 329,54 331,55 332,56 334,56 335,57 337,58 339,59 340,60 342,61 343,62 345,64 346,65 348,66 350,68 351,69 353,71 354,72 356,74 357,75 359,77 361,78 362,80 364,82 365,83 367,85 368,86 370,88 372,90 373,91 375,93 376,94 378,96 379,98 381,99 383,101 384,102 386,104 387,105 389,107 391,109 392,110 394,112 395,113 397,115 398,116 400,118 402,119 403,121 405,122 406,124 408,125 409,127 411,128 413,130 414,131 416,133 417,134 419,136 420,138 422,139 424,141 425,143 427,144 428,146 430,148 431,150 433,152 435,154 436,155 438,157 439,159 441,162 442,164 444,166 446,168 447,170 449,173 450,175 452,177 454,180 455,182 457,185 458,188 460,190 461,193 463,196 465,199 466,202 468,205 469,208 471,211 472,214 474,217 476,220 477,223 479,227 480,230 482,233 483,237 485,240 487,244 488,247 490,251 491,255 493,258 494,262 496,265 498,269 499,273 501,276 502,280 504,284 505,287 507,291 509,294 510,298 512,302 513,305 515,309 517,312 518,316 520,319 521,322 523,326 524,329 526,332 528,335 529,338 531,341 532,344 534,347 535,350 537,352 539,355 540,357 542,360 543,362 545,365 546,367 548,369 550,371 551,373 553,375 554,377 556,378 557,380 559,381 561,383 562,384 564,386 565,387 567,388 568,389 570,390 572,391 573,392 575,393 576,394 578,395 580,395 581,396 583,396 584,397 586,397 587,398 589,398 591,399 592,399 594,399 595,400 597,400 598,400 600,400 602,401 603,401 605,401 606,401 608,402 609,402 611,402 613,402 614,403 616,403 617,403 619,403 620,404 622,404 624,404 625,405 627,405 628,406 630,406 632,406 633,407 635,407 636,408 638,409 639,409 641,410 643,410 644,411 646,412 647,413 649,413 650,414 652,415 654,416 655,416 657,417 658,418 660,419 661,420 663,421 665,422 666,422 668,423 669,424 671,425 672,426 674,427 676,428 677,429 679,430 680,430 682,431 683,432 685,433 687,434 688,435 690,436 691,436 693,437 695,438 696,439 698,440 699,440 701,441 702,442 704,443 706,443 707,444 709,445 710,445 712,446 713,447 715,447 717,448 718,448 720,449 721,450 723,450 724,451 726,451 728,452 729,452 731,453 732,453 734,454 735,454 737,455 739,455 740,456 742,456 743,457 745,457 746,458 748,458 750,459 751,459 753,459 754,460 756,460 758,461 759,461 761,462 762,462 764,462 765,463 767,463 769,463 770,464 772,464 773,464 775,465 776,465 778,466 780,466 781,466 783,466 784,467 786,467 787,467 789,468 791,468 792,468 794,468 795,469 797,469 798,469 800,469 802,470 803,470 805,470 806,470 808,470 809,471 811,471 813,471 814,471 816,471 817,471 819,471 821,472 822,472 824,472 825,472 827,472 828,472 830,472 832,472 833,472 835,473 836,473 838,473 839,473 841,473 843,473 844,473 846,473 847,473 849,473 850,473 852,473 854,473 855,473 857,473 858,473 860,473 861,473 863,473 865,473 866,473 868,473 869,473 871,473 873,473 873,473 87,473 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="391,472 391,53 "/>
<polyline fill="none" opacity="1" stroke="#FF7F00" stroke-width="1" points="87,472 87,53 "/>
<polyline fill="none" opacity="1" stroke="#FF7F00" stroke-width="1" points="685,472 685,53 "/>
<polyline fill="none" opacity="1" stroke="#E31A1C" stroke-width="1" points="87,472 87,53 "/>
<polyline fill="none" opacity="1" stroke="#E31A1C" stroke-width="1" points="873,472 873,53 "/>
<circle cx="734" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="734" cy="53" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
<text x="776" y="228" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
PDF
</text>
<text x="776" y="243" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Mean
</text>
<text x="776" y="258" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
&quot;Clean&quot; sample
</text>
<text x="776" y="273" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Mild outliers
</text>
<text x="776" y="288" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Severe outliers
</text>
<rect x="746" y="228" width="20" height="10" opacity="0.5" fill="#1F78B4" stroke="none"/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="746,248 766,248 "/>
<circle cx="756" cy="263" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="756" cy="278" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
<circle cx="756" cy="293" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

@@ -0,0 +1,64 @@
<svg width="450" height="300" viewBox="0 0 450 300" xmlns="http://www.w3.org/2000/svg">
<text x="15" y="130" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 15, 130)">
Density (a.u.)
</text>
<text x="255" y="285" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average Time (ms)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="74,15 74,244 "/>
<text x="65" y="244" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,244 74,244 "/>
<text x="65" y="217" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.002
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,217 74,217 "/>
<text x="65" y="189" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.004
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,189 74,189 "/>
<text x="65" y="161" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.006
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,161 74,161 "/>
<text x="65" y="134" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.008
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,134 74,134 "/>
<text x="65" y="106" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.01
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,106 74,106 "/>
<text x="65" y="78" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.012
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,78 74,78 "/>
<text x="65" y="50" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.014
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,50 74,50 "/>
<text x="65" y="23" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.016
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,23 74,23 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="75,245 434,245 "/>
<text x="106" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
750
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="106,245 106,250 "/>
<text x="199" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
800
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="199,245 199,250 "/>
<text x="293" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
850
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="293,245 293,250 "/>
<text x="386" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
900
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="386,245 386,250 "/>
<polygon opacity="0.25" fill="#1F78B4" points="75,244 75,244 76,244 77,244 77,244 78,244 79,244 80,244 80,244 81,244 82,244 82,244 83,244 84,244 85,244 85,244 86,244 87,244 87,244 88,244 89,243 90,243 90,243 91,243 92,243 92,243 93,243 94,242 95,242 95,242 96,242 97,242 98,241 98,241 99,241 100,241 100,240 101,240 102,240 103,239 103,239 104,239 105,238 105,238 106,237 107,237 108,236 108,235 109,235 110,234 110,233 111,233 112,232 113,231 113,230 114,229 115,228 116,227 116,226 117,225 118,224 118,223 119,222 120,220 121,219 121,218 122,216 123,215 123,213 124,212 125,210 126,208 126,206 127,204 128,202 128,200 129,198 130,196 131,194 131,192 132,190 133,187 133,185 134,182 135,180 136,177 136,174 137,172 138,169 139,166 139,163 140,161 141,158 141,155 142,152 143,149 144,146 144,142 145,139 146,136 146,133 147,130 148,127 149,124 149,121 150,117 151,114 151,111 152,108 153,105 154,102 154,99 155,96 156,93 157,90 157,87 158,84 159,82 159,79 160,76 161,74 162,71 162,69 163,67 164,64 164,62 165,60 166,58 167,56 167,54 168,53 169,51 169,49 170,48 171,46 172,45 172,44 173,43 174,42 175,41 175,40 176,39 177,39 177,38 178,38 179,37 180,37 180,37 181,36 182,36 182,36 183,36 184,36 185,37 185,37 186,37 187,37 187,38 188,38 189,39 190,39 190,40 191,40 192,41 192,41 193,42 194,43 195,43 195,44 196,45 197,46 198,46 198,47 199,48 200,49 200,49 201,50 202,51 203,52 203,53 204,53 205,54 205,55 206,56 207,57 208,57 208,58 209,59 210,60 210,61 211,61 212,62 213,63 213,64 214,64 215,65 216,66 216,67 217,67 218,68 218,69 219,70 220,70 221,71 221,72 222,73 223,73 223,74 224,75 225,76 226,76 226,77 227,78 228,79 228,80 229,81 230,81 231,82 231,83 232,84 233,85 233,86 234,87 235,88 236,89 236,90 237,91 238,92 239,93 239,94 240,95 241,97 241,98 242,99 243,100 244,101 244,103 245,104 246,105 246,107 247,108 248,110 249,111 249,113 250,114 251,116 251,117 252,119 253,121 254,122 254,124 255,126 256,127 257,129 257,131 258,132 259,134 259,136 260,138 261,140 262,141 262,143 263,145 264,147 264,149 265,150 266,152 267,154 267,156 268,158 269,159 269,161 270,163 271,165 272,166 272,168 273,170 274,171 275,173 275,174 276,176 277,177 277,179 278,180 279,182 280,183 280,184 281,186 282,187 282,188 283,189 284,190 285,192 285,193 286,194 287,195 287,196 288,196 289,197 290,198 290,199 291,200 292,200 292,201 293,202 294,202 295,203 295,203 296,204 297,204 298,205 298,205 299,205 300,206 300,206 301,206 302,207 303,207 303,207 304,207 305,207 305,208 306,208 307,208 308,208 308,208 309,208 310,208 310,209 311,209 312,209 313,209 313,209 314,209 315,209 316,209 316,209 317,210 318,210 318,210 319,210 320,210 321,210 321,211 322,211 323,211 323,211 324,212 325,212 326,212 326,212 327,213 328,213 328,213 329,214 330,214 331,214 331,215 332,215 333,215 333,216 334,216 335,217 336,217 336,217 337,218 338,218 339,219 339,219 340,220 341,220 341,221 342,221 343,221 344,222 344,222 345,223 346,223 346,224 347,224 348,224 349,225 349,225 350,226 351,226 351,227 352,227 353,227 354,228 354,228 355,228 356,229 357,229 357,230 358,230 359,230 359,231 360,231 361,231 362,232 362,232 363,232 364,232 364,233 365,233 366,233 367,234 367,234 368,234 369,234 369,235 370,235 371,235 372,235 372,236 373,236 374,236 375,236 375,236 376,237 377,237 377,237 378,237 379,238 380,238 380,238 381,238 382,238 382,239 383,239 384,239 385,239 385,239 386,240 387,240 387,240 388,240 389,240 390,240 390,241 391,241 392,241 392,241 393,241 394,241 395,241 395,242 396,242 397,242 398,242 398,242 399,242 400,242 400,242 401,243 402,243 403,243 403,243 404,243 405,243 405,243 406,243 407,243 408,243 408,243 409,244 410,244 410,244 411,244 412,244 413,244 413,244 414,244 415,244 416,244 416,244 417,244 418,244 418,244 419,244 420,244 421,244 421,244 422,244 423,244 423,244 424,244 425,244 426,244 426,244 427,244 428,244 428,244 429,244 430,244 431,244 431,244 432,244 433,244 434,244 434,244 75,244 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="2" points="214,244 214,64 "/>
</svg>

After

Width:  |  Height:  |  Size: 7.6 KiB

@@ -0,0 +1,88 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
below_cache_reuse/first_stroke_cache_build:typical
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Density (a.u.)
</text>
<text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average time (ms)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
<text x="77" y="441" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.02
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,441 86,441 "/>
<text x="77" y="388" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.04
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,388 86,388 "/>
<text x="77" y="335" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.06
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,335 86,335 "/>
<text x="77" y="281" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.08
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,281 86,281 "/>
<text x="77" y="228" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,228 86,228 "/>
<text x="77" y="175" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.12
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,175 86,175 "/>
<text x="77" y="121" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.14
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,121 86,121 "/>
<text x="77" y="68" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.16
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,68 86,68 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
<text x="122" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
802
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="122,473 122,478 "/>
<text x="254" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
804
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="254,473 254,478 "/>
<text x="387" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
806
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="387,473 387,478 "/>
<text x="520" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
808
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="520,473 520,478 "/>
<text x="653" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
810
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="653,473 653,478 "/>
<text x="786" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
812
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="786,473 786,478 "/>
<text x="918" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
814
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="918,473 918,478 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,472 88,471 90,471 92,470 93,469 95,469 97,468 98,467 100,466 102,466 103,465 105,464 107,463 109,463 110,462 112,461 114,460 115,459 117,459 119,458 120,457 122,456 124,455 125,454 127,453 129,452 131,451 132,450 134,449 136,448 137,447 139,446 141,445 142,444 144,443 146,442 147,440 149,439 151,438 153,437 154,435 156,434 158,433 159,431 161,430 163,428 164,427 166,426 168,424 169,423 171,421 173,420 175,419 176,417 178,416 180,414 181,413 183,412 185,410 186,409 188,407 190,406 191,404 193,403 195,401 197,399 198,398 200,396 202,394 203,393 205,391 207,389 208,388 210,386 212,384 214,383 215,381 217,379 219,378 220,376 222,375 224,373 225,372 227,370 229,369 230,368 232,366 234,365 236,364 237,362 239,361 241,360 242,358 244,357 246,355 247,354 249,352 251,351 252,349 254,347 256,345 258,343 259,341 261,339 263,337 264,335 266,332 268,330 269,327 271,325 273,322 274,320 276,317 278,314 280,312 281,309 283,306 285,304 286,301 288,298 290,296 291,293 293,290 295,288 296,285 298,283 300,280 302,278 303,276 305,273 307,271 308,269 310,266 312,264 313,262 315,259 317,257 318,255 320,252 322,250 324,248 325,245 327,243 329,241 330,238 332,236 334,234 335,231 337,229 339,227 341,225 342,222 344,220 346,218 347,216 349,213 351,211 352,209 354,206 356,204 357,202 359,200 361,197 363,195 364,193 366,190 368,188 369,186 371,183 373,181 374,179 376,176 378,174 379,172 381,169 383,167 385,165 386,162 388,160 390,158 391,156 393,154 395,152 396,149 398,147 400,145 401,143 403,141 405,140 407,138 408,136 410,134 412,133 413,131 415,130 417,128 418,127 420,126 422,125 423,124 425,123 427,123 429,122 430,121 432,121 434,121 435,120 437,120 439,119 440,119 442,119 444,118 445,118 447,117 449,117 451,116 452,115 454,115 456,114 457,113 459,112 461,111 462,110 464,109 466,108 468,108 469,107 471,106 473,105 474,104 476,103 478,102 479,101 481,100 483,99 484,98 486,97 488,97 490,96 491,95 493,95 495,94 496,94 498,94 500,94 501,94 503,94 505,94 506,94 508,95 510,95 512,96 513,97 515,98 517,99 518,100 520,101 522,102 523,103 525,104 527,106 528,107 530,108 532,110 534,111 535,112 537,114 539,115 540,116 542,117 544,119 545,120 547,121 549,122 550,123 552,124 554,125 556,126 557,127 559,127 561,128 562,128 564,129 566,130 567,130 569,131 571,131 573,132 574,132 576,133 578,133 579,134 581,135 583,136 584,137 586,139 588,140 589,142 591,143 593,145 595,147 596,149 598,152 600,154 601,156 603,159 605,161 606,164 608,167 610,169 611,172 613,174 615,177 617,179 618,182 620,184 622,187 623,189 625,191 627,194 628,196 630,198 632,200 633,202 635,205 637,207 639,209 640,211 642,213 644,215 645,217 647,219 649,221 650,223 652,225 654,227 655,229 657,231 659,233 661,235 662,238 664,240 666,242 667,244 669,246 671,248 672,250 674,252 676,254 677,256 679,258 681,260 683,262 684,264 686,266 688,268 689,270 691,272 693,275 694,277 696,279 698,281 700,284 701,286 703,289 705,291 706,293 708,296 710,298 711,301 713,303 715,306 716,308 718,311 720,313 722,315 723,318 725,320 727,322 728,324 730,326 732,328 733,330 735,332 737,334 738,336 740,338 742,340 744,341 745,343 747,345 749,347 750,348 752,350 754,352 755,354 757,355 759,357 760,359 762,360 764,362 766,363 767,365 769,367 771,368 772,369 774,371 776,372 777,374 779,375 781,376 782,378 784,379 786,380 788,382 789,383 791,385 793,386 794,388 796,389 798,391 799,393 801,394 803,396 804,398 806,400 808,401 810,403 811,405 813,407 815,409 816,411 818,413 820,414 821,416 823,418 825,420 827,421 828,423 830,424 832,426 833,427 835,429 837,430 838,431 840,432 842,433 843,434 845,435 847,436 849,437 850,438 852,439 854,440 855,441 857,442 859,443 860,444 862,444 864,445 865,446 867,447 869,448 871,448 872,449 874,450 876,451 877,452 879,452 881,453 882,454 884,455 886,455 887,456 889,457 891,458 893,458 894,459 896,460 898,460 899,461 901,462 903,462 904,463 906,463 908,464 909,465 911,465 913,466 915,466 916,467 918,468 920,468 921,469 923,469 925,470 926,471 928,471 930,472 932,472 "/>
<polygon opacity="0.25" fill="#1F78B4" points="164,427 166,426 168,424 169,423 171,421 173,420 175,419 176,417 178,416 180,414 181,413 183,412 185,410 186,409 188,407 190,406 191,404 193,403 195,401 197,399 198,398 200,396 202,394 203,393 205,391 207,389 208,388 210,386 212,384 214,383 215,381 217,379 219,378 220,376 222,375 224,373 225,372 227,370 229,369 230,368 232,366 234,365 236,364 237,362 239,361 241,360 242,358 244,357 246,355 247,354 249,352 251,351 252,349 254,347 256,345 258,343 259,341 261,339 263,337 264,335 266,332 268,330 269,327 271,325 273,322 274,320 276,317 278,314 280,312 281,309 283,306 285,304 286,301 288,298 290,296 291,293 293,290 295,288 296,285 298,283 300,280 302,278 303,276 305,273 307,271 308,269 310,266 312,264 313,262 315,259 317,257 318,255 320,252 322,250 324,248 325,245 327,243 329,241 330,238 332,236 334,234 335,231 337,229 339,227 341,225 342,222 344,220 346,218 347,216 349,213 351,211 352,209 354,206 356,204 357,202 359,200 361,197 363,195 364,193 366,190 368,188 369,186 371,183 373,181 374,179 376,176 378,174 379,172 381,169 383,167 385,165 386,162 388,160 390,158 391,156 393,154 395,152 396,149 398,147 400,145 401,143 403,141 405,140 407,138 408,136 410,134 412,133 413,131 415,130 417,128 418,127 420,126 422,125 423,124 425,123 427,123 429,122 430,121 432,121 434,121 435,120 437,120 439,119 440,119 442,119 444,118 445,118 447,117 449,117 451,116 452,115 454,115 456,114 457,113 459,112 461,111 462,110 464,109 466,108 468,108 469,107 471,106 473,105 474,104 476,103 478,102 479,101 481,100 483,99 484,98 486,97 488,97 490,96 491,95 493,95 495,94 496,94 498,94 500,94 501,94 503,94 505,94 506,94 508,95 510,95 512,96 513,97 515,98 517,99 518,100 520,101 522,102 523,103 525,104 527,106 528,107 530,108 532,110 534,111 535,112 537,114 539,115 540,116 542,117 544,119 545,120 547,121 549,122 550,123 552,124 554,125 556,126 557,127 559,127 561,128 562,128 564,129 566,130 567,130 569,131 571,131 573,132 574,132 576,133 578,133 579,134 581,135 583,136 584,137 586,139 588,140 589,142 591,143 593,145 595,147 596,149 598,152 600,154 601,156 603,159 605,161 606,164 608,167 610,169 611,172 613,174 615,177 617,179 618,182 620,184 622,187 623,189 625,191 627,194 628,196 630,198 632,200 633,202 635,205 637,207 639,209 640,211 642,213 644,215 645,217 647,219 649,221 650,223 652,225 654,227 655,229 657,231 659,233 661,235 662,238 664,240 666,242 667,244 669,246 671,248 672,250 674,252 676,254 677,256 679,258 681,260 683,262 684,264 686,266 688,268 689,270 691,272 693,275 694,277 696,279 698,281 700,284 701,286 703,289 705,291 706,293 708,296 710,298 711,301 713,303 715,306 716,308 718,311 720,313 722,315 723,318 725,320 727,322 728,324 730,326 732,328 733,330 735,332 737,334 738,336 740,338 742,340 744,341 745,343 747,345 749,347 750,348 752,350 754,352 755,354 757,355 759,357 760,359 762,360 764,362 766,363 767,365 769,367 771,368 772,369 774,371 776,372 777,374 779,375 781,376 782,378 784,379 786,380 788,382 789,383 791,385 793,386 794,388 796,389 798,391 799,393 801,394 803,396 804,398 806,400 808,401 810,403 811,405 813,407 815,409 816,411 818,413 820,414 821,416 823,418 825,420 827,421 828,423 830,424 832,426 833,427 835,429 837,430 838,431 840,432 842,433 843,434 845,435 847,436 849,437 850,438 852,439 852,473 164,473 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="3" points="502,473 502,94 "/>
<text x="798" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Bootstrap distribution
</text>
<text x="798" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Confidence interval
</text>
<text x="798" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Point estimate
</text>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,73 788,73 "/>
<rect x="768" y="83" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,103 788,103 "/>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1,116 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>below_cache_reuse Summary - Criterion.rs</title>
<style type="text/css">
body {
font: 14px Helvetica Neue;
text-rendering: optimizelegibility;
}
.body {
width: 960px;
margin: auto;
}
a:link {
color: #1F78B4;
text-decoration: none;
}
h2 {
font-size: 36px;
font-weight: 300;
}
h3 {
font-size: 24px;
font-weight: 300;
}
#footer {
height: 40px;
background: #888;
color: white;
font-size: larger;
font-weight: 300;
}
#footer a {
color: white;
text-decoration: underline;
}
#footer p {
text-align: center
}
</style>
</head>
<body>
<div class="body">
<h2>below_cache_reuse</h2>
<h3>Violin Plot</h3>
<a href="violin.svg">
<img src="violin.svg" alt="Violin Plot" />
</a>
<p>This chart shows the relationship between function/parameter and iteration time. The thickness of the shaded
region indicates the probability that a measurement of the given function/parameter would take a particular
length of time.</p>
<section class="plots">
<a href="../../below_cache_reuse/first_stroke_cache_build/report/index.html">
<h4>below_cache_reuse/first_stroke_cache_build</h4>
</a>
<table width="100%">
<tbody>
<tr>
<td>
<a href="../../below_cache_reuse/first_stroke_cache_build/report/pdf.svg">
<img src="../../below_cache_reuse/first_stroke_cache_build/report/pdf_small.svg" alt="PDF of Slope" width="450"
height="300" />
</a>
</td>
<td>
<a href="../../below_cache_reuse/first_stroke_cache_build/report/iteration_times.svg">
<img src="../../below_cache_reuse/first_stroke_cache_build/report/iteration_times_small.svg" alt="Iteration Times" width="450"
height="300" />
</a>
</td>
</tr>
</tbody>
</table>
</section>
<section class="plots">
<a href="../../below_cache_reuse/second_stroke_cache_reuse/report/index.html">
<h4>below_cache_reuse/second_stroke_cache_reuse</h4>
</a>
<table width="100%">
<tbody>
<tr>
<td>
<a href="../../below_cache_reuse/second_stroke_cache_reuse/report/pdf.svg">
<img src="../../below_cache_reuse/second_stroke_cache_reuse/report/pdf_small.svg" alt="PDF of Slope" width="450"
height="300" />
</a>
</td>
<td>
<a href="../../below_cache_reuse/second_stroke_cache_reuse/report/iteration_times.svg">
<img src="../../below_cache_reuse/second_stroke_cache_reuse/report/iteration_times_small.svg" alt="Iteration Times" width="450"
height="300" />
</a>
</td>
</tr>
</tbody>
</table>
</section>
</div>
<div id="footer">
<p>This report was generated by
<a href="https://github.com/bheisler/criterion.rs">Criterion.rs</a>, a statistics-driven benchmarking
library in Rust.</p>
</div>
</body>
</html>
@@ -0,0 +1,65 @@
<svg width="960" height="186" viewBox="0 0 960 186" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="5" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
below_cache_reuse: Violin plot
</text>
<text x="8" y="82" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 8, 82)">
Input
</text>
<text x="528" y="178" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average time (ms)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="103,34 103,129 "/>
<text x="94" y="106" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="8.064516129032258" opacity="1" fill="#000000">
below_cache_reuse/second_stroke_cache_reuse
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="98,106 103,106 "/>
<text x="94" y="58" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="8.064516129032258" opacity="1" fill="#000000">
below_cache_reuse/first_stroke_cache_build
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="98,58 103,58 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="104,130 951,130 "/>
<text x="104" y="140" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="104,130 104,135 "/>
<text x="195" y="140" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
100.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="195,130 195,135 "/>
<text x="287" y="140" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
200.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="287,130 287,135 "/>
<text x="378" y="140" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
300.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="378,130 378,135 "/>
<text x="470" y="140" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
400.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="470,130 470,135 "/>
<text x="561" y="140" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
500.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="561,130 561,135 "/>
<text x="653" y="140" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
600.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="653,130 653,135 "/>
<text x="744" y="140" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
700.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="744,130 744,135 "/>
<text x="836" y="140" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
800.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="836,130 836,135 "/>
<text x="927" y="140" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
900.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="927,130 927,135 "/>
<polygon opacity="1" fill="#1F78B4" points="115,106 115,106 115,106 115,106 115,106 115,106 115,106 115,106 115,106 115,106 115,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,105 116,104 116,104 116,104 116,104 116,104 116,104 116,104 116,104 116,104 116,104 116,104 116,104 116,104 116,103 116,103 116,103 116,103 116,103 116,103 116,103 116,103 116,102 116,102 116,102 116,102 116,102 116,102 116,101 116,101 116,101 116,101 116,101 116,100 116,100 116,100 116,100 116,99 116,99 116,99 116,99 116,98 116,98 116,98 116,98 116,97 116,97 116,97 116,96 116,96 116,96 116,95 116,95 116,95 116,94 116,94 116,94 116,93 116,93 116,93 116,93 116,92 116,92 116,92 116,91 116,91 116,91 116,90 116,90 116,90 116,89 116,89 116,89 116,88 116,88 116,88 116,87 116,87 116,87 117,87 117,86 117,86 117,86 117,86 117,85 117,85 117,85 117,85 117,84 117,84 117,84 117,84 117,84 117,83 117,83 117,83 117,83 117,83 117,83 117,83 117,82 117,82 117,82 117,82 117,82 117,82 117,82 117,82 117,82 117,82 117,82 117,82 117,82 117,82 117,82 117,82 117,82 117,82 117,83 117,83 117,83 117,83 117,83 117,83 117,83 117,84 117,84 117,84 117,84 117,84 117,85 117,85 117,85 117,85 117,85 117,86 117,86 117,86 117,86 117,87 117,87 117,87 117,88 117,88 117,88 117,88 117,89 117,89 117,89 117,89 117,90 117,90 117,90 117,91 117,91 117,91 117,91 117,92 117,92 117,92 117,92 117,93 117,93 117,93 117,93 117,94 117,94 117,94 117,94 117,94 117,95 117,95 117,95 117,95 117,95 117,96 117,96 117,96 117,96 117,96 117,96 117,97 117,97 117,97 117,97 117,97 117,97 117,98 117,98 117,98 117,98 117,98 117,98 117,98 117,98 117,99 117,99 117,99 117,99 117,99 117,99 117,99 117,99 117,99 117,100 117,100 117,100 117,100 117,100 117,100 117,100 117,100 117,100 117,100 117,100 117,100 117,101 117,101 117,101 117,101 117,101 117,101 117,101 117,101 117,101 117,101 117,101 117,101 117,101 117,101 117,101 117,101 117,101 117,101 117,101 117,102 117,102 117,102 117,102 117,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,102 118,103 118,103 118,103 118,103 118,103 118,103 118,103 118,103 118,103 118,103 118,103 118,103 118,103 118,103 118,103 118,103 118,103 118,103 118,103 118,103 118,103 118,103 118,103 118,103 118,103 118,103 118,104 118,104 118,104 118,104 118,104 118,104 118,104 118,104 118,104 118,104 118,104 118,104 118,104 118,104 118,104 118,104 118,104 118,104 118,104 118,105 118,105 118,105 118,105 118,105 118,105 118,105 118,105 118,105 118,105 118,105 118,105 118,105 118,105 118,105 118,105 118,105 118,105 118,105 118,105 118,105 118,105 118,105 118,105 118,105 118,105 118,105 118,105 118,105 118,105 118,105 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 119,106 119,106 119,106 119,106 119,106 119,106 119,106 115,106 "/>
<polygon opacity="1" fill="#1F78B4" points="115,106 115,106 115,106 115,106 115,106 115,106 115,106 115,106 115,106 115,106 115,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,106 116,107 116,107 116,107 116,107 116,107 116,107 116,107 116,107 116,107 116,107 116,107 116,107 116,107 116,107 116,107 116,107 116,107 116,107 116,107 116,107 116,107 116,108 116,108 116,108 116,108 116,108 116,108 116,108 116,108 116,108 116,109 116,109 116,109 116,109 116,109 116,109 116,109 116,110 116,110 116,110 116,110 116,110 116,111 116,111 116,111 116,111 116,111 116,112 116,112 116,112 116,112 116,113 116,113 116,113 116,113 116,114 116,114 116,114 116,115 116,115 116,115 116,115 116,116 116,116 116,116 116,117 116,117 116,117 116,118 116,118 116,118 116,119 116,119 116,119 116,120 116,120 116,120 116,121 116,121 116,121 116,122 116,122 116,122 116,123 116,123 116,123 116,123 116,124 116,124 116,124 116,125 117,125 117,125 117,125 117,126 117,126 117,126 117,126 117,127 117,127 117,127 117,127 117,128 117,128 117,128 117,128 117,128 117,128 117,129 117,129 117,129 117,129 117,129 117,129 117,129 117,129 117,129 117,129 117,129 117,129 117,129 117,129 117,129 117,129 117,129 117,129 117,129 117,129 117,129 117,129 117,129 117,129 117,129 117,129 117,128 117,128 117,128 117,128 117,128 117,128 117,127 117,127 117,127 117,127 117,127 117,126 117,126 117,126 117,126 117,125 117,125 117,125 117,125 117,124 117,124 117,124 117,123 117,123 117,123 117,123 117,122 117,122 117,122 117,122 117,121 117,121 117,121 117,120 117,120 117,120 117,120 117,119 117,119 117,119 117,119 117,118 117,118 117,118 117,118 117,118 117,117 117,117 117,117 117,117 117,117 117,116 117,116 117,116 117,116 117,116 117,115 117,115 117,115 117,115 117,115 117,115 117,114 117,114 117,114 117,114 117,114 117,114 117,114 117,113 117,113 117,113 117,113 117,113 117,113 117,113 117,113 117,112 117,112 117,112 117,112 117,112 117,112 117,112 117,112 117,112 117,112 117,112 117,111 117,111 117,111 117,111 117,111 117,111 117,111 117,111 117,111 117,111 117,111 117,111 117,111 117,111 117,110 117,110 117,110 117,110 117,110 117,110 117,110 117,110 117,110 117,110 117,110 117,110 117,110 117,110 117,110 117,110 118,110 118,110 118,110 118,110 118,110 118,110 118,110 118,110 118,110 118,110 118,110 118,110 118,110 118,110 118,110 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,109 118,108 118,108 118,108 118,108 118,108 118,108 118,108 118,108 118,108 118,108 118,108 118,108 118,108 118,108 118,108 118,108 118,108 118,108 118,108 118,108 118,108 118,107 118,107 118,107 118,107 118,107 118,107 118,107 118,107 118,107 118,107 118,107 118,107 118,107 118,107 118,107 118,107 118,107 118,107 118,107 118,107 118,107 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 118,106 119,106 119,106 119,106 119,106 119,106 119,106 119,106 115,106 "/>
<polygon opacity="1" fill="#1F78B4" points="775,58 775,58 775,58 776,58 776,58 776,58 777,58 777,58 777,58 778,58 778,58 778,58 779,58 779,58 780,58 780,58 780,58 781,58 781,58 781,58 782,58 782,58 782,58 783,58 783,58 783,58 784,58 784,58 784,58 785,58 785,58 786,58 786,58 786,58 787,58 787,58 787,58 788,58 788,58 788,58 789,58 789,58 789,58 790,57 790,57 790,57 791,57 791,57 791,57 792,57 792,57 793,57 793,57 793,57 794,57 794,57 794,56 795,56 795,56 795,56 796,56 796,56 796,56 797,56 797,55 797,55 798,55 798,55 799,55 799,54 799,54 800,54 800,54 800,54 801,53 801,53 801,53 802,53 802,52 802,52 803,52 803,52 803,51 804,51 804,51 805,51 805,50 805,50 806,50 806,49 806,49 807,49 807,48 807,48 808,48 808,47 808,47 809,47 809,46 809,46 810,46 810,45 811,45 811,44 811,44 812,44 812,43 812,43 813,43 813,42 813,42 814,42 814,41 814,41 815,41 815,40 815,40 816,40 816,39 817,39 817,39 817,38 818,38 818,38 818,38 819,37 819,37 819,37 820,37 820,37 820,36 821,36 821,36 821,36 822,36 822,36 823,35 823,35 823,35 824,35 824,35 824,35 825,35 825,35 825,35 826,35 826,35 826,35 827,35 827,35 827,34 828,35 828,35 829,35 829,35 829,35 830,35 830,35 830,35 831,35 831,35 831,35 832,35 832,35 832,35 833,35 833,35 833,35 834,35 834,35 835,36 835,36 835,36 836,36 836,36 836,36 837,36 837,36 837,36 838,36 838,36 838,37 839,37 839,37 839,37 840,37 840,37 841,37 841,37 841,37 842,37 842,37 842,38 843,38 843,38 843,38 844,38 844,38 844,38 845,38 845,38 845,38 846,38 846,38 846,39 847,39 847,39 848,39 848,39 848,39 849,39 849,39 849,39 850,39 850,39 850,40 851,40 851,40 851,40 852,40 852,40 852,40 853,40 853,40 854,40 854,41 854,41 855,41 855,41 855,41 856,41 856,41 856,42 857,42 857,42 857,42 858,42 858,42 858,42 859,43 859,43 860,43 860,43 860,43 861,43 861,44 861,44 862,44 862,44 862,44 863,44 863,45 863,45 864,45 864,45 864,45 865,46 865,46 866,46 866,46 866,46 867,47 867,47 867,47 868,47 868,48 868,48 869,48 869,48 869,48 870,49 870,49 870,49 871,49 871,49 872,50 872,50 872,50 873,50 873,50 873,50 874,51 874,51 874,51 875,51 875,51 875,51 876,52 876,52 876,52 877,52 877,52 878,52 878,52 878,52 879,53 879,53 879,53 880,53 880,53 880,53 881,53 881,53 881,53 882,53 882,53 882,53 883,54 883,54 884,54 884,54 884,54 885,54 885,54 885,54 886,54 886,54 886,54 887,54 887,54 887,54 888,54 888,54 888,54 889,54 889,54 890,54 890,54 890,54 891,54 891,54 891,54 892,54 892,54 892,54 893,54 893,54 893,54 894,54 894,54 894,54 895,54 895,54 896,54 896,54 896,54 897,54 897,54 897,55 898,55 898,55 898,55 899,55 899,55 899,55 900,55 900,55 900,55 901,55 901,55 901,55 902,55 902,55 903,55 903,55 903,55 904,55 904,55 904,55 905,55 905,55 905,56 906,56 906,56 906,56 907,56 907,56 907,56 908,56 908,56 909,56 909,56 909,56 910,56 910,56 910,56 911,56 911,56 911,56 912,56 912,56 912,56 913,57 913,57 913,57 914,57 914,57 915,57 915,57 915,57 916,57 916,57 916,57 917,57 917,57 917,57 918,57 918,57 918,57 919,57 919,57 919,57 920,57 920,57 921,57 921,57 921,57 922,57 922,57 922,57 923,57 923,57 923,57 924,57 924,57 924,58 925,58 925,58 925,58 926,58 926,58 927,58 927,58 927,58 928,58 928,58 928,58 929,58 929,58 929,58 930,58 930,58 930,58 931,58 931,58 931,58 932,58 932,58 933,58 933,58 933,58 934,58 934,58 934,58 935,58 935,58 935,58 936,58 936,58 936,58 937,58 937,58 937,58 938,58 938,58 939,58 939,58 939,58 940,58 940,58 940,58 941,58 941,58 941,58 942,58 942,58 942,58 943,58 943,58 943,58 944,58 944,58 945,58 945,58 945,58 946,58 946,58 946,58 947,58 947,58 947,58 948,58 948,58 948,58 949,58 949,58 949,58 950,58 950,58 951,58 951,58 775,58 "/>
<polygon opacity="1" fill="#1F78B4" points="775,58 775,58 775,58 776,58 776,58 776,58 777,58 777,58 777,58 778,58 778,58 778,58 779,58 779,58 780,58 780,58 780,58 781,58 781,58 781,58 782,58 782,58 782,58 783,58 783,58 783,58 784,58 784,58 784,58 785,59 785,59 786,59 786,59 786,59 787,59 787,59 787,59 788,59 788,59 788,59 789,59 789,59 789,59 790,59 790,59 790,59 791,59 791,59 791,59 792,59 792,60 793,60 793,60 793,60 794,60 794,60 794,60 795,60 795,60 795,60 796,61 796,61 796,61 797,61 797,61 797,61 798,61 798,62 799,62 799,62 799,62 800,62 800,63 800,63 801,63 801,63 801,64 802,64 802,64 802,64 803,65 803,65 803,65 804,65 804,66 805,66 805,66 805,67 806,67 806,67 806,68 807,68 807,68 807,69 808,69 808,69 808,70 809,70 809,70 809,71 810,71 810,71 811,72 811,72 811,72 812,73 812,73 812,73 813,74 813,74 813,75 814,75 814,75 814,76 815,76 815,76 815,77 816,77 816,77 817,77 817,78 817,78 818,78 818,79 818,79 819,79 819,79 819,80 820,80 820,80 820,80 821,80 821,81 821,81 822,81 822,81 823,81 823,81 823,81 824,81 824,82 824,82 825,82 825,82 825,82 826,82 826,82 826,82 827,82 827,82 827,82 828,82 828,82 829,82 829,82 829,82 830,82 830,82 830,82 831,82 831,82 831,82 832,82 832,81 832,81 833,81 833,81 833,81 834,81 834,81 835,81 835,81 835,81 836,81 836,81 836,81 837,80 837,80 837,80 838,80 838,80 838,80 839,80 839,80 839,80 840,80 840,80 841,79 841,79 841,79 842,79 842,79 842,79 843,79 843,79 843,79 844,79 844,79 844,78 845,78 845,78 845,78 846,78 846,78 846,78 847,78 847,78 848,78 848,78 848,78 849,77 849,77 849,77 850,77 850,77 850,77 851,77 851,77 851,77 852,77 852,76 852,76 853,76 853,76 854,76 854,76 854,76 855,76 855,76 855,75 856,75 856,75 856,75 857,75 857,75 857,75 858,74 858,74 858,74 859,74 859,74 860,74 860,73 860,73 861,73 861,73 861,73 862,73 862,72 862,72 863,72 863,72 863,72 864,71 864,71 864,71 865,71 865,71 866,70 866,70 866,70 867,70 867,70 867,69 868,69 868,69 868,69 869,69 869,68 869,68 870,68 870,68 870,68 871,67 871,67 872,67 872,67 872,67 873,66 873,66 873,66 874,66 874,66 874,66 875,65 875,65 875,65 876,65 876,65 876,65 877,65 877,64 878,64 878,64 878,64 879,64 879,64 879,64 880,64 880,64 880,63 881,63 881,63 881,63 882,63 882,63 882,63 883,63 883,63 884,63 884,63 884,63 885,63 885,63 885,63 886,63 886,63 886,63 887,63 887,63 887,62 888,62 888,62 888,62 889,62 889,62 890,62 890,62 890,62 891,62 891,62 891,62 892,62 892,62 892,62 893,62 893,62 893,62 894,62 894,62 894,62 895,62 895,62 896,62 896,62 896,62 897,62 897,62 897,62 898,62 898,62 898,62 899,62 899,62 899,62 900,62 900,62 900,62 901,62 901,62 901,62 902,61 902,61 903,61 903,61 903,61 904,61 904,61 904,61 905,61 905,61 905,61 906,61 906,61 906,61 907,61 907,61 907,61 908,61 908,61 909,61 909,60 909,60 910,60 910,60 910,60 911,60 911,60 911,60 912,60 912,60 912,60 913,60 913,60 913,60 914,60 914,60 915,60 915,60 915,60 916,60 916,60 916,60 917,60 917,60 917,60 918,60 918,59 918,59 919,59 919,59 919,59 920,59 920,59 921,59 921,59 921,59 922,59 922,59 922,59 923,59 923,59 923,59 924,59 924,59 924,59 925,59 925,59 925,59 926,59 926,59 927,59 927,59 927,59 928,59 928,59 928,59 929,59 929,59 929,59 930,59 930,59 930,59 931,59 931,59 931,59 932,59 932,59 933,59 933,59 933,59 934,59 934,58 934,58 935,58 935,58 935,58 936,58 936,58 936,58 937,58 937,58 937,58 938,58 938,58 939,58 939,58 939,58 940,58 940,58 940,58 941,58 941,58 941,58 942,58 942,58 942,58 943,58 943,58 943,58 944,58 944,58 945,58 945,58 945,58 946,58 946,58 946,58 947,58 947,58 947,58 948,58 948,58 948,58 949,58 949,58 949,58 950,58 950,58 951,58 951,58 775,58 "/>
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

@@ -0,0 +1 @@
{"group_id":"below_cache_reuse","function_id":"second_stroke_cache_reuse","value_str":null,"throughput":null,"full_id":"below_cache_reuse/second_stroke_cache_reuse","directory_name":"below_cache_reuse/second_stroke_cache_reuse","title":"below_cache_reuse/second_stroke_cache_reuse"}
@@ -0,0 +1 @@
{"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":14011367.892625,"upper_bound":14115720.443625},"point_estimate":14063016.8175,"standard_error":26654.954641667526},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":13967945.25,"upper_bound":14050139.375},"point_estimate":13988508.0,"standard_error":23631.406088061587},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":142833.86678919196,"upper_bound":270162.1470786631},"point_estimate":193013.01887333393,"standard_error":32270.259457605036},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":224947.85966065503,"upper_bound":302207.5182213088},"point_estimate":266302.887150464,"standard_error":19729.233950716913}}
@@ -0,0 +1 @@
{"sampling_mode":"Flat","iters":[4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0],"times":[53700467.0,54920518.0,55620742.0,55401828.0,56275616.0,56281127.0,55566845.0,57638433.0,55384168.0,56459830.0,55420778.0,55976192.0,55741099.0,58163455.0,58010257.0,57765430.0,55514508.0,56145854.0,57707338.0,56934870.0,56425730.0,55879764.0,56594316.0,55599331.0,56752996.0,56198005.0,55788767.0,56112775.0,55735305.0,55828801.0,54752868.0,55902707.0,54720836.0,56977682.0,55772899.0,55189105.0,55886251.0,55921354.0,56790773.0,55780122.0,55923160.0,55955315.0,56248256.0,54234083.0,56786365.0,54912957.0,56596124.0,54846407.0,56152859.0,55199440.0,57566823.0,55111440.0,57800400.0,55871781.0,59184692.0,57091628.0,55983390.0,55610283.0,56448828.0,56935160.0,55778031.0,55952749.0,55549556.0,55570569.0,55306819.0,57889433.0,57329625.0,58419235.0,55339956.0,57293029.0,56116090.0,55522431.0,57023081.0,55878478.0,55865568.0,54848641.0,58151349.0,58082040.0,58515454.0,56809313.0,56407775.0,58512002.0,55827513.0,56025264.0,55734745.0,55915356.0,57133267.0,56393244.0,55400787.0,54980254.0,55623337.0,58793969.0,55419158.0,55296670.0,55445802.0,56141139.0,55945852.0,58614479.0,56326723.0,56328811.0]}
@@ -0,0 +1 @@
[12973082.0,13432745.75,14658515.75,15118179.5]
@@ -0,0 +1 @@
{"group_id":"below_cache_reuse","function_id":"second_stroke_cache_reuse","value_str":null,"throughput":null,"full_id":"below_cache_reuse/second_stroke_cache_reuse","directory_name":"below_cache_reuse/second_stroke_cache_reuse","title":"below_cache_reuse/second_stroke_cache_reuse"}
@@ -0,0 +1 @@
{"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":14488632.766375,"upper_bound":14661973.6175},"point_estimate":14573274.1025,"standard_error":44333.11722230234},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":14410274.0,"upper_bound":14557348.625},"point_estimate":14450582.625,"standard_error":39224.00761103059},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":233399.4128063321,"upper_bound":439276.41884190927},"point_estimate":306014.56496715546,"standard_error":53814.48743505519},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":360937.87698428595,"upper_bound":507599.9889355485},"point_estimate":440183.1426105533,"standard_error":37275.52487032545}}
@@ -0,0 +1 @@
{"sampling_mode":"Flat","iters":[4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0],"times":[57628913.0,58353908.0,56605650.0,57799624.0,58686849.0,55946393.0,56337845.0,55760868.0,56805002.0,57785389.0,56243017.0,58632749.0,57777417.0,57669559.0,56481193.0,57622070.0,57008318.0,56020679.0,56526513.0,57005853.0,56835596.0,57769094.0,56981517.0,56413875.0,56606509.0,58315868.0,57292684.0,57606731.0,59973906.0,63480721.0,62956347.0,61553983.0,62547651.0,59501308.0,62336152.0,57703451.0,57770279.0,57644664.0,58859858.0,62795382.0,62485666.0,58384144.0,59412088.0,59063185.0,58090574.0,58024579.0,57805037.0,60392763.0,58612125.0,56935410.0,58036047.0,58006286.0,57653279.0,57419211.0,58474392.0,60981794.0,57524070.0,61457181.0,57062106.0,57196936.0,58149191.0,57212231.0,57218615.0,57199377.0,59284978.0,57654495.0,56726059.0,59452210.0,59401486.0,58142921.0,60388321.0,56939117.0,61250168.0,56574771.0,57480802.0,58339161.0,59788369.0,58040318.0,57605241.0,58641391.0,56198499.0,59943735.0,58055631.0,59239610.0,58438516.0,58443994.0,60022111.0,57200925.0,56627532.0,57906487.0,57022995.0,57505197.0,59163050.0,54391122.0,58338005.0,61624038.0,56429249.0,58442056.0,57614149.0,60553260.0]}
@@ -0,0 +1 @@
[12847115.0625,13568961.09375,15493883.84375,16215729.875]
@@ -0,0 +1 @@
{"group_id":"below_cache_reuse","function_id":"second_stroke_cache_reuse","value_str":null,"throughput":null,"full_id":"below_cache_reuse/second_stroke_cache_reuse","directory_name":"below_cache_reuse/second_stroke_cache_reuse","title":"below_cache_reuse/second_stroke_cache_reuse"}
@@ -0,0 +1 @@
{"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":14488632.766375,"upper_bound":14661973.6175},"point_estimate":14573274.1025,"standard_error":44333.11722230234},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":14410274.0,"upper_bound":14557348.625},"point_estimate":14450582.625,"standard_error":39224.00761103059},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":233399.4128063321,"upper_bound":439276.41884190927},"point_estimate":306014.56496715546,"standard_error":53814.48743505519},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":360937.87698428595,"upper_bound":507599.9889355485},"point_estimate":440183.1426105533,"standard_error":37275.52487032545}}
@@ -0,0 +1 @@
{"sampling_mode":"Flat","iters":[4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0],"times":[57628913.0,58353908.0,56605650.0,57799624.0,58686849.0,55946393.0,56337845.0,55760868.0,56805002.0,57785389.0,56243017.0,58632749.0,57777417.0,57669559.0,56481193.0,57622070.0,57008318.0,56020679.0,56526513.0,57005853.0,56835596.0,57769094.0,56981517.0,56413875.0,56606509.0,58315868.0,57292684.0,57606731.0,59973906.0,63480721.0,62956347.0,61553983.0,62547651.0,59501308.0,62336152.0,57703451.0,57770279.0,57644664.0,58859858.0,62795382.0,62485666.0,58384144.0,59412088.0,59063185.0,58090574.0,58024579.0,57805037.0,60392763.0,58612125.0,56935410.0,58036047.0,58006286.0,57653279.0,57419211.0,58474392.0,60981794.0,57524070.0,61457181.0,57062106.0,57196936.0,58149191.0,57212231.0,57218615.0,57199377.0,59284978.0,57654495.0,56726059.0,59452210.0,59401486.0,58142921.0,60388321.0,56939117.0,61250168.0,56574771.0,57480802.0,58339161.0,59788369.0,58040318.0,57605241.0,58641391.0,56198499.0,59943735.0,58055631.0,59239610.0,58438516.0,58443994.0,60022111.0,57200925.0,56627532.0,57906487.0,57022995.0,57505197.0,59163050.0,54391122.0,58338005.0,61624038.0,56429249.0,58442056.0,57614149.0,60553260.0]}
@@ -0,0 +1 @@
[12847115.0625,13568961.09375,15493883.84375,16215729.875]
@@ -0,0 +1,72 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
below_cache_reuse/second_stroke_cache_reuse:MAD
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Density (a.u.)
</text>
<text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average time (µs)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
<text x="77" y="417" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.002
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,417 86,417 "/>
<text x="77" y="348" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.004
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,348 86,348 "/>
<text x="77" y="280" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.006
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,280 86,280 "/>
<text x="77" y="211" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.008
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,211 86,211 "/>
<text x="77" y="142" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.01
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,142 86,142 "/>
<text x="77" y="74" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.012
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,74 86,74 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
<text x="219" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
250
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="219,473 219,478 "/>
<text x="387" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
300
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="387,473 387,478 "/>
<text x="555" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
350
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="555,473 555,478 "/>
<text x="723" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
400
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="723,473 723,478 "/>
<text x="891" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
450
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="891,473 891,478 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,471 88,470 90,469 92,468 93,467 95,466 97,466 98,465 100,464 102,463 103,462 105,461 107,460 109,459 110,458 112,457 114,457 115,456 117,455 119,454 120,453 122,453 124,452 125,451 127,450 129,450 131,449 132,448 134,447 136,447 137,446 139,445 141,444 142,443 144,442 146,441 147,440 149,439 151,438 153,437 154,436 156,434 158,433 159,431 161,430 163,428 164,427 166,425 168,423 169,422 171,420 173,418 175,416 176,415 178,413 180,411 181,409 183,407 185,406 186,404 188,402 190,400 191,399 193,397 195,396 197,394 198,393 200,391 202,390 203,388 205,387 207,385 208,384 210,383 212,381 214,380 215,378 217,377 219,375 220,373 222,372 224,370 225,368 227,366 229,364 230,361 232,359 234,356 236,354 237,351 239,348 241,345 242,342 244,339 246,336 247,333 249,329 251,326 252,324 254,321 256,318 258,316 259,313 261,311 263,309 264,307 266,306 268,304 269,303 271,302 273,301 274,300 276,299 278,299 280,298 281,298 283,297 285,297 286,296 288,295 290,295 291,294 293,293 295,292 296,291 298,290 300,288 302,287 303,285 305,283 307,280 308,278 310,275 312,273 313,270 315,267 317,264 318,261 320,258 322,255 324,252 325,249 327,246 329,243 330,241 332,238 334,236 335,233 337,231 339,229 341,227 342,225 344,223 346,221 347,219 349,218 351,216 352,214 354,213 356,211 357,209 359,208 361,206 363,204 364,202 366,200 368,198 369,195 371,193 373,190 374,187 376,184 378,181 379,177 381,173 383,169 385,165 386,160 388,156 390,151 391,146 393,141 395,136 396,130 398,125 400,120 401,116 403,111 405,107 407,103 408,100 410,97 412,95 413,94 415,93 417,93 418,94 420,95 422,98 423,101 425,106 427,111 429,117 430,123 432,131 434,139 435,147 437,156 439,166 440,175 442,185 444,195 445,205 447,214 449,224 451,233 452,242 454,251 456,259 457,267 459,274 461,281 462,287 464,293 466,298 468,302 469,306 471,310 473,313 474,315 476,317 478,319 479,320 481,321 483,322 484,323 486,323 488,323 490,323 491,323 493,323 495,323 496,323 498,323 500,323 501,323 503,323 505,323 506,324 508,324 510,324 512,325 513,326 515,326 517,327 518,327 520,328 522,329 523,330 525,331 527,332 528,333 530,334 532,335 534,336 535,337 537,338 539,340 540,341 542,342 544,344 545,345 547,347 549,348 550,349 552,351 554,352 556,354 557,355 559,356 561,358 562,359 564,360 566,361 567,362 569,363 571,364 573,365 574,366 576,367 578,368 579,369 581,369 583,370 584,371 586,371 588,372 589,372 591,373 593,373 595,373 596,373 598,373 600,373 601,373 603,372 605,372 606,371 608,370 610,369 611,368 613,366 615,365 617,363 618,361 620,359 622,357 623,355 625,353 627,351 628,348 630,346 632,343 633,341 635,339 637,337 639,335 640,333 642,331 644,329 645,328 647,327 649,327 650,326 652,326 654,326 655,327 657,328 659,329 661,331 662,332 664,334 666,337 667,339 669,341 671,344 672,347 674,349 676,352 677,355 679,358 681,360 683,362 684,365 686,367 688,369 689,371 691,373 693,374 694,376 696,377 698,379 700,380 701,381 703,382 705,384 706,385 708,386 710,387 711,388 713,389 715,390 716,391 718,392 720,393 722,394 723,396 725,397 727,398 728,399 730,399 732,400 733,401 735,402 737,403 738,403 740,404 742,404 744,405 745,405 747,406 749,406 750,406 752,406 754,407 755,407 757,407 759,408 760,408 762,409 764,409 766,410 767,410 769,411 771,412 772,413 774,414 776,415 777,417 779,418 781,419 782,421 784,422 786,424 788,425 789,426 791,428 793,429 794,430 796,432 798,433 799,434 801,435 803,436 804,437 806,437 808,438 810,439 811,440 813,440 815,441 816,441 818,442 820,442 821,443 823,443 825,444 827,444 828,445 830,445 832,446 833,447 835,447 837,448 838,448 840,449 842,449 843,450 845,451 847,451 849,452 850,452 852,453 854,453 855,454 857,454 859,454 860,455 862,455 864,456 865,456 867,456 869,456 871,457 872,457 874,457 876,458 877,458 879,458 881,458 882,459 884,459 886,459 887,460 889,460 891,460 893,461 894,461 896,461 898,462 899,462 901,463 903,463 904,464 906,464 908,465 909,466 911,466 913,467 915,467 916,468 918,468 920,469 921,469 923,470 925,471 926,471 928,472 930,472 932,472 "/>
<polygon opacity="0.25" fill="#1F78B4" points="164,427 166,425 168,423 169,422 171,420 173,418 175,416 176,415 178,413 180,411 181,409 183,407 185,406 186,404 188,402 190,400 191,399 193,397 195,396 197,394 198,393 200,391 202,390 203,388 205,387 207,385 208,384 210,383 212,381 214,380 215,378 217,377 219,375 220,373 222,372 224,370 225,368 227,366 229,364 230,361 232,359 234,356 236,354 237,351 239,348 241,345 242,342 244,339 246,336 247,333 249,329 251,326 252,324 254,321 256,318 258,316 259,313 261,311 263,309 264,307 266,306 268,304 269,303 271,302 273,301 274,300 276,299 278,299 280,298 281,298 283,297 285,297 286,296 288,295 290,295 291,294 293,293 295,292 296,291 298,290 300,288 302,287 303,285 305,283 307,280 308,278 310,275 312,273 313,270 315,267 317,264 318,261 320,258 322,255 324,252 325,249 327,246 329,243 330,241 332,238 334,236 335,233 337,231 339,229 341,227 342,225 344,223 346,221 347,219 349,218 351,216 352,214 354,213 356,211 357,209 359,208 361,206 363,204 364,202 366,200 368,198 369,195 371,193 373,190 374,187 376,184 378,181 379,177 381,173 383,169 385,165 386,160 388,156 390,151 391,146 393,141 395,136 396,130 398,125 400,120 401,116 403,111 405,107 407,103 408,100 410,97 412,95 413,94 415,93 417,93 418,94 420,95 422,98 423,101 425,106 427,111 429,117 430,123 432,131 434,139 435,147 437,156 439,166 440,175 442,185 444,195 445,205 447,214 449,224 451,233 452,242 454,251 456,259 457,267 459,274 461,281 462,287 464,293 466,298 468,302 469,306 471,310 473,313 474,315 476,317 478,319 479,320 481,321 483,322 484,323 486,323 488,323 490,323 491,323 493,323 495,323 496,323 498,323 500,323 501,323 503,323 505,323 506,324 508,324 510,324 512,325 513,326 515,326 517,327 518,327 520,328 522,329 523,330 525,331 527,332 528,333 530,334 532,335 534,336 535,337 537,338 539,340 540,341 542,342 544,344 545,345 547,347 549,348 550,349 552,351 554,352 556,354 557,355 559,356 561,358 562,359 564,360 566,361 567,362 569,363 571,364 573,365 574,366 576,367 578,368 579,369 581,369 583,370 584,371 586,371 588,372 589,372 591,373 593,373 595,373 596,373 598,373 600,373 601,373 603,372 605,372 606,371 608,370 610,369 611,368 613,366 615,365 617,363 618,361 620,359 622,357 623,355 625,353 627,351 628,348 630,346 632,343 633,341 635,339 637,337 639,335 640,333 642,331 644,329 645,328 647,327 649,327 650,326 652,326 654,326 655,327 657,328 659,329 661,331 662,332 664,334 666,337 667,339 669,341 671,344 672,347 674,349 676,352 677,355 679,358 681,360 683,362 684,365 686,367 688,369 689,371 691,373 693,374 694,376 696,377 698,379 700,380 701,381 703,382 705,384 706,385 708,386 710,387 711,388 713,389 715,390 716,391 718,392 720,393 722,394 723,396 725,397 727,398 728,399 730,399 732,400 733,401 735,402 737,403 738,403 740,404 742,404 744,405 745,405 747,406 749,406 750,406 752,406 754,407 755,407 757,407 759,408 760,408 762,409 764,409 766,410 767,410 769,411 771,412 772,413 774,414 776,415 777,417 779,418 781,419 782,421 784,422 786,424 788,425 789,426 791,428 793,429 794,430 796,432 798,433 799,434 801,435 803,436 804,437 806,437 808,438 810,439 811,440 813,440 815,441 816,441 818,442 820,442 821,443 823,443 825,444 827,444 828,445 830,445 832,446 833,447 835,447 837,448 838,448 840,449 842,449 843,450 845,451 847,451 849,452 850,452 852,453 852,473 164,473 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="3" points="407,473 407,102 "/>
<text x="798" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Bootstrap distribution
</text>
<text x="798" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Confidence interval
</text>
<text x="798" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Point estimate
</text>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,73 788,73 "/>
<rect x="768" y="83" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,103 788,103 "/>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1,108 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
below_cache_reuse/second_stroke_cache_reuse:SD
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Density (a.u.)
</text>
<text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average time (µs)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
<text x="77" y="458" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.001
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,458 86,458 "/>
<text x="77" y="420" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.002
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,420 86,420 "/>
<text x="77" y="382" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.003
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,382 86,382 "/>
<text x="77" y="344" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.004
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,344 86,344 "/>
<text x="77" y="306" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.005
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,306 86,306 "/>
<text x="77" y="268" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.006
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,268 86,268 "/>
<text x="77" y="230" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.007
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,230 86,230 "/>
<text x="77" y="192" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.008
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,192 86,192 "/>
<text x="77" y="154" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.009
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,154 86,154 "/>
<text x="77" y="116" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.01
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,116 86,116 "/>
<text x="77" y="78" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.011
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,78 86,78 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
<text x="159" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
360
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="159,473 159,478 "/>
<text x="253" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
380
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="253,473 253,478 "/>
<text x="347" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
400
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="347,473 347,478 "/>
<text x="442" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
420
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="442,473 442,478 "/>
<text x="536" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
440
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="536,473 536,478 "/>
<text x="630" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
460
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="630,473 630,478 "/>
<text x="725" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
480
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="725,473 725,478 "/>
<text x="819" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
500
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="819,473 819,478 "/>
<text x="913" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
520
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="913,473 913,478 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,472 88,472 90,472 92,471 93,470 95,470 97,469 98,469 100,468 102,468 103,467 105,466 107,466 109,465 110,464 112,464 114,463 115,463 117,462 119,461 120,460 122,460 124,459 125,458 127,458 129,457 131,456 132,455 134,455 136,454 137,453 139,453 141,452 142,451 144,450 146,449 147,449 149,448 151,447 153,446 154,446 156,445 158,444 159,443 161,442 163,441 164,441 166,440 168,439 169,438 171,437 173,436 175,435 176,434 178,433 180,432 181,430 183,429 185,428 186,427 188,426 190,424 191,423 193,422 195,421 197,420 198,418 200,417 202,416 203,414 205,413 207,412 208,411 210,409 212,408 214,407 215,405 217,404 219,403 220,401 222,400 224,398 225,397 227,395 229,394 230,392 232,391 234,389 236,388 237,386 239,384 241,382 242,381 244,379 246,377 247,375 249,373 251,371 252,369 254,367 256,365 258,363 259,361 261,359 263,357 264,355 266,353 268,352 269,350 271,348 273,346 274,344 276,342 278,340 280,338 281,336 283,334 285,333 286,331 288,329 290,327 291,325 293,323 295,321 296,319 298,317 300,315 302,313 303,311 305,309 307,308 308,306 310,304 312,302 313,300 315,298 317,296 318,294 320,292 322,290 324,288 325,287 327,285 329,283 330,281 332,279 334,277 335,275 337,273 339,271 341,269 342,267 344,265 346,262 347,260 349,258 351,256 352,253 354,251 356,249 357,246 359,244 361,242 363,239 364,237 366,234 368,232 369,229 371,227 373,225 374,222 376,220 378,217 379,215 381,213 383,210 385,208 386,206 388,204 390,201 391,199 393,197 395,195 396,193 398,191 400,189 401,187 403,185 405,183 407,181 408,179 410,177 412,175 413,173 415,171 417,168 418,166 420,164 422,162 423,160 425,158 427,156 429,153 430,151 432,149 434,147 435,145 437,143 439,141 440,139 442,137 444,135 445,133 447,131 449,130 451,128 452,126 454,125 456,123 457,122 459,120 461,119 462,117 464,116 466,115 468,114 469,113 471,111 473,110 474,109 476,108 478,108 479,107 481,106 483,105 484,104 486,104 488,103 490,102 491,102 493,101 495,100 496,100 498,99 500,99 501,98 503,98 505,97 506,97 508,96 510,96 512,96 513,95 515,95 517,95 518,95 520,94 522,94 523,94 525,94 527,94 528,94 530,94 532,94 534,94 535,94 537,94 539,94 540,94 542,94 544,94 545,94 547,95 549,95 550,95 552,95 554,95 556,95 557,95 559,95 561,95 562,96 564,96 566,96 567,96 569,96 571,97 573,97 574,97 576,98 578,98 579,99 581,100 583,101 584,102 586,103 588,104 589,105 591,106 593,107 595,109 596,110 598,112 600,114 601,115 603,117 605,119 606,121 608,123 610,125 611,127 613,129 615,131 617,133 618,135 620,138 622,140 623,142 625,144 627,146 628,148 630,151 632,153 633,155 635,157 637,159 639,161 640,164 642,166 644,168 645,170 647,172 649,175 650,177 652,179 654,182 655,184 657,186 659,189 661,191 662,194 664,196 666,198 667,201 669,203 671,206 672,208 674,211 676,213 677,216 679,218 681,220 683,223 684,225 686,228 688,230 689,233 691,235 693,237 694,240 696,242 698,244 700,247 701,249 703,251 705,254 706,256 708,258 710,260 711,262 713,265 715,267 716,269 718,271 720,273 722,276 723,278 725,280 727,282 728,285 730,287 732,289 733,292 735,294 737,296 738,299 740,301 742,304 744,306 745,309 747,311 749,314 750,316 752,319 754,321 755,323 757,326 759,328 760,331 762,333 764,336 766,338 767,341 769,343 771,345 772,348 774,350 776,352 777,355 779,357 781,359 782,361 784,364 786,366 788,368 789,370 791,372 793,374 794,376 796,378 798,380 799,382 801,384 803,386 804,388 806,390 808,392 810,394 811,395 813,397 815,399 816,401 818,402 820,404 821,405 823,407 825,408 827,410 828,411 830,413 832,414 833,415 835,417 837,418 838,419 840,420 842,422 843,423 845,424 847,425 849,427 850,428 852,429 854,430 855,432 857,433 859,434 860,435 862,436 864,438 865,439 867,440 869,441 871,443 872,444 874,445 876,446 877,447 879,449 881,450 882,451 884,452 886,453 887,454 889,455 891,456 893,457 894,458 896,459 898,460 899,461 901,461 903,462 904,463 906,464 908,464 909,465 911,465 913,466 915,467 916,467 918,468 920,468 921,469 923,469 925,470 926,470 928,471 930,471 932,472 "/>
<polygon opacity="0.25" fill="#1F78B4" points="164,441 166,440 168,439 169,438 171,437 173,436 175,435 176,434 178,433 180,432 181,430 183,429 185,428 186,427 188,426 190,424 191,423 193,422 195,421 197,420 198,418 200,417 202,416 203,414 205,413 207,412 208,411 210,409 212,408 214,407 215,405 217,404 219,403 220,401 222,400 224,398 225,397 227,395 229,394 230,392 232,391 234,389 236,388 237,386 239,384 241,382 242,381 244,379 246,377 247,375 249,373 251,371 252,369 254,367 256,365 258,363 259,361 261,359 263,357 264,355 266,353 268,352 269,350 271,348 273,346 274,344 276,342 278,340 280,338 281,336 283,334 285,333 286,331 288,329 290,327 291,325 293,323 295,321 296,319 298,317 300,315 302,313 303,311 305,309 307,308 308,306 310,304 312,302 313,300 315,298 317,296 318,294 320,292 322,290 324,288 325,287 327,285 329,283 330,281 332,279 334,277 335,275 337,273 339,271 341,269 342,267 344,265 346,262 347,260 349,258 351,256 352,253 354,251 356,249 357,246 359,244 361,242 363,239 364,237 366,234 368,232 369,229 371,227 373,225 374,222 376,220 378,217 379,215 381,213 383,210 385,208 386,206 388,204 390,201 391,199 393,197 395,195 396,193 398,191 400,189 401,187 403,185 405,183 407,181 408,179 410,177 412,175 413,173 415,171 417,168 418,166 420,164 422,162 423,160 425,158 427,156 429,153 430,151 432,149 434,147 435,145 437,143 439,141 440,139 442,137 444,135 445,133 447,131 449,130 451,128 452,126 454,125 456,123 457,122 459,120 461,119 462,117 464,116 466,115 468,114 469,113 471,111 473,110 474,109 476,108 478,108 479,107 481,106 483,105 484,104 486,104 488,103 490,102 491,102 493,101 495,100 496,100 498,99 500,99 501,98 503,98 505,97 506,97 508,96 510,96 512,96 513,95 515,95 517,95 518,95 520,94 522,94 523,94 525,94 527,94 528,94 530,94 532,94 534,94 535,94 537,94 539,94 540,94 542,94 544,94 545,94 547,95 549,95 550,95 552,95 554,95 556,95 557,95 559,95 561,95 562,96 564,96 566,96 567,96 569,96 571,97 573,97 574,97 576,98 578,98 579,99 581,100 583,101 584,102 586,103 588,104 589,105 591,106 593,107 595,109 596,110 598,112 600,114 601,115 603,117 605,119 606,121 608,123 610,125 611,127 613,129 615,131 617,133 618,135 620,138 622,140 623,142 625,144 627,146 628,148 630,151 632,153 633,155 635,157 637,159 639,161 640,164 642,166 644,168 645,170 647,172 649,175 650,177 652,179 654,182 655,184 657,186 659,189 661,191 662,194 664,196 666,198 667,201 669,203 671,206 672,208 674,211 676,213 677,216 679,218 681,220 683,223 684,225 686,228 688,230 689,233 691,235 693,237 694,240 696,242 698,244 700,247 701,249 703,251 705,254 706,256 708,258 710,260 711,262 713,265 715,267 716,269 718,271 720,273 722,276 723,278 725,280 727,282 728,285 730,287 732,289 733,292 735,294 737,296 738,299 740,301 742,304 744,306 745,309 747,311 749,314 750,316 752,319 754,321 755,323 757,326 759,328 760,331 762,333 764,336 766,338 767,341 769,343 771,345 772,348 774,350 776,352 777,355 779,357 781,359 782,361 784,364 786,366 788,368 789,370 791,372 793,374 794,376 796,378 798,380 799,382 801,384 803,386 804,388 806,390 808,392 810,394 811,395 813,397 815,399 816,401 818,402 820,404 821,405 823,407 825,408 827,410 828,411 830,413 832,414 833,415 835,417 837,418 838,419 840,420 842,422 843,423 845,424 847,425 849,427 850,428 852,429 852,473 164,473 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="3" points="537,473 537,94 "/>
<text x="798" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Bootstrap distribution
</text>
<text x="798" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Confidence interval
</text>
<text x="798" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Point estimate
</text>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,73 788,73 "/>
<rect x="768" y="83" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,103 788,103 "/>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

@@ -0,0 +1,193 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>below_cache_reuse/second_stroke_cache_reuse - Criterion.rs</title>
<style type="text/css">
body {
font: 14px Helvetica Neue;
text-rendering: optimizelegibility;
}
.body {
width: 960px;
margin: auto;
}
th {
font-weight: 200
}
th,
td {
padding-right: 3px;
padding-bottom: 3px;
}
a:link {
color: #1F78B4;
text-decoration: none;
}
th.ci-bound {
opacity: 0.6
}
td.ci-bound {
opacity: 0.5
}
.stats {
width: 80%;
margin: auto;
display: flex;
}
.additional_stats {
flex: 0 0 60%
}
.additional_plots {
flex: 1
}
h2 {
font-size: 36px;
font-weight: 300;
}
h3 {
font-size: 24px;
font-weight: 300;
}
#footer {
height: 40px;
background: #888;
color: white;
font-size: larger;
font-weight: 300;
}
#footer a {
color: white;
text-decoration: underline;
}
#footer p {
text-align: center
}
</style>
</head>
<body>
<div class="body">
<h2>below_cache_reuse/second_stroke_cache_reuse</h2>
<div class="absolute">
<section class="plots">
<table width="100%">
<tbody>
<tr>
<td>
<a href="pdf.svg">
<img src="pdf_small.svg" alt="PDF of Slope" width="450" height="300" />
</a>
</td>
<td>
<a href="iteration_times.svg">
<img src="iteration_times_small.svg" alt="Iteration Times" width="450" height="300" />
</a>
</td>
</tr>
</tbody>
</table>
</section>
<section class="stats">
<div class="additional_stats">
<h4>Additional Statistics:</h4>
<table>
<thead>
<tr>
<th></th>
<th title="0.95 confidence level" class="ci-bound">Lower bound</th>
<th>Estimate</th>
<th title="0.95 confidence level" class="ci-bound">Upper bound</th>
</tr>
</thead>
<tbody>
<tr>
<td>R&#xb2;</td>
<td class="ci-bound">0.0157914</td>
<td>0.0163715</td>
<td class="ci-bound">0.0157366</td>
</tr>
<tr>
<td>Mean</td>
<td class="ci-bound">14.489 ms</td>
<td>14.573 ms</td>
<td class="ci-bound">14.662 ms</td>
</tr>
<tr>
<td title="Standard Deviation">Std. Dev.</td>
<td class="ci-bound">360.94 µs</td>
<td>440.18 µs</td>
<td class="ci-bound">507.60 µs</td>
</tr>
<tr>
<td>Median</td>
<td class="ci-bound">14.410 ms</td>
<td>14.451 ms</td>
<td class="ci-bound">14.557 ms</td>
</tr>
<tr>
<td title="Median Absolute Deviation">MAD</td>
<td class="ci-bound">233.40 µs</td>
<td>306.01 µs</td>
<td class="ci-bound">439.28 µs</td>
</tr>
</tbody>
</table>
</div>
<div class="additional_plots">
<h4>Additional Plots:</h4>
<ul>
<li>
<a href="typical.svg">Typical</a>
</li>
<li>
<a href="mean.svg">Mean</a>
</li>
<li>
<a href="SD.svg">Std. Dev.</a>
</li>
<li>
<a href="median.svg">Median</a>
</li>
<li>
<a href="MAD.svg">MAD</a>
</li>
</ul>
</div>
</section>
<section class="explanation">
<h4>Understanding this report:</h4>
<p>The plot on the left displays the average time per iteration for this benchmark. The shaded region
shows the estimated probability of an iteration taking a certain amount of time, while the line
shows the mean. Click on the plot for a larger view showing the outliers.</p>
<p>The plot on the right shows the average time per iteration for the samples. Each point
represents one sample.</p>
<p>See <a href="https://bheisler.github.io/criterion.rs/book/user_guide/command_line_output.html#additional-statistics">the
documentation</a> for more details on the additional statistics.</p>
</section>
</div>
</div>
<div id="footer">
<p>This report was generated by
<a href="https://github.com/bheisler/criterion.rs">Criterion.rs</a>, a statistics-driven benchmarking
library in Rust.</p>
</div>
</body>
</html>
@@ -0,0 +1,184 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
below_cache_reuse/second_stroke_cache_reuse
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Average Iteration Time (ms)
</text>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="163" y1="472" x2="163" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="247" y1="472" x2="247" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="332" y1="472" x2="332" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="416" y1="472" x2="416" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="501" y1="472" x2="501" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="585" y1="472" x2="585" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="670" y1="472" x2="670" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="754" y1="472" x2="754" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="839" y1="472" x2="839" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="923" y1="472" x2="923" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="398" x2="932" y2="398"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="306" x2="932" y2="306"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="214" x2="932" y2="214"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="122" x2="932" y2="122"/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
<text x="77" y="398" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,398 86,398 "/>
<text x="77" y="306" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,306 86,306 "/>
<text x="77" y="214" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
15.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,214 86,214 "/>
<text x="77" y="122" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
15.5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,122 86,122 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
<text x="163" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
10
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="163,473 163,478 "/>
<text x="247" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
20
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="247,473 247,478 "/>
<text x="332" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
30
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="332,473 332,478 "/>
<text x="416" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
40
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="416,473 416,478 "/>
<text x="501" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
50
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="501,473 501,478 "/>
<text x="585" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
60
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="585,473 585,478 "/>
<text x="670" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
70
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="670,473 670,478 "/>
<text x="754" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
80
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="754,473 754,478 "/>
<text x="839" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
90
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="839,473 839,478 "/>
<text x="923" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
100
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="923,473 923,478 "/>
<circle cx="87" cy="323" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="95" cy="290" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="103" cy="370" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="112" cy="315" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="120" cy="274" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="129" cy="401" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="137" cy="383" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="146" cy="409" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="154" cy="361" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="163" cy="316" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="171" cy="387" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="179" cy="277" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="188" cy="316" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="196" cy="321" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="205" cy="376" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="213" cy="324" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="222" cy="352" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="230" cy="397" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="239" cy="374" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="247" cy="352" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="256" cy="360" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="264" cy="317" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="272" cy="353" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="281" cy="379" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="289" cy="370" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="298" cy="292" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="306" cy="339" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="315" cy="324" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="323" cy="215" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="332" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="340" cy="78" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="348" cy="142" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="357" cy="97" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="365" cy="237" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="374" cy="106" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="382" cy="320" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="391" cy="317" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="399" cy="323" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="408" cy="267" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="416" cy="85" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="425" cy="99" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="433" cy="288" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="441" cy="241" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="450" cy="257" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="458" cy="302" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="467" cy="305" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="475" cy="315" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="484" cy="196" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="492" cy="278" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="501" cy="355" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="509" cy="304" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="517" cy="306" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="526" cy="322" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="534" cy="333" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="543" cy="284" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="551" cy="169" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="560" cy="328" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="568" cy="147" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="577" cy="349" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="585" cy="343" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="594" cy="299" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="602" cy="342" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="610" cy="342" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="619" cy="343" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="627" cy="247" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="636" cy="322" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="644" cy="365" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="653" cy="239" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="661" cy="242" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="670" cy="300" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="678" cy="196" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="686" cy="355" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="695" cy="156" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="703" cy="372" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="712" cy="330" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="720" cy="291" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="729" cy="224" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="737" cy="304" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="746" cy="324" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="754" cy="277" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="763" cy="389" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="771" cy="217" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="779" cy="304" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="788" cy="249" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="796" cy="286" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="805" cy="286" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="813" cy="213" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="822" cy="343" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="830" cy="369" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="839" cy="310" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="847" cy="351" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="855" cy="329" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="864" cy="253" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="872" cy="472" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="881" cy="291" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="889" cy="139" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="898" cy="379" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="906" cy="286" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="915" cy="324" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="923" cy="188" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<text x="132" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Sample
</text>
<circle cx="112" cy="73" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

@@ -0,0 +1,177 @@
<svg width="450" height="300" viewBox="0 0 450 300" xmlns="http://www.w3.org/2000/svg">
<text x="15" y="130" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 15, 130)">
Average Iteration Time (ms)
</text>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="107" y1="244" x2="107" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="143" y1="244" x2="143" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="179" y1="244" x2="179" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="215" y1="244" x2="215" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="250" y1="244" x2="250" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="286" y1="244" x2="286" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="322" y1="244" x2="322" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="358" y1="244" x2="358" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="394" y1="244" x2="394" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="430" y1="244" x2="430" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="204" x2="434" y2="204"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="154" x2="434" y2="154"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="103" x2="434" y2="103"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="53" x2="434" y2="53"/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="74,15 74,244 "/>
<text x="65" y="204" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,204 74,204 "/>
<text x="65" y="154" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,154 74,154 "/>
<text x="65" y="103" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
15.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,103 74,103 "/>
<text x="65" y="53" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
15.5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,53 74,53 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="75,245 434,245 "/>
<text x="107" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
10
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="107,245 107,250 "/>
<text x="143" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
20
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="143,245 143,250 "/>
<text x="179" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
30
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="179,245 179,250 "/>
<text x="215" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
40
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="215,245 215,250 "/>
<text x="250" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
50
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="250,245 250,250 "/>
<text x="286" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
60
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="286,245 286,250 "/>
<text x="322" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
70
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="322,245 322,250 "/>
<text x="358" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
80
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="358,245 358,250 "/>
<text x="394" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
90
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="394,245 394,250 "/>
<text x="430" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
100
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="430,245 430,250 "/>
<circle cx="75" cy="163" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="78" cy="145" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="82" cy="189" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="85" cy="159" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="89" cy="136" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="92" cy="205" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="96" cy="195" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="100" cy="210" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="103" cy="184" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="107" cy="159" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="110" cy="198" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="114" cy="138" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="118" cy="159" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="121" cy="162" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="125" cy="192" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="128" cy="163" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="132" cy="179" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="136" cy="203" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="139" cy="191" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="143" cy="179" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="146" cy="183" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="150" cy="159" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="153" cy="179" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="157" cy="194" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="161" cy="189" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="164" cy="146" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="168" cy="171" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="171" cy="163" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="175" cy="104" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="179" cy="15" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="182" cy="29" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="186" cy="64" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="189" cy="39" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="193" cy="116" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="197" cy="44" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="200" cy="161" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="204" cy="159" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="207" cy="163" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="211" cy="132" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="215" cy="33" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="218" cy="41" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="222" cy="144" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="225" cy="118" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="229" cy="127" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="232" cy="151" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="236" cy="153" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="240" cy="158" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="243" cy="93" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="247" cy="138" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="250" cy="180" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="254" cy="153" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="258" cy="153" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="261" cy="162" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="265" cy="168" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="268" cy="142" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="272" cy="78" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="276" cy="166" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="279" cy="66" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="283" cy="177" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="286" cy="174" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="290" cy="150" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="293" cy="173" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="297" cy="173" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="301" cy="174" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="304" cy="121" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="308" cy="162" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="311" cy="186" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="315" cy="117" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="319" cy="118" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="322" cy="150" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="326" cy="93" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="329" cy="180" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="333" cy="72" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="337" cy="189" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="340" cy="167" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="344" cy="145" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="347" cy="109" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="351" cy="153" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="355" cy="164" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="358" cy="137" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="362" cy="199" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="365" cy="105" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="369" cy="152" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="372" cy="122" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="376" cy="143" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="380" cy="142" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="383" cy="103" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="387" cy="174" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="390" cy="188" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="394" cy="156" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="398" cy="178" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="401" cy="166" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="405" cy="124" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="408" cy="244" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="412" cy="145" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="416" cy="62" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="419" cy="193" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="423" cy="142" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="426" cy="163" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="430" cy="89" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

@@ -0,0 +1,108 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
below_cache_reuse/second_stroke_cache_reuse:mean
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Density (a.u.)
</text>
<text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average time (ms)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
<text x="77" y="450" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,450 86,450 "/>
<text x="77" y="405" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,405 86,405 "/>
<text x="77" y="360" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
3
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,360 86,360 "/>
<text x="77" y="315" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,315 86,315 "/>
<text x="77" y="270" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,270 86,270 "/>
<text x="77" y="225" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,225 86,225 "/>
<text x="77" y="180" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
7
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,180 86,180 "/>
<text x="77" y="135" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,135 86,135 "/>
<text x="77" y="90" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
9
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,90 86,90 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
<text x="129" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.48
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="129,473 129,478 "/>
<text x="209" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="209,473 209,478 "/>
<text x="288" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.52
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="288,473 288,478 "/>
<text x="368" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.54
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="368,473 368,478 "/>
<text x="448" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.56
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="448,473 448,478 "/>
<text x="528" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.58
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="528,473 528,478 "/>
<text x="608" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="608,473 608,478 "/>
<text x="687" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.62
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="687,473 687,478 "/>
<text x="767" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.64
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="767,473 767,478 "/>
<text x="847" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.66
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="847,473 847,478 "/>
<text x="927" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.68
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="927,473 927,478 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,472 88,471 90,470 92,470 93,469 95,468 97,468 98,467 100,466 102,465 103,465 105,464 107,463 109,463 110,462 112,461 114,460 115,460 117,459 119,458 120,457 122,456 124,456 125,455 127,454 129,453 131,452 132,451 134,450 136,449 137,448 139,447 141,446 142,445 144,444 146,443 147,442 149,441 151,440 153,439 154,437 156,436 158,435 159,434 161,433 163,431 164,430 166,429 168,427 169,426 171,424 173,423 175,421 176,420 178,418 180,417 181,415 183,414 185,412 186,410 188,409 190,407 191,405 193,404 195,402 197,400 198,398 200,397 202,395 203,393 205,391 207,390 208,388 210,386 212,384 214,383 215,381 217,379 219,377 220,376 222,374 224,372 225,370 227,368 229,367 230,365 232,363 234,361 236,359 237,358 239,356 241,354 242,352 244,350 246,348 247,346 249,344 251,342 252,340 254,338 256,336 258,334 259,332 261,330 263,328 264,326 266,324 268,322 269,320 271,317 273,315 274,313 276,311 278,309 280,306 281,304 283,302 285,299 286,297 288,295 290,292 291,290 293,287 295,285 296,282 298,279 300,277 302,274 303,271 305,269 307,266 308,263 310,261 312,258 313,255 315,253 317,250 318,248 320,245 322,243 324,240 325,238 327,236 329,233 330,231 332,229 334,226 335,224 337,222 339,220 341,218 342,216 344,213 346,211 347,209 349,207 351,205 352,203 354,201 356,199 357,198 359,196 361,194 363,192 364,190 366,189 368,187 369,185 371,183 373,182 374,180 376,178 378,176 379,174 381,172 383,170 385,168 386,166 388,164 390,162 391,160 393,157 395,155 396,153 398,150 400,148 401,145 403,143 405,140 407,138 408,135 410,133 412,130 413,128 415,125 417,123 418,121 420,119 422,117 423,115 425,113 427,111 429,109 430,108 432,106 434,105 435,104 437,103 439,102 440,101 442,101 444,100 445,100 447,99 449,99 451,99 452,99 454,99 456,98 457,98 459,98 461,98 462,98 464,98 466,98 468,98 469,98 471,98 473,98 474,97 476,97 478,97 479,97 481,96 483,96 484,96 486,95 488,95 490,95 491,94 493,94 495,94 496,94 498,94 500,94 501,94 503,94 505,94 506,94 508,94 510,95 512,95 513,95 515,96 517,96 518,97 520,98 522,98 523,99 525,100 527,101 528,101 530,102 532,103 534,104 535,105 537,106 539,106 540,107 542,108 544,109 545,110 547,111 549,112 550,113 552,114 554,115 556,116 557,117 559,118 561,119 562,120 564,121 566,123 567,124 569,125 571,127 573,128 574,129 576,131 578,132 579,134 581,136 583,137 584,139 586,141 588,143 589,145 591,147 593,149 595,151 596,153 598,155 600,157 601,159 603,162 605,164 606,166 608,168 610,170 611,173 613,175 615,177 617,179 618,181 620,184 622,186 623,188 625,190 627,192 628,194 630,196 632,198 633,200 635,202 637,204 639,206 640,207 642,209 644,211 645,213 647,215 649,217 650,219 652,222 654,224 655,226 657,228 659,230 661,232 662,235 664,237 666,239 667,242 669,244 671,246 672,249 674,251 676,253 677,256 679,258 681,260 683,263 684,265 686,267 688,270 689,272 691,274 693,277 694,279 696,281 698,284 700,286 701,288 703,290 705,293 706,295 708,297 710,299 711,301 713,304 715,306 716,308 718,310 720,312 722,314 723,316 725,318 727,320 728,322 730,324 732,326 733,328 735,330 737,332 738,334 740,336 742,337 744,339 745,341 747,343 749,345 750,347 752,349 754,351 755,352 757,354 759,356 760,358 762,360 764,362 766,363 767,365 769,367 771,369 772,370 774,372 776,373 777,375 779,376 781,378 782,379 784,381 786,382 788,384 789,385 791,387 793,388 794,390 796,391 798,393 799,395 801,396 803,398 804,399 806,401 808,402 810,404 811,406 813,407 815,409 816,410 818,412 820,413 821,415 823,416 825,418 827,419 828,420 830,422 832,423 833,424 835,426 837,427 838,428 840,429 842,430 843,432 845,433 847,434 849,435 850,436 852,437 854,438 855,439 857,440 859,441 860,442 862,442 864,443 865,444 867,445 869,446 871,447 872,448 874,449 876,450 877,450 879,451 881,452 882,453 884,454 886,455 887,456 889,456 891,457 893,458 894,459 896,459 898,460 899,461 901,462 903,462 904,463 906,464 908,464 909,465 911,466 913,466 915,467 916,468 918,468 920,469 921,469 923,470 925,470 926,471 928,471 930,472 932,472 "/>
<polygon opacity="0.25" fill="#1F78B4" points="164,430 166,429 168,427 169,426 171,424 173,423 175,421 176,420 178,418 180,417 181,415 183,414 185,412 186,410 188,409 190,407 191,405 193,404 195,402 197,400 198,398 200,397 202,395 203,393 205,391 207,390 208,388 210,386 212,384 214,383 215,381 217,379 219,377 220,376 222,374 224,372 225,370 227,368 229,367 230,365 232,363 234,361 236,359 237,358 239,356 241,354 242,352 244,350 246,348 247,346 249,344 251,342 252,340 254,338 256,336 258,334 259,332 261,330 263,328 264,326 266,324 268,322 269,320 271,317 273,315 274,313 276,311 278,309 280,306 281,304 283,302 285,299 286,297 288,295 290,292 291,290 293,287 295,285 296,282 298,279 300,277 302,274 303,271 305,269 307,266 308,263 310,261 312,258 313,255 315,253 317,250 318,248 320,245 322,243 324,240 325,238 327,236 329,233 330,231 332,229 334,226 335,224 337,222 339,220 341,218 342,216 344,213 346,211 347,209 349,207 351,205 352,203 354,201 356,199 357,198 359,196 361,194 363,192 364,190 366,189 368,187 369,185 371,183 373,182 374,180 376,178 378,176 379,174 381,172 383,170 385,168 386,166 388,164 390,162 391,160 393,157 395,155 396,153 398,150 400,148 401,145 403,143 405,140 407,138 408,135 410,133 412,130 413,128 415,125 417,123 418,121 420,119 422,117 423,115 425,113 427,111 429,109 430,108 432,106 434,105 435,104 437,103 439,102 440,101 442,101 444,100 445,100 447,99 449,99 451,99 452,99 454,99 456,98 457,98 459,98 461,98 462,98 464,98 466,98 468,98 469,98 471,98 473,98 474,97 476,97 478,97 479,97 481,96 483,96 484,96 486,95 488,95 490,95 491,94 493,94 495,94 496,94 498,94 500,94 501,94 503,94 505,94 506,94 508,94 510,95 512,95 513,95 515,96 517,96 518,97 520,98 522,98 523,99 525,100 527,101 528,101 530,102 532,103 534,104 535,105 537,106 539,106 540,107 542,108 544,109 545,110 547,111 549,112 550,113 552,114 554,115 556,116 557,117 559,118 561,119 562,120 564,121 566,123 567,124 569,125 571,127 573,128 574,129 576,131 578,132 579,134 581,136 583,137 584,139 586,141 588,143 589,145 591,147 593,149 595,151 596,153 598,155 600,157 601,159 603,162 605,164 606,166 608,168 610,170 611,173 613,175 615,177 617,179 618,181 620,184 622,186 623,188 625,190 627,192 628,194 630,196 632,198 633,200 635,202 637,204 639,206 640,207 642,209 644,211 645,213 647,215 649,217 650,219 652,222 654,224 655,226 657,228 659,230 661,232 662,235 664,237 666,239 667,242 669,244 671,246 672,249 674,251 676,253 677,256 679,258 681,260 683,263 684,265 686,267 688,270 689,272 691,274 693,277 694,279 696,281 698,284 700,286 701,288 703,290 705,293 706,295 708,297 710,299 711,301 713,304 715,306 716,308 718,310 720,312 722,314 723,316 725,318 727,320 728,322 730,324 732,326 733,328 735,330 737,332 738,334 740,336 742,337 744,339 745,341 747,343 749,345 750,347 752,349 754,351 755,352 757,354 759,356 760,358 762,360 764,362 766,363 767,365 769,367 771,369 772,370 774,372 776,373 777,375 779,376 781,378 782,379 784,381 786,382 788,384 789,385 791,387 793,388 794,390 796,391 798,393 799,395 801,396 803,398 804,399 806,401 808,402 810,404 811,406 813,407 815,409 816,410 818,412 820,413 821,415 823,416 825,418 827,419 828,420 830,422 832,423 833,424 835,426 837,427 838,428 840,429 842,430 843,432 845,433 847,434 849,435 850,436 852,437 852,473 164,473 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="3" points="501,473 501,94 "/>
<text x="798" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Bootstrap distribution
</text>
<text x="798" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Confidence interval
</text>
<text x="798" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Point estimate
</text>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,73 788,73 "/>
<rect x="768" y="83" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,103 788,103 "/>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

@@ -0,0 +1,84 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
below_cache_reuse/second_stroke_cache_reuse:median
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Density (a.u.)
</text>
<text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average time (ms)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
<text x="77" y="402" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,402 86,402 "/>
<text x="77" y="330" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
10
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,330 86,330 "/>
<text x="77" y="259" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
15
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,259 86,259 "/>
<text x="77" y="187" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
20
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,187 86,187 "/>
<text x="77" y="116" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
25
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,116 86,116 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
<text x="115" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="115,473 115,478 "/>
<text x="209" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.42
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="209,473 209,478 "/>
<text x="303" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.44
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="303,473 303,478 "/>
<text x="397" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.46
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="397,473 397,478 "/>
<text x="491" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.48
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="491,473 491,478 "/>
<text x="585" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="585,473 585,478 "/>
<text x="679" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.52
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="679,473 679,478 "/>
<text x="773" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.54
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="773,473 773,478 "/>
<text x="867" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.56
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="867,473 867,478 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,472 88,471 90,471 92,471 93,471 95,470 97,470 98,469 100,469 102,468 103,468 105,467 107,466 109,465 110,464 112,463 114,462 115,461 117,459 119,458 120,456 122,455 124,453 125,451 127,450 129,448 131,446 132,444 134,441 136,439 137,437 139,434 141,432 142,429 144,426 146,423 147,420 149,417 151,414 153,411 154,408 156,404 158,401 159,398 161,394 163,391 164,388 166,385 168,382 169,380 171,377 173,375 175,373 176,372 178,370 180,370 181,369 183,369 185,369 186,369 188,370 190,371 191,373 193,374 195,376 197,378 198,380 200,382 202,384 203,386 205,388 207,390 208,392 210,394 212,396 214,398 215,400 217,401 219,403 220,404 222,405 224,407 225,407 227,408 229,409 230,410 232,410 234,411 236,411 237,411 239,411 241,411 242,411 244,411 246,411 247,411 249,411 251,410 252,410 254,409 256,409 258,408 259,407 261,407 263,406 264,405 266,404 268,402 269,401 271,399 273,398 274,395 276,393 278,390 280,387 281,383 283,378 285,373 286,366 288,359 290,352 291,343 293,333 295,323 296,312 298,299 300,287 302,273 303,259 305,245 307,230 308,216 310,201 312,187 313,173 315,160 317,147 318,136 320,126 322,117 324,109 325,102 327,97 329,94 330,92 332,92 334,93 335,95 337,100 339,105 341,112 342,120 344,129 346,140 347,151 349,163 351,176 352,190 354,204 356,218 357,233 359,248 361,263 363,278 364,292 366,306 368,319 369,332 371,344 373,355 374,365 376,374 378,383 379,390 381,396 383,402 385,406 386,409 388,412 390,413 391,414 393,415 395,415 396,414 398,413 400,412 401,411 403,409 405,408 407,407 408,406 410,405 412,405 413,405 415,405 417,406 418,407 420,408 422,410 423,412 425,414 427,416 429,419 430,421 432,423 434,425 435,427 437,429 439,430 440,431 442,431 444,431 445,431 447,430 449,429 451,428 452,426 454,424 456,421 457,419 459,416 461,413 462,411 464,408 466,406 468,404 469,402 471,401 473,400 474,399 476,399 478,399 479,400 481,401 483,403 484,405 486,407 488,409 490,412 491,415 493,417 495,420 496,422 498,425 500,427 501,429 503,430 505,431 506,432 508,433 510,433 512,432 513,432 515,431 517,429 518,428 520,426 522,425 523,423 525,421 527,419 528,418 530,416 532,415 534,414 535,413 537,413 539,413 540,413 542,413 544,414 545,415 547,416 549,418 550,419 552,420 554,422 556,423 557,424 559,425 561,425 562,426 564,425 566,425 567,423 569,422 571,419 573,417 574,413 576,409 578,404 579,399 581,394 583,387 584,381 586,374 588,366 589,359 591,351 593,343 595,335 596,327 598,318 600,310 601,303 603,295 605,288 606,281 608,275 610,269 611,264 613,260 615,256 617,253 618,251 620,249 622,249 623,249 625,250 627,252 628,255 630,258 632,262 633,267 635,273 637,279 639,285 640,292 642,299 644,307 645,314 647,322 649,329 650,337 652,344 654,351 655,358 657,364 659,371 661,377 662,382 664,387 666,392 667,397 669,401 671,404 672,408 674,411 676,414 677,416 679,419 681,421 683,423 684,425 686,426 688,428 689,429 691,430 693,431 694,432 696,433 698,434 700,435 701,436 703,436 705,437 706,438 708,438 710,439 711,440 713,440 715,441 716,441 718,441 720,442 722,442 723,442 725,443 727,443 728,443 730,443 732,443 733,443 735,443 737,443 738,443 740,443 742,443 744,443 745,443 747,443 749,443 750,444 752,444 754,444 755,445 757,445 759,446 760,447 762,448 764,449 766,450 767,451 769,452 771,454 772,455 774,456 776,458 777,459 779,460 781,461 782,462 784,464 786,465 788,465 789,466 791,467 793,468 794,468 796,469 798,469 799,470 801,470 803,470 804,470 806,470 808,470 810,470 811,470 813,470 815,470 816,470 818,470 820,470 821,470 823,469 825,469 827,469 828,468 830,468 832,468 833,467 835,467 837,466 838,466 840,465 842,465 843,464 845,464 847,464 849,463 850,463 852,462 854,462 855,462 857,462 859,462 860,462 862,462 864,462 865,462 867,462 869,463 871,463 872,464 874,464 876,464 877,465 879,466 881,466 882,467 884,467 886,468 887,468 889,469 891,469 893,470 894,470 896,471 898,471 899,471 901,472 903,472 904,472 906,472 908,472 909,472 911,472 913,472 915,472 916,472 918,472 920,472 921,472 923,472 925,472 926,472 928,471 930,471 932,471 "/>
<polygon opacity="0.25" fill="#1F78B4" points="164,388 166,385 168,382 169,380 171,377 173,375 175,373 176,372 178,370 180,370 181,369 183,369 185,369 186,369 188,370 190,371 191,373 193,374 195,376 197,378 198,380 200,382 202,384 203,386 205,388 207,390 208,392 210,394 212,396 214,398 215,400 217,401 219,403 220,404 222,405 224,407 225,407 227,408 229,409 230,410 232,410 234,411 236,411 237,411 239,411 241,411 242,411 244,411 246,411 247,411 249,411 251,410 252,410 254,409 256,409 258,408 259,407 261,407 263,406 264,405 266,404 268,402 269,401 271,399 273,398 274,395 276,393 278,390 280,387 281,383 283,378 285,373 286,366 288,359 290,352 291,343 293,333 295,323 296,312 298,299 300,287 302,273 303,259 305,245 307,230 308,216 310,201 312,187 313,173 315,160 317,147 318,136 320,126 322,117 324,109 325,102 327,97 329,94 330,92 332,92 334,93 335,95 337,100 339,105 341,112 342,120 344,129 346,140 347,151 349,163 351,176 352,190 354,204 356,218 357,233 359,248 361,263 363,278 364,292 366,306 368,319 369,332 371,344 373,355 374,365 376,374 378,383 379,390 381,396 383,402 385,406 386,409 388,412 390,413 391,414 393,415 395,415 396,414 398,413 400,412 401,411 403,409 405,408 407,407 408,406 410,405 412,405 413,405 415,405 417,406 418,407 420,408 422,410 423,412 425,414 427,416 429,419 430,421 432,423 434,425 435,427 437,429 439,430 440,431 442,431 444,431 445,431 447,430 449,429 451,428 452,426 454,424 456,421 457,419 459,416 461,413 462,411 464,408 466,406 468,404 469,402 471,401 473,400 474,399 476,399 478,399 479,400 481,401 483,403 484,405 486,407 488,409 490,412 491,415 493,417 495,420 496,422 498,425 500,427 501,429 503,430 505,431 506,432 508,433 510,433 512,432 513,432 515,431 517,429 518,428 520,426 522,425 523,423 525,421 527,419 528,418 530,416 532,415 534,414 535,413 537,413 539,413 540,413 542,413 544,414 545,415 547,416 549,418 550,419 552,420 554,422 556,423 557,424 559,425 561,425 562,426 564,425 566,425 567,423 569,422 571,419 573,417 574,413 576,409 578,404 579,399 581,394 583,387 584,381 586,374 588,366 589,359 591,351 593,343 595,335 596,327 598,318 600,310 601,303 603,295 605,288 606,281 608,275 610,269 611,264 613,260 615,256 617,253 618,251 620,249 622,249 623,249 625,250 627,252 628,255 630,258 632,262 633,267 635,273 637,279 639,285 640,292 642,299 644,307 645,314 647,322 649,329 650,337 652,344 654,351 655,358 657,364 659,371 661,377 662,382 664,387 666,392 667,397 669,401 671,404 672,408 674,411 676,414 677,416 679,419 681,421 683,423 684,425 686,426 688,428 689,429 691,430 693,431 694,432 696,433 698,434 700,435 701,436 703,436 705,437 706,438 708,438 710,439 711,440 713,440 715,441 716,441 718,441 720,442 722,442 723,442 725,443 727,443 728,443 730,443 732,443 733,443 735,443 737,443 738,443 740,443 742,443 744,443 745,443 747,443 749,443 750,444 752,444 754,444 755,445 757,445 759,446 760,447 762,448 764,449 766,450 767,451 769,452 771,454 772,455 774,456 776,458 777,459 779,460 781,461 782,462 784,464 786,465 788,465 789,466 791,467 793,468 794,468 796,469 798,469 799,470 801,470 803,470 804,470 806,470 808,470 810,470 811,470 813,470 815,470 816,470 818,470 820,470 821,470 823,469 825,469 827,469 828,468 830,468 832,468 833,467 835,467 837,466 838,466 840,465 842,465 843,464 845,464 847,464 849,463 850,463 852,462 852,473 164,473 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="3" points="353,473 353,193 "/>
<text x="798" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Bootstrap distribution
</text>
<text x="798" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Confidence interval
</text>
<text x="798" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Point estimate
</text>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,73 788,73 "/>
<rect x="768" y="83" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,103 788,103 "/>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1,159 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
below_cache_reuse/second_stroke_cache_reuse
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Iterations
</text>
<text x="480" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average Time (ms)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
<text x="77" y="472" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,472 86,472 "/>
<text x="77" y="420" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,420 86,420 "/>
<text x="77" y="368" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,368 86,368 "/>
<text x="77" y="315" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,315 86,315 "/>
<text x="77" y="263" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,263 86,263 "/>
<text x="77" y="211" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
2.5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,211 86,211 "/>
<text x="77" y="158" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
3
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,158 86,158 "/>
<text x="77" y="106" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
3.5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,106 86,106 "/>
<text x="77" y="53" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,53 86,53 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 872,473 "/>
<text x="193" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
13.5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="193,473 193,478 "/>
<text x="309" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="309,473 309,478 "/>
<text x="425" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="425,473 425,478 "/>
<text x="541" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
15
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="541,473 541,478 "/>
<text x="657" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
15.5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="657,473 657,478 "/>
<text x="773" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
16
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="773,473 773,478 "/>
<text x="933" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(90, 933, 263)">
Density (a.u.)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,53 873,473 "/>
<text x="883" y="473" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,473 878,473 "/>
<text x="883" y="435" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,435 878,435 "/>
<text x="883" y="396" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,396 878,396 "/>
<text x="883" y="357" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.3
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,357 878,357 "/>
<text x="883" y="318" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,318 878,318 "/>
<text x="883" y="279" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,279 878,279 "/>
<text x="883" y="240" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,240 878,240 "/>
<text x="883" y="202" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.7
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,202 878,202 "/>
<text x="883" y="163" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,163 878,163 "/>
<text x="883" y="124" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.9
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,124 878,124 "/>
<text x="883" y="85" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,85 878,85 "/>
<polygon opacity="0.5" fill="#1F78B4" points="87,473 88,473 90,473 91,473 93,473 94,473 96,473 98,473 99,473 101,473 102,473 104,473 105,473 107,473 109,473 110,473 112,473 113,473 115,473 116,473 118,473 120,473 121,473 123,473 124,473 126,473 127,472 129,472 131,472 132,472 134,472 135,472 137,472 138,472 140,472 142,472 143,471 145,471 146,471 148,471 150,471 151,471 153,471 154,470 156,470 157,470 159,470 161,470 162,469 164,469 165,469 167,469 168,469 170,468 172,468 173,468 175,468 176,468 178,467 179,467 181,467 183,467 184,466 186,466 187,466 189,465 190,465 192,465 194,465 195,464 197,464 198,464 200,463 201,463 203,463 205,462 206,462 208,462 209,461 211,461 213,460 214,460 216,460 217,459 219,458 220,458 222,457 224,457 225,456 227,455 228,455 230,454 231,453 233,452 235,451 236,450 238,449 239,448 241,447 242,446 244,444 246,443 247,442 249,440 250,439 252,437 253,435 255,433 257,431 258,429 260,427 261,425 263,422 264,420 266,417 268,415 269,412 271,409 272,406 274,403 276,399 277,396 279,393 280,389 282,385 283,382 285,378 287,374 288,369 290,365 291,361 293,356 294,352 296,347 298,342 299,338 301,333 302,328 304,323 305,317 307,312 309,307 310,302 312,296 313,291 315,285 316,280 318,274 320,268 321,263 323,257 324,251 326,245 327,240 329,234 331,228 332,222 334,217 335,211 337,205 339,199 340,194 342,188 343,182 345,177 346,171 348,166 350,161 351,155 353,150 354,145 356,140 357,135 359,130 361,125 362,121 364,116 365,112 367,108 368,103 370,99 372,95 373,92 375,88 376,85 378,81 379,78 381,75 383,73 384,70 386,67 387,65 389,63 391,61 392,60 394,58 395,57 397,56 398,55 400,54 402,54 403,54 405,53 406,54 408,54 409,55 411,55 413,56 414,58 416,59 417,61 419,62 420,64 422,67 424,69 425,72 427,74 428,77 430,80 431,84 433,87 435,90 436,94 438,98 439,102 441,106 442,110 444,114 446,119 447,123 449,128 450,132 452,137 454,142 455,146 457,151 458,156 460,161 461,166 463,170 465,175 466,180 468,185 469,190 471,195 472,199 474,204 476,209 477,214 479,218 480,223 482,227 483,232 485,236 487,240 488,245 490,249 491,253 493,257 494,261 496,265 498,269 499,273 501,276 502,280 504,283 505,287 507,290 509,293 510,297 512,300 513,303 515,306 517,309 518,312 520,315 521,317 523,320 524,323 526,325 528,328 529,330 531,333 532,335 534,337 535,340 537,342 539,344 540,346 542,348 543,350 545,352 546,354 548,356 550,358 551,360 553,362 554,363 556,365 557,367 559,368 561,370 562,371 564,373 565,374 567,376 568,377 570,378 572,380 573,381 575,382 576,383 578,384 580,386 581,387 583,388 584,389 586,390 587,391 589,392 591,392 592,393 594,394 595,395 597,396 598,396 600,397 602,398 603,398 605,399 606,400 608,400 609,401 611,401 613,402 614,402 616,403 617,403 619,404 620,404 622,405 624,405 625,405 627,406 628,406 630,406 632,407 633,407 635,407 636,408 638,408 639,408 641,408 643,409 644,409 646,409 647,409 649,410 650,410 652,410 654,410 655,410 657,411 658,411 660,411 661,411 663,411 665,412 666,412 668,412 669,412 671,413 672,413 674,413 676,414 677,414 679,414 680,414 682,415 683,415 685,416 687,416 688,416 690,417 691,417 693,418 695,418 696,419 698,419 699,420 701,420 702,421 704,422 706,422 707,423 709,424 710,424 712,425 713,426 715,427 717,427 718,428 720,429 721,430 723,431 724,432 726,432 728,433 729,434 731,435 732,436 734,437 735,438 737,439 739,440 740,441 742,442 743,443 745,443 746,444 748,445 750,446 751,447 753,448 754,449 756,450 758,451 759,452 761,452 762,453 764,454 765,455 767,456 769,456 770,457 772,458 773,458 775,459 776,460 778,460 780,461 781,462 783,462 784,463 786,463 787,464 789,464 791,465 792,465 794,466 795,466 797,467 798,467 800,468 802,468 803,468 805,469 806,469 808,469 809,469 811,470 813,470 814,470 816,470 817,471 819,471 821,471 822,471 824,471 825,472 827,472 828,472 830,472 832,472 833,472 835,472 836,472 838,473 839,473 841,473 843,473 844,473 846,473 847,473 849,473 850,473 852,473 854,473 855,473 857,473 858,473 860,473 861,473 863,473 865,473 866,473 868,473 869,473 871,473 873,473 873,473 87,473 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="442,472 442,53 "/>
<polyline fill="none" opacity="1" stroke="#FF7F00" stroke-width="1" points="209,472 209,53 "/>
<polyline fill="none" opacity="1" stroke="#FF7F00" stroke-width="1" points="655,472 655,53 "/>
<polyline fill="none" opacity="1" stroke="#E31A1C" stroke-width="1" points="87,472 87,53 "/>
<polyline fill="none" opacity="1" stroke="#E31A1C" stroke-width="1" points="823,472 823,53 "/>
<circle cx="742" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="712" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="688" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="676" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="703" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="685" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="742" cy="53" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
<circle cx="712" cy="53" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
<circle cx="688" cy="53" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
<circle cx="676" cy="53" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
<circle cx="703" cy="53" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
<circle cx="685" cy="53" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
<text x="776" y="228" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
PDF
</text>
<text x="776" y="243" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Mean
</text>
<text x="776" y="258" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
&quot;Clean&quot; sample
</text>
<text x="776" y="273" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Mild outliers
</text>
<text x="776" y="288" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Severe outliers
</text>
<rect x="746" y="228" width="20" height="10" opacity="0.5" fill="#1F78B4" stroke="none"/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="746,248 766,248 "/>
<circle cx="756" cy="263" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="756" cy="278" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
<circle cx="756" cy="293" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

@@ -0,0 +1,48 @@
<svg width="450" height="300" viewBox="0 0 450 300" xmlns="http://www.w3.org/2000/svg">
<text x="15" y="130" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 15, 130)">
Density (a.u.)
</text>
<text x="255" y="285" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average Time (ms)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="74,15 74,244 "/>
<text x="65" y="244" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,244 74,244 "/>
<text x="65" y="206" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,206 74,206 "/>
<text x="65" y="167" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,167 74,167 "/>
<text x="65" y="129" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,129 74,129 "/>
<text x="65" y="90" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,90 74,90 "/>
<text x="65" y="52" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,52 74,52 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="75,245 434,245 "/>
<text x="176" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="176,245 176,250 "/>
<text x="282" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
15
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="282,245 282,250 "/>
<text x="388" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
16
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="388,245 388,250 "/>
<polygon opacity="0.25" fill="#1F78B4" points="75,244 75,244 76,244 77,244 77,244 78,244 79,244 80,244 80,244 81,244 82,244 82,244 83,244 84,244 85,244 85,244 86,244 87,244 87,244 88,244 89,244 90,244 90,244 91,244 92,244 92,244 93,244 94,244 95,244 95,244 96,244 97,244 98,244 98,244 99,244 100,244 100,243 101,243 102,243 103,243 103,243 104,243 105,243 105,243 106,243 107,243 108,243 108,243 109,243 110,242 110,242 111,242 112,242 113,242 113,242 114,242 115,242 116,242 116,241 117,241 118,241 118,241 119,241 120,241 121,241 121,241 122,240 123,240 123,240 124,240 125,240 126,240 126,240 127,239 128,239 128,239 129,239 130,239 131,238 131,238 132,238 133,238 133,238 134,237 135,237 136,237 136,236 137,236 138,236 139,236 139,235 140,235 141,234 141,234 142,233 143,233 144,232 144,232 145,231 146,231 146,230 147,229 148,229 149,228 149,227 150,226 151,225 151,225 152,224 153,223 154,221 154,220 155,219 156,218 157,217 157,215 158,214 159,212 159,211 160,209 161,208 162,206 162,204 163,203 164,201 164,199 165,197 166,195 167,193 167,191 168,189 169,186 169,184 170,182 171,180 172,177 172,175 173,172 174,170 175,167 175,165 176,162 177,159 177,157 178,154 179,151 180,148 180,146 181,143 182,140 182,137 183,134 184,131 185,129 185,126 186,123 187,120 187,117 188,114 189,111 190,109 190,106 191,103 192,100 192,98 193,95 194,92 195,89 195,87 196,84 197,82 198,79 198,77 199,74 200,72 200,70 201,67 202,65 203,63 203,61 204,59 205,57 205,55 206,53 207,52 208,50 208,49 209,47 210,46 210,44 211,43 212,42 213,41 213,40 214,39 215,39 216,38 216,37 217,37 218,37 218,36 219,36 220,36 221,36 221,37 222,37 223,37 223,38 224,38 225,39 226,40 226,41 227,42 228,43 228,44 229,45 230,47 231,48 231,50 232,51 233,53 233,55 234,56 235,58 236,60 236,62 237,64 238,66 239,69 239,71 240,73 241,75 241,78 242,80 243,82 244,85 244,87 245,89 246,92 246,94 247,97 248,99 249,102 249,104 250,106 251,109 251,111 252,113 253,116 254,118 254,120 255,122 256,125 257,127 257,129 258,131 259,133 259,135 260,137 261,139 262,141 262,143 263,145 264,147 264,148 265,150 266,152 267,154 267,155 268,157 269,158 269,160 270,161 271,163 272,164 272,166 273,167 274,168 275,170 275,171 276,172 277,174 277,175 278,176 279,177 280,178 280,179 281,180 282,181 282,182 283,183 284,184 285,185 285,186 286,187 287,188 287,189 288,190 289,191 290,192 290,192 291,193 292,194 292,195 293,195 294,196 295,197 295,197 296,198 297,199 298,199 298,200 299,200 300,201 300,201 301,202 302,202 303,203 303,203 304,204 305,204 305,205 306,205 307,206 308,206 308,206 309,207 310,207 310,207 311,208 312,208 313,208 313,208 314,209 315,209 316,209 316,209 317,210 318,210 318,210 319,210 320,211 321,211 321,211 322,211 323,211 323,211 324,212 325,212 326,212 326,212 327,212 328,212 328,212 329,212 330,213 331,213 331,213 332,213 333,213 333,213 334,213 335,213 336,213 336,214 337,214 338,214 339,214 339,214 340,214 341,214 341,214 342,214 343,215 344,215 344,215 345,215 346,215 346,215 347,216 348,216 349,216 349,216 350,216 351,217 351,217 352,217 353,217 354,218 354,218 355,218 356,218 357,219 357,219 358,219 359,220 359,220 360,220 361,221 362,221 362,222 363,222 364,222 364,223 365,223 366,224 367,224 367,225 368,225 369,225 369,226 370,226 371,227 372,227 372,228 373,228 374,229 375,229 375,230 376,230 377,231 377,231 378,231 379,232 380,232 380,233 381,233 382,234 382,234 383,234 384,235 385,235 385,236 386,236 387,236 387,237 388,237 389,237 390,238 390,238 391,238 392,239 392,239 393,239 394,240 395,240 395,240 396,240 397,241 398,241 398,241 399,241 400,241 400,242 401,242 402,242 403,242 403,242 404,242 405,243 405,243 406,243 407,243 408,243 408,243 409,243 410,243 410,243 411,243 412,244 413,244 413,244 414,244 415,244 416,244 416,244 417,244 418,244 418,244 419,244 420,244 421,244 421,244 422,244 423,244 423,244 424,244 425,244 426,244 426,244 427,244 428,244 428,244 429,244 430,244 431,244 431,244 432,244 433,244 434,244 434,244 75,244 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="2" points="237,244 237,64 "/>
</svg>

After

Width:  |  Height:  |  Size: 6.7 KiB

@@ -0,0 +1,108 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
below_cache_reuse/second_stroke_cache_reuse:typical
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Density (a.u.)
</text>
<text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average time (ms)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
<text x="77" y="450" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,450 86,450 "/>
<text x="77" y="405" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,405 86,405 "/>
<text x="77" y="360" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
3
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,360 86,360 "/>
<text x="77" y="315" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,315 86,315 "/>
<text x="77" y="270" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,270 86,270 "/>
<text x="77" y="225" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,225 86,225 "/>
<text x="77" y="180" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
7
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,180 86,180 "/>
<text x="77" y="135" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,135 86,135 "/>
<text x="77" y="90" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
9
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,90 86,90 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
<text x="129" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.48
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="129,473 129,478 "/>
<text x="209" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="209,473 209,478 "/>
<text x="288" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.52
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="288,473 288,478 "/>
<text x="368" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.54
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="368,473 368,478 "/>
<text x="448" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.56
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="448,473 448,478 "/>
<text x="528" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.58
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="528,473 528,478 "/>
<text x="608" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="608,473 608,478 "/>
<text x="687" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.62
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="687,473 687,478 "/>
<text x="767" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.64
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="767,473 767,478 "/>
<text x="847" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.66
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="847,473 847,478 "/>
<text x="927" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14.68
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="927,473 927,478 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,472 88,471 90,470 92,470 93,469 95,468 97,468 98,467 100,466 102,465 103,465 105,464 107,463 109,463 110,462 112,461 114,460 115,460 117,459 119,458 120,457 122,456 124,456 125,455 127,454 129,453 131,452 132,451 134,450 136,449 137,448 139,447 141,446 142,445 144,444 146,443 147,442 149,441 151,440 153,439 154,437 156,436 158,435 159,434 161,433 163,431 164,430 166,429 168,427 169,426 171,424 173,423 175,421 176,420 178,418 180,417 181,415 183,414 185,412 186,410 188,409 190,407 191,405 193,404 195,402 197,400 198,398 200,397 202,395 203,393 205,391 207,390 208,388 210,386 212,384 214,383 215,381 217,379 219,377 220,376 222,374 224,372 225,370 227,368 229,367 230,365 232,363 234,361 236,359 237,358 239,356 241,354 242,352 244,350 246,348 247,346 249,344 251,342 252,340 254,338 256,336 258,334 259,332 261,330 263,328 264,326 266,324 268,322 269,320 271,317 273,315 274,313 276,311 278,309 280,306 281,304 283,302 285,299 286,297 288,295 290,292 291,290 293,287 295,285 296,282 298,279 300,277 302,274 303,271 305,269 307,266 308,263 310,261 312,258 313,255 315,253 317,250 318,248 320,245 322,243 324,240 325,238 327,236 329,233 330,231 332,229 334,226 335,224 337,222 339,220 341,218 342,216 344,213 346,211 347,209 349,207 351,205 352,203 354,201 356,199 357,198 359,196 361,194 363,192 364,190 366,189 368,187 369,185 371,183 373,182 374,180 376,178 378,176 379,174 381,172 383,170 385,168 386,166 388,164 390,162 391,160 393,157 395,155 396,153 398,150 400,148 401,145 403,143 405,140 407,138 408,135 410,133 412,130 413,128 415,125 417,123 418,121 420,119 422,117 423,115 425,113 427,111 429,109 430,108 432,106 434,105 435,104 437,103 439,102 440,101 442,101 444,100 445,100 447,99 449,99 451,99 452,99 454,99 456,98 457,98 459,98 461,98 462,98 464,98 466,98 468,98 469,98 471,98 473,98 474,97 476,97 478,97 479,97 481,96 483,96 484,96 486,95 488,95 490,95 491,94 493,94 495,94 496,94 498,94 500,94 501,94 503,94 505,94 506,94 508,94 510,95 512,95 513,95 515,96 517,96 518,97 520,98 522,98 523,99 525,100 527,101 528,101 530,102 532,103 534,104 535,105 537,106 539,106 540,107 542,108 544,109 545,110 547,111 549,112 550,113 552,114 554,115 556,116 557,117 559,118 561,119 562,120 564,121 566,123 567,124 569,125 571,127 573,128 574,129 576,131 578,132 579,134 581,136 583,137 584,139 586,141 588,143 589,145 591,147 593,149 595,151 596,153 598,155 600,157 601,159 603,162 605,164 606,166 608,168 610,170 611,173 613,175 615,177 617,179 618,181 620,184 622,186 623,188 625,190 627,192 628,194 630,196 632,198 633,200 635,202 637,204 639,206 640,207 642,209 644,211 645,213 647,215 649,217 650,219 652,222 654,224 655,226 657,228 659,230 661,232 662,235 664,237 666,239 667,242 669,244 671,246 672,249 674,251 676,253 677,256 679,258 681,260 683,263 684,265 686,267 688,270 689,272 691,274 693,277 694,279 696,281 698,284 700,286 701,288 703,290 705,293 706,295 708,297 710,299 711,301 713,304 715,306 716,308 718,310 720,312 722,314 723,316 725,318 727,320 728,322 730,324 732,326 733,328 735,330 737,332 738,334 740,336 742,337 744,339 745,341 747,343 749,345 750,347 752,349 754,351 755,352 757,354 759,356 760,358 762,360 764,362 766,363 767,365 769,367 771,369 772,370 774,372 776,373 777,375 779,376 781,378 782,379 784,381 786,382 788,384 789,385 791,387 793,388 794,390 796,391 798,393 799,395 801,396 803,398 804,399 806,401 808,402 810,404 811,406 813,407 815,409 816,410 818,412 820,413 821,415 823,416 825,418 827,419 828,420 830,422 832,423 833,424 835,426 837,427 838,428 840,429 842,430 843,432 845,433 847,434 849,435 850,436 852,437 854,438 855,439 857,440 859,441 860,442 862,442 864,443 865,444 867,445 869,446 871,447 872,448 874,449 876,450 877,450 879,451 881,452 882,453 884,454 886,455 887,456 889,456 891,457 893,458 894,459 896,459 898,460 899,461 901,462 903,462 904,463 906,464 908,464 909,465 911,466 913,466 915,467 916,468 918,468 920,469 921,469 923,470 925,470 926,471 928,471 930,472 932,472 "/>
<polygon opacity="0.25" fill="#1F78B4" points="164,430 166,429 168,427 169,426 171,424 173,423 175,421 176,420 178,418 180,417 181,415 183,414 185,412 186,410 188,409 190,407 191,405 193,404 195,402 197,400 198,398 200,397 202,395 203,393 205,391 207,390 208,388 210,386 212,384 214,383 215,381 217,379 219,377 220,376 222,374 224,372 225,370 227,368 229,367 230,365 232,363 234,361 236,359 237,358 239,356 241,354 242,352 244,350 246,348 247,346 249,344 251,342 252,340 254,338 256,336 258,334 259,332 261,330 263,328 264,326 266,324 268,322 269,320 271,317 273,315 274,313 276,311 278,309 280,306 281,304 283,302 285,299 286,297 288,295 290,292 291,290 293,287 295,285 296,282 298,279 300,277 302,274 303,271 305,269 307,266 308,263 310,261 312,258 313,255 315,253 317,250 318,248 320,245 322,243 324,240 325,238 327,236 329,233 330,231 332,229 334,226 335,224 337,222 339,220 341,218 342,216 344,213 346,211 347,209 349,207 351,205 352,203 354,201 356,199 357,198 359,196 361,194 363,192 364,190 366,189 368,187 369,185 371,183 373,182 374,180 376,178 378,176 379,174 381,172 383,170 385,168 386,166 388,164 390,162 391,160 393,157 395,155 396,153 398,150 400,148 401,145 403,143 405,140 407,138 408,135 410,133 412,130 413,128 415,125 417,123 418,121 420,119 422,117 423,115 425,113 427,111 429,109 430,108 432,106 434,105 435,104 437,103 439,102 440,101 442,101 444,100 445,100 447,99 449,99 451,99 452,99 454,99 456,98 457,98 459,98 461,98 462,98 464,98 466,98 468,98 469,98 471,98 473,98 474,97 476,97 478,97 479,97 481,96 483,96 484,96 486,95 488,95 490,95 491,94 493,94 495,94 496,94 498,94 500,94 501,94 503,94 505,94 506,94 508,94 510,95 512,95 513,95 515,96 517,96 518,97 520,98 522,98 523,99 525,100 527,101 528,101 530,102 532,103 534,104 535,105 537,106 539,106 540,107 542,108 544,109 545,110 547,111 549,112 550,113 552,114 554,115 556,116 557,117 559,118 561,119 562,120 564,121 566,123 567,124 569,125 571,127 573,128 574,129 576,131 578,132 579,134 581,136 583,137 584,139 586,141 588,143 589,145 591,147 593,149 595,151 596,153 598,155 600,157 601,159 603,162 605,164 606,166 608,168 610,170 611,173 613,175 615,177 617,179 618,181 620,184 622,186 623,188 625,190 627,192 628,194 630,196 632,198 633,200 635,202 637,204 639,206 640,207 642,209 644,211 645,213 647,215 649,217 650,219 652,222 654,224 655,226 657,228 659,230 661,232 662,235 664,237 666,239 667,242 669,244 671,246 672,249 674,251 676,253 677,256 679,258 681,260 683,263 684,265 686,267 688,270 689,272 691,274 693,277 694,279 696,281 698,284 700,286 701,288 703,290 705,293 706,295 708,297 710,299 711,301 713,304 715,306 716,308 718,310 720,312 722,314 723,316 725,318 727,320 728,322 730,324 732,326 733,328 735,330 737,332 738,334 740,336 742,337 744,339 745,341 747,343 749,345 750,347 752,349 754,351 755,352 757,354 759,356 760,358 762,360 764,362 766,363 767,365 769,367 771,369 772,370 774,372 776,373 777,375 779,376 781,378 782,379 784,381 786,382 788,384 789,385 791,387 793,388 794,390 796,391 798,393 799,395 801,396 803,398 804,399 806,401 808,402 810,404 811,406 813,407 815,409 816,410 818,412 820,413 821,415 823,416 825,418 827,419 828,420 830,422 832,423 833,424 835,426 837,427 838,428 840,429 842,430 843,432 845,433 847,434 849,435 850,436 852,437 852,473 164,473 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="3" points="501,473 501,94 "/>
<text x="798" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Bootstrap distribution
</text>
<text x="798" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Confidence interval
</text>
<text x="798" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Point estimate
</text>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,73 788,73 "/>
<rect x="768" y="83" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,103 788,103 "/>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

@@ -0,0 +1 @@
{"group_id":"composite_scratch_pooling","function_id":"cold_composite","value_str":null,"throughput":null,"full_id":"composite_scratch_pooling/cold_composite","directory_name":"composite_scratch_pooling/cold_composite","title":"composite_scratch_pooling/cold_composite"}
@@ -0,0 +1 @@
{"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":812177406.29,"upper_bound":857389685.4535},"point_estimate":834486944.68,"standard_error":11495404.381205494},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":753737109.0,"upper_bound":766506110.0},"point_estimate":757074595.5,"standard_error":15857807.187801858},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":20968429.218935966,"upper_bound":54785502.7289629},"point_estimate":32723406.211343408,"standard_error":18347991.659907967},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":104116565.37937303,"upper_bound":124723900.34334047},"point_estimate":115441877.44917327,"standard_error":5215149.056436004}}
@@ -0,0 +1 @@
{"sampling_mode":"Flat","iters":[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0],"times":[968619715.0,953627923.0,964541687.0,955168900.0,955717832.0,1022348923.0,965839588.0,1103478488.0,1034080999.0,950165158.0,956012404.0,959175353.0,966222089.0,977180444.0,975095845.0,959138267.0,1008696789.0,966282801.0,988549043.0,1010425104.0,969764812.0,950358931.0,993443001.0,950066156.0,944360183.0,960607173.0,942361182.0,955887554.0,952734176.0,954999194.0,997052828.0,953346204.0,945162531.0,1035485307.0,960848791.0,939055851.0,1125195702.0,963198525.0,731905787.0,764458461.0,729645027.0,731857131.0,739375996.0,733584526.0,738509146.0,746495790.0,764568053.0,751104982.0,747061408.0,742230172.0,745251281.0,754238195.0,740852823.0,754514600.0,753935651.0,746124575.0,729945665.0,756597494.0,738575150.0,717947736.0,739262456.0,728031313.0,735004616.0,749512342.0,761773639.0,734374504.0,738230335.0,754265206.0,751643954.0,736740556.0,756568457.0,759677820.0,754479818.0,742781581.0,753575353.0,754518077.0,749052781.0,763961053.0,758188943.0,761411664.0,769138847.0,732105094.0,750336235.0,745880463.0,747703486.0,757551697.0,752513334.0,760286523.0,746586523.0,768553759.0,745035539.0,741347243.0,735001304.0,730954649.0,736594714.0,729271515.0,764146545.0,753737109.0,751759311.0,754061008.0]}
@@ -0,0 +1 @@
[113508594.5,429352970.0,1271604638.0,1587449013.5]
@@ -0,0 +1 @@
{"group_id":"composite_scratch_pooling","function_id":"cold_composite","value_str":null,"throughput":null,"full_id":"composite_scratch_pooling/cold_composite","directory_name":"composite_scratch_pooling/cold_composite","title":"composite_scratch_pooling/cold_composite"}
@@ -0,0 +1 @@
{"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":1000498161.29825,"upper_bound":1099690001.8669999},"point_estimate":1048196884.82,"standard_error":25367730.011527233},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":934936845.0,"upper_bound":1051233781.0},"point_estimate":980892716.0,"standard_error":27134022.995351616},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":177003031.31002563,"upper_bound":306999435.59566045},"point_estimate":245161550.01531243,"standard_error":33985506.10896858},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":205921067.23108926,"upper_bound":304826695.59609365},"point_estimate":256849149.27776495,"standard_error":25157881.125520337}}
@@ -0,0 +1 @@
{"sampling_mode":"Flat","iters":[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0],"times":[923099625.0,921320537.0,824843569.0,885032478.0,900895392.0,1051233781.0,932208762.0,999381095.0,1052806204.0,1061894488.0,1088684665.0,1026156997.0,970041150.0,992728410.0,963334427.0,929496136.0,954705004.0,980612121.0,1011294246.0,1025284776.0,1057955115.0,950281769.0,983741477.0,1071953346.0,980491406.0,1067916469.0,1091671773.0,978887356.0,895437785.0,1025254703.0,934936845.0,944945338.0,981173311.0,909527857.0,839438515.0,850175785.0,909100614.0,896100351.0,798482215.0,788656880.0,786020039.0,783359749.0,790777260.0,806176031.0,809801070.0,818637745.0,875872393.0,941171790.0,826336772.0,821704791.0,785506329.0,792634355.0,801609253.0,787851280.0,793554572.0,799326910.0,823212033.0,792434451.0,794048259.0,804704164.0,805769800.0,809575864.0,788111106.0,802348229.0,782335356.0,794429035.0,1100516034.0,1149356151.0,1222619982.0,1185127595.0,1116905632.0,1241729911.0,1084361421.0,1053125618.0,1039174046.0,1128701069.0,1812978546.0,1181270028.0,1567076674.0,1536448943.0,1482078366.0,1599984505.0,2066423557.0,1366392465.0,1620498514.0,1543410483.0,1493344394.0,1231773106.0,1298556091.0,1514426126.0,1300489121.0,1211398841.0,1237395477.0,1278418182.0,1248865975.0,1243973433.0,1240671138.0,1297129039.0,1400353439.0,1256223171.0]}
@@ -0,0 +1 @@
[-277343479.5,273546102.75,1742584988.75,2293474571.0]
@@ -0,0 +1 @@
{"group_id":"composite_scratch_pooling","function_id":"cold_composite","value_str":null,"throughput":null,"full_id":"composite_scratch_pooling/cold_composite","directory_name":"composite_scratch_pooling/cold_composite","title":"composite_scratch_pooling/cold_composite"}
@@ -0,0 +1 @@
{"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":1000498161.29825,"upper_bound":1099690001.8669999},"point_estimate":1048196884.82,"standard_error":25367730.011527233},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":934936845.0,"upper_bound":1051233781.0},"point_estimate":980892716.0,"standard_error":27134022.995351616},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":177003031.31002563,"upper_bound":306999435.59566045},"point_estimate":245161550.01531243,"standard_error":33985506.10896858},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":205921067.23108926,"upper_bound":304826695.59609365},"point_estimate":256849149.27776495,"standard_error":25157881.125520337}}
@@ -0,0 +1 @@
{"sampling_mode":"Flat","iters":[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0],"times":[923099625.0,921320537.0,824843569.0,885032478.0,900895392.0,1051233781.0,932208762.0,999381095.0,1052806204.0,1061894488.0,1088684665.0,1026156997.0,970041150.0,992728410.0,963334427.0,929496136.0,954705004.0,980612121.0,1011294246.0,1025284776.0,1057955115.0,950281769.0,983741477.0,1071953346.0,980491406.0,1067916469.0,1091671773.0,978887356.0,895437785.0,1025254703.0,934936845.0,944945338.0,981173311.0,909527857.0,839438515.0,850175785.0,909100614.0,896100351.0,798482215.0,788656880.0,786020039.0,783359749.0,790777260.0,806176031.0,809801070.0,818637745.0,875872393.0,941171790.0,826336772.0,821704791.0,785506329.0,792634355.0,801609253.0,787851280.0,793554572.0,799326910.0,823212033.0,792434451.0,794048259.0,804704164.0,805769800.0,809575864.0,788111106.0,802348229.0,782335356.0,794429035.0,1100516034.0,1149356151.0,1222619982.0,1185127595.0,1116905632.0,1241729911.0,1084361421.0,1053125618.0,1039174046.0,1128701069.0,1812978546.0,1181270028.0,1567076674.0,1536448943.0,1482078366.0,1599984505.0,2066423557.0,1366392465.0,1620498514.0,1543410483.0,1493344394.0,1231773106.0,1298556091.0,1514426126.0,1300489121.0,1211398841.0,1237395477.0,1278418182.0,1248865975.0,1243973433.0,1240671138.0,1297129039.0,1400353439.0,1256223171.0]}
@@ -0,0 +1 @@
[-277343479.5,273546102.75,1742584988.75,2293474571.0]
@@ -0,0 +1,88 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
composite_scratch_pooling/cold_composite:MAD
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Density (a.u.)
</text>
<text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average time (ms)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
<text x="77" y="434" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.002
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,434 86,434 "/>
<text x="77" y="371" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.004
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,371 86,371 "/>
<text x="77" y="308" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.006
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,308 86,308 "/>
<text x="77" y="245" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.008
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,245 86,245 "/>
<text x="77" y="182" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.01
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,182 86,182 "/>
<text x="77" y="119" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.012
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,119 86,119 "/>
<text x="77" y="56" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.014
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,56 86,56 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
<text x="179" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
180
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="179,473 179,478 "/>
<text x="286" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
200
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="286,473 286,478 "/>
<text x="392" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
220
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="392,473 392,478 "/>
<text x="498" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
240
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="498,473 498,478 "/>
<text x="605" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
260
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="605,473 605,478 "/>
<text x="711" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
280
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="711,473 711,478 "/>
<text x="817" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
300
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="817,473 817,478 "/>
<text x="924" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
320
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="924,473 924,478 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,470 88,470 90,470 92,470 93,470 95,470 97,470 98,470 100,470 102,470 103,469 105,469 107,469 109,469 110,469 112,469 114,468 115,468 117,468 119,467 120,467 122,467 124,466 125,466 127,465 129,464 131,464 132,463 134,463 136,462 137,461 139,460 141,460 142,459 144,458 146,457 147,456 149,455 151,454 153,453 154,452 156,451 158,449 159,448 161,447 163,445 164,444 166,442 168,441 169,439 171,438 173,436 175,435 176,433 178,432 180,430 181,428 183,427 185,425 186,423 188,422 190,420 191,418 193,416 195,415 197,413 198,411 200,409 202,407 203,406 205,404 207,402 208,400 210,399 212,397 214,395 215,393 217,392 219,390 220,388 222,387 224,385 225,383 227,382 229,380 230,378 232,376 234,374 236,372 237,370 239,368 241,366 242,364 244,362 246,359 247,357 249,355 251,353 252,350 254,348 256,345 258,343 259,341 261,338 263,336 264,334 266,331 268,329 269,327 271,324 273,322 274,320 276,318 278,315 280,313 281,310 283,308 285,306 286,303 288,301 290,298 291,295 293,293 295,290 296,287 298,285 300,282 302,279 303,277 305,274 307,271 308,269 310,267 312,264 313,262 315,260 317,258 318,257 320,255 322,254 324,253 325,252 327,251 329,250 330,250 332,249 334,249 335,248 337,248 339,248 341,247 342,247 344,246 346,246 347,245 349,244 351,244 352,243 354,242 356,241 357,240 359,239 361,238 363,237 364,235 366,234 368,233 369,232 371,231 373,230 374,230 376,229 378,228 379,227 381,227 383,226 385,226 386,225 388,224 390,224 391,223 393,223 395,222 396,221 398,220 400,219 401,218 403,217 405,216 407,214 408,212 410,210 412,207 413,205 415,202 417,198 418,195 420,191 422,186 423,182 425,177 427,172 429,167 430,162 432,157 434,151 435,146 437,140 439,135 440,130 442,125 444,120 445,116 447,112 449,108 451,105 452,102 454,99 456,97 457,96 459,95 461,94 462,94 464,94 466,95 468,96 469,97 471,99 473,101 474,103 476,106 478,109 479,112 481,115 483,118 484,122 486,125 488,129 490,132 491,136 493,140 495,143 496,146 498,150 500,153 501,156 503,159 505,162 506,165 508,167 510,169 512,171 513,173 515,175 517,176 518,178 520,179 522,179 523,180 525,180 527,180 528,180 530,180 532,179 534,178 535,176 537,175 539,173 540,171 542,168 544,165 545,162 547,159 549,156 550,153 552,149 554,146 556,142 557,139 559,136 561,133 562,131 564,128 566,126 567,125 569,123 571,122 573,122 574,121 576,122 578,122 579,123 581,124 583,126 584,127 586,129 588,132 589,134 591,137 593,140 595,143 596,147 598,150 600,153 601,157 603,161 605,164 606,168 608,172 610,175 611,179 613,182 615,185 617,188 618,192 620,195 622,198 623,200 625,203 627,206 628,209 630,211 632,214 633,217 635,220 637,223 639,226 640,229 642,232 644,236 645,239 647,242 649,246 650,250 652,253 654,257 655,260 657,264 659,267 661,270 662,273 664,276 666,278 667,280 669,282 671,284 672,286 674,287 676,289 677,290 679,291 681,292 683,293 684,293 686,294 688,295 689,297 691,298 693,299 694,301 696,302 698,304 700,306 701,308 703,310 705,313 706,315 708,317 710,320 711,322 713,325 715,327 716,330 718,332 720,334 722,336 723,338 725,340 727,342 728,344 730,345 732,347 733,349 735,350 737,352 738,353 740,355 742,356 744,357 745,359 747,360 749,361 750,362 752,363 754,364 755,365 757,366 759,367 760,367 762,368 764,368 766,368 767,369 769,369 771,369 772,368 774,368 776,368 777,367 779,367 781,366 782,366 784,365 786,365 788,364 789,364 791,364 793,363 794,363 796,363 798,363 799,363 801,364 803,364 804,365 806,366 808,366 810,367 811,369 813,370 815,371 816,373 818,374 820,376 821,377 823,379 825,381 827,383 828,385 830,386 832,388 833,390 835,392 837,394 838,396 840,398 842,400 843,402 845,404 847,406 849,408 850,410 852,412 854,414 855,416 857,418 859,420 860,422 862,424 864,426 865,428 867,430 869,432 871,434 872,436 874,438 876,440 877,442 879,443 881,445 882,446 884,448 886,449 887,450 889,451 891,452 893,453 894,454 896,455 898,456 899,457 901,458 903,458 904,459 906,459 908,460 909,461 911,461 913,462 915,463 916,464 918,464 920,465 921,466 923,467 925,468 926,469 928,470 930,471 932,472 "/>
<polygon opacity="0.25" fill="#1F78B4" points="164,444 166,442 168,441 169,439 171,438 173,436 175,435 176,433 178,432 180,430 181,428 183,427 185,425 186,423 188,422 190,420 191,418 193,416 195,415 197,413 198,411 200,409 202,407 203,406 205,404 207,402 208,400 210,399 212,397 214,395 215,393 217,392 219,390 220,388 222,387 224,385 225,383 227,382 229,380 230,378 232,376 234,374 236,372 237,370 239,368 241,366 242,364 244,362 246,359 247,357 249,355 251,353 252,350 254,348 256,345 258,343 259,341 261,338 263,336 264,334 266,331 268,329 269,327 271,324 273,322 274,320 276,318 278,315 280,313 281,310 283,308 285,306 286,303 288,301 290,298 291,295 293,293 295,290 296,287 298,285 300,282 302,279 303,277 305,274 307,271 308,269 310,267 312,264 313,262 315,260 317,258 318,257 320,255 322,254 324,253 325,252 327,251 329,250 330,250 332,249 334,249 335,248 337,248 339,248 341,247 342,247 344,246 346,246 347,245 349,244 351,244 352,243 354,242 356,241 357,240 359,239 361,238 363,237 364,235 366,234 368,233 369,232 371,231 373,230 374,230 376,229 378,228 379,227 381,227 383,226 385,226 386,225 388,224 390,224 391,223 393,223 395,222 396,221 398,220 400,219 401,218 403,217 405,216 407,214 408,212 410,210 412,207 413,205 415,202 417,198 418,195 420,191 422,186 423,182 425,177 427,172 429,167 430,162 432,157 434,151 435,146 437,140 439,135 440,130 442,125 444,120 445,116 447,112 449,108 451,105 452,102 454,99 456,97 457,96 459,95 461,94 462,94 464,94 466,95 468,96 469,97 471,99 473,101 474,103 476,106 478,109 479,112 481,115 483,118 484,122 486,125 488,129 490,132 491,136 493,140 495,143 496,146 498,150 500,153 501,156 503,159 505,162 506,165 508,167 510,169 512,171 513,173 515,175 517,176 518,178 520,179 522,179 523,180 525,180 527,180 528,180 530,180 532,179 534,178 535,176 537,175 539,173 540,171 542,168 544,165 545,162 547,159 549,156 550,153 552,149 554,146 556,142 557,139 559,136 561,133 562,131 564,128 566,126 567,125 569,123 571,122 573,122 574,121 576,122 578,122 579,123 581,124 583,126 584,127 586,129 588,132 589,134 591,137 593,140 595,143 596,147 598,150 600,153 601,157 603,161 605,164 606,168 608,172 610,175 611,179 613,182 615,185 617,188 618,192 620,195 622,198 623,200 625,203 627,206 628,209 630,211 632,214 633,217 635,220 637,223 639,226 640,229 642,232 644,236 645,239 647,242 649,246 650,250 652,253 654,257 655,260 657,264 659,267 661,270 662,273 664,276 666,278 667,280 669,282 671,284 672,286 674,287 676,289 677,290 679,291 681,292 683,293 684,293 686,294 688,295 689,297 691,298 693,299 694,301 696,302 698,304 700,306 701,308 703,310 705,313 706,315 708,317 710,320 711,322 713,325 715,327 716,330 718,332 720,334 722,336 723,338 725,340 727,342 728,344 730,345 732,347 733,349 735,350 737,352 738,353 740,355 742,356 744,357 745,359 747,360 749,361 750,362 752,363 754,364 755,365 757,366 759,367 760,367 762,368 764,368 766,368 767,369 769,369 771,369 772,368 774,368 776,368 777,367 779,367 781,366 782,366 784,365 786,365 788,364 789,364 791,364 793,363 794,363 796,363 798,363 799,363 801,364 803,364 804,365 806,366 808,366 810,367 811,369 813,370 815,371 816,373 818,374 820,376 821,377 823,379 825,381 827,383 828,385 830,386 832,388 833,390 835,392 837,394 838,396 840,398 842,400 843,402 845,404 847,406 849,408 850,410 852,412 852,473 164,473 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="3" points="526,473 526,180 "/>
<text x="798" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Bootstrap distribution
</text>
<text x="798" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Confidence interval
</text>
<text x="798" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Point estimate
</text>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,73 788,73 "/>
<rect x="768" y="83" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,103 788,103 "/>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1,84 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
composite_scratch_pooling/cold_composite:SD
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Density (a.u.)
</text>
<text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average time (ms)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
<text x="77" y="444" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.002
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,444 86,444 "/>
<text x="77" y="392" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.004
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,392 86,392 "/>
<text x="77" y="341" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.006
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,341 86,341 "/>
<text x="77" y="289" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.008
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,289 86,289 "/>
<text x="77" y="238" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.01
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,238 86,238 "/>
<text x="77" y="186" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.012
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,186 86,186 "/>
<text x="77" y="135" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.014
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,135 86,135 "/>
<text x="77" y="83" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.016
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,83 86,83 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
<text x="122" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
200
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="122,473 122,478 "/>
<text x="262" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
220
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="262,473 262,478 "/>
<text x="402" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
240
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="402,473 402,478 "/>
<text x="541" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
260
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="541,473 541,478 "/>
<text x="681" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
280
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="681,473 681,478 "/>
<text x="821" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
300
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="821,473 821,478 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,471 88,470 90,470 92,469 93,468 95,468 97,467 98,466 100,465 102,464 103,463 105,463 107,462 109,461 110,460 112,459 114,458 115,457 117,456 119,455 120,454 122,454 124,453 125,452 127,451 129,450 131,449 132,448 134,447 136,446 137,445 139,443 141,442 142,441 144,440 146,439 147,438 149,437 151,436 153,435 154,434 156,433 158,432 159,431 161,430 163,429 164,428 166,427 168,426 169,425 171,424 173,423 175,422 176,420 178,419 180,418 181,417 183,416 185,415 186,413 188,412 190,411 191,410 193,409 195,407 197,406 198,405 200,403 202,402 203,401 205,399 207,398 208,397 210,395 212,394 214,392 215,391 217,389 219,387 220,386 222,384 224,382 225,380 227,378 229,376 230,374 232,371 234,369 236,367 237,365 239,362 241,360 242,357 244,354 246,352 247,349 249,346 251,344 252,341 254,338 256,335 258,332 259,330 261,327 263,324 264,321 266,318 268,316 269,313 271,310 273,308 274,305 276,302 278,300 280,297 281,295 283,292 285,290 286,287 288,285 290,282 291,280 293,278 295,275 296,273 298,270 300,268 302,266 303,264 305,261 307,259 308,257 310,254 312,252 313,250 315,248 317,245 318,243 320,241 322,239 324,236 325,234 327,232 329,230 330,227 332,225 334,223 335,221 337,219 339,217 341,214 342,212 344,210 346,208 347,206 349,204 351,202 352,200 354,198 356,196 357,195 359,193 361,191 363,189 364,187 366,185 368,184 369,182 371,180 373,179 374,177 376,175 378,174 379,172 381,170 383,169 385,167 386,166 388,164 390,163 391,161 393,160 395,158 396,156 398,155 400,153 401,151 403,149 405,147 407,145 408,143 410,141 412,139 413,137 415,135 417,133 418,130 420,128 422,126 423,124 425,122 427,119 429,117 430,115 432,113 434,112 435,110 437,108 439,107 440,105 442,104 444,103 445,101 447,100 449,99 451,98 452,98 454,97 456,96 457,96 459,95 461,95 462,94 464,94 466,94 468,94 469,94 471,94 473,94 474,94 476,94 478,94 479,94 481,95 483,95 484,95 486,96 488,96 490,97 491,97 493,97 495,97 496,98 498,98 500,98 501,98 503,98 505,98 506,98 508,98 510,98 512,98 513,98 515,98 517,98 518,98 520,98 522,98 523,99 525,99 527,99 528,100 530,101 532,102 534,103 535,104 537,105 539,106 540,108 542,109 544,111 545,112 547,114 549,115 550,116 552,118 554,119 556,121 557,122 559,123 561,125 562,126 564,127 566,128 567,129 569,130 571,131 573,133 574,134 576,135 578,136 579,137 581,139 583,140 584,142 586,143 588,145 589,147 591,148 593,150 595,152 596,154 598,156 600,158 601,161 603,163 605,165 606,167 608,169 610,172 611,174 613,176 615,178 617,180 618,183 620,185 622,187 623,189 625,191 627,194 628,196 630,198 632,200 633,202 635,204 637,206 639,208 640,210 642,212 644,213 645,215 647,217 649,218 650,220 652,222 654,223 655,225 657,226 659,228 661,230 662,231 664,233 666,235 667,237 669,239 671,241 672,243 674,245 676,247 677,249 679,252 681,254 683,257 684,259 686,262 688,264 689,267 691,269 693,272 694,274 696,277 698,279 700,282 701,284 703,286 705,289 706,291 708,293 710,295 711,297 713,299 715,301 716,303 718,305 720,307 722,308 723,310 725,312 727,314 728,316 730,318 732,320 733,322 735,323 737,325 738,327 740,330 742,332 744,334 745,336 747,338 749,340 750,342 752,345 754,347 755,349 757,351 759,353 760,355 762,357 764,359 766,361 767,363 769,364 771,366 772,368 774,369 776,371 777,372 779,374 781,375 782,376 784,378 786,379 788,380 789,382 791,383 793,384 794,386 796,387 798,389 799,390 801,392 803,393 804,395 806,397 808,398 810,400 811,402 813,404 815,406 816,407 818,409 820,411 821,413 823,415 825,416 827,418 828,420 830,421 832,423 833,424 835,425 837,427 838,428 840,429 842,430 843,431 845,432 847,433 849,434 850,435 852,435 854,436 855,437 857,438 859,438 860,439 862,440 864,441 865,442 867,442 869,443 871,444 872,445 874,446 876,447 877,448 879,449 881,450 882,451 884,452 886,453 887,454 889,455 891,456 893,457 894,458 896,459 898,459 899,460 901,461 903,462 904,463 906,463 908,464 909,465 911,466 913,466 915,467 916,467 918,468 920,469 921,469 923,470 925,470 926,471 928,471 930,472 932,472 "/>
<polygon opacity="0.25" fill="#1F78B4" points="164,428 166,427 168,426 169,425 171,424 173,423 175,422 176,420 178,419 180,418 181,417 183,416 185,415 186,413 188,412 190,411 191,410 193,409 195,407 197,406 198,405 200,403 202,402 203,401 205,399 207,398 208,397 210,395 212,394 214,392 215,391 217,389 219,387 220,386 222,384 224,382 225,380 227,378 229,376 230,374 232,371 234,369 236,367 237,365 239,362 241,360 242,357 244,354 246,352 247,349 249,346 251,344 252,341 254,338 256,335 258,332 259,330 261,327 263,324 264,321 266,318 268,316 269,313 271,310 273,308 274,305 276,302 278,300 280,297 281,295 283,292 285,290 286,287 288,285 290,282 291,280 293,278 295,275 296,273 298,270 300,268 302,266 303,264 305,261 307,259 308,257 310,254 312,252 313,250 315,248 317,245 318,243 320,241 322,239 324,236 325,234 327,232 329,230 330,227 332,225 334,223 335,221 337,219 339,217 341,214 342,212 344,210 346,208 347,206 349,204 351,202 352,200 354,198 356,196 357,195 359,193 361,191 363,189 364,187 366,185 368,184 369,182 371,180 373,179 374,177 376,175 378,174 379,172 381,170 383,169 385,167 386,166 388,164 390,163 391,161 393,160 395,158 396,156 398,155 400,153 401,151 403,149 405,147 407,145 408,143 410,141 412,139 413,137 415,135 417,133 418,130 420,128 422,126 423,124 425,122 427,119 429,117 430,115 432,113 434,112 435,110 437,108 439,107 440,105 442,104 444,103 445,101 447,100 449,99 451,98 452,98 454,97 456,96 457,96 459,95 461,95 462,94 464,94 466,94 468,94 469,94 471,94 473,94 474,94 476,94 478,94 479,94 481,95 483,95 484,95 486,96 488,96 490,97 491,97 493,97 495,97 496,98 498,98 500,98 501,98 503,98 505,98 506,98 508,98 510,98 512,98 513,98 515,98 517,98 518,98 520,98 522,98 523,99 525,99 527,99 528,100 530,101 532,102 534,103 535,104 537,105 539,106 540,108 542,109 544,111 545,112 547,114 549,115 550,116 552,118 554,119 556,121 557,122 559,123 561,125 562,126 564,127 566,128 567,129 569,130 571,131 573,133 574,134 576,135 578,136 579,137 581,139 583,140 584,142 586,143 588,145 589,147 591,148 593,150 595,152 596,154 598,156 600,158 601,161 603,163 605,165 606,167 608,169 610,172 611,174 613,176 615,178 617,180 618,183 620,185 622,187 623,189 625,191 627,194 628,196 630,198 632,200 633,202 635,204 637,206 639,208 640,210 642,212 644,213 645,215 647,217 649,218 650,220 652,222 654,223 655,225 657,226 659,228 661,230 662,231 664,233 666,235 667,237 669,239 671,241 672,243 674,245 676,247 677,249 679,252 681,254 683,257 684,259 686,262 688,264 689,267 691,269 693,272 694,274 696,277 698,279 700,282 701,284 703,286 705,289 706,291 708,293 710,295 711,297 713,299 715,301 716,303 718,305 720,307 722,308 723,310 725,312 727,314 728,316 730,318 732,320 733,322 735,323 737,325 738,327 740,330 742,332 744,334 745,336 747,338 749,340 750,342 752,345 754,347 755,349 757,351 759,353 760,355 762,357 764,359 766,361 767,363 769,364 771,366 772,368 774,369 776,371 777,372 779,374 781,375 782,376 784,378 786,379 788,380 789,382 791,383 793,384 794,386 796,387 798,389 799,390 801,392 803,393 804,395 806,397 808,398 810,400 811,402 813,404 815,406 816,407 818,409 820,411 821,413 823,415 825,416 827,418 828,420 830,421 832,423 833,424 835,425 837,427 838,428 840,429 842,430 843,431 845,432 847,433 849,434 850,435 852,435 852,473 164,473 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="3" points="519,473 519,98 "/>
<text x="798" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Bootstrap distribution
</text>
<text x="798" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Confidence interval
</text>
<text x="798" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Point estimate
</text>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,73 788,73 "/>
<rect x="768" y="83" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,103 788,103 "/>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1,193 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>composite_scratch_pooling/cold_composite - Criterion.rs</title>
<style type="text/css">
body {
font: 14px Helvetica Neue;
text-rendering: optimizelegibility;
}
.body {
width: 960px;
margin: auto;
}
th {
font-weight: 200
}
th,
td {
padding-right: 3px;
padding-bottom: 3px;
}
a:link {
color: #1F78B4;
text-decoration: none;
}
th.ci-bound {
opacity: 0.6
}
td.ci-bound {
opacity: 0.5
}
.stats {
width: 80%;
margin: auto;
display: flex;
}
.additional_stats {
flex: 0 0 60%
}
.additional_plots {
flex: 1
}
h2 {
font-size: 36px;
font-weight: 300;
}
h3 {
font-size: 24px;
font-weight: 300;
}
#footer {
height: 40px;
background: #888;
color: white;
font-size: larger;
font-weight: 300;
}
#footer a {
color: white;
text-decoration: underline;
}
#footer p {
text-align: center
}
</style>
</head>
<body>
<div class="body">
<h2>composite_scratch_pooling/cold_composite</h2>
<div class="absolute">
<section class="plots">
<table width="100%">
<tbody>
<tr>
<td>
<a href="pdf.svg">
<img src="pdf_small.svg" alt="PDF of Slope" width="450" height="300" />
</a>
</td>
<td>
<a href="iteration_times.svg">
<img src="iteration_times_small.svg" alt="Iteration Times" width="450" height="300" />
</a>
</td>
</tr>
</tbody>
</table>
</section>
<section class="stats">
<div class="additional_stats">
<h4>Additional Statistics:</h4>
<table>
<thead>
<tr>
<th></th>
<th title="0.95 confidence level" class="ci-bound">Lower bound</th>
<th>Estimate</th>
<th title="0.95 confidence level" class="ci-bound">Upper bound</th>
</tr>
</thead>
<tbody>
<tr>
<td>R&#xb2;</td>
<td class="ci-bound">0.0063621</td>
<td>0.0065823</td>
<td class="ci-bound">0.0063271</td>
</tr>
<tr>
<td>Mean</td>
<td class="ci-bound">1.0005 s</td>
<td>1.0482 s</td>
<td class="ci-bound">1.0997 s</td>
</tr>
<tr>
<td title="Standard Deviation">Std. Dev.</td>
<td class="ci-bound">205.92 ms</td>
<td>256.85 ms</td>
<td class="ci-bound">304.83 ms</td>
</tr>
<tr>
<td>Median</td>
<td class="ci-bound">934.94 ms</td>
<td>980.89 ms</td>
<td class="ci-bound">1.0512 s</td>
</tr>
<tr>
<td title="Median Absolute Deviation">MAD</td>
<td class="ci-bound">177.00 ms</td>
<td>245.16 ms</td>
<td class="ci-bound">307.00 ms</td>
</tr>
</tbody>
</table>
</div>
<div class="additional_plots">
<h4>Additional Plots:</h4>
<ul>
<li>
<a href="typical.svg">Typical</a>
</li>
<li>
<a href="mean.svg">Mean</a>
</li>
<li>
<a href="SD.svg">Std. Dev.</a>
</li>
<li>
<a href="median.svg">Median</a>
</li>
<li>
<a href="MAD.svg">MAD</a>
</li>
</ul>
</div>
</section>
<section class="explanation">
<h4>Understanding this report:</h4>
<p>The plot on the left displays the average time per iteration for this benchmark. The shaded region
shows the estimated probability of an iteration taking a certain amount of time, while the line
shows the mean. Click on the plot for a larger view showing the outliers.</p>
<p>The plot on the right shows the average time per iteration for the samples. Each point
represents one sample.</p>
<p>See <a href="https://bheisler.github.io/criterion.rs/book/user_guide/command_line_output.html#additional-statistics">the
documentation</a> for more details on the additional statistics.</p>
</section>
</div>
</div>
<div id="footer">
<p>This report was generated by
<a href="https://github.com/bheisler/criterion.rs">Criterion.rs</a>, a statistics-driven benchmarking
library in Rust.</p>
</div>
</body>
</html>
@@ -0,0 +1,199 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
composite_scratch_pooling/cold_composite
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Average Iteration Time (s)
</text>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="163" y1="472" x2="163" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="247" y1="472" x2="247" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="332" y1="472" x2="332" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="416" y1="472" x2="416" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="501" y1="472" x2="501" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="585" y1="472" x2="585" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="670" y1="472" x2="670" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="754" y1="472" x2="754" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="839" y1="472" x2="839" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="923" y1="472" x2="923" y2="53"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="467" x2="932" y2="467"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="401" x2="932" y2="401"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="336" x2="932" y2="336"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="271" x2="932" y2="271"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="206" x2="932" y2="206"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="140" x2="932" y2="140"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="75" x2="932" y2="75"/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
<text x="77" y="467" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,467 86,467 "/>
<text x="77" y="401" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,401 86,401 "/>
<text x="77" y="336" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,336 86,336 "/>
<text x="77" y="271" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,271 86,271 "/>
<text x="77" y="206" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,206 86,206 "/>
<text x="77" y="140" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,140 86,140 "/>
<text x="77" y="75" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
2.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,75 86,75 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
<text x="163" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
10
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="163,473 163,478 "/>
<text x="247" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
20
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="247,473 247,478 "/>
<text x="332" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
30
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="332,473 332,478 "/>
<text x="416" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
40
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="416,473 416,478 "/>
<text x="501" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
50
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="501,473 501,478 "/>
<text x="585" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
60
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="585,473 585,478 "/>
<text x="670" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
70
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="670,473 670,478 "/>
<text x="754" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
80
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="754,473 754,478 "/>
<text x="839" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
90
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="839,473 839,478 "/>
<text x="923" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
100
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="923,473 923,478 "/>
<circle cx="87" cy="427" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="95" cy="427" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="103" cy="459" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="112" cy="439" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="120" cy="434" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="129" cy="385" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="137" cy="424" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="146" cy="402" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="154" cy="384" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="163" cy="381" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="171" cy="373" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="179" cy="393" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="188" cy="411" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="196" cy="404" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="205" cy="413" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="213" cy="424" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="222" cy="416" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="230" cy="408" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="239" cy="398" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="247" cy="393" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="256" cy="383" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="264" cy="418" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="272" cy="407" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="281" cy="378" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="289" cy="408" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="298" cy="379" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="306" cy="372" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="315" cy="408" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="323" cy="436" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="332" cy="393" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="340" cy="423" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="348" cy="419" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="357" cy="408" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="365" cy="431" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="374" cy="454" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="382" cy="450" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="391" cy="431" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="399" cy="435" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="408" cy="467" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="416" cy="470" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="425" cy="471" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="433" cy="472" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="441" cy="470" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="450" cy="465" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="458" cy="464" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="467" cy="461" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="475" cy="442" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="484" cy="421" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="492" cy="458" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="501" cy="460" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="509" cy="471" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="517" cy="469" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="526" cy="466" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="534" cy="471" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="543" cy="469" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="551" cy="467" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="560" cy="459" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="568" cy="469" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="577" cy="469" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="585" cy="465" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="594" cy="465" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="602" cy="464" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="610" cy="471" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="619" cy="466" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="627" cy="472" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="636" cy="469" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="644" cy="369" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="653" cy="353" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="661" cy="329" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="670" cy="341" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="678" cy="363" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="686" cy="323" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="695" cy="374" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="703" cy="384" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="712" cy="389" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="720" cy="359" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="729" cy="136" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="737" cy="342" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="746" cy="216" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="754" cy="226" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="763" cy="244" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="771" cy="206" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="779" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="788" cy="282" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="796" cy="199" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="805" cy="224" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="813" cy="240" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="822" cy="326" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="830" cy="304" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="839" cy="234" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="847" cy="303" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="855" cy="332" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="864" cy="324" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="872" cy="311" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="881" cy="320" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="889" cy="322" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="898" cy="323" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="906" cy="305" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="915" cy="271" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="923" cy="318" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<text x="132" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Sample
</text>
<circle cx="112" cy="73" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

@@ -0,0 +1,192 @@
<svg width="450" height="300" viewBox="0 0 450 300" xmlns="http://www.w3.org/2000/svg">
<text x="15" y="130" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 15, 130)">
Average Iteration Time (s)
</text>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="107" y1="244" x2="107" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="143" y1="244" x2="143" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="179" y1="244" x2="179" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="215" y1="244" x2="215" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="250" y1="244" x2="250" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="286" y1="244" x2="286" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="322" y1="244" x2="322" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="358" y1="244" x2="358" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="394" y1="244" x2="394" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="430" y1="244" x2="430" y2="15"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="241" x2="434" y2="241"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="206" x2="434" y2="206"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="170" x2="434" y2="170"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="134" x2="434" y2="134"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="99" x2="434" y2="99"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="63" x2="434" y2="63"/>
<line opacity="0.2" stroke="#000000" stroke-width="1" x1="75" y1="27" x2="434" y2="27"/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="74,15 74,244 "/>
<text x="65" y="241" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,241 74,241 "/>
<text x="65" y="206" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,206 74,206 "/>
<text x="65" y="170" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,170 74,170 "/>
<text x="65" y="134" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,134 74,134 "/>
<text x="65" y="99" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,99 74,99 "/>
<text x="65" y="63" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,63 74,63 "/>
<text x="65" y="27" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
2.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,27 74,27 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="75,245 434,245 "/>
<text x="107" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
10
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="107,245 107,250 "/>
<text x="143" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
20
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="143,245 143,250 "/>
<text x="179" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
30
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="179,245 179,250 "/>
<text x="215" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
40
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="215,245 215,250 "/>
<text x="250" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
50
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="250,245 250,250 "/>
<text x="286" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
60
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="286,245 286,250 "/>
<text x="322" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
70
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="322,245 322,250 "/>
<text x="358" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
80
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="358,245 358,250 "/>
<text x="394" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
90
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="394,245 394,250 "/>
<text x="430" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
100
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="430,245 430,250 "/>
<circle cx="75" cy="219" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="78" cy="220" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="82" cy="237" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="85" cy="226" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="89" cy="223" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="92" cy="197" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="96" cy="218" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="100" cy="206" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="103" cy="196" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="107" cy="195" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="110" cy="190" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="114" cy="201" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="118" cy="211" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="121" cy="207" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="125" cy="212" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="128" cy="218" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="132" cy="214" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="136" cy="209" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="139" cy="204" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="143" cy="201" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="146" cy="195" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="150" cy="215" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="153" cy="209" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="157" cy="193" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="161" cy="209" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="164" cy="194" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="168" cy="189" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="171" cy="209" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="175" cy="224" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="179" cy="201" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="182" cy="217" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="186" cy="215" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="189" cy="209" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="193" cy="222" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="197" cy="234" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="200" cy="232" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="204" cy="222" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="207" cy="224" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="211" cy="242" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="215" cy="243" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="218" cy="244" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="222" cy="244" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="225" cy="243" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="229" cy="240" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="232" cy="240" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="236" cy="238" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="240" cy="228" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="243" cy="216" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="247" cy="237" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="250" cy="237" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="254" cy="244" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="258" cy="243" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="261" cy="241" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="265" cy="244" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="268" cy="242" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="272" cy="241" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="276" cy="237" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="279" cy="243" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="283" cy="242" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="286" cy="241" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="290" cy="240" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="293" cy="240" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="297" cy="243" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="301" cy="241" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="304" cy="244" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="308" cy="242" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="311" cy="188" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="315" cy="179" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="319" cy="166" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="322" cy="173" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="326" cy="185" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="329" cy="163" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="333" cy="191" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="337" cy="196" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="340" cy="199" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="344" cy="183" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="347" cy="61" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="351" cy="173" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="355" cy="105" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="358" cy="110" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="362" cy="120" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="365" cy="99" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="369" cy="15" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="372" cy="140" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="376" cy="95" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="380" cy="109" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="383" cy="118" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="387" cy="164" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="390" cy="152" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="394" cy="114" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="398" cy="152" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="401" cy="168" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="405" cy="163" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="408" cy="156" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="412" cy="161" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="416" cy="162" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="419" cy="163" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="423" cy="153" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="426" cy="134" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="430" cy="160" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

@@ -0,0 +1,84 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
composite_scratch_pooling/cold_composite:mean
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Density (a.u.)
</text>
<text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average time (s)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
<text x="77" y="443" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,443 86,443 "/>
<text x="77" y="392" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,392 86,392 "/>
<text x="77" y="341" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,341 86,341 "/>
<text x="77" y="290" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,290 86,290 "/>
<text x="77" y="238" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
10
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,238 86,238 "/>
<text x="77" y="187" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
12
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,187 86,187 "/>
<text x="77" y="136" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,136 86,136 "/>
<text x="77" y="85" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
16
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,85 86,85 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
<text x="160" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="160,473 160,478 "/>
<text x="299" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.02
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="299,473 299,478 "/>
<text x="439" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.04
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="439,473 439,478 "/>
<text x="578" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.06
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="578,473 578,478 "/>
<text x="717" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.08
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="717,473 717,478 "/>
<text x="857" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="857,473 857,478 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,472 88,472 90,471 92,471 93,470 95,470 97,469 98,468 100,467 102,467 103,466 105,465 107,464 109,464 110,463 112,462 114,461 115,460 117,459 119,458 120,457 122,456 124,456 125,455 127,454 129,452 131,451 132,450 134,449 136,448 137,447 139,446 141,445 142,443 144,442 146,441 147,440 149,438 151,437 153,436 154,434 156,433 158,432 159,430 161,429 163,427 164,426 166,425 168,423 169,422 171,420 173,419 175,417 176,416 178,414 180,413 181,412 183,410 185,409 186,407 188,406 190,404 191,403 193,401 195,400 197,398 198,396 200,395 202,393 203,391 205,390 207,388 208,386 210,384 212,383 214,381 215,379 217,377 219,375 220,373 222,372 224,370 225,368 227,366 229,364 230,362 232,360 234,358 236,356 237,354 239,352 241,350 242,348 244,346 246,343 247,341 249,339 251,337 252,335 254,332 256,330 258,328 259,326 261,323 263,321 264,319 266,316 268,314 269,312 271,310 273,307 274,305 276,303 278,300 280,298 281,296 283,293 285,291 286,289 288,286 290,284 291,281 293,279 295,277 296,274 298,272 300,269 302,267 303,264 305,262 307,259 308,256 310,254 312,251 313,249 315,246 317,243 318,241 320,238 322,235 324,233 325,230 327,228 329,225 330,222 332,220 334,217 335,215 337,212 339,210 341,207 342,205 344,202 346,200 347,198 349,195 351,193 352,191 354,189 356,186 357,184 359,182 361,180 363,178 364,176 366,174 368,172 369,170 371,169 373,167 374,165 376,163 378,161 379,159 381,157 383,156 385,154 386,152 388,150 390,148 391,146 393,144 395,142 396,140 398,138 400,136 401,133 403,131 405,129 407,127 408,126 410,124 412,122 413,120 415,118 417,117 418,115 420,114 422,112 423,111 425,110 427,109 429,108 430,107 432,106 434,105 435,104 437,104 439,103 440,102 442,102 444,101 445,100 447,100 449,99 451,99 452,98 454,98 456,97 457,96 459,96 461,95 462,95 464,95 466,94 468,94 469,94 471,94 473,94 474,94 476,94 478,94 479,94 481,94 483,94 484,95 486,95 488,95 490,96 491,96 493,96 495,97 496,97 498,97 500,98 501,98 503,99 505,99 506,99 508,100 510,100 512,100 513,101 515,101 517,101 518,102 520,103 522,103 523,104 525,105 527,105 528,106 530,107 532,108 534,110 535,111 537,112 539,113 540,115 542,116 544,118 545,119 547,121 549,122 550,124 552,125 554,127 556,128 557,130 559,131 561,133 562,134 564,136 566,137 567,139 569,140 571,142 573,143 574,145 576,146 578,148 579,149 581,151 583,152 584,154 586,155 588,157 589,159 591,160 593,162 595,164 596,165 598,167 600,169 601,171 603,173 605,175 606,177 608,179 610,181 611,183 613,185 615,188 617,190 618,192 620,194 622,197 623,199 625,201 627,203 628,205 630,208 632,210 633,212 635,214 637,216 639,218 640,220 642,222 644,224 645,227 647,229 649,231 650,233 652,235 654,237 655,239 657,241 659,243 661,245 662,247 664,249 666,251 667,253 669,255 671,257 672,259 674,261 676,263 677,265 679,267 681,268 683,270 684,272 686,274 688,276 689,278 691,280 693,282 694,284 696,286 698,287 700,289 701,291 703,293 705,295 706,297 708,299 710,301 711,303 713,305 715,308 716,310 718,312 720,314 722,316 723,318 725,320 727,323 728,325 730,327 732,329 733,331 735,333 737,336 738,338 740,340 742,342 744,344 745,346 747,348 749,350 750,352 752,354 754,356 755,358 757,359 759,361 760,363 762,365 764,366 766,368 767,370 769,372 771,373 772,375 774,377 776,378 777,380 779,382 781,383 782,385 784,387 786,388 788,390 789,392 791,393 793,395 794,396 796,398 798,400 799,401 801,403 803,404 804,406 806,407 808,408 810,410 811,411 813,412 815,414 816,415 818,416 820,417 821,419 823,420 825,421 827,422 828,423 830,424 832,425 833,426 835,427 837,428 838,429 840,430 842,431 843,432 845,433 847,434 849,435 850,436 852,437 854,438 855,439 857,440 859,441 860,442 862,443 864,444 865,445 867,446 869,447 871,448 872,448 874,449 876,450 877,451 879,451 881,452 882,453 884,453 886,454 887,455 889,455 891,456 893,457 894,457 896,458 898,459 899,459 901,460 903,460 904,461 906,462 908,462 909,463 911,464 913,464 915,465 916,466 918,466 920,467 921,467 923,468 925,469 926,469 928,470 930,471 932,471 "/>
<polygon opacity="0.25" fill="#1F78B4" points="164,426 166,425 168,423 169,422 171,420 173,419 175,417 176,416 178,414 180,413 181,412 183,410 185,409 186,407 188,406 190,404 191,403 193,401 195,400 197,398 198,396 200,395 202,393 203,391 205,390 207,388 208,386 210,384 212,383 214,381 215,379 217,377 219,375 220,373 222,372 224,370 225,368 227,366 229,364 230,362 232,360 234,358 236,356 237,354 239,352 241,350 242,348 244,346 246,343 247,341 249,339 251,337 252,335 254,332 256,330 258,328 259,326 261,323 263,321 264,319 266,316 268,314 269,312 271,310 273,307 274,305 276,303 278,300 280,298 281,296 283,293 285,291 286,289 288,286 290,284 291,281 293,279 295,277 296,274 298,272 300,269 302,267 303,264 305,262 307,259 308,256 310,254 312,251 313,249 315,246 317,243 318,241 320,238 322,235 324,233 325,230 327,228 329,225 330,222 332,220 334,217 335,215 337,212 339,210 341,207 342,205 344,202 346,200 347,198 349,195 351,193 352,191 354,189 356,186 357,184 359,182 361,180 363,178 364,176 366,174 368,172 369,170 371,169 373,167 374,165 376,163 378,161 379,159 381,157 383,156 385,154 386,152 388,150 390,148 391,146 393,144 395,142 396,140 398,138 400,136 401,133 403,131 405,129 407,127 408,126 410,124 412,122 413,120 415,118 417,117 418,115 420,114 422,112 423,111 425,110 427,109 429,108 430,107 432,106 434,105 435,104 437,104 439,103 440,102 442,102 444,101 445,100 447,100 449,99 451,99 452,98 454,98 456,97 457,96 459,96 461,95 462,95 464,95 466,94 468,94 469,94 471,94 473,94 474,94 476,94 478,94 479,94 481,94 483,94 484,95 486,95 488,95 490,96 491,96 493,96 495,97 496,97 498,97 500,98 501,98 503,99 505,99 506,99 508,100 510,100 512,100 513,101 515,101 517,101 518,102 520,103 522,103 523,104 525,105 527,105 528,106 530,107 532,108 534,110 535,111 537,112 539,113 540,115 542,116 544,118 545,119 547,121 549,122 550,124 552,125 554,127 556,128 557,130 559,131 561,133 562,134 564,136 566,137 567,139 569,140 571,142 573,143 574,145 576,146 578,148 579,149 581,151 583,152 584,154 586,155 588,157 589,159 591,160 593,162 595,164 596,165 598,167 600,169 601,171 603,173 605,175 606,177 608,179 610,181 611,183 613,185 615,188 617,190 618,192 620,194 622,197 623,199 625,201 627,203 628,205 630,208 632,210 633,212 635,214 637,216 639,218 640,220 642,222 644,224 645,227 647,229 649,231 650,233 652,235 654,237 655,239 657,241 659,243 661,245 662,247 664,249 666,251 667,253 669,255 671,257 672,259 674,261 676,263 677,265 679,267 681,268 683,270 684,272 686,274 688,276 689,278 691,280 693,282 694,284 696,286 698,287 700,289 701,291 703,293 705,295 706,297 708,299 710,301 711,303 713,305 715,308 716,310 718,312 720,314 722,316 723,318 725,320 727,323 728,325 730,327 732,329 733,331 735,333 737,336 738,338 740,340 742,342 744,344 745,346 747,348 749,350 750,352 752,354 754,356 755,358 757,359 759,361 760,363 762,365 764,366 766,368 767,370 769,372 771,373 772,375 774,377 776,378 777,380 779,382 781,383 782,385 784,387 786,388 788,390 789,392 791,393 793,395 794,396 796,398 798,400 799,401 801,403 803,404 804,406 806,407 808,408 810,410 811,411 813,412 815,414 816,415 818,416 820,417 821,419 823,420 825,421 827,422 828,423 830,424 832,425 833,426 835,427 837,428 838,429 840,430 842,431 843,432 845,433 847,434 849,435 850,436 852,437 852,473 164,473 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="3" points="496,473 496,97 "/>
<text x="798" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Bootstrap distribution
</text>
<text x="798" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Confidence interval
</text>
<text x="798" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Point estimate
</text>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,73 788,73 "/>
<rect x="768" y="83" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,103 788,103 "/>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1,88 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
composite_scratch_pooling/cold_composite:median
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Density (a.u.)
</text>
<text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average time (s)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
<text x="77" y="428" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,428 86,428 "/>
<text x="77" y="381" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
10
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,381 86,381 "/>
<text x="77" y="334" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
15
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,334 86,334 "/>
<text x="77" y="287" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
20
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,287 86,287 "/>
<text x="77" y="240" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
25
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,240 86,240 "/>
<text x="77" y="193" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
30
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,193 86,193 "/>
<text x="77" y="145" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
35
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,145 86,145 "/>
<text x="77" y="98" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
40
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,98 86,98 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
<text x="193" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.94
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="193,473 193,478 "/>
<text x="312" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.96
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="312,473 312,478 "/>
<text x="431" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.98
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="431,473 431,478 "/>
<text x="550" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="550,473 550,478 "/>
<text x="669" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.02
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="669,473 669,478 "/>
<text x="788" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.04
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="788,473 788,478 "/>
<text x="907" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.06
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="907,473 907,478 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,470 88,470 90,470 92,470 93,469 95,469 97,469 98,469 100,469 102,468 103,468 105,468 107,468 109,467 110,467 112,467 114,466 115,466 117,465 119,465 120,464 122,464 124,463 125,463 127,462 129,461 131,460 132,460 134,459 136,458 137,457 139,456 141,456 142,455 144,454 146,454 147,453 149,452 151,452 153,451 154,451 156,451 158,450 159,450 161,450 163,450 164,449 166,449 168,449 169,449 171,448 173,448 175,448 176,448 178,447 180,447 181,446 183,446 185,445 186,444 188,444 190,443 191,442 193,441 195,440 197,440 198,439 200,438 202,437 203,436 205,435 207,434 208,433 210,432 212,431 214,430 215,429 217,429 219,428 220,427 222,426 224,425 225,425 227,424 229,423 230,423 232,422 234,421 236,420 237,420 239,419 241,418 242,417 244,417 246,416 247,415 249,415 251,414 252,413 254,413 256,412 258,412 259,411 261,411 263,411 264,411 266,410 268,410 269,410 271,411 273,411 274,411 276,411 278,412 280,412 281,413 283,413 285,413 286,414 288,414 290,414 291,415 293,415 295,415 296,415 298,415 300,415 302,415 303,415 305,414 307,414 308,413 310,413 312,412 313,412 315,411 317,410 318,409 320,409 322,408 324,407 325,406 327,405 329,404 330,403 332,402 334,401 335,400 337,399 339,398 341,398 342,397 344,396 346,395 347,395 349,394 351,393 352,393 354,392 356,392 357,391 359,391 361,390 363,390 364,390 366,389 368,389 369,389 371,388 373,388 374,387 376,387 378,386 379,386 381,385 383,384 385,382 386,381 388,379 390,377 391,374 393,371 395,367 396,362 398,357 400,351 401,343 403,335 405,325 407,314 408,302 410,289 412,275 413,260 415,244 417,227 418,210 420,193 422,176 423,160 425,144 427,131 429,118 430,108 432,100 434,95 435,92 437,92 439,94 440,100 442,107 444,117 445,129 447,142 449,157 451,173 452,189 454,206 456,222 457,238 459,254 461,269 462,282 464,295 466,307 468,317 469,327 471,335 473,342 474,348 476,353 478,358 479,362 481,365 483,368 484,370 486,373 488,374 490,376 491,377 493,379 495,380 496,381 498,381 500,382 501,383 503,384 505,384 506,385 508,386 510,386 512,387 513,387 515,388 517,388 518,389 520,389 522,390 523,390 525,391 527,392 528,393 530,393 532,394 534,395 535,396 537,398 539,399 540,400 542,401 544,403 545,404 547,406 549,407 550,409 552,410 554,412 556,413 557,414 559,416 561,417 562,418 564,419 566,419 567,420 569,421 571,421 573,422 574,423 576,423 578,424 579,424 581,425 583,425 584,426 586,426 588,427 589,427 591,428 593,428 595,428 596,428 598,428 600,428 601,427 603,427 605,427 606,426 608,425 610,425 611,425 613,424 615,424 617,424 618,424 620,425 622,425 623,426 625,427 627,428 628,429 630,430 632,431 633,432 635,433 637,434 639,434 640,435 642,435 644,435 645,435 647,435 649,435 650,434 652,434 654,434 655,433 657,433 659,433 661,432 662,432 664,431 666,431 667,430 669,430 671,428 672,427 674,425 676,423 677,421 679,418 681,415 683,412 684,408 686,404 688,400 689,396 691,393 693,389 694,386 696,384 698,382 700,381 701,380 703,380 705,382 706,383 708,386 710,389 711,393 713,397 715,401 716,406 718,410 720,415 722,419 723,424 725,428 727,431 728,435 730,438 732,440 733,443 735,445 737,446 738,448 740,449 742,450 744,451 745,452 747,452 749,453 750,454 752,454 754,455 755,455 757,455 759,456 760,456 762,456 764,456 766,456 767,456 769,456 771,456 772,456 774,455 776,455 777,455 779,455 781,455 782,455 784,455 786,456 788,456 789,456 791,457 793,457 794,458 796,458 798,459 799,459 801,459 803,460 804,460 806,460 808,460 810,460 811,461 813,461 815,461 816,461 818,461 820,461 821,461 823,460 825,460 827,460 828,460 830,460 832,460 833,460 835,459 837,459 838,458 840,458 842,457 843,456 845,455 847,455 849,454 850,453 852,452 854,451 855,451 857,450 859,450 860,450 862,450 864,450 865,450 867,450 869,451 871,451 872,452 874,453 876,454 877,455 879,456 881,457 882,458 884,459 886,460 887,461 889,462 891,463 893,464 894,465 896,465 898,466 899,467 901,467 903,468 904,468 906,469 908,469 909,469 911,470 913,470 915,470 916,471 918,471 920,471 921,471 923,472 925,472 926,472 928,472 930,472 932,472 "/>
<polygon opacity="0.25" fill="#1F78B4" points="164,449 166,449 168,449 169,449 171,448 173,448 175,448 176,448 178,447 180,447 181,446 183,446 185,445 186,444 188,444 190,443 191,442 193,441 195,440 197,440 198,439 200,438 202,437 203,436 205,435 207,434 208,433 210,432 212,431 214,430 215,429 217,429 219,428 220,427 222,426 224,425 225,425 227,424 229,423 230,423 232,422 234,421 236,420 237,420 239,419 241,418 242,417 244,417 246,416 247,415 249,415 251,414 252,413 254,413 256,412 258,412 259,411 261,411 263,411 264,411 266,410 268,410 269,410 271,411 273,411 274,411 276,411 278,412 280,412 281,413 283,413 285,413 286,414 288,414 290,414 291,415 293,415 295,415 296,415 298,415 300,415 302,415 303,415 305,414 307,414 308,413 310,413 312,412 313,412 315,411 317,410 318,409 320,409 322,408 324,407 325,406 327,405 329,404 330,403 332,402 334,401 335,400 337,399 339,398 341,398 342,397 344,396 346,395 347,395 349,394 351,393 352,393 354,392 356,392 357,391 359,391 361,390 363,390 364,390 366,389 368,389 369,389 371,388 373,388 374,387 376,387 378,386 379,386 381,385 383,384 385,382 386,381 388,379 390,377 391,374 393,371 395,367 396,362 398,357 400,351 401,343 403,335 405,325 407,314 408,302 410,289 412,275 413,260 415,244 417,227 418,210 420,193 422,176 423,160 425,144 427,131 429,118 430,108 432,100 434,95 435,92 437,92 439,94 440,100 442,107 444,117 445,129 447,142 449,157 451,173 452,189 454,206 456,222 457,238 459,254 461,269 462,282 464,295 466,307 468,317 469,327 471,335 473,342 474,348 476,353 478,358 479,362 481,365 483,368 484,370 486,373 488,374 490,376 491,377 493,379 495,380 496,381 498,381 500,382 501,383 503,384 505,384 506,385 508,386 510,386 512,387 513,387 515,388 517,388 518,389 520,389 522,390 523,390 525,391 527,392 528,393 530,393 532,394 534,395 535,396 537,398 539,399 540,400 542,401 544,403 545,404 547,406 549,407 550,409 552,410 554,412 556,413 557,414 559,416 561,417 562,418 564,419 566,419 567,420 569,421 571,421 573,422 574,423 576,423 578,424 579,424 581,425 583,425 584,426 586,426 588,427 589,427 591,428 593,428 595,428 596,428 598,428 600,428 601,427 603,427 605,427 606,426 608,425 610,425 611,425 613,424 615,424 617,424 618,424 620,425 622,425 623,426 625,427 627,428 628,429 630,430 632,431 633,432 635,433 637,434 639,434 640,435 642,435 644,435 645,435 647,435 649,435 650,434 652,434 654,434 655,433 657,433 659,433 661,432 662,432 664,431 666,431 667,430 669,430 671,428 672,427 674,425 676,423 677,421 679,418 681,415 683,412 684,408 686,404 688,400 689,396 691,393 693,389 694,386 696,384 698,382 700,381 701,380 703,380 705,382 706,383 708,386 710,389 711,393 713,397 715,401 716,406 718,410 720,415 722,419 723,424 725,428 727,431 728,435 730,438 732,440 733,443 735,445 737,446 738,448 740,449 742,450 744,451 745,452 747,452 749,453 750,454 752,454 754,455 755,455 757,455 759,456 760,456 762,456 764,456 766,456 767,456 769,456 771,456 772,456 774,455 776,455 777,455 779,455 781,455 782,455 784,455 786,456 788,456 789,456 791,457 793,457 794,458 796,458 798,459 799,459 801,459 803,460 804,460 806,460 808,460 810,460 811,461 813,461 815,461 816,461 818,461 820,461 821,461 823,460 825,460 827,460 828,460 830,460 832,460 833,460 835,459 837,459 838,458 840,458 842,457 843,456 845,455 847,455 849,454 850,453 852,452 852,473 164,473 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="3" points="437,473 437,92 "/>
<text x="798" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Bootstrap distribution
</text>
<text x="798" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Confidence interval
</text>
<text x="798" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Point estimate
</text>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,73 788,73 "/>
<rect x="768" y="83" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,103 788,103 "/>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1,163 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
composite_scratch_pooling/cold_composite
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Iterations
</text>
<text x="480" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average Time (s)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
<text x="77" y="472" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,472 86,472 "/>
<text x="77" y="431" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,431 86,431 "/>
<text x="77" y="389" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,389 86,389 "/>
<text x="77" y="347" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.3
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,347 86,347 "/>
<text x="77" y="305" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,305 86,305 "/>
<text x="77" y="263" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,263 86,263 "/>
<text x="77" y="221" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,221 86,221 "/>
<text x="77" y="179" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.7
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,179 86,179 "/>
<text x="77" y="137" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,137 86,137 "/>
<text x="77" y="95" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.9
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,95 86,95 "/>
<text x="77" y="53" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,53 86,53 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 872,473 "/>
<text x="144" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="144,473 144,478 "/>
<text x="226" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="226,473 226,478 "/>
<text x="307" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="307,473 307,478 "/>
<text x="388" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="388,473 388,478 "/>
<text x="469" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="469,473 469,478 "/>
<text x="550" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="550,473 550,478 "/>
<text x="631" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="631,473 631,478 "/>
<text x="713" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="713,473 713,478 "/>
<text x="794" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
2.2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="794,473 794,478 "/>
<text x="933" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(90, 933, 263)">
Density (a.u.)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,53 873,473 "/>
<text x="883" y="473" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,473 878,473 "/>
<text x="883" y="426" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,426 878,426 "/>
<text x="883" y="378" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,378 878,378 "/>
<text x="883" y="331" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,331 878,331 "/>
<text x="883" y="283" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,283 878,283 "/>
<text x="883" y="235" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,235 878,235 "/>
<text x="883" y="188" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,188 878,188 "/>
<text x="883" y="140" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,140 878,140 "/>
<text x="883" y="92" dy="0.5ex" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="873,92 878,92 "/>
<polygon opacity="0.5" fill="#1F78B4" points="87,472 88,472 90,471 91,471 93,471 94,471 96,470 98,470 99,469 101,469 102,468 104,468 105,467 107,467 109,466 110,465 112,465 113,464 115,463 116,462 118,461 120,460 121,458 123,457 124,455 126,454 127,452 129,450 131,449 132,447 134,444 135,442 137,440 138,437 140,435 142,432 143,429 145,426 146,422 148,419 150,415 151,411 153,407 154,403 156,399 157,394 159,390 161,385 162,380 164,375 165,369 167,364 168,358 170,352 172,346 173,340 175,334 176,327 178,321 179,314 181,307 183,300 184,293 186,286 187,279 189,272 190,265 192,258 194,250 195,243 197,236 198,228 200,221 201,214 203,207 205,199 206,192 208,185 209,179 211,172 213,165 214,159 216,152 217,146 219,140 220,134 222,128 224,123 225,118 227,113 228,108 230,103 231,98 233,94 235,90 236,86 238,83 239,79 241,76 242,73 244,70 246,68 247,66 249,64 250,62 252,60 253,59 255,57 257,56 258,55 260,55 261,54 263,54 264,54 266,53 268,54 269,54 271,54 272,55 274,56 276,56 277,57 279,59 280,60 282,61 283,63 285,64 287,66 288,68 290,69 291,71 293,73 294,75 296,78 298,80 299,82 301,85 302,87 304,90 305,93 307,95 309,98 310,101 312,104 313,107 315,110 316,113 318,116 320,119 321,123 323,126 324,129 326,132 327,136 329,139 331,143 332,146 334,149 335,153 337,156 339,160 340,163 342,166 343,170 345,173 346,177 348,180 350,183 351,187 353,190 354,193 356,196 357,200 359,203 361,206 362,209 364,212 365,215 367,218 368,221 370,224 372,227 373,230 375,233 376,235 378,238 379,241 381,243 383,246 384,249 386,251 387,254 389,256 391,259 392,261 394,264 395,267 397,269 398,271 400,274 402,276 403,279 405,281 406,284 408,286 409,289 411,291 413,294 414,296 416,299 417,301 419,304 420,306 422,309 424,311 425,314 427,316 428,319 430,321 431,324 433,326 435,329 436,331 438,334 439,336 441,338 442,341 444,343 446,345 447,348 449,350 450,352 452,354 454,356 455,358 457,360 458,362 460,364 461,365 463,367 465,369 466,370 468,372 469,373 471,374 472,376 474,377 476,378 477,379 479,380 480,381 482,382 483,383 485,384 487,385 488,386 490,386 491,387 493,388 494,388 496,389 498,389 499,390 501,390 502,391 504,391 505,392 507,392 509,392 510,393 512,393 513,394 515,394 517,395 518,395 520,396 521,396 523,397 524,397 526,398 528,398 529,399 531,400 532,401 534,401 535,402 537,403 539,404 540,405 542,405 543,406 545,407 546,408 548,409 550,410 551,411 553,413 554,414 556,415 557,416 559,417 561,418 562,420 564,421 565,422 567,423 568,424 570,426 572,427 573,428 575,429 576,430 578,432 580,433 581,434 583,435 584,436 586,437 587,438 589,439 591,440 592,441 594,442 595,443 597,444 598,445 600,446 602,447 603,448 605,448 606,449 608,450 609,451 611,451 613,452 614,453 616,453 617,454 619,454 620,455 622,455 624,456 625,456 627,457 628,457 630,458 632,458 633,458 635,459 636,459 638,459 639,460 641,460 643,460 644,461 646,461 647,461 649,461 650,461 652,462 654,462 655,462 657,462 658,462 660,463 661,463 663,463 665,463 666,463 668,463 669,464 671,464 672,464 674,464 676,464 677,464 679,464 680,464 682,464 683,464 685,464 687,464 688,464 690,464 691,464 693,464 695,464 696,464 698,464 699,464 701,464 702,464 704,464 706,464 707,464 709,464 710,464 712,464 713,464 715,464 717,464 718,464 720,464 721,464 723,464 724,464 726,464 728,464 729,464 731,464 732,464 734,464 735,464 737,464 739,464 740,464 742,464 743,464 745,464 746,464 748,464 750,465 751,465 753,465 754,465 756,465 758,465 759,465 761,465 762,466 764,466 765,466 767,466 769,466 770,466 772,467 773,467 775,467 776,467 778,467 780,468 781,468 783,468 784,468 786,468 787,469 789,469 791,469 792,469 794,469 795,469 797,470 798,470 800,470 802,470 803,470 805,470 806,471 808,471 809,471 811,471 813,471 814,471 816,471 817,472 819,472 821,472 822,472 824,472 825,472 827,472 828,472 830,472 832,472 833,473 835,473 836,473 838,473 839,473 841,473 843,473 844,473 846,473 847,473 849,473 850,473 852,473 854,473 855,473 857,473 858,473 860,473 861,473 863,473 865,473 866,473 868,473 869,473 871,473 873,473 873,473 87,473 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="326,472 326,53 "/>
<polyline fill="none" opacity="1" stroke="#FF7F00" stroke-width="1" points="87,472 87,53 "/>
<polyline fill="none" opacity="1" stroke="#FF7F00" stroke-width="1" points="608,472 608,53 "/>
<polyline fill="none" opacity="1" stroke="#E31A1C" stroke-width="1" points="87,472 87,53 "/>
<polyline fill="none" opacity="1" stroke="#E31A1C" stroke-width="1" points="832,472 832,53 "/>
<circle cx="637" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="740" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="637" cy="53" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
<circle cx="740" cy="53" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
<text x="776" y="228" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
PDF
</text>
<text x="776" y="243" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Mean
</text>
<text x="776" y="258" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
&quot;Clean&quot; sample
</text>
<text x="776" y="273" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Mild outliers
</text>
<text x="776" y="288" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Severe outliers
</text>
<rect x="746" y="228" width="20" height="10" opacity="0.5" fill="#1F78B4" stroke="none"/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="746,248 766,248 "/>
<circle cx="756" cy="263" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
<circle cx="756" cy="278" r="3" opacity="1" fill="#FF7F00" stroke="none" stroke-width="1"/>
<circle cx="756" cy="293" r="3" opacity="1" fill="#E31A1C" stroke="none" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

@@ -0,0 +1,68 @@
<svg width="450" height="300" viewBox="0 0 450 300" xmlns="http://www.w3.org/2000/svg">
<text x="15" y="130" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 15, 130)">
Density (a.u.)
</text>
<text x="255" y="285" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average Time (s)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="74,15 74,244 "/>
<text x="65" y="244" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,244 74,244 "/>
<text x="65" y="221" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,221 74,221 "/>
<text x="65" y="197" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,197 74,197 "/>
<text x="65" y="174" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,174 74,174 "/>
<text x="65" y="150" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,150 74,150 "/>
<text x="65" y="126" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,126 74,126 "/>
<text x="65" y="103" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,103 74,103 "/>
<text x="65" y="79" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,79 74,79 "/>
<text x="65" y="56" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,56 74,56 "/>
<text x="65" y="32" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="69,32 74,32 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="75,245 434,245 "/>
<text x="82" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="82,245 82,250 "/>
<text x="175" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="175,245 175,250 "/>
<text x="268" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="268,245 268,250 "/>
<text x="361" y="255" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="361,245 361,250 "/>
<polygon opacity="0.25" fill="#1F78B4" points="75,244 75,244 76,243 77,243 77,243 78,243 79,243 80,243 80,242 81,242 82,242 82,242 83,241 84,241 85,241 85,240 86,240 87,240 87,239 88,239 89,238 90,238 90,237 91,236 92,236 92,235 93,234 94,233 95,232 95,231 96,230 97,229 98,228 98,227 99,225 100,224 100,222 101,221 102,219 103,217 103,216 104,214 105,212 105,210 106,208 107,205 108,203 108,201 109,198 110,195 110,193 111,190 112,187 113,184 113,181 114,178 115,175 116,172 116,169 117,165 118,162 118,159 119,155 120,152 121,148 121,145 122,141 123,137 123,134 124,130 125,127 126,123 126,119 127,116 128,112 128,109 129,105 130,102 131,98 131,95 132,92 133,88 133,85 134,82 135,79 136,76 136,73 137,71 138,68 139,66 139,63 140,61 141,59 141,56 142,54 143,53 144,51 144,49 145,48 146,46 146,45 147,43 148,42 149,41 149,40 150,40 151,39 151,38 152,38 153,37 154,37 154,37 155,36 156,36 157,36 157,36 158,37 159,37 159,37 160,37 161,38 162,38 162,39 163,39 164,40 164,41 165,42 166,42 167,43 167,44 168,45 169,46 169,47 170,48 171,49 172,51 172,52 173,53 174,54 175,56 175,57 176,58 177,60 177,61 178,63 179,64 180,66 180,67 181,69 182,71 182,72 183,74 184,75 185,77 185,79 186,80 187,82 187,84 188,86 189,87 190,89 190,91 191,92 192,94 192,96 193,97 194,99 195,101 195,102 196,104 197,106 198,107 198,109 199,110 200,112 200,113 201,115 202,116 203,118 203,119 204,121 205,122 205,124 206,125 207,126 208,128 208,129 209,130 210,132 210,133 211,134 212,136 213,137 213,138 214,139 215,141 216,142 216,143 217,144 218,146 218,147 219,148 220,149 221,151 221,152 222,153 223,154 223,155 224,157 225,158 226,159 226,160 227,162 228,163 228,164 229,165 230,167 231,168 231,169 232,170 233,172 233,173 234,174 235,175 236,176 236,178 237,179 238,180 239,181 239,182 240,183 241,184 241,185 242,186 243,187 244,188 244,189 245,190 246,191 246,192 247,193 248,193 249,194 249,195 250,195 251,196 251,197 252,197 253,198 254,198 254,199 255,199 256,200 257,200 257,201 258,201 259,201 259,202 260,202 261,202 262,202 262,203 263,203 264,203 264,203 265,204 266,204 267,204 267,204 268,205 269,205 269,205 270,205 271,205 272,206 272,206 273,206 274,206 275,207 275,207 276,207 277,208 277,208 278,208 279,209 280,209 280,209 281,210 282,210 282,211 283,211 284,212 285,212 285,213 286,213 287,214 287,214 288,215 289,215 290,216 290,217 291,217 292,218 292,218 293,219 294,220 295,220 295,221 296,221 297,222 298,223 298,223 299,224 300,224 300,225 301,225 302,226 303,227 303,227 304,228 305,228 305,229 306,229 307,230 308,230 308,230 309,231 310,231 310,232 311,232 312,232 313,233 313,233 314,234 315,234 316,234 316,234 317,235 318,235 318,235 319,236 320,236 321,236 321,236 322,236 323,237 323,237 324,237 325,237 326,237 326,237 327,238 328,238 328,238 329,238 330,238 331,238 331,238 332,239 333,239 333,239 334,239 335,239 336,239 336,239 337,239 338,239 339,239 339,239 340,239 341,240 341,240 342,240 343,240 344,240 344,240 345,240 346,240 346,240 347,240 348,240 349,240 349,240 350,240 351,240 351,240 352,240 353,240 354,240 354,240 355,240 356,240 357,240 357,240 358,240 359,240 359,240 360,240 361,240 362,240 362,240 363,240 364,240 364,240 365,240 366,240 367,240 367,240 368,240 369,240 369,240 370,240 371,240 372,240 372,240 373,240 374,240 375,240 375,240 376,240 377,240 377,240 378,240 379,240 380,240 380,240 381,240 382,240 382,240 383,241 384,241 385,241 385,241 386,241 387,241 387,241 388,241 389,241 390,241 390,241 391,242 392,242 392,242 393,242 394,242 395,242 395,242 396,242 397,242 398,242 398,242 399,243 400,243 400,243 401,243 402,243 403,243 403,243 404,243 405,243 405,243 406,243 407,243 408,243 408,244 409,244 410,244 410,244 411,244 412,244 413,244 413,244 414,244 415,244 416,244 416,244 417,244 418,244 418,244 419,244 420,244 421,244 421,244 422,244 423,244 423,244 424,244 425,244 426,244 426,244 427,244 428,244 428,244 429,244 430,244 431,244 431,244 432,244 433,244 434,244 434,244 75,244 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="2" points="184,244 184,76 "/>
</svg>

After

Width:  |  Height:  |  Size: 7.8 KiB

@@ -0,0 +1,84 @@
<svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
composite_scratch_pooling/cold_composite:typical
</text>
<text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
Density (a.u.)
</text>
<text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average time (s)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
<text x="77" y="443" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
2
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,443 86,443 "/>
<text x="77" y="392" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
4
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,392 86,392 "/>
<text x="77" y="341" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
6
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,341 86,341 "/>
<text x="77" y="290" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
8
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,290 86,290 "/>
<text x="77" y="238" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
10
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,238 86,238 "/>
<text x="77" y="187" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
12
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,187 86,187 "/>
<text x="77" y="136" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
14
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,136 86,136 "/>
<text x="77" y="85" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
16
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,85 86,85 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
<text x="160" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="160,473 160,478 "/>
<text x="299" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.02
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="299,473 299,478 "/>
<text x="439" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.04
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="439,473 439,478 "/>
<text x="578" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.06
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="578,473 578,478 "/>
<text x="717" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.08
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="717,473 717,478 "/>
<text x="857" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.1
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="857,473 857,478 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,472 88,472 90,471 92,471 93,470 95,470 97,469 98,468 100,467 102,467 103,466 105,465 107,464 109,464 110,463 112,462 114,461 115,460 117,459 119,458 120,457 122,456 124,456 125,455 127,454 129,452 131,451 132,450 134,449 136,448 137,447 139,446 141,445 142,443 144,442 146,441 147,440 149,438 151,437 153,436 154,434 156,433 158,432 159,430 161,429 163,427 164,426 166,425 168,423 169,422 171,420 173,419 175,417 176,416 178,414 180,413 181,412 183,410 185,409 186,407 188,406 190,404 191,403 193,401 195,400 197,398 198,396 200,395 202,393 203,391 205,390 207,388 208,386 210,384 212,383 214,381 215,379 217,377 219,375 220,373 222,372 224,370 225,368 227,366 229,364 230,362 232,360 234,358 236,356 237,354 239,352 241,350 242,348 244,346 246,343 247,341 249,339 251,337 252,335 254,332 256,330 258,328 259,326 261,323 263,321 264,319 266,316 268,314 269,312 271,310 273,307 274,305 276,303 278,300 280,298 281,296 283,293 285,291 286,289 288,286 290,284 291,281 293,279 295,277 296,274 298,272 300,269 302,267 303,264 305,262 307,259 308,256 310,254 312,251 313,249 315,246 317,243 318,241 320,238 322,235 324,233 325,230 327,228 329,225 330,222 332,220 334,217 335,215 337,212 339,210 341,207 342,205 344,202 346,200 347,198 349,195 351,193 352,191 354,189 356,186 357,184 359,182 361,180 363,178 364,176 366,174 368,172 369,170 371,169 373,167 374,165 376,163 378,161 379,159 381,157 383,156 385,154 386,152 388,150 390,148 391,146 393,144 395,142 396,140 398,138 400,136 401,133 403,131 405,129 407,127 408,126 410,124 412,122 413,120 415,118 417,117 418,115 420,114 422,112 423,111 425,110 427,109 429,108 430,107 432,106 434,105 435,104 437,104 439,103 440,102 442,102 444,101 445,100 447,100 449,99 451,99 452,98 454,98 456,97 457,96 459,96 461,95 462,95 464,95 466,94 468,94 469,94 471,94 473,94 474,94 476,94 478,94 479,94 481,94 483,94 484,95 486,95 488,95 490,96 491,96 493,96 495,97 496,97 498,97 500,98 501,98 503,99 505,99 506,99 508,100 510,100 512,100 513,101 515,101 517,101 518,102 520,103 522,103 523,104 525,105 527,105 528,106 530,107 532,108 534,110 535,111 537,112 539,113 540,115 542,116 544,118 545,119 547,121 549,122 550,124 552,125 554,127 556,128 557,130 559,131 561,133 562,134 564,136 566,137 567,139 569,140 571,142 573,143 574,145 576,146 578,148 579,149 581,151 583,152 584,154 586,155 588,157 589,159 591,160 593,162 595,164 596,165 598,167 600,169 601,171 603,173 605,175 606,177 608,179 610,181 611,183 613,185 615,188 617,190 618,192 620,194 622,197 623,199 625,201 627,203 628,205 630,208 632,210 633,212 635,214 637,216 639,218 640,220 642,222 644,224 645,227 647,229 649,231 650,233 652,235 654,237 655,239 657,241 659,243 661,245 662,247 664,249 666,251 667,253 669,255 671,257 672,259 674,261 676,263 677,265 679,267 681,268 683,270 684,272 686,274 688,276 689,278 691,280 693,282 694,284 696,286 698,287 700,289 701,291 703,293 705,295 706,297 708,299 710,301 711,303 713,305 715,308 716,310 718,312 720,314 722,316 723,318 725,320 727,323 728,325 730,327 732,329 733,331 735,333 737,336 738,338 740,340 742,342 744,344 745,346 747,348 749,350 750,352 752,354 754,356 755,358 757,359 759,361 760,363 762,365 764,366 766,368 767,370 769,372 771,373 772,375 774,377 776,378 777,380 779,382 781,383 782,385 784,387 786,388 788,390 789,392 791,393 793,395 794,396 796,398 798,400 799,401 801,403 803,404 804,406 806,407 808,408 810,410 811,411 813,412 815,414 816,415 818,416 820,417 821,419 823,420 825,421 827,422 828,423 830,424 832,425 833,426 835,427 837,428 838,429 840,430 842,431 843,432 845,433 847,434 849,435 850,436 852,437 854,438 855,439 857,440 859,441 860,442 862,443 864,444 865,445 867,446 869,447 871,448 872,448 874,449 876,450 877,451 879,451 881,452 882,453 884,453 886,454 887,455 889,455 891,456 893,457 894,457 896,458 898,459 899,459 901,460 903,460 904,461 906,462 908,462 909,463 911,464 913,464 915,465 916,466 918,466 920,467 921,467 923,468 925,469 926,469 928,470 930,471 932,471 "/>
<polygon opacity="0.25" fill="#1F78B4" points="164,426 166,425 168,423 169,422 171,420 173,419 175,417 176,416 178,414 180,413 181,412 183,410 185,409 186,407 188,406 190,404 191,403 193,401 195,400 197,398 198,396 200,395 202,393 203,391 205,390 207,388 208,386 210,384 212,383 214,381 215,379 217,377 219,375 220,373 222,372 224,370 225,368 227,366 229,364 230,362 232,360 234,358 236,356 237,354 239,352 241,350 242,348 244,346 246,343 247,341 249,339 251,337 252,335 254,332 256,330 258,328 259,326 261,323 263,321 264,319 266,316 268,314 269,312 271,310 273,307 274,305 276,303 278,300 280,298 281,296 283,293 285,291 286,289 288,286 290,284 291,281 293,279 295,277 296,274 298,272 300,269 302,267 303,264 305,262 307,259 308,256 310,254 312,251 313,249 315,246 317,243 318,241 320,238 322,235 324,233 325,230 327,228 329,225 330,222 332,220 334,217 335,215 337,212 339,210 341,207 342,205 344,202 346,200 347,198 349,195 351,193 352,191 354,189 356,186 357,184 359,182 361,180 363,178 364,176 366,174 368,172 369,170 371,169 373,167 374,165 376,163 378,161 379,159 381,157 383,156 385,154 386,152 388,150 390,148 391,146 393,144 395,142 396,140 398,138 400,136 401,133 403,131 405,129 407,127 408,126 410,124 412,122 413,120 415,118 417,117 418,115 420,114 422,112 423,111 425,110 427,109 429,108 430,107 432,106 434,105 435,104 437,104 439,103 440,102 442,102 444,101 445,100 447,100 449,99 451,99 452,98 454,98 456,97 457,96 459,96 461,95 462,95 464,95 466,94 468,94 469,94 471,94 473,94 474,94 476,94 478,94 479,94 481,94 483,94 484,95 486,95 488,95 490,96 491,96 493,96 495,97 496,97 498,97 500,98 501,98 503,99 505,99 506,99 508,100 510,100 512,100 513,101 515,101 517,101 518,102 520,103 522,103 523,104 525,105 527,105 528,106 530,107 532,108 534,110 535,111 537,112 539,113 540,115 542,116 544,118 545,119 547,121 549,122 550,124 552,125 554,127 556,128 557,130 559,131 561,133 562,134 564,136 566,137 567,139 569,140 571,142 573,143 574,145 576,146 578,148 579,149 581,151 583,152 584,154 586,155 588,157 589,159 591,160 593,162 595,164 596,165 598,167 600,169 601,171 603,173 605,175 606,177 608,179 610,181 611,183 613,185 615,188 617,190 618,192 620,194 622,197 623,199 625,201 627,203 628,205 630,208 632,210 633,212 635,214 637,216 639,218 640,220 642,222 644,224 645,227 647,229 649,231 650,233 652,235 654,237 655,239 657,241 659,243 661,245 662,247 664,249 666,251 667,253 669,255 671,257 672,259 674,261 676,263 677,265 679,267 681,268 683,270 684,272 686,274 688,276 689,278 691,280 693,282 694,284 696,286 698,287 700,289 701,291 703,293 705,295 706,297 708,299 710,301 711,303 713,305 715,308 716,310 718,312 720,314 722,316 723,318 725,320 727,323 728,325 730,327 732,329 733,331 735,333 737,336 738,338 740,340 742,342 744,344 745,346 747,348 749,350 750,352 752,354 754,356 755,358 757,359 759,361 760,363 762,365 764,366 766,368 767,370 769,372 771,373 772,375 774,377 776,378 777,380 779,382 781,383 782,385 784,387 786,388 788,390 789,392 791,393 793,395 794,396 796,398 798,400 799,401 801,403 803,404 804,406 806,407 808,408 810,410 811,411 813,412 815,414 816,415 818,416 820,417 821,419 823,420 825,421 827,422 828,423 830,424 832,425 833,426 835,427 837,428 838,429 840,430 842,431 843,432 845,433 847,434 849,435 850,436 852,437 852,473 164,473 "/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="3" points="496,473 496,97 "/>
<text x="798" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Bootstrap distribution
</text>
<text x="798" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Confidence interval
</text>
<text x="798" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Point estimate
</text>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,73 788,73 "/>
<rect x="768" y="83" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
<polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="768,103 788,103 "/>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1,116 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>composite_scratch_pooling Summary - Criterion.rs</title>
<style type="text/css">
body {
font: 14px Helvetica Neue;
text-rendering: optimizelegibility;
}
.body {
width: 960px;
margin: auto;
}
a:link {
color: #1F78B4;
text-decoration: none;
}
h2 {
font-size: 36px;
font-weight: 300;
}
h3 {
font-size: 24px;
font-weight: 300;
}
#footer {
height: 40px;
background: #888;
color: white;
font-size: larger;
font-weight: 300;
}
#footer a {
color: white;
text-decoration: underline;
}
#footer p {
text-align: center
}
</style>
</head>
<body>
<div class="body">
<h2>composite_scratch_pooling</h2>
<h3>Violin Plot</h3>
<a href="violin.svg">
<img src="violin.svg" alt="Violin Plot" />
</a>
<p>This chart shows the relationship between function/parameter and iteration time. The thickness of the shaded
region indicates the probability that a measurement of the given function/parameter would take a particular
length of time.</p>
<section class="plots">
<a href="../../composite_scratch_pooling/cold_composite/report/index.html">
<h4>composite_scratch_pooling/cold_composite</h4>
</a>
<table width="100%">
<tbody>
<tr>
<td>
<a href="../../composite_scratch_pooling/cold_composite/report/pdf.svg">
<img src="../../composite_scratch_pooling/cold_composite/report/pdf_small.svg" alt="PDF of Slope" width="450"
height="300" />
</a>
</td>
<td>
<a href="../../composite_scratch_pooling/cold_composite/report/iteration_times.svg">
<img src="../../composite_scratch_pooling/cold_composite/report/iteration_times_small.svg" alt="Iteration Times" width="450"
height="300" />
</a>
</td>
</tr>
</tbody>
</table>
</section>
<section class="plots">
<a href="../../composite_scratch_pooling/warm_composite/report/index.html">
<h4>composite_scratch_pooling/warm_composite</h4>
</a>
<table width="100%">
<tbody>
<tr>
<td>
<a href="../../composite_scratch_pooling/warm_composite/report/pdf.svg">
<img src="../../composite_scratch_pooling/warm_composite/report/pdf_small.svg" alt="PDF of Slope" width="450"
height="300" />
</a>
</td>
<td>
<a href="../../composite_scratch_pooling/warm_composite/report/iteration_times.svg">
<img src="../../composite_scratch_pooling/warm_composite/report/iteration_times_small.svg" alt="Iteration Times" width="450"
height="300" />
</a>
</td>
</tr>
</tbody>
</table>
</section>
</div>
<div id="footer">
<p>This report was generated by
<a href="https://github.com/bheisler/criterion.rs">Criterion.rs</a>, a statistics-driven benchmarking
library in Rust.</p>
</div>
</body>
</html>
@@ -0,0 +1,45 @@
<svg width="960" height="186" viewBox="0 0 960 186" xmlns="http://www.w3.org/2000/svg">
<text x="480" y="5" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
composite_scratch_pooling: Violin plot
</text>
<text x="8" y="82" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 8, 82)">
Input
</text>
<text x="528" y="178" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
Average time (s)
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="103,34 103,129 "/>
<text x="94" y="106" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="8.064516129032258" opacity="1" fill="#000000">
composite_scratch_pooling/warm_composite
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="98,106 103,106 "/>
<text x="94" y="58" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="8.064516129032258" opacity="1" fill="#000000">
composite_scratch_pooling/cold_composite
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="98,58 103,58 "/>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="104,130 951,130 "/>
<text x="104" y="140" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="104,130 104,135 "/>
<text x="281" y="140" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
0.5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="281,130 281,135 "/>
<text x="458" y="140" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="458,130 458,135 "/>
<text x="635" y="140" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
1.5
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="635,130 635,135 "/>
<text x="812" y="140" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
2.0
</text>
<polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="812,130 812,135 "/>
<polygon opacity="1" fill="#1F78B4" points="106,106 106,106 106,106 106,106 106,106 106,106 106,106 106,106 106,106 106,106 106,106 106,106 106,105 106,105 106,105 106,105 106,105 106,105 106,105 106,105 106,105 106,105 106,105 106,105 106,105 106,105 106,105 106,104 106,104 106,104 106,104 106,104 106,104 106,104 106,103 106,103 106,103 106,103 106,103 106,102 106,102 106,102 106,102 106,101 106,101 106,101 106,100 106,100 106,99 106,99 106,99 106,98 106,98 106,97 106,97 106,97 106,96 106,96 107,95 107,95 107,94 107,94 107,93 107,93 107,92 107,92 107,91 107,91 107,90 107,90 107,89 107,89 107,88 107,88 107,88 107,87 107,87 107,86 107,86 107,86 107,85 107,85 107,85 107,84 107,84 107,84 107,84 107,83 107,83 107,83 107,83 107,83 107,83 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,82 107,83 107,83 107,83 107,83 107,83 107,83 107,83 107,83 107,83 107,83 107,83 107,83 107,83 107,84 107,84 107,84 107,84 107,84 107,85 107,85 107,85 107,85 107,85 107,86 107,86 107,86 107,86 107,87 107,87 107,87 107,88 107,88 107,88 107,89 107,89 107,89 107,89 107,90 107,90 107,90 107,91 107,91 107,91 107,92 107,92 107,92 107,92 107,93 107,93 107,93 107,94 107,94 107,94 107,94 107,95 107,95 107,95 107,95 107,95 107,96 107,96 107,96 107,96 107,96 107,97 108,97 108,97 108,97 108,97 108,97 108,98 108,98 108,98 108,98 108,98 108,98 108,98 108,98 108,99 108,99 108,99 108,99 108,99 108,99 108,99 108,99 108,100 108,100 108,100 108,100 108,100 108,100 108,100 108,100 108,101 108,101 108,101 108,101 108,101 108,101 108,101 108,101 108,102 108,102 108,102 108,102 108,102 108,102 108,102 108,102 108,102 108,103 108,103 108,103 108,103 108,103 108,103 108,103 108,103 108,103 108,104 108,104 108,104 108,104 108,104 108,104 108,104 108,104 108,104 108,104 108,104 108,104 108,104 108,104 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 108,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,105 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 106,106 "/>
<polygon opacity="1" fill="#1F78B4" points="106,106 106,106 106,106 106,106 106,106 106,106 106,106 106,106 106,106 106,106 106,106 106,106 106,106 106,106 106,106 106,106 106,106 106,106 106,106 106,106 106,106 106,106 106,107 106,107 106,107 106,107 106,107 106,107 106,107 106,107 106,107 106,108 106,108 106,108 106,108 106,108 106,108 106,109 106,109 106,109 106,109 106,110 106,110 106,110 106,111 106,111 106,111 106,112 106,112 106,112 106,113 106,113 106,114 106,114 106,114 106,115 106,115 106,116 107,116 107,117 107,117 107,118 107,118 107,119 107,119 107,120 107,120 107,121 107,121 107,122 107,122 107,123 107,123 107,124 107,124 107,124 107,125 107,125 107,126 107,126 107,126 107,127 107,127 107,127 107,127 107,128 107,128 107,128 107,128 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,129 107,128 107,128 107,128 107,128 107,128 107,128 107,128 107,128 107,127 107,127 107,127 107,127 107,127 107,126 107,126 107,126 107,126 107,125 107,125 107,125 107,124 107,124 107,124 107,124 107,123 107,123 107,123 107,122 107,122 107,122 107,121 107,121 107,121 107,121 107,120 107,120 107,120 107,119 107,119 107,119 107,119 107,118 107,118 107,118 107,117 107,117 107,117 107,117 107,117 107,116 107,116 107,116 107,116 107,115 107,115 107,115 107,115 108,115 108,115 108,114 108,114 108,114 108,114 108,114 108,114 108,114 108,113 108,113 108,113 108,113 108,113 108,113 108,113 108,113 108,112 108,112 108,112 108,112 108,112 108,112 108,112 108,112 108,111 108,111 108,111 108,111 108,111 108,111 108,111 108,111 108,110 108,110 108,110 108,110 108,110 108,110 108,110 108,110 108,109 108,109 108,109 108,109 108,109 108,109 108,109 108,109 108,109 108,108 108,108 108,108 108,108 108,108 108,108 108,108 108,108 108,108 108,108 108,108 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,107 108,106 108,106 108,106 108,106 108,106 108,106 108,106 108,106 108,106 108,106 108,106 108,106 108,106 108,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 109,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 110,106 106,106 "/>
<polygon opacity="1" fill="#1F78B4" points="266,58 267,58 268,58 270,58 271,58 272,58 274,58 275,58 276,58 278,58 279,58 281,58 282,58 283,58 285,58 286,58 287,58 289,58 290,58 292,58 293,58 294,57 296,57 297,57 298,57 300,57 301,57 303,57 304,57 305,57 307,57 308,56 309,56 311,56 312,56 314,56 315,56 316,56 318,55 319,55 320,55 322,55 323,55 325,54 326,54 327,54 329,54 330,53 331,53 333,53 334,52 336,52 337,52 338,51 340,51 341,51 342,50 344,50 345,50 347,49 348,49 349,48 351,48 352,48 353,47 355,47 356,46 357,46 359,46 360,45 362,45 363,44 364,44 366,44 367,43 368,43 370,42 371,42 373,42 374,41 375,41 377,40 378,40 379,40 381,39 382,39 384,39 385,38 386,38 388,38 389,38 390,37 392,37 393,37 395,37 396,36 397,36 399,36 400,36 401,36 403,35 404,35 406,35 407,35 408,35 410,35 411,35 412,35 414,35 415,35 417,35 418,35 419,35 421,35 422,34 423,35 425,35 426,35 427,35 429,35 430,35 432,35 433,35 434,35 436,35 437,35 438,35 440,35 441,35 443,35 444,36 445,36 447,36 448,36 449,36 451,36 452,36 454,36 455,37 456,37 458,37 459,37 460,37 462,37 463,38 465,38 466,38 467,38 469,38 470,38 471,39 473,39 474,39 476,39 477,39 478,40 480,40 481,40 482,40 484,40 485,40 487,41 488,41 489,41 491,41 492,41 493,42 495,42 496,42 498,42 499,42 500,43 502,43 503,43 504,43 506,43 507,43 508,44 510,44 511,44 513,44 514,44 515,44 517,45 518,45 519,45 521,45 522,45 524,45 525,46 526,46 528,46 529,46 530,46 532,46 533,46 535,47 536,47 537,47 539,47 540,47 541,47 543,47 544,48 546,48 547,48 548,48 550,48 551,48 552,48 554,49 555,49 557,49 558,49 559,49 561,49 562,49 563,50 565,50 566,50 568,50 569,50 570,50 572,50 573,50 574,51 576,51 577,51 578,51 580,51 581,51 583,51 584,51 585,52 587,52 588,52 589,52 591,52 592,52 594,52 595,52 596,52 598,52 599,53 600,53 602,53 603,53 605,53 606,53 607,53 609,53 610,53 611,53 613,53 614,53 616,53 617,53 618,53 620,53 621,53 622,53 624,53 625,54 627,54 628,54 629,54 631,54 632,54 633,54 635,54 636,54 638,54 639,54 640,54 642,54 643,54 644,54 646,54 647,54 649,54 650,54 651,54 653,54 654,54 655,54 657,54 658,54 659,54 661,54 662,54 664,54 665,55 666,55 668,55 669,55 670,55 672,55 673,55 675,55 676,55 677,55 679,55 680,55 681,55 683,55 684,55 686,55 687,56 688,56 690,56 691,56 692,56 694,56 695,56 697,56 698,56 699,56 701,56 702,56 703,56 705,56 706,56 708,56 709,57 710,57 712,57 713,57 714,57 716,57 717,57 719,57 720,57 721,57 723,57 724,57 725,57 727,57 728,57 729,57 731,57 732,57 734,57 735,57 736,57 738,57 739,57 740,57 742,57 743,57 745,57 746,57 747,57 749,57 750,57 751,58 753,58 754,58 756,58 757,58 758,58 760,58 761,58 762,58 764,58 765,58 767,58 768,58 769,58 771,58 772,58 773,58 775,58 776,58 778,58 779,58 780,58 782,58 783,58 784,58 786,58 787,58 789,58 790,58 791,58 793,58 794,58 795,58 797,58 798,58 800,58 801,58 802,58 804,58 805,58 806,58 808,58 809,58 810,58 812,58 813,58 815,58 816,58 817,58 819,58 820,58 821,58 823,58 824,58 826,58 827,58 828,58 830,58 831,58 832,58 834,58 835,58 837,58 838,58 839,58 841,58 842,58 843,58 845,58 846,58 848,58 849,58 850,58 852,58 853,58 854,58 856,58 857,58 859,58 860,58 861,58 863,58 864,58 865,58 867,58 868,58 870,58 871,58 872,58 874,58 875,58 876,58 878,58 879,58 880,58 882,58 883,58 885,58 886,58 887,58 889,58 890,58 891,58 893,58 894,58 896,58 897,58 898,58 900,58 901,58 902,58 904,58 905,58 907,58 908,58 909,58 911,58 912,58 913,58 915,58 916,58 918,58 919,58 920,58 922,58 923,58 924,58 926,58 927,58 929,58 930,58 931,58 933,58 934,58 935,58 937,58 938,58 940,58 941,58 942,58 944,58 945,58 946,58 948,58 949,58 951,58 951,58 266,58 "/>
<polygon opacity="1" fill="#1F78B4" points="266,58 267,58 268,58 270,58 271,58 272,58 274,58 275,58 276,58 278,59 279,59 281,59 282,59 283,59 285,59 286,59 287,59 289,59 290,59 292,59 293,59 294,59 296,59 297,59 298,59 300,59 301,59 303,60 304,60 305,60 307,60 308,60 309,60 311,60 312,60 314,61 315,61 316,61 318,61 319,61 320,62 322,62 323,62 325,62 326,62 327,63 329,63 330,63 331,64 333,64 334,64 336,64 337,65 338,65 340,65 341,66 342,66 344,67 345,67 347,67 348,68 349,68 351,68 352,69 353,69 355,70 356,70 357,70 359,71 360,71 362,72 363,72 364,73 366,73 367,73 368,74 370,74 371,75 373,75 374,75 375,76 377,76 378,76 379,77 381,77 382,77 384,78 385,78 386,78 388,79 389,79 390,79 392,79 393,80 395,80 396,80 397,80 399,81 400,81 401,81 403,81 404,81 406,81 407,81 408,82 410,82 411,82 412,82 414,82 415,82 417,82 418,82 419,82 421,82 422,82 423,82 425,82 426,82 427,82 429,82 430,82 432,82 433,82 434,82 436,82 437,81 438,81 440,81 441,81 443,81 444,81 445,81 447,81 448,81 449,81 451,80 452,80 454,80 455,80 456,80 458,80 459,79 460,79 462,79 463,79 465,79 466,79 467,78 469,78 470,78 471,78 473,78 474,78 476,77 477,77 478,77 480,77 481,77 482,76 484,76 485,76 487,76 488,76 489,75 491,75 492,75 493,75 495,75 496,74 498,74 499,74 500,74 502,74 503,74 504,73 506,73 507,73 508,73 510,73 511,73 513,72 514,72 515,72 517,72 518,72 519,72 521,71 522,71 524,71 525,71 526,71 528,71 529,71 530,70 532,70 533,70 535,70 536,70 537,70 539,70 540,69 541,69 543,69 544,69 546,69 547,69 548,69 550,68 551,68 552,68 554,68 555,68 557,68 558,68 559,67 561,67 562,67 563,67 565,67 566,67 568,67 569,66 570,66 572,66 573,66 574,66 576,66 577,66 578,65 580,65 581,65 583,65 584,65 585,65 587,65 588,65 589,65 591,64 592,64 594,64 595,64 596,64 598,64 599,64 600,64 602,64 603,64 605,64 606,64 607,64 609,63 610,63 611,63 613,63 614,63 616,63 617,63 618,63 620,63 621,63 622,63 624,63 625,63 627,63 628,63 629,63 631,63 632,63 633,63 635,63 636,63 638,63 639,63 640,63 642,63 643,63 644,63 646,63 647,63 649,63 650,62 651,62 653,62 654,62 655,62 657,62 658,62 659,62 661,62 662,62 664,62 665,62 666,62 668,62 669,62 670,62 672,62 673,62 675,62 676,62 677,61 679,61 680,61 681,61 683,61 684,61 686,61 687,61 688,61 690,61 691,61 692,61 694,61 695,61 697,60 698,60 699,60 701,60 702,60 703,60 705,60 706,60 708,60 709,60 710,60 712,60 713,60 714,60 716,60 717,60 719,60 720,60 721,60 723,60 724,59 725,59 727,59 728,59 729,59 731,59 732,59 734,59 735,59 736,59 738,59 739,59 740,59 742,59 743,59 745,59 746,59 747,59 749,59 750,59 751,59 753,59 754,59 756,59 757,59 758,59 760,59 761,59 762,59 764,59 765,59 767,59 768,59 769,59 771,59 772,59 773,59 775,59 776,59 778,59 779,59 780,59 782,59 783,59 784,59 786,59 787,59 789,59 790,59 791,59 793,59 794,59 795,59 797,59 798,59 800,59 801,59 802,59 804,59 805,59 806,59 808,59 809,59 810,59 812,59 813,59 815,59 816,59 817,59 819,59 820,59 821,59 823,59 824,59 826,59 827,59 828,59 830,59 831,59 832,59 834,59 835,59 837,59 838,59 839,59 841,59 842,59 843,59 845,59 846,59 848,59 849,59 850,59 852,59 853,59 854,59 856,59 857,59 859,59 860,59 861,59 863,59 864,59 865,59 867,59 868,59 870,59 871,59 872,59 874,59 875,59 876,59 878,59 879,59 880,58 882,58 883,58 885,58 886,58 887,58 889,58 890,58 891,58 893,58 894,58 896,58 897,58 898,58 900,58 901,58 902,58 904,58 905,58 907,58 908,58 909,58 911,58 912,58 913,58 915,58 916,58 918,58 919,58 920,58 922,58 923,58 924,58 926,58 927,58 929,58 930,58 931,58 933,58 934,58 935,58 937,58 938,58 940,58 941,58 942,58 944,58 945,58 946,58 948,58 949,58 951,58 951,58 266,58 "/>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB

@@ -0,0 +1 @@
{"group_id":"composite_scratch_pooling","function_id":"warm_composite","value_str":null,"throughput":null,"full_id":"composite_scratch_pooling/warm_composite","directory_name":"composite_scratch_pooling/warm_composite","title":"composite_scratch_pooling/warm_composite"}
@@ -0,0 +1 @@
{"mean":{"confidence_interval":{"confidence_level":0.95,"lower_bound":8739193.281499999,"upper_bound":8836999.776666665},"point_estimate":8787918.621666668,"standard_error":24888.125751088177},"median":{"confidence_interval":{"confidence_level":0.95,"lower_bound":8756321.833333334,"upper_bound":8835374.5},"point_estimate":8806424.166666668,"standard_error":18904.674435233715},"median_abs_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":127140.23719281005,"upper_bound":209397.84893244688},"point_estimate":167337.84672915752,"standard_error":20429.30194321241},"slope":null,"std_dev":{"confidence_interval":{"confidence_level":0.95,"lower_bound":201722.05613826346,"upper_bound":292081.34446231544},"point_estimate":249681.81711921998,"standard_error":23106.85080816357}}

Some files were not shown because too many files have changed in this diff Show More