WhatsLaggin report (manual)  1m11s recorded, ended 2026-10-23 04:16:20
Minecraft 1.20.1, Forge 47.4.20, 462 mods, Java 17.0.8 OpenJDK 64-Bit Server VM, max heap 10.0 GB
GPU AMD Radeon RX 9070 XT (ATI Technologies Inc.), OpenGL 4.6.0 Core Profile Context 26.10.1.261008
CPU 16x AMD Ryzen 7 7800X3D 8-Core Processor, 16 threads, 31.4 GB RAM
Video 3440x1440 fullscreen @180 Hz, vsync off, fps limit unlimited, render distance 32, simulation 7, graphics fancy, shaders Solas Shader V3.7b.zip
World minecraft:overworld, 64 entities loaded

VERDICT
  109 fps average (9.21 ms per frame), 1% low 61 fps, 0.1% low 20 fps.
  GPU-BOUND: 6.55 ms of each frame (71%) is the CPU waiting for the GPU. The CPU part is only 2.66 ms.
  Optimising mod code on the render thread will not raise FPS until the GPU load drops.
  13 stutters over 24 ms (11.0 per minute), worst 77 ms. Biggest cause: GC pause (G1 Young Generation).

WHAT TO FIX (ranked by time lost per second of play)
  1. [gpu] GPU-bound: 71% of every frame is spent waiting on the GPU
       The CPU finishes its part of a frame in 2.66 ms and then waits 6.55 ms in glfwSwapBuffers for the GPU.
       GPU time for the frame's draw calls: p50 8.65 ms, p95 9.70 ms (timer queries).
       Cutting CPU work (mods below) will NOT raise FPS until GPU load drops.
       Biggest GPU levers: shader pack 'Solas Shader V3.7b.zip' (lower its shadow/volumetric settings), render distance (32), resolution (3440x1440), graphics mode (fancy)
  2. [stutter] Stutter: GC pause (G1 Young Generation)
       11 frames over 24 ms, worst 77 ms, 284 ms of extra frame time per minute
       allocation 324 MB/s; 13 collections, worst 70 ms
       83 MB/s collections_of_optimizations (25%): com.misanthropy.collections_of_optimizations.core.FeaturePlacement.step:63 -> BlockPos
       44 MB/s fastchunkgen (14%): com.misanthropy.fastchunkgen.base.common.util.InvokingExecutorService.execute:88 -> Double
       28 MB/s lithoform (8.7%): com.misanthropy.lithoform.compat.LandProvinces.province:519 -> Climate$TargetPoint
       Fix: cut allocation at the sites above (reuse objects, avoid streams/boxing in per-tick code).
  3. [world] minecraft:player (entity render) costs 42 ms every second
       7,724 calls, 385 us each, worst 71 ms at 2527, 68, 778
  4. [cpu] embeddium costs 0.57 ms per frame on the render thread
       22% of render-thread CPU time, mostly in world, 69% in its own code (rest is vanilla/library code it called)
       86%  me.jellysquid.mods.sodium.client.render.SodiumWorldRenderer.drawChunkLayer:275   <- LevelRenderer.renderChunkLayer:40702
               hot: me.jellysquid.mods.sodium.client.render.chunk.DefaultChunkRenderer.fillCommandBuffer:165 (41%), executing GL32C.nglMultiDrawElementsBaseVertex (21%)
       10%  me.jellysquid.mods.sodium.client.render.SodiumWorldRenderer.setupTerrain:218   <- LevelRenderer.setupRender:40729
               hot: me.jellysquid.mods.sodium.client.render.chunk.RenderSectionManager.tickVisibleRenders:361 (27%), executing Long2ReferenceOpenHashMap$MapIterator.nextEntry:662 (5.7%)
       no FPS gain while GPU-bound, but it adds to frame-time spikes
  5. [stutter] Stutter: GC pause (G1 Remark/Cleanup, end of a concurrent mark cycle)
       2 frames over 24 ms, worst 47 ms, 63 ms of extra frame time per minute
       allocation 324 MB/s; 13 collections, worst 70 ms
       83 MB/s collections_of_optimizations (25%): com.misanthropy.collections_of_optimizations.core.FeaturePlacement.step:63 -> BlockPos
       44 MB/s fastchunkgen (14%): com.misanthropy.fastchunkgen.base.common.util.InvokingExecutorService.execute:88 -> Double
       28 MB/s lithoform (8.7%): com.misanthropy.lithoform.compat.LandProvinces.province:519 -> Climate$TargetPoint
       Fix: cut allocation at the sites above (reuse objects, avoid streams/boxing in per-tick code).
  6. [cpu] oculus costs 0.31 ms per frame on the render thread
       12% of render-thread CPU time, mostly in world, 39% in its own code (rest is vanilla/library code it called)
       36%  LevelRenderer.iris$renderTerrainShadows:16196 [mixin handler from net.irisshaders.iris.mixin.MixinLevelRenderer]   <- LevelRenderer.renderLevel:1155
               hot: net.irisshaders.iris.shadows.ShadowRenderer.renderPlayerEntity:687 (14%), executing ASMEventHandler.invoke:55 (8.0%)
       14%  LevelRenderer.iris$beginLevelRender:16171 [mixin handler from net.irisshaders.iris.mixin.MixinLevelRenderer]   <- LevelRenderer.renderLevel:1149
               hot: net.irisshaders.iris.uniforms.custom.cached.CachedUniform.evaluateTo:92 (9.1%), executing GL30C.glBindFramebuffer (9.1%)
       12%  LevelRenderer.iris$beginTranslucents:16334 [mixin handler from net.irisshaders.iris.mixin.MixinLevelRenderer]   <- LevelRenderer.renderLevel:1370
               hot: net.irisshaders.iris.pathways.HandRenderer.renderSolid:96 (14%), executing ASMEventHandler.invoke:55 (6.8%)
       no FPS gain while GPU-bound, but it adds to frame-time spikes
  7. [cpu] xaeroworldmap costs 0.19 ms per frame on the render thread
       7.3% of render-thread CPU time, mostly in no phase, 80% in its own code (rest is vanilla/library code it called)
       99%  xaero.map.events.ClientEventsForge.renderTick:32   <- Minecraft.runTick:1148
               hot: xaero.map.misc.CaveStartCalculator.getCaving:102 (42%), executing LightEngine.getLightValue:208 (11%)
       no FPS gain while GPU-bound, but it adds to frame-time spikes
  8. [cpu] entity_model_features costs 0.16 ms per frame on the render thread
       6.1% of render-thread CPU time, mostly in world, 75% in its own code (rest is vanilla/library code it called)
       95%  traben.entity_model_features.models.parts.EMFModelPartVanilla.render:116   <- AgeableListModel.lambda$renderToBuffer$2:62
               hot: traben.entity_model_features.models.animation.math.asm.ASMParser.lambda$compileOrNull$0:162 (54%), executing EMF_ASM_Parsed_156.eval (54%)
       no FPS gain while GPU-bound, but it adds to frame-time spikes
  9. [cpu] gnetum costs 0.098 ms per frame on the render thread
       3.8% of render-thread CPU time, mostly in hud, 30% in its own code (rest is vanilla/library code it called)
       100%  ForgeGui.gnetum$render$mixinextras$bridge$64 [mixin wrapOperation from me.decce.gnetum.mixins.ForgeGuiMixin]   <- GameRenderer.render:945
               hot: ForgeGui.gnetum$postEvent:3130 [mixin merged from me.decce.gnetum.mixins.ForgeGuiMixin] (43%), executing ASMEventHandler.invoke:55 (23%)
       no FPS gain while GPU-bound, but it adds to frame-time spikes
 10. [cpu] asyncparticles costs 0.073 ms per frame on the render thread
       2.8% of render-thread CPU time, mostly in client tick, 54% in its own code (rest is vanilla/library code it called)
       36%  LevelChunkSection.onGetNoiseBiome:2059 [mixin wrapMethod from forge.fun.qu_an.minecraft.asyncparticles.client.mixin.off_thread_access.MixinLevelChunkSection]   <- LevelChunkSection.getNoiseBiome
       28%  TextureManager.lambda$wrapTick$0:2532 [mixin merged from forge.fun.qu_an.minecraft.asyncparticles.client.mixin.core.deffered_texture_tick.MixinTextureManager]   <- TextureManager.run
               executing TextureAtlas.cycleAnimationFrames:112 (84%)
       11%  Minecraft.onPostTick:41466 [mixin handler from forge.fun.qu_an.minecraft.asyncparticles.client.mixin.core.particle.tick.MixinMinecraft]   <- Minecraft.runTick:1112
               hot: forge.fun.qu_an.minecraft.asyncparticles.client.addon.LightCachedParticleAddon.asyncparticles$tickLightCache:27 (17%), executing GL45C.glFlushMappedNamedBufferRange (17%)
       no FPS gain while GPU-bound, but it adds to frame-time spikes

