C++ Build Insights中Inclusive Duration有效值获取及构建占比分析问询
关于vcperf分析C++构建瓶颈时的时间占比问题
我用vcperf分析C++项目的构建过程以查找瓶颈,但数值展示方式不够直观。比如总构建Duration为3289.218秒(14线程构建,约54分钟),但文件报告中<chrono>的Included Path以3577.424秒的Inclusive Duration (s) Sum位居第一——这显然是多线程的时间总和,对实际分析毫无帮助。我需要明确它对总构建时间的实际影响,也就是要拿到它占实际总构建时间的百分比,这意味着要么把总Duration也按多线程耗时总和的方式计算,要么把Inclusive Duration换算为实际总耗时的占比。
请问:是否可以直接在Windows Performance Analyzer中获取这类有意义的数值?还是必须通过Build Insights SDK进行自定义计算?
我研究了Build Insights SDK的TopHeaders示例,代码如下:
AnalysisControl OnStopActivity(const EventStack& eventStack) override { switch (eventStack.Back().EventId()) { case EVENT_ID_FRONT_END_FILE: MatchEventStackInMemberFunction(eventStack, this, &TopHeaders::OnStopFile); break; case EVENT_ID_FRONT_END_PASS: // Keep track of the overall front-end aggregated duration. // We use this value when determining how significant is // a header's total parsing time when compared to the total // front-end time. frontEndAggregatedDuration_ += eventStack.Back().Duration(); break; default: break; } return AnalysisControl::CONTINUE; }
这个示例几乎能满足部分需求:它可以算出头文件解析时间占前端编译(front-end pass)的实际百分比(比如<chrono>占7%)。但问题在于,我无法得知前端编译本身占总构建时间的比例(比如30%还是50%),因此没法判断这些头文件解析耗时的实际影响程度。我认为可以通过添加其他EVENT_ID_*类型的事件来修改这段代码,从而获取总构建时间的相关数据。
内容的提问来源于stack exchange,提问作者Sergey Kolesnik
相关产品推荐
相关产品推荐

