func()

in perf-tools/framework/app_analyzer.go [76:105]


func (aa *AppAnalyzer) GetTasksDistribution(condType TaskConditionType) [][]*TaskStatus {
	beginTime := aa.appInfo.AppStatus.CreateTime
	endTime := aa.appInfo.AppStatus.RunningTime
	maxSeconds := int(math.Floor(endTime.Sub(beginTime).Seconds()) + 1)
	distribution := make([][]*TaskStatus, maxSeconds+1)
	for _, status := range aa.appInfo.TasksStatus {
		if condTransitionTime := status.GetTransitionTime(condType); condTransitionTime != nil {
			seconds := int(math.Floor(condTransitionTime.Sub(beginTime).Seconds()) + 1)
			if seconds < 0 {
				utils.Logger.Warn("skip invalid task", zap.Any("beginTime", beginTime),
					zap.Any("conditionType", condType), zap.Any("taskStatus", status))
				continue
			}
			distribution[seconds] = append(distribution[seconds], status)
		} else {
			utils.Logger.Warn("skip invalid task", zap.Any("conditionType", condType),
				zap.Any("taskStatus", status))
			continue
		}
	}
	// drop zero tail
	lastNonZeroIndex := -1
	for i := maxSeconds; i >= 0; i-- {
		if len(distribution[i]) != 0 {
			lastNonZeroIndex = i
			break
		}
	}
	return distribution[:lastNonZeroIndex+1]
}