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);
        }
    }
Exemple #2
0
        public PerformanceRating GetPerformanceRatingForCategory(AvatarPerformanceCategory perfCategory)
        {
            if (_performanceRatingCache[(int)perfCategory] == PerformanceRating.None)
            {
                _performanceRatingCache[(int)perfCategory] = CalculatePerformanceRatingForCategory(perfCategory);
            }

            return(_performanceRatingCache[(int)perfCategory]);
        }
Exemple #3
0
        private PerformanceRating CalculatePerformanceRatingForCategory(AvatarPerformanceCategory perfCategory)
        {
            switch (perfCategory)
            {
            case AvatarPerformanceCategory.Overall:
            {
                PerformanceRating maxRating = PerformanceRating.None;

                foreach (AvatarPerformanceCategory category in Enum.GetValues(typeof(AvatarPerformanceCategory)))
                {
                    if (category == AvatarPerformanceCategory.None ||
                        category == AvatarPerformanceCategory.Overall ||
                        category == AvatarPerformanceCategory.AvatarPerformanceCategoryCount)
                    {
                        continue;
                    }

                    PerformanceRating rating = GetPerformanceRatingForCategory(category);
                    if (rating > maxRating)
                    {
                        maxRating = rating;
                    }
                }

                return(maxRating);
            }

            case AvatarPerformanceCategory.PolyCount:
            {
                if (!polyCount.HasValue)
                {
                    return(PerformanceRating.None);
                }

                return(CalculatePerformanceRating((x, y) => x.polyCount.GetValueOrDefault() - y.polyCount));
            }

            case AvatarPerformanceCategory.AABB:
            {
                if (!aabb.HasValue)
                {
                    return(PerformanceRating.None);
                }

                return(CalculatePerformanceRating(
                           (x, y) =>
                           ApproxLessOrEqual(y.aabb.extents.x, 0.0f) ||  // -1 extents means "no AABB limit"
                           (
                               ApproxLessOrEqual(x.aabb.GetValueOrDefault().extents.x, y.aabb.extents.x) &&
                               ApproxLessOrEqual(x.aabb.GetValueOrDefault().extents.y, y.aabb.extents.y) &&
                               ApproxLessOrEqual(x.aabb.GetValueOrDefault().extents.z, y.aabb.extents.z))
                                ? -1
                                : 1
                           ));
            }

            case AvatarPerformanceCategory.SkinnedMeshCount:
            {
                if (!skinnedMeshCount.HasValue)
                {
                    return(PerformanceRating.None);
                }

                return(CalculatePerformanceRating((x, y) => x.skinnedMeshCount.GetValueOrDefault() - y.skinnedMeshCount));
            }

            case AvatarPerformanceCategory.MeshCount:
            {
                if (!meshCount.HasValue)
                {
                    return(PerformanceRating.None);
                }

                return(CalculatePerformanceRating((x, y) => x.meshCount.GetValueOrDefault() - y.meshCount));
            }

            case AvatarPerformanceCategory.MaterialCount:
            {
                if (!materialCount.HasValue)
                {
                    return(PerformanceRating.None);
                }

                return(CalculatePerformanceRating((x, y) => x.materialCount.GetValueOrDefault() - y.materialCount));
            }

            case AvatarPerformanceCategory.AnimatorCount:
            {
                if (!animatorCount.HasValue)
                {
                    return(PerformanceRating.None);
                }

                return(CalculatePerformanceRating((x, y) => x.animatorCount.GetValueOrDefault() - y.animatorCount));
            }

            case AvatarPerformanceCategory.BoneCount:
            {
                if (!boneCount.HasValue)
                {
                    return(PerformanceRating.None);
                }

                return(CalculatePerformanceRating((x, y) => x.boneCount.GetValueOrDefault() - y.boneCount));
            }

            case AvatarPerformanceCategory.LightCount:
            {
                if (!lightCount.HasValue)
                {
                    return(PerformanceRating.None);
                }

                return(CalculatePerformanceRating((x, y) => x.lightCount.GetValueOrDefault() - y.lightCount));
            }

            case AvatarPerformanceCategory.ParticleSystemCount:
            {
                if (!particleSystemCount.HasValue)
                {
                    return(PerformanceRating.None);
                }

                return(CalculatePerformanceRating((x, y) => x.particleSystemCount.GetValueOrDefault() - y.particleSystemCount));
            }

            case AvatarPerformanceCategory.ParticleTotalCount:
            {
                if (!particleTotalCount.HasValue)
                {
                    return(PerformanceRating.None);
                }

                return(CalculatePerformanceRating((x, y) => x.particleTotalCount.GetValueOrDefault() - y.particleTotalCount));
            }

            case AvatarPerformanceCategory.ParticleMaxMeshPolyCount:
            {
                if (!particleMaxMeshPolyCount.HasValue)
                {
                    return(PerformanceRating.None);
                }

                return(CalculatePerformanceRating((x, y) => x.particleMaxMeshPolyCount.GetValueOrDefault() - y.particleMaxMeshPolyCount));
            }

            case AvatarPerformanceCategory.ParticleTrailsEnabled:
            {
                if (!particleTrailsEnabled.HasValue)
                {
                    return(PerformanceRating.None);
                }

                return(CalculatePerformanceRating(
                           (x, y) =>
                    {
                        if (x.particleTrailsEnabled == y.particleTrailsEnabled)
                        {
                            return 0;
                        }

                        return x.particleTrailsEnabled.GetValueOrDefault() ? 1 : -1;
                    }));
            }

            case AvatarPerformanceCategory.ParticleCollisionEnabled:
            {
                if (!particleCollisionEnabled.HasValue)
                {
                    return(PerformanceRating.None);
                }

                return(CalculatePerformanceRating(
                           (x, y) =>
                    {
                        if (x.particleCollisionEnabled == y.particleCollisionEnabled)
                        {
                            return 0;
                        }

                        return x.particleCollisionEnabled.GetValueOrDefault() ? 1 : -1;
                    }));
            }

            case AvatarPerformanceCategory.TrailRendererCount:
            {
                if (!trailRendererCount.HasValue)
                {
                    return(PerformanceRating.None);
                }

                return(CalculatePerformanceRating((x, y) => x.trailRendererCount.GetValueOrDefault() - y.trailRendererCount));
            }

            case AvatarPerformanceCategory.LineRendererCount:
            {
                if (!lineRendererCount.HasValue)
                {
                    return(PerformanceRating.None);
                }

                return(CalculatePerformanceRating((x, y) => x.lineRendererCount.GetValueOrDefault() - y.lineRendererCount));
            }

            case AvatarPerformanceCategory.DynamicBoneComponentCount:
            {
                if (!dynamicBoneComponentCount.HasValue)
                {
                    return(PerformanceRating.None);
                }

                return(CalculatePerformanceRating((x, y) => x.dynamicBoneComponentCount.GetValueOrDefault() - y.dynamicBoneComponentCount));
            }

            case AvatarPerformanceCategory.DynamicBoneSimulatedBoneCount:
            {
                if (!dynamicBoneSimulatedBoneCount.HasValue)
                {
                    return(PerformanceRating.None);
                }

                return(CalculatePerformanceRating((x, y) => x.dynamicBoneSimulatedBoneCount.GetValueOrDefault() - y.dynamicBoneSimulatedBoneCount));
            }

            case AvatarPerformanceCategory.DynamicBoneColliderCount:
            {
                if (!dynamicBoneColliderCount.HasValue)
                {
                    return(PerformanceRating.None);
                }

                return(CalculatePerformanceRating((x, y) => x.dynamicBoneColliderCount.GetValueOrDefault() - y.dynamicBoneColliderCount));
            }

            case AvatarPerformanceCategory.DynamicBoneCollisionCheckCount:
            {
                if (!dynamicBoneCollisionCheckCount.HasValue)
                {
                    return(PerformanceRating.None);
                }

                return(CalculatePerformanceRating((x, y) => x.dynamicBoneCollisionCheckCount.GetValueOrDefault() - y.dynamicBoneCollisionCheckCount));
            }

            case AvatarPerformanceCategory.ClothCount:
            {
                if (!clothCount.HasValue)
                {
                    return(PerformanceRating.None);
                }
                return(CalculatePerformanceRating((x, y) => x.clothCount.GetValueOrDefault() - y.clothCount));
            }

            case AvatarPerformanceCategory.ClothMaxVertices:
            {
                if (!clothMaxVertices.HasValue)
                {
                    return(PerformanceRating.None);
                }
                return(CalculatePerformanceRating((x, y) => x.clothMaxVertices.GetValueOrDefault() - y.clothMaxVertices));
            }

            case AvatarPerformanceCategory.PhysicsColliderCount:
            {
                if (!physicsColliderCount.HasValue)
                {
                    return(PerformanceRating.None);
                }

                return(CalculatePerformanceRating((x, y) => x.physicsColliderCount.GetValueOrDefault() - y.physicsColliderCount));
            }

            case AvatarPerformanceCategory.PhysicsRigidbodyCount:
            {
                if (!physicsRigidbodyCount.HasValue)
                {
                    return(PerformanceRating.None);
                }

                return(CalculatePerformanceRating((x, y) => x.physicsRigidbodyCount.GetValueOrDefault() - y.physicsRigidbodyCount));
            }

            case AvatarPerformanceCategory.AudioSourceCount:
            {
                if (!audioSourceCount.HasValue)
                {
                    return(PerformanceRating.None);
                }

                return(CalculatePerformanceRating((x, y) => x.audioSourceCount.GetValueOrDefault() - y.audioSourceCount));
            }

            case AvatarPerformanceCategory.DownloadSize:
            {
                if (!downloadSize.HasValue)
                {
                    return(PerformanceRating.None);
                }

                return(PerformanceRating.Excellent);
            }

            default:
            {
                return(PerformanceRating.None);
            }
            }
        }
Exemple #4
0
 public static string GetPerformanceCategoryDisplayName(AvatarPerformanceCategory category)
 {
     return(_performanceCategoryDisplayNames[category]);
 }