public override string ToString() { if (!string.IsNullOrEmpty(CachedInfo)) { return(CachedInfo); } else { if (this == null) { return(null); } try { CachedInfo = string.Format(Strings.AvatarInfo.name, Name) + "\n" + string.Format(Strings.AvatarInfo.line) + "\n" + string.Format(Strings.AvatarInfo.gameObjects, GameObjects, GameObjects_Total) + "\n" + string.Format(Strings.AvatarInfo.bones, Bones, perfStats.GetPerformanceRatingForCategory(AvatarPerformanceCategory.BoneCount)) + "\n\n" + string.Format(Strings.AvatarInfo.skinnedMeshRenderers, SkinnedMeshRenderers, SkinnedMeshRenderers_Total, perfStats.GetPerformanceRatingForCategory(AvatarPerformanceCategory.SkinnedMeshCount)) + "\n" + string.Format(Strings.AvatarInfo.meshRenderers, MeshRenderers, MeshRenderers_Total, perfStats.GetPerformanceRatingForCategory(AvatarPerformanceCategory.MeshCount)) + "\n" + string.Format(Strings.AvatarInfo.polygons, Polygons, Polygons_Total, perfStats.GetPerformanceRatingForCategory(AvatarPerformanceCategory.PolyCount)) + "\n\n" + string.Format(Strings.AvatarInfo.usedMaterialSlots, MaterialSlots, MaterialSlots_Total, perfStats.GetPerformanceRatingForCategory(AvatarPerformanceCategory.MaterialCount)) + "\n" + string.Format(Strings.AvatarInfo.uniqueMaterials, UniqueMaterials, UniqueMaterials_Total) + "\n" + string.Format(Strings.AvatarInfo.shaders, ShaderCount) + "\n\n" + string.Format(Strings.AvatarInfo.dynamicBoneTransforms, DynamicBoneTransforms, DynamicBoneTransforms_Total, perfStats.GetPerformanceRatingForCategory(AvatarPerformanceCategory.DynamicBoneSimulatedBoneCount)) + "\n" + string.Format(Strings.AvatarInfo.dynamicBoneColliders, DynamicBoneColliders, DynamicBoneColliders_Total, perfStats.GetPerformanceRatingForCategory(AvatarPerformanceCategory.DynamicBoneColliderCount)) + "\n" + string.Format(Strings.AvatarInfo.dynamicBoneColliderTransforms, DynamicBoneColliderTransforms, DynamicBoneColliderTransforms_Total, perfStats.GetPerformanceRatingForCategory(AvatarPerformanceCategory.DynamicBoneCollisionCheckCount)) + "\n\n" + string.Format(Strings.AvatarInfo.particleSystems, ParticleSystems, ParticleSystems_Total, perfStats.GetPerformanceRatingForCategory(AvatarPerformanceCategory.ParticleSystemCount)) + "\n" + string.Format(Strings.AvatarInfo.maxParticles, MaxParticles, MaxParticles_Total, perfStats.GetPerformanceRatingForCategory(AvatarPerformanceCategory.ParticleTotalCount)) + "\n\n" + string.Format(Strings.AvatarInfo.ikFollowers, IKFollowers, IKFollowers_Total) + "\n" + Strings.AvatarInfo.line + "\n" + string.Format(Strings.AvatarInfo.overallPerformance, perfStats.GetPerformanceRatingForCategory(AvatarPerformanceCategory.Overall)); } catch { CachedInfo = string.Format(Strings.AvatarInfo.name, Name) + "\n" + string.Format(Strings.AvatarInfo.line) + "\n" + string.Format(Strings.AvatarInfo.gameObjects, GameObjects, GameObjects_Total) + "\n" + string.Format(Strings.AvatarInfo.bones, Bones, "?") + "\n\n" + string.Format(Strings.AvatarInfo.skinnedMeshRenderers, SkinnedMeshRenderers, SkinnedMeshRenderers_Total, "?") + "\n" + string.Format(Strings.AvatarInfo.meshRenderers, MeshRenderers, MeshRenderers_Total, "?") + "\n" + string.Format(Strings.AvatarInfo.polygons, Polygons, Polygons_Total, "?") + "\n\n" + string.Format(Strings.AvatarInfo.usedMaterialSlots, MaterialSlots, MaterialSlots_Total, "?") + "\n" + string.Format(Strings.AvatarInfo.uniqueMaterials, UniqueMaterials, UniqueMaterials_Total) + "\n" + string.Format(Strings.AvatarInfo.shaders, ShaderCount) + "\n\n" + string.Format(Strings.AvatarInfo.dynamicBoneTransforms, DynamicBoneTransforms, DynamicBoneTransforms_Total, "?") + "\n" + string.Format(Strings.AvatarInfo.dynamicBoneColliders, DynamicBoneColliders, DynamicBoneColliders_Total, "?") + "\n" + string.Format(Strings.AvatarInfo.dynamicBoneColliderTransforms, DynamicBoneColliderTransforms, DynamicBoneColliderTransforms_Total, "?") + "\n\n" + string.Format(Strings.AvatarInfo.particleSystems, ParticleSystems, ParticleSystems_Total, "?") + "\n" + string.Format(Strings.AvatarInfo.maxParticles, MaxParticles, MaxParticles_Total, "?") + "\n" + Strings.AvatarInfo.line + "\n" + string.Format(Strings.AvatarInfo.overallPerformance, "?"); } return(CachedInfo); } }
void OnGUIPerformanceInfo(Object avatar, AvatarPerformanceStats perfStats, AvatarPerformanceCategory perfCategory) { string text; PerformanceInfoDisplayLevel displayLevel; PerformanceRating rating = perfStats.GetPerformanceRatingForCategory(perfCategory); perfStats.GetSDKPerformanceInfoText(out text, out displayLevel, perfCategory, rating); if (displayLevel == PerformanceInfoDisplayLevel.None || string.IsNullOrEmpty(text)) { return; } if (displayLevel == PerformanceInfoDisplayLevel.Verbose && showAvatarPerformanceDetails) { OnGUIStat(avatar, text, rating); } if (displayLevel == PerformanceInfoDisplayLevel.Info) { OnGUIStat(avatar, text, rating); } if (displayLevel == PerformanceInfoDisplayLevel.Warning) { OnGUIStat(avatar, text, rating); } if (displayLevel == PerformanceInfoDisplayLevel.Error) { OnGUIStat(avatar, text, rating); OnGUIError(avatar, text); } }
public static IEnumerator ApplyPerformanceFiltersEnumerator(GameObject avatarObject, AvatarPerformanceStats perfStats, PerformanceRating minPerfRating, FilterBlockCallback onBlock) { // Performance Filtering is disabled. if (minPerfRating == PerformanceRating.None) { yield break; } PerformanceFilterSet performanceFilterSet; if (VRC.ValidationHelpers.IsStandalonePlatform()) { performanceFilterSet = Resources.Load <PerformanceFilterSet>("Validation/Performance/FilterSets/PerformanceFilterSet_Windows"); } else { performanceFilterSet = Resources.Load <PerformanceFilterSet>("Validation/Performance/FilterSets/PerformanceFilterSet_Quest"); } bool avatarBlocked = false; if (performanceFilterSet != null) { yield return(performanceFilterSet.ApplyPerformanceFilters( avatarObject, perfStats, minPerfRating, ShouldIgnoreComponentInternal, () => { avatarBlocked = true; } )); } if (!avatarBlocked) { yield break; } VRC.Core.Logger.LogFormat( "Avatar hidden due to low performance rating: [{0}] {1} - minimum setting: {2}", perfStats.avatarName, perfStats.GetPerformanceRatingForCategory(AvatarPerformanceCategory.Overall), minPerfRating ); onBlock(); }
public static IEnumerator ApplyPerformanceFiltersEnumerator(GameObject avatarObject, AvatarPerformanceStats perfStats, PerformanceRating minPerfRating, FilterBlockCallback onBlock) { // Performance Filtering is disabled. if (minPerfRating == PerformanceRating.None) { yield break; } PerformanceFilterSet performanceFilterSet = GetPerformanceFilterSet(); if (performanceFilterSet == null) { yield break; } bool avatarBlocked = false; yield return(performanceFilterSet.ApplyPerformanceFilters( avatarObject, perfStats, minPerfRating, ShouldIgnoreComponentInternal, () => { avatarBlocked = true; } )); if (!avatarBlocked) { yield break; } VRC.Core.Logger.LogFormat( "Avatar hidden due to low performance rating: [{0}] {1} - minimum setting: {2}", perfStats.avatarName, perfStats.GetPerformanceRatingForCategory(AvatarPerformanceCategory.Overall), minPerfRating ); onBlock(); }