Carpet TIS Addition

Carpet TIS Addition

530k Downloads

为MicroTiming中StackTrace的ToolTip内容进行缩减 / 提供便于查看的颜色区分

Closed this issue · 1 comments

commented

Motivation

现在的microTiming中在$符号上悬停鼠标时,tooltip展示的stacktrace行数过多,难以容纳在屏幕中;由于折叠而难以区分行,几乎无法在游戏内轻松地阅读。因此,希望对tooltip中stacktrace的可读性进行优化。

Description

以一个stacktrace为例:

反混淆后的堆栈跟踪 (Yarn 1.21.1+build.3)
net.minecraft.world.tick.WorldTickScheduler.handler$blf000$carpet-tis-addition$endScheduleTileTickEvent(WorldTickScheduler.java:1570)
net.minecraft.world.tick.WorldTickScheduler.scheduleTick(WorldTickScheduler.java:89)
net.minecraft.world.WorldAccess.scheduleBlockTick(WorldAccess.java:54)
net.minecraft.block.DispenserBlock.neighborUpdate(DispenserBlock.java:127)
net.minecraft.block.AbstractBlock$AbstractBlockState.neighborUpdate(AbstractBlock.java:1113)
net.minecraft.world.block.NeighborUpdater.tryNeighborUpdate(NeighborUpdater.java:42)
net.minecraft.world.block.ChainRestrictedNeighborUpdater$SixWayEntry.update(ChainRestrictedNeighborUpdater.java:132)
net.minecraft.world.block.ChainRestrictedNeighborUpdater.runQueuedUpdates(ChainRestrictedNeighborUpdater.java:78)
net.minecraft.world.block.ChainRestrictedNeighborUpdater.enqueue(ChainRestrictedNeighborUpdater.java:65)
net.minecraft.world.block.ChainRestrictedNeighborUpdater.updateNeighbors(ChainRestrictedNeighborUpdater.java:47)
net.minecraft.server.world.ServerWorld.updateNeighborsAlways(ServerWorld.java:1044)
net.minecraft.server.world.ServerWorld.updateNeighbors(ServerWorld.java:1474)
net.minecraft.world.World.redirect$zeb000$carpet$updateNeighborsMaybe(World.java:2585)
net.minecraft.world.World.setBlockState(World.java:250)
net.minecraft.world.World.setBlockState(World.java:217)
net.minecraft.block.entity.CrafterBlockEntity.tickCrafting(CrafterBlockEntity.java:255)
net.minecraft.world.chunk.WorldChunk$DirectBlockEntityTickInvoker.tick(WorldChunk.java:691)
net.minecraft.world.chunk.WorldChunk$WrappedBlockEntityTickInvoker.tick(WorldChunk.java:745)
net.minecraft.world.World.tickBlockEntities(World.java:488)
net.minecraft.server.world.ServerWorld.tick(ServerWorld.java:413)
net.minecraft.server.MinecraftServer.mixinextras$bridge$method_18765$329(MinecraftServer.java)
net.minecraft.server.MinecraftServer.wrapOperation$chm000$carpet-tis-addition$yeetUpdateSuppressionCrash_implOnTickWorlds(MinecraftServer.java:7159)
net.minecraft.server.MinecraftServer.method_3813$mixinextras$wrapped$332(MinecraftServer.java:1021)
net.minecraft.server.MinecraftServer.mixinextras$bridge$method_3813$mixinextras$wrapped$332$333(MinecraftServer.java)
net.minecraft.server.MinecraftServer.wrapMethod$gmj000$yetanothercarpetaddition$preventServerCrash(MinecraftServer.java:13626)
net.minecraft.server.MinecraftServer.tickWorlds(MinecraftServer.java)
net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:912)
net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:114)
net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:697)
net.minecraft.server.MinecraftServer.method_29739(MinecraftServer.java:281)
java.lang.Thread.run(Thread.java:1583)

此stacktrace 在tooltip中展示时过于难以阅读;容易超出屏幕边界。

望提出以下改进建议:

  1. 简化类名(省略包名)
    例:net.minecraft.world.tick.WorldTickScheduler.scheduleTick
    → WorldTickScheduler.scheduleTick

  2. 省略部分几乎无关堆栈帧(如 java.lang.Thread.run)等;

3.考虑默认只展示前 10~20 行(*一般情况下可能最相关的堆栈帧)

  1. 基于第3点, 在最tooltip开头或者最末尾,添加类似 copy-to-clipboard 提示信息来告知原来点这个$可以复制完整stacktrase(((
  2. 用颜色区分元素(类名 / 方法名 / 高亮mixin注入的内容)

更具开头stacktrace的预想中的期望的可读性优化(列):

WorldTickScheduler.endScheduleTileTickEvent   (line 1570) 
at WorldTickScheduler.scheduleTick               (line 89)
at WorldAccess.scheduleBlockTick                 (line 54)
at DispenserBlock.neighborUpdate                 (line 127)
at AbstractBlockState.neighborUpdate          (line 1113)
at NeighborUpdater.tryNeighborUpdate             (line 42)
at SixWayEntry.update                             (line 132)
at NeighborUpdater.runQueuedUpdates              (line 78)
at NeighborUpdater.enqueue                        (line 65)
at NeighborUpdater.updateNeighbors               (line 47)
at ServerWorld.updateNeighborsAlways             (line 1044)
at ServerWorld.updateNeighbors                   (line 1474)
at World.updateNeighborsMaybe                    (line 2585)
at World.setBlockState                           (line 250)
at World.setBlockState                           (line 217)
at CrafterBlockEntity.tickCrafting               (line 255)
… more (click $ to copy full stacktrace)

Other information

No response

commented

目前做了全局的 64 行限制,暂未区分复制的内容和展示的内容,可考虑后续做区分并对展示的文本做调整

不考虑“省略部分几乎无关堆栈帧”。“无关”这个定语并无通用标准,难以界定,且存在隐去重要信息的风险