public Stats(CompositionObject root) { var objectGraph = Graph.FromCompositionObject(root, includeVertices: false); CompositionPathCount = objectGraph.CompositionPathNodes.Count(); CanvasGeometryCount = objectGraph.CanvasGeometryNodes.Count(); foreach (var n in objectGraph.CompositionObjectNodes) { CompositionObjectCount++; switch (n.Object.Type) { case CompositionObjectType.AnimationController: AnimationControllerCount++; break; case CompositionObjectType.ColorKeyFrameAnimation: ColorKeyFrameAnimationCount++; break; case CompositionObjectType.CompositionColorBrush: ColorBrushCount++; break; case CompositionObjectType.CompositionColorGradientStop: ColorGradientStopCount++; break; case CompositionObjectType.CompositionContainerShape: ContainerShapeCount++; break; case CompositionObjectType.CompositionEffectBrush: EffectBrushCount++; break; case CompositionObjectType.CompositionEllipseGeometry: EllipseGeometryCount++; break; case CompositionObjectType.CompositionGeometricClip: GeometricClipCount++; break; case CompositionObjectType.CompositionLinearGradientBrush: LinearGradientBrushCount++; break; case CompositionObjectType.CompositionPathGeometry: PathGeometryCount++; break; case CompositionObjectType.CompositionPropertySet: { var propertyCount = ((CompositionPropertySet)n.Object).PropertyNames.Count(); if (propertyCount > 0) { PropertySetCount++; PropertySetPropertyCount += propertyCount; } } break; case CompositionObjectType.CompositionRadialGradientBrush: RadialGradientBrushCount++; break; case CompositionObjectType.CompositionRectangleGeometry: RectangleGeometryCount++; break; case CompositionObjectType.CompositionRoundedRectangleGeometry: RoundedRectangleGeometryCount++; break; case CompositionObjectType.CompositionSpriteShape: SpriteShapeCount++; break; case CompositionObjectType.CompositionSurfaceBrush: SurfaceBrushCount++; break; case CompositionObjectType.CompositionViewBox: ViewBoxCount++; break; case CompositionObjectType.CompositionVisualSurface: VisualSurfaceCount++; break; case CompositionObjectType.ContainerVisual: ContainerVisualCount++; break; case CompositionObjectType.CubicBezierEasingFunction: CubicBezierEasingFunctionCount++; break; case CompositionObjectType.ExpressionAnimation: ExpressionAnimationCount++; break; case CompositionObjectType.InsetClip: InsetClipCount++; break; case CompositionObjectType.LinearEasingFunction: LinearEasingFunctionCount++; break; case CompositionObjectType.PathKeyFrameAnimation: PathKeyFrameAnimationCount++; break; case CompositionObjectType.ScalarKeyFrameAnimation: ScalarKeyFrameAnimationCount++; break; case CompositionObjectType.ShapeVisual: ShapeVisualCount++; break; case CompositionObjectType.SpriteVisual: SpriteVisualCount++; break; case CompositionObjectType.StepEasingFunction: StepEasingFunctionCount++; break; case CompositionObjectType.Vector2KeyFrameAnimation: Vector2KeyFrameAnimationCount++; break; case CompositionObjectType.Vector3KeyFrameAnimation: Vector3KeyFrameAnimationCount++; break; case CompositionObjectType.Vector4KeyFrameAnimation: Vector4KeyFrameAnimationCount++; break; default: throw new InvalidOperationException(); } } }