Browse Source

Added FPS counter to test app.

pull/16/head
Steven Kirk 12 years ago
parent
commit
9afc768449
  1. 11
      Cairo/Perspex.Cairo/Renderer.cs
  2. 6
      Perspex.Controls.UnitTests/ControlTests.cs
  3. 6
      Perspex.Controls.UnitTests/TestRoot.cs
  4. 20
      Perspex.Controls/Window.cs
  5. 8
      Perspex.SceneGraph.UnitTests/TestRoot.cs
  6. 5
      Perspex.SceneGraph/Platform/IRenderer.cs
  7. 4
      Perspex.SceneGraph/Rendering/IRenderRoot.cs
  8. 39
      TestApplication/Program.cs
  9. 11
      Windows/Perspex.Direct2D1/Renderer.cs

11
Cairo/Perspex.Cairo/Renderer.cs

@ -28,6 +28,15 @@ namespace Perspex.Cairo
{
}
/// <summary>
/// Gets the number of times <see cref="Render"/> has been called.
/// </summary>
public int RenderCount
{
get;
private set;
}
/// <summary>
/// Renders the specified visual.
/// </summary>
@ -39,6 +48,8 @@ namespace Perspex.Cairo
{
this.Render(visual, context);
}
++this.RenderCount;
}
/// <summary>

6
Perspex.Controls.UnitTests/ControlTests.cs

@ -12,6 +12,7 @@ namespace Perspex.Controls.UnitTests
using Moq;
using Perspex.Controls;
using Perspex.Layout;
using Perspex.Platform;
using Perspex.Rendering;
using Perspex.Styling;
using Splat;
@ -82,6 +83,11 @@ namespace Perspex.Controls.UnitTests
get { throw new System.NotImplementedException(); }
}
public IRenderer Renderer
{
get { throw new NotImplementedException(); }
}
public IRenderManager RenderManager
{
get { throw new NotImplementedException(); }

6
Perspex.Controls.UnitTests/TestRoot.cs

@ -9,6 +9,7 @@ namespace Perspex.Controls.UnitTests
using System;
using Moq;
using Perspex.Layout;
using Perspex.Platform;
using Perspex.Rendering;
internal class TestRoot : Decorator, ILayoutRoot, IRenderRoot
@ -23,6 +24,11 @@ namespace Perspex.Controls.UnitTests
get { return new Mock<ILayoutManager>().Object; }
}
public IRenderer Renderer
{
get { throw new NotImplementedException(); }
}
public IRenderManager RenderManager
{
get { throw new NotImplementedException(); }

20
Perspex.Controls/Window.cs

@ -30,6 +30,8 @@ namespace Perspex.Controls
private Dispatcher dispatcher;
private IRenderManager renderManager;
private IRenderer renderer;
private IInputManager inputManager;
@ -47,7 +49,7 @@ namespace Perspex.Controls
this.impl = Locator.Current.GetService<IWindowImpl>();
this.inputManager = Locator.Current.GetService<IInputManager>();
this.LayoutManager = Locator.Current.GetService<ILayoutManager>();
this.RenderManager = Locator.Current.GetService<IRenderManager>();
this.renderManager = Locator.Current.GetService<IRenderManager>();
if (renderInterface == null)
{
@ -73,7 +75,7 @@ namespace Perspex.Controls
"Could not create layout manager: maybe Application.RegisterServices() wasn't called?");
}
if (this.RenderManager == null)
if (this.renderManager == null)
{
throw new InvalidOperationException(
"Could not create render manager: maybe Application.RegisterServices() wasn't called?");
@ -92,7 +94,7 @@ namespace Perspex.Controls
this.LayoutManager.Root = this;
this.LayoutManager.LayoutNeeded.Subscribe(_ => this.HandleLayoutNeeded());
this.RenderManager.RenderNeeded.Subscribe(_ => this.HandleRenderNeeded());
this.renderManager.RenderNeeded.Subscribe(_ => this.HandleRenderNeeded());
this.GetObservable(TitleProperty).Subscribe(s => this.impl.SetTitle(s));
@ -122,10 +124,14 @@ namespace Perspex.Controls
private set;
}
public IRenderManager RenderManager
IRenderer IRenderRoot.Renderer
{
get;
private set;
get { return this.renderer; }
}
IRenderManager IRenderRoot.RenderManager
{
get { return this.renderManager; }
}
public void Show()
@ -172,7 +178,7 @@ namespace Perspex.Controls
private void HandlePaint(Rect rect, IPlatformHandle handle)
{
this.renderer.Render(this, handle);
this.RenderManager.RenderFinished();
this.renderManager.RenderFinished();
}
private void HandleResized(Size size)

