rails-profiler 0.11.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5f02d90b7d6f03504d5aa8412b3f4a3c1fc3064152057489514981daeba18307
4
- data.tar.gz: bbf33083a998d3e9ac918ba7600522799bea7006c54fe66f020ea98465e7b086
3
+ metadata.gz: b25edc08059907d5374748ac0624d804685b83189faabc4bae8b19cc65b0bed9
4
+ data.tar.gz: a5e8268d4e59540a91d7fc2b27c44bbb492e221e2ac2f4446c2ad095a2473245
5
5
  SHA512:
6
- metadata.gz: 4b92adb363521979754c08a7304e0559d8221c5541c706d45d2aea01cb9a52bc7893b00847fe741e854551b74fbf6ea02ff9a641893fa5005f7c93953715059b
7
- data.tar.gz: b5a00222dee6d68456211b346210573c1781cb42cc6c196a0ade5b0c05e2fc04c86abc4f58a2dd2ee42bf21be7f99ed1a0ef5c2e320bf82642dfa0f563a09bd5
6
+ metadata.gz: af7137fb8650d7a40d2291ad66dc4fe25466c77ad2ebb83489f15191114a1a290b6a4eb47e5760744e991212ec0ed05a146d1d9450f4c7d7cbcbd394629ae3b1
7
+ data.tar.gz: 197f4016c350ed157b690d52ff44c83ef4ef2c5ae69f7906ad55ec8b44416fb606e41b66e3d0d84124ec378cb2961ac0b6c8bcde08e55c1e45c488648889cea8
@@ -2524,6 +2524,324 @@ a.profiler-toolbar-item.profiler-text--warning::after {
2524
2524
  overflow: hidden;
2525
2525
  }
2526
2526
 
