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);
        }
    }
Beispiel #3
0
        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();
        }