8
Perspex.SceneGraph.UnitTests/TestRoot.cs

@ -6,12 +6,16 @@
namespace Perspex.SceneGraph.UnitTests
{
using System;
using System.Collections.Generic;
using System.Linq;
using Perspex.Platform;
using Perspex.Rendering;
public class TestRoot : TestVisual, IRenderRoot
{
public IRenderer Renderer
{
get { throw new NotImplementedException(); }
}
public IRenderManager RenderManager
{
get { throw new NotImplementedException(); }

5
Perspex.SceneGraph/Platform/IRenderer.cs

@ -10,6 +10,11 @@ namespace Perspex.Platform
public interface IRenderer
{
/// <summary>
/// Gets the number of times <see cref="Render"/> has been called.
/// </summary>
int RenderCount { get; }
/// <summary>
/// Renders the specified visual.
/// </summary>

4
Perspex.SceneGraph/Rendering/IRenderRoot.cs

@ -6,8 +6,12 @@
namespace Perspex.Rendering
{
using Perspex.Platform;
public interface IRenderRoot
{
IRenderer Renderer { get; }
IRenderManager RenderManager { get; }
}
}

39
TestApplication/Program.cs

@ -9,6 +9,7 @@ using Perspex.Diagnostics;
using Perspex.Layout;
using Perspex.Media;
using Perspex.Media.Imaging;
using Perspex.Rendering;
using Perspex.Styling;
using Perspex.Threading;
#if PERSPEX_GTK
@ -115,11 +116,18 @@ namespace TestApplication
},
};
TextBlock fps;
Window window = new Window
{
Title = "Perspex Test Application",
Content = new Grid
{
ColumnDefinitions = new ColumnDefinitions
{
new ColumnDefinition(1, GridUnitType.Star),
new ColumnDefinition(1, GridUnitType.Star),
},
RowDefinitions = new RowDefinitions
{
new RowDefinition(1, GridUnitType.Star),
@ -138,21 +146,38 @@ namespace TestApplication
SlidersTab(),
LayoutTab(),
AnimationsTab(),
}
},
[Grid.ColumnSpanProperty] = 2,
},
(fps = new TextBlock
{
HorizontalAlignment = HorizontalAlignment.Left,
Margin = new Thickness(2),
[Grid.RowProperty] = 1,
}),
new TextBlock
{
Text = "Press F12 for Dev Tools",
HorizontalAlignment = HorizontalAlignment.Right,
Margin = new Thickness(2),
[Grid.ColumnProperty] = 1,
[Grid.RowProperty] = 1,
}
},
}
},
};
DevTools.Attach(window);
var renderer = ((IRenderRoot)window).Renderer;
var last = renderer.RenderCount;
DispatcherTimer.Run(() =>
{
fps.Text = "FPS: " + (renderer.RenderCount - last);
last = renderer.RenderCount;
return true;
}, TimeSpan.FromSeconds(1));
window.Show();
Application.Current.Run(window);
}
@ -508,11 +533,11 @@ namespace TestApplication
};
Animate.Property(
(PerspexObject)rect1.RenderTransform,
RotateTransform.AngleProperty,
0.0,
360.0,
new LinearDoubleEasing(),
(PerspexObject)rect1.RenderTransform,
RotateTransform.AngleProperty,
0.0,
360.0,
new LinearDoubleEasing(),
TimeSpan.FromSeconds(4),
double.PositiveInfinity);

11
Windows/Perspex.Direct2D1/Renderer.cs

@ -81,6 +81,15 @@ namespace Perspex.Direct2D1
private set;
}
/// <summary>
/// Gets the number of times <see cref="Render"/> has been called.
/// </summary>
public int RenderCount
{
get;
private set;
}
/// <summary>
/// Renders the specified visual.
/// </summary>
@ -92,6 +101,8 @@ namespace Perspex.Direct2D1
{
this.Render(visual, context);
}
++this.RenderCount;
}
/// <summary>

Loading…
Cancel
Save