FRAMES
  7,723 frames   p50 9.18 ms   p95 10 ms   p99 11 ms   worst 77 ms
  per frame:  tasks 0.056 ms  client tick 0.39 ms  render 1.94 ms  present 6.55 ms  other 0.26 ms
  inside those:  swap 6.55 ms  world 1.65 ms  hud 0.26 ms  screen 0.001 ms
  client tick: 2.14 ms per tick, 20.0 ticks per second
  GPU busy per frame (timer queries): p50 8.65 ms   p95 9.70 ms   p99 9.96 ms
  GPU time per pass (mean per frame, each pass also holds what mods drew at the stage before it):
    0.16 ms  1.8%  sky and frame setup   (p95 0.16 ms)
    5.59 ms  65%  solid terrain   (p95 6.55 ms)
    0.000 ms  <0.1%  cutout mipped terrain   (p95 0.002 ms)
    0.000 ms  <0.1%  cutout terrain   (p95 0.002 ms)
    0.029 ms  0.3%  entities   (p95 0.074 ms)
    0.000 ms  <0.1%  block entities   (p95 0.002 ms)
    1.20 ms  14%  translucent terrain   (p95 1.52 ms)
    0.000 ms  <0.1%  tripwire   (p95 0.003 ms)
    0.013 ms  0.2%  particles   (p95 0.055 ms)
    0.000 ms  <0.1%  weather and clouds   (p95 0.002 ms)
    1.20 ms  14%  end of level render   (p95 1.77 ms)
    0.000 ms  <0.1%  hand and post effects   (p95 0.002 ms)
    0.083 ms  1.0%  hud   (p95 0.20 ms)
    0.28 ms  3.3%  screens and rest of frame   (p95 0.82 ms)