2527
+ .profiler-fn-profiling {
2528
+ margin-top: 32px;
2529
+ border-top: 1px solid var(--profiler-border);
2530
+ padding-top: 24px;
2531
+ animation: fadeIn 300ms ease;
2532
+ }
2533
+ .profiler-fn-profiling__header {
2534
+ display: flex;
2535
+ align-items: center;
2536
+ justify-content: space-between;
2537
+ gap: 16px;
2538
+ margin-bottom: 16px;
2539
+ flex-wrap: wrap;
2540
+ }
2541
+ .profiler-fn-profiling__title {
2542
+ font-size: var(--profiler-text-xs);
2543
+ font-weight: 700;
2544
+ letter-spacing: 0.12em;
2545
+ text-transform: uppercase;
2546
+ color: var(--profiler-text-muted);
2547
+ font-family: var(--profiler-font-sans);
2548
+ display: flex;
2549
+ align-items: center;
2550
+ gap: 8px;
2551
+ }
2552
+ .profiler-fn-profiling__title::before {
2553
+ content: "";
2554
+ display: inline-block;
2555
+ width: 8px;
2556
+ height: 8px;
2557
+ border-radius: 50%;
2558
+ background: #94a3b8;
2559
+ flex-shrink: 0;
2560
+ }
2561
+ .profiler-fn-profiling__title--active::before {
2562
+ background: var(--profiler-accent);
2563
+ box-shadow: 0 0 6px var(--profiler-accent-glow);
2564
+ }
2565
+ .profiler-fn-profiling__controls {
2566
+ display: flex;
2567
+ align-items: center;
2568
+ gap: 12px;
2569
+ flex-wrap: wrap;
2570
+ }
2571
+ .profiler-fn-profiling__max-frames-label {
2572
+ display: flex;
2573
+ align-items: center;
2574
+ gap: 6px;
2575
+ font-size: var(--profiler-text-xs);
2576
+ color: var(--profiler-text-muted);
2577
+ font-family: var(--profiler-font-sans);
2578
+ cursor: default;
2579
+ }
2580
+ .profiler-fn-profiling__max-frames-input {
2581
+ width: 70px;
2582
+ height: 26px;
2583
+ padding: 0 8px;
2584
+ background: var(--profiler-bg-lighter);
2585
+ border: 1px solid var(--profiler-border);
2586
+ border-radius: var(--profiler-radius-sm);
2587
+ color: var(--profiler-text);
2588
+ font-family: var(--profiler-font-mono);
2589
+ font-size: var(--profiler-text-xs);
2590
+ text-align: center;
2591
+ transition: border-color var(--profiler-transition-base);
2592
+ appearance: textfield;
2593
+ }
2594
+ .profiler-fn-profiling__max-frames-input::-webkit-inner-spin-button, .profiler-fn-profiling__max-frames-input::-webkit-outer-spin-button {
2595
+ -webkit-appearance: none;
2596
+ }
2597
+ .profiler-fn-profiling__max-frames-input:focus {
2598
+ outline: none;
2599
+ border-color: var(--profiler-accent);
2600
+ box-shadow: 0 0 0 2px var(--profiler-accent-glow);
2601
+ }
2602
+ .profiler-fn-profiling__max-frames-input:disabled {
2603
+ opacity: 0.4;
2604
+ cursor: not-allowed;
2605
+ }
2606
+ .profiler-fn-profiling__updating {
2607
+ font-size: var(--profiler-text-xs);
2608
+ color: var(--profiler-text-muted);
2609
+ font-family: var(--profiler-font-mono);
2610
+ animation: pulse 1s ease-in-out infinite;
2611
+ }
2612
+ .profiler-fn-profiling__toggle {
2613
+ display: inline-flex;
2614
+ align-items: center;
2615
+ gap: 6px;
2616
+ height: 28px;
2617
+ padding: 0 14px;
2618
+ border-radius: var(--profiler-radius-full);
2619
+ border: 1px solid var(--profiler-border-strong);
2620
+ background: var(--profiler-bg-lighter);
2621
+ color: var(--profiler-text-muted);
2622
+ font-size: var(--profiler-text-xs);
2623
+ font-weight: 600;
2624
+ font-family: var(--profiler-font-sans);
2625
+ cursor: pointer;
2626
+ transition: all var(--profiler-transition-base);
2627
+ white-space: nowrap;
2628
+ }
2629
+ .profiler-fn-profiling__toggle::before {
2630
+ content: "";
2631
+ width: 6px;
2632
+ height: 6px;
2633
+ border-radius: 50%;
2634
+ background: var(--profiler-text-subtle);
2635
+ flex-shrink: 0;
2636
+ transition: background var(--profiler-transition-base), box-shadow var(--profiler-transition-base);
2637
+ }
2638
+ .profiler-fn-profiling__toggle:hover {
2639
+ border-color: var(--profiler-border-strong);
2640
+ color: var(--profiler-text);
2641
+ background: var(--profiler-bg-elevated);
2642
+ }
2643
+ .profiler-fn-profiling__toggle:disabled {
2644
+ opacity: 0.5;
2645
+ cursor: not-allowed;
2646
+ }
2647
+ .profiler-fn-profiling__toggle--active {
2648
+ border-color: var(--profiler-border-accent);
2649
+ background: var(--profiler-accent-bg);
2650
+ color: var(--profiler-accent);
2651
+ }
2652
+ .profiler-fn-profiling__toggle--active::before {
2653
+ background: var(--profiler-accent);
2654
+ box-shadow: 0 0 6px var(--profiler-accent-glow);
2655
+ }
2656
+ .profiler-fn-profiling__toggle--active:hover {
2657
+ background: rgba(245, 158, 11, 0.15);
2658
+ }
2659
+ .profiler-fn-profiling__hint {
2660
+ margin: 12px 0 0;
2661
+ padding: 10px 14px;
2662
+ background: var(--profiler-bg-lighter);
2663
+ border: 1px solid var(--profiler-border);
2664
+ border-radius: var(--profiler-radius-md);
2665
+ font-size: var(--profiler-text-xs);
2666
+ color: var(--profiler-text-muted);
2667
+ font-family: var(--profiler-font-sans);
2668
+ line-height: 1.6;
2669
+ }
2670
+ .profiler-fn-profiling__flamegraph {
2671
+ margin: 16px 0;
2672
+ }
2673
+ .profiler-fn-profiling__flamegraph .profiler-flamegraph__controls {
2674
+ margin-bottom: 6px;
2675
+ }
2676
+ .profiler-fn-profiling__sort {
2677
+ display: flex;
2678
+ align-items: center;
2679
+ gap: 4px;
2680
+ margin: 16px 0 8px;
2681
+ padding: 3px;
2682
+ background: var(--profiler-bg-lighter);
2683
+ border: 1px solid var(--profiler-border);
2684
+ border-radius: var(--profiler-radius-md);
2685
+ width: fit-content;
2686
+ }
2687
+ .profiler-fn-profiling__sort-btn {
2688
+ padding: 4px 12px;
2689
+ border: none;
2690
+ border-radius: var(--profiler-radius-sm);
2691
+ background: transparent;
2692
+ color: var(--profiler-text-muted);
2693
+ font-size: var(--profiler-text-xs);
2694
+ font-weight: 500;
2695
+ font-family: var(--profiler-font-sans);
2696
+ cursor: pointer;
2697
+ transition: all var(--profiler-transition-fast);
2698
+ white-space: nowrap;
2699
+ }
2700
+ .profiler-fn-profiling__sort-btn:hover {
2701
+ color: var(--profiler-text);
2702
+ background: var(--profiler-bg-elevated);
2703
+ }
2704
+ .profiler-fn-profiling__sort-btn--active {
2705
+ background: var(--profiler-accent);
2706
+ color: var(--profiler-text-on-accent);
2707
+ font-weight: 600;
2708
+ box-shadow: var(--profiler-shadow-sm);
2709
+ }
2710
+ .profiler-fn-profiling__sort-btn--active:hover {
2711
+ background: var(--profiler-accent-hover);
2712
+ color: var(--profiler-text-on-accent);
2713
+ }
2714
+ .profiler-fn-profiling__table {
2715
+ width: 100%;
2716
+ border-collapse: collapse;
2717
+ font-size: var(--profiler-text-xs);
2718
+ font-family: var(--profiler-font-sans);
2719
+ margin-top: 8px;
2720
+ }
2721
+ .profiler-fn-profiling__table thead tr {
2722
+ border-bottom: 1px solid var(--profiler-border-strong);
2723
+ }
2724
+ .profiler-fn-profiling__table th {
2725
+ padding: 8px 10px;
2726
+ text-align: left;
2727
+ font-size: var(--profiler-text-xs);
2728
+ font-weight: 600;
2729
+ letter-spacing: 0.08em;
2730
+ text-transform: uppercase;
2731
+ color: var(--profiler-text-subtle);
2732
+ }
2733
+ .profiler-fn-profiling__table th.profiler-text--right {
2734
+ text-align: right;
2735
+ }
2736
+ .profiler-fn-profiling__table tbody tr {
2737
+ border-bottom: 1px solid var(--profiler-border);
2738
+ transition: background var(--profiler-transition-fast);
2739
+ }
2740
+ .profiler-fn-profiling__table tbody tr:hover {
2741
+ background: var(--profiler-bg-lighter);
2742
+ }
2743
+ .profiler-fn-profiling__table tbody tr:last-child {
2744
+ border-bottom: none;
2745
+ }
2746
+ .profiler-fn-profiling__table tbody tr.profiler-fn-profiling__row--highlighted {
2747
+ background: rgba(251, 191, 36, 0.08);
2748
+ outline: 1px solid rgba(251, 191, 36, 0.35);
2749
+ outline-offset: -1px;
2750
+ }
2751
+ .profiler-fn-profiling__table td {
2752
+ padding: 7px 10px;
2753
+ vertical-align: middle;
2754
+ line-height: 1.4;
2755
+ }
2756
+ .profiler-fn-profiling__table td.profiler-text--right {
2757
+ text-align: right;
2758
+ }
2759
+ .profiler-fn-profiling__table td.profiler-text--muted {
2760
+ color: var(--profiler-text-muted);
2761
+ }
2762
+ .profiler-fn-profiling__name {
2763
+ font-family: var(--profiler-font-mono);
2764
+ font-size: var(--profiler-text-xs);
2765
+ font-weight: 500;
2766
+ color: var(--profiler-text);
2767
+ max-width: 280px;
2768
+ overflow: hidden;
2769
+ text-overflow: ellipsis;
2770
+ white-space: nowrap;
2771
+ }
2772
+ .profiler-fn-profiling__recursive {
2773
+ display: inline-flex;
2774
+ align-items: center;
2775
+ justify-content: center;
2776
+ width: 14px;
2777
+ height: 14px;
2778
+ border-radius: 3px;
2779
+ background: var(--profiler-warning-bg);
2780
+ color: var(--profiler-warning);
2781
+ font-size: 9px;
2782
+ font-weight: 700;
2783
+ margin-right: 5px;
2784
+ vertical-align: middle;
2785
+ flex-shrink: 0;
2786
+ cursor: help;
2787
+ }
2788
+ .profiler-fn-profiling__filter-active {
2789
+ display: flex;
2790
+ align-items: center;
2791
+ justify-content: space-between;
2792
+ gap: 8px;
2793
+ margin: 12px 0 0;
2794
+ padding: 8px 14px;
2795
+ background: var(--profiler-accent-bg);
2796
+ border: 1px solid var(--profiler-border-accent);
2797
+ border-radius: var(--profiler-radius-md);
2798
+ font-size: var(--profiler-text-xs);
2799
+ color: var(--profiler-accent);
2800
+ font-family: var(--profiler-font-sans);
2801
+ }
2802
+ .profiler-fn-profiling__filter-active strong {
2803
+ font-family: var(--profiler-font-mono);
2804
+ font-weight: 600;
2805
+ }
2806
+ .profiler-fn-profiling__filter-clear {
2807
+ padding: 2px 8px;
2808
+ border: 1px solid var(--profiler-border-accent);
2809
+ border-radius: var(--profiler-radius-sm);
2810
+ background: transparent;
2811
+ color: var(--profiler-accent);
2812
+ font-size: var(--profiler-text-xs);
2813
+ font-family: var(--profiler-font-sans);
2814
+ cursor: pointer;
2815
+ transition: all var(--profiler-transition-fast);
2816
+ white-space: nowrap;
2817
+ }
2818
+ .profiler-fn-profiling__filter-clear:hover {
2819
+ background: var(--profiler-accent);
2820
+ color: var(--profiler-text-on-accent);
2821
+ }
2822
+ .profiler-fn-profiling__cap-warning {
2823
+ display: flex;
2824
+ align-items: center;
2825
+ gap: 8px;
2826
+ margin: 12px 0 0;
2827
+ padding: 10px 14px;
2828
+ background: var(--profiler-warning-bg);
2829
+ border: 1px solid rgba(251, 146, 60, 0.3);
2830
+ border-radius: var(--profiler-radius-md);
2831
+ font-size: var(--profiler-text-xs);
2832
+ color: var(--profiler-warning);
2833
+ font-family: var(--profiler-font-sans);
2834
+ font-weight: 500;
2835
+ }
2836
+
2837
+ @keyframes pulse {
2838
+ 0%, 100% {
2839
+ opacity: 1;
2840
+ }
2841
+ 50% {
2842
+ opacity: 0.4;
2843
+ }
2844
+ }
2527
2845
  pre[data-language=sql],
2528
2846
  .sql-code {
2529
2847
  background: var(--profiler-bg);