KCachegrind中的所有可视化都以当前选定的函数为中心,这里是Symbol::byte_at()
。通常,所选函数的百分比数字与总成本(有史以来的运行时间/周期)相关。但是,如果启用模式/工具按钮“相对于父级”,则调用图表中的百分比数字会“缩小”以显示所选功能的100%,以便更容易查看其他功能花费的比例,相对于所选的一个。
我们假设成本(即在KCachegrind中选择的事件类型)是时间(以CPU周期或毫秒为单位 - 与百分比无关)。这使得它可能更易于理解。
呼叫图表中的百分比总是显示在某个给定函数花费而选择的功能(Symbol::byte_at
)是活跃,即时间。在程序运行期间可以在调用堆栈中找到这两个函数的时间。这适用于被叫方向(向下Symbol::byte_at()
)和来电方向(向上Symbol::byte_at()
)。
向下,这更容易理解:虽然Symbol::byte_at()
处于活动状态,但该处理器实际上正在执行代码的时间的百分比为24.14%,这些代码从Symbol::base()
开始执行。另一次(100% - 24.14%),Symbol::byte_at()
本身的代码正在运行。
在所选功能的上方,它可能有点棘手。 例如,SignatureIterator::iterate_parameters()
的9.25%表示在Symbol::byte_at()
处于活动状态的时间内,其间的9.25%是间接从SignatureIterator::iterate_parameters()
调用的时间。同样,Symbol::byte_at()
被称为从SignatureIterator::parse_type()
直接运行的时间的11.27%。也就是说,在所选函数的上方,函数的直接父项中的百分比总是与该函数的确切百分比相加,除非由于低于可见性阈值(请参见上下文菜单)而使功能从可视化中断, 。
函数A调用函数B之间的距离是A-> C-> T-> B之间的子函数的数量,在这种情况下A和B之间的距离是2. – Bionix1441