RENDER THREAD CPU BY MOD (sampled; excludes GPU wait, fps limiter and blocked time)
  14,095 samples: CPU work 28%, GPU wait 72%, limiter 0.0%, blocked on other threads 0.0%
  mods caused 89% of render-thread CPU work, vanilla/forge/driver the rest
  16% of CPU work is inside OpenGL calls (driver work or a GPU sync), mostly glMultiDrawElementsBaseVertex; the mod that made the call is charged for it below
  ms/frame  share  own   mod                          mostly in
  0.57 ms   22%    69%   embeddium                    world
  0.31 ms   12%    39%   oculus                       world
  0.19 ms   7.3%   80%   xaeroworldmap                no phase
  0.16 ms   6.4%   90%   minecraft (vanilla)          client tick
  0.16 ms   6.1%   75%   entity_model_features        world
  0.12 ms   4.6%   100%  forge (loader, events)       world
  0.098 ms  3.8%   30%   gnetum                       hud
  0.073 ms  2.8%   54%   asyncparticles               client tick
  0.054 ms  2.1%   78%   punchy                       world
  0.053 ms  2.1%   63%   collections_of_optimizations client tick
  0.046 ms  1.8%   29%   immediatelyfast              world
  0.044 ms  1.7%   54%   linggango_tweaks             client tick
  0.042 ms  1.6%   17%   entity_texture_features      world
  0.036 ms  1.4%   9.1%  whatslaggin                  world
  0.031 ms  1.2%   32%   brute_force_culling_revived  world
  0.57 ms   138 more below 0.5% each

HOT PATHS (where each mod's render-thread time goes; SRG names translated; <- = called from)
  embeddium  0.57 ms/frame, 22%
    86%   me.jellysquid.mods.sodium.client.render.SodiumWorldRenderer.drawChunkLayer:275  <- LevelRenderer.renderChunkLayer:40702
          hot me.jellysquid.mods.sodium.client.render.chunk.DefaultChunkRenderer.fillCommandBuffer:165 41%
          executing GL32C.nglMultiDrawElementsBaseVertex 21%
    10%   me.jellysquid.mods.sodium.client.render.SodiumWorldRenderer.setupTerrain:218  <- LevelRenderer.setupRender:40729
          hot me.jellysquid.mods.sodium.client.render.chunk.RenderSectionManager.tickVisibleRenders:361 27%
          executing Long2ReferenceOpenHashMap$MapIterator.nextEntry:662 5.7%
  oculus  0.31 ms/frame, 12%
    36%   LevelRenderer.iris$renderTerrainShadows:16196 [mixin handler from net.irisshaders.iris.mixin.MixinLevelRenderer]  <- LevelRenderer.renderLevel:1155
          hot net.irisshaders.iris.shadows.ShadowRenderer.renderPlayerEntity:687 14%
          executing ASMEventHandler.invoke:55 8.0%
    14%   LevelRenderer.iris$beginLevelRender:16171 [mixin handler from net.irisshaders.iris.mixin.MixinLevelRenderer]  <- LevelRenderer.renderLevel:1149
          hot net.irisshaders.iris.uniforms.custom.cached.CachedUniform.evaluateTo:92 9.1%
          executing GL30C.glBindFramebuffer 9.1%
    12%   LevelRenderer.iris$beginTranslucents:16334 [mixin handler from net.irisshaders.iris.mixin.MixinLevelRenderer]  <- LevelRenderer.renderLevel:1370
          hot net.irisshaders.iris.pathways.HandRenderer.renderSolid:96 14%
          executing ASMEventHandler.invoke:55 6.8%
  xaeroworldmap  0.19 ms/frame, 7.3%
    99%   xaero.map.events.ClientEventsForge.renderTick:32  <- Minecraft.runTick:1148
          hot xaero.map.misc.CaveStartCalculator.getCaving:102 42%
          executing LightEngine.getLightValue:208 11%
  minecraft (vanilla)  0.16 ms/frame, 6.4%, hottest vanilla methods:
    16%   LevelChunk$BoundTickingBlockEntity.getPos:719  <- me.decce.ixeris.RenderThreadStarter.run:39
    10%   ClientLevel.doAnimateTick:1122  <- ClientLevel.asyncparticles_animateTick:24086 [mixin wrapMethod from forge.fun.qu_an.minecraft.asyncparticles.client.mixin.core.animate_tick.MixinClientLevel_AnimateTick]
    10%   LevelChunk$BoundTickingBlockEntity.tick:688  <- me.decce.ixeris.RenderThreadStarter.run:39
  entity_model_features  0.16 ms/frame, 6.1%
    95%   traben.entity_model_features.models.parts.EMFModelPartVanilla.render:116  <- AgeableListModel.lambda$renderToBuffer$2:62
          hot traben.entity_model_features.models.animation.math.asm.ASMParser.lambda$compileOrNull$0:162 54%
          executing EMF_ASM_Parsed_156.eval 54%
  gnetum  0.098 ms/frame, 3.8%
    100%  ForgeGui.gnetum$render$mixinextras$bridge$64 [mixin wrapOperation from me.decce.gnetum.mixins.ForgeGuiMixin]  <- GameRenderer.render:945
          hot ForgeGui.gnetum$postEvent:3130 [mixin merged from me.decce.gnetum.mixins.ForgeGuiMixin] 43%
          executing ASMEventHandler.invoke:55 23%
  asyncparticles  0.073 ms/frame, 2.8%
    36%   LevelChunkSection.onGetNoiseBiome:2059 [mixin wrapMethod from forge.fun.qu_an.minecraft.asyncparticles.client.mixin.off_thread_access.MixinLevelChunkSection]  <- LevelChunkSection.getNoiseBiome
    28%   TextureManager.lambda$wrapTick$0:2532 [mixin merged from forge.fun.qu_an.minecraft.asyncparticles.client.mixin.core.deffered_texture_tick.MixinTextureManager]  <- TextureManager.run
          executing TextureAtlas.cycleAnimationFrames:112 84%
    11%   Minecraft.onPostTick:41466 [mixin handler from forge.fun.qu_an.minecraft.asyncparticles.client.mixin.core.particle.tick.MixinMinecraft]  <- Minecraft.runTick:1112
          hot forge.fun.qu_an.minecraft.asyncparticles.client.addon.LightCachedParticleAddon.asyncparticles$tickLightCache:27 17%
          executing GL45C.glFlushMappedNamedBufferRange 17%
  punchy  0.054 ms/frame, 2.1%
    58%   ItemInHandRenderer.punchy$renderFirstPersonModel:1160 [mixin handler from punchy.mixin.client.ItemInHandRendererMixin]  <- ItemInHandRenderer.m_109314_$mixinextras$wrapped$96
          hot punchy.client.render.PunchyArmRenderer.renderItemInHand:2627 6.3%
          executing Player.getItemBySlot 10%
    39%   punchy.platform.ForgeClientPlatform.onClientTick:109  <- Minecraft.tick:1875
          hot punchy.client.bedrockitems.BedrockPufferPhysicsStateMachine$ArmState.tick:141 6.3%
          executing StringLatin1.toLowerCase 13%

STUTTERS (frames over 24 ms, grouped by what was happening during them)
  frames  worst     extra/min   cause
  11      77 ms     284 ms      GC pause (G1 Young Generation)
  2       47 ms     63 ms       GC pause (G1 Remark/Cleanup, end of a concurrent mark cycle)

  worst frames:
  04:15:17.551  77 ms    render 74 ms          GC pause (G1 Young Generation)
                             70 ms of the frame was a stop-the-world collection
  04:15:09.123  63 ms    render 62 ms          GC pause (G1 Young Generation)
                             59 ms of the frame was a stop-the-world collection
  04:15:26.778  48 ms    present 41 ms         GC pause (G1 Young Generation)
                             40 ms of the frame was a stop-the-world collection
  04:15:26.172  47 ms    render 43 ms          GC pause (G1 Remark/Cleanup, end of a concurrent mark cycle)
                             38 ms of the frame was a stop-the-world collection
  04:15:14.022  46 ms    render 42 ms          GC pause (G1 Remark/Cleanup, end of a concurrent mark cycle)
                             38 ms of the frame was a stop-the-world collection
  04:15:30.223  41 ms    render 41 ms          GC pause (G1 Young Generation)
                             37 ms of the frame was a stop-the-world collection
  04:15:30.896  41 ms    render 1.34 ms        GC pause (G1 Young Generation)
                             38 ms of the frame was a stop-the-world collection
  04:15:24.183  36 ms    render 35 ms          GC pause (G1 Young Generation)
                             31 ms of the frame was a stop-the-world collection
  04:15:12.249  28 ms    render 27 ms          GC pause (G1 Young Generation)
                             22 ms of the frame was a stop-the-world collection
  04:15:14.847  27 ms    render 3.27 ms        GC pause (G1 Young Generation)
                             23 ms of the frame was a stop-the-world collection

MEMORY AND GC
  allocated 22.5 GB (324 MB/s, exact, all threads), max heap 10.0 GB
  13 GC pauses (0 old/full), 409 ms paused (0.6%), worst 70 ms, one every 5.5 s
  longest pauses:
    04:15:17.545  70 ms  G1 Young Generation, G1 Evacuation Pause
    04:15:09.121  59 ms  G1 Young Generation, GCLocker Initiated GC
    04:15:26.778  40 ms  G1 Young Generation, G1 Evacuation Pause
    04:15:30.895  38 ms  G1 Young Generation, G1 Evacuation Pause
    04:15:30.220  37 ms  G1 Young Generation, G1 Evacuation Pause
    04:15:24.178  31 ms  G1 Young Generation, G1 Humongous Allocation
    04:15:14.846  23 ms  G1 Young Generation, G1 Evacuation Pause
    04:15:12.243  22 ms  G1 Young Generation, G1 Humongous Allocation
  4 Remark/Cleanup pauses (concurrent mark cycles, not in the count above), 79 ms paused, worst 38 ms
  heap after GC 6.1 GB (61% of max, old garbage stays until the next marking cycle), changed by -236730096 B over the recording
  by mod (JFR samples scaled to each thread's exact allocation; 98% of bytes covered):
    83 MB/s   25%    collections_of_optimizations 957 samples
        16%  com.misanthropy.collections_of_optimizations.core.FeaturePlacement.step:63 -> BlockPos
        6.8%  com.misanthropy.collections_of_optimizations.core.FeaturePlacement.step:63 -> MultifaceSpreader$SpreadPos
        5.9%  com.misanthropy.collections_of_optimizations.core.FeaturePlacement.step:63 -> 1942478170
    44 MB/s   14%    fastchunkgen              525 samples
        16%  com.misanthropy.fastchunkgen.base.common.util.InvokingExecutorService.execute:88 -> Double
        9.1%  NoiseChunk.lambda$wrap$0:4484 [mixin merged from com.misanthropy.fastchunkgen.opts.worldgen.vanilla.mixin.noise_chunk_wrap.MixinNoiseChunk] -> [D
    28 MB/s   8.7%   lithoform                 263 samples
        23%  com.misanthropy.lithoform.compat.LandProvinces.province:519 -> Climate$TargetPoint
        17%  com.misanthropy.lithoform.compat.LandProvinces.province:520 -> [J
        9.0%  com.misanthropy.lithoform.biome.CaveProvinces.get:163 -> DensityFunction$SinglePointContext
    23 MB/s   6.9%   minecraft (vanilla)       2,386 samples
        8.6%  SortedArraySet.iterator:192 -> SortedArraySet$ArrayIterator
        6.8%  BlockBehaviour$BlockStateBase.getLightBlock -> CallbackInfoReturnable
    17 MB/s   5.3%   radium                    411 samples
        66%  CompoundTag.useFasterCollection:1129 [mixin modify from me.jellysquid.mods.lithium.mixin.alloc.nbt.NbtCompoundMixin] -> Object;
        16%  CompoundTag.useFasterCollection:1129 [mixin modify from me.jellysquid.mods.lithium.mixin.alloc.nbt.NbtCompoundMixin] -> Object2ObjectOpenHashMap
        7.2%  LevelChunkSection.setBlockStateNoLocking:521 [mixin redirect from me.jellysquid.mods.lithium.mixin.chunk.no_locking.ChunkSectionMixin] -> CallbackInfoReturnable
    13 MB/s   3.9%   biomeswevegone            108 samples
        15%  net.potionstudios.biomeswevegone.world.level.levelgen.surfacerules.WeightedRuleSource.apply:31 -> SurfaceRules$StoneDepthCheck$1StoneDepthCondition
        11%  net.potionstudios.biomeswevegone.world.level.levelgen.surfacerules.WeightedRuleSource.apply:31 -> SurfaceRules$TestRule
        9.6%  net.potionstudios.biomeswevegone.world.level.levelgen.surfacerules.WeightedRuleSource.apply:31 -> MarsagliaPolarGaussian
    11 MB/s   3.4%   modernfix                 115 samples
        53%  org.embeddedt.modernfix.world.gen.PrefetchingBlockColumn.setBlock:113 -> CallbackInfoReturnable
        8.5%  org.embeddedt.modernfix.structure.CachingStructureManager.readStructure:39 -> StructureTemplate$StructureBlockInfo
        6.2%  Ingredient$ItemValue.mfix$defensiveCopy:518 [mixin modifyExpressionValue from org.embeddedt.modernfix.common.mixin.perf.ingredient_item_deduplication.IngredientItemValueMixin] -> ItemStack
    10 MB/s   3.2%   embeddium                 1,270 samples
        16%  me.jellysquid.mods.sodium.client.render.chunk.lists.ChunkRenderList.sectionsWithGeometryIterator:65 -> ReversibleByteArrayIterator
        13%  me.jellysquid.mods.sodium.client.render.chunk.lists.ChunkRenderList.<init>:20 -> [B
        12%  me.jellysquid.mods.sodium.client.render.chunk.lists.ChunkRenderList.<init>:17 -> [B
    9 MB/s    2.7%   revelationfix             77 samples
        35%  com.mega.revelationfix.common.structures.FrostyardGenerationProtection$Context.contains:88 -> Long
        19%  com.mega.revelationfix.common.structures.FrostyardGenerationProtection$Context.contains:88 -> 1564072098
        10%  com.mega.revelationfix.common.structures.FrostyardGenerationProtection$Context.collect:127 -> HashMap$EntryIterator
    8 MB/s    2.5%   linggango_tweaks          233 samples
        11%  com.misanthropy.linggango.linggango_tweaks.tweak.streams.WaterSolver.levels:204 -> [J
        5.3%  com.misanthropy.linggango.linggango_tweaks.tweak.streams.WaterSolver.levels:217 -> [J

INTEGRATED SERVER (single player; this is world lag, not FPS)
  1,423 ticks, mspt mean 4.63 ms, p50 3.96 ms, p95 7.27 ms, worst 77 ms, 2 over 50 ms
    1.80 ms/tick  39%    minecraft (vanilla)       
    0.58 ms/tick  13%    forge (loader, events)    
    0.28 ms/tick  6.0%   collections_of_optimizations ChunkMap.coo$reuseUnchangedSectionPos$mixinextras$bridge$238 [mixin wrapOperation from com.misanthropy.collections_of_optimizations.mixin.vanilla.MixinChunkMapEntityTracker]
    0.17 ms/tick  3.6%   despawnings               Mob.despawnings$idleTicks:21238 [mixin constant from com.misanthropy.despawnings.mixin.MobMixin]
    0.12 ms/tick  2.7%   naturesaura               de.ellpeck.naturesaura.events.CommonEvents.onLevelTick:89
    0.11 ms/tick  2.4%   fastchunkgen              ChunkMap.onTick:15284 [mixin handler from com.misanthropy.fastchunkgen.threading.chunkio.mixin.MixinThreadedAnvilChunkStorage]
    0.11 ms/tick  2.4%   linggango_tweaks          ChunkMap.lt$endTick:17918 [mixin handler from com.misanthropy.linggango.linggango_tweaks.mixin.minecraft.ChunkSaveSmoothingMixin]
    0.099 ms/tick 2.1%   servercore                ServerChunkCache.servercore$updateCachedChunks:1641 [mixin modifyExpressionValue from me.wesley1808.servercore.mixin.optimizations.ticking.chunk.cache.ServerChunkCacheMixin]

THREADS (exact CPU per thread group; 'runs' = what JFR saw executing on it)
  the game used 2.65 of 16 cores, whole machine 31% busy
  cores  n    allocated   group                            runs
  1.86   12   14.1 GB     FastChunkGen worker ##           lithoform 58%, collections_of_optimizations 15%, fastchunkgen 13%
  0.29   1    2.9 GB      Render thread                    xaeroworldmap 17%, entity_model_features 12%, minecraft 10%
  0.10   1    1.7 GB      Server thread                    minecraft 44%, asyncparticles 12%
  0.08   1    500 MB      Linggango Streams                lithoform 58%, linggango_tweaks 38%
  0.07   1    339 MB      BFR-OcclusionCuller              embeddium 70%, brute_force_culling_revived 22%, oculus 8.2%
  0.06   10   638 MB      Chunk Render Task Executor ##    embeddium 38%, minecraft 30%, oculus 9.3%
  0.05   15   1.3 GB      ForkJoinPool.commonPool-worker-# lithoform 44%, collections_of_optimizations 27%, integrated_api 8.1%
  0.03   6    138 MB      Lumenite light #                 lumenite 98%

ENTITIES, BLOCK ENTITIES, SCREENS (exact timings; per second of recording)
  entity render:
    42 ms/s    108/s    385 us   minecraft:player                            worst 71 ms at 2527, 68, 778
  entity tick:
    9.35 ms/s  20/s     467 us   minecraft:player                            worst 1.10 ms at 2527, 68, 778
    0.68 ms/s  14/s     49 us    hexerei:crow                                worst 0.25 ms at 2639, 76, 1012
  server entity tick:
    2.72 ms/s  20/s     137 us   minecraft:player                            worst 71 ms at 2527, 68, 778

JVM AND I/O
  class loads over 1 ms: 2 (13 ms), on the render/server thread 0 (0 ms)
  non-GC safepoints: 1.65 ms total (last: ThreadDump)
  log output: 0.0 lines/s
  exceptions thrown: 6.8/s, top: 2.0/s  NoDiscordClientException from optimized_rpc at dev.firstdark.rpc.exceptions.NoDiscordClientException.<init>:12

MOD VERSIONS (mods named in the findings)
  embeddium 0.3.32-beta.113-dirty+mc1.20.1;  oculus 1.8.6;  xaeroworldmap 1.46.0;  
  entity_model_features 3.3.11;  gnetum 2.5.1+1.20.1-forge;  asyncparticles 20.1.4.4;  
  collections_of_optimizations 5.6;  fastchunkgen 0.38;  lithoform 2.0.0-alpha13;  ;  

RECORDING
  stack sampler every 5 ms: 14,095 render-thread, 1,309 server-thread samples (server only while ticking)
  JFR on (cpu, allocation, locks, file io, class loading, safepoints, exceptions): 8,557 CPU samples, 14,472 allocation samples
  method names: SRG ids translated to Mojang names; mixin handlers are charged to the mod whose mixin injected them
  'own' = share of a mod's time spent in its own classes; the rest is vanilla or library code it called
