Development and Debugging Tools for Windows Phone 7 Series Cullen Waters Software Development Engineer II Advanced Technology Group, Microsoft Corporation.

Download Report

Transcript Development and Debugging Tools for Windows Phone 7 Series Cullen Waters Software Development Engineer II Advanced Technology Group, Microsoft Corporation.

Development and Debugging Tools for
Windows Phone 7 Series
Cullen Waters
Software Development Engineer II
Advanced Technology Group, Microsoft Corporation
Who Should Stay for This Talk?
Game Developers
working on other
mobile platforms
interested in branching out
to mobile
Folks who have not used
XNA professionally
Who Might Want to Leave?
Game Developers
who have shipped an
XNA XBLA title
People who are
uninterested in Windows
Phone 7 Series
development
Overview
Toolset
Silverlight 3 (plus)
XNA
Visual Studio 2010
Visual Phone Developer Express
Single, integrated download
Silverlight 3 (Plus)
Silverlight 3 with some
device-specific additions
Accelerometer
Touch
Location
XNA Framework 4.0
A new version of XNA
Full 3D support on the device
APIs similar to those
we know and love from
Windows and Xbox 360
Visual Studio 2010
 Full debugging support on the device
 Lots of new goodness in
Visual Studio 2010
Visual Studio & .NET





Productive development with .NET & C#
High performance IDE
Intellisense makes coding faster
Integrated build/deploy/debug experience
MSBuild engine for build automation
Visual Phone Developer Express
New Express SKU for Visual Studio 2010
Supports Silverlight and XNA development
Full device debugging support
Windows Phone 7 Series Emulator
Supports full application development
Reduces costs of test and development
Emulator, not a simulator
XNA Project System
 C# is the only language for XNA development for
Windows Phone 7 Series
 All code files are organized into .csproj project files
 .csproj is an MSBuild-based project system
XNA Content Pipeline
Simplify Your Content Usage!
Provides build-time modification of source content
Customizable, extensible
Runs only on Windows
Full .NET support
p/invoke
Managed C++, VB.Net, IronPython,
and so on
Content Pipeline Project Changes
 Makes for easier parallel development of art and code
 Content pipeline is extremely extensible,
so integration with existing tools is possible
 Content projects no longer appear as
child projects of the game project
.NET Tools
There are lots of great tools out there,
both free and commercial
These are my “must-have” tools
.NET Reflector
Explore, browse, and
analyze .NET assemblies
Understand relationships
between classes
Verify code obfuscation
ildasm
MSIL disassembler
Useful for seeing what code is being generated at build time
Visual Studio Team System Profiler
Also known as F1 profiler
Performs code performance profiling,
using sampling or instrumentation
Sampling vs. Instrumentation
 Sampling takes samples at regular intervals
 Generally better for initial investigation
 Instrumentation inserts probes into the code
 Use for more targeted profiling
CLR Profiler
Profiles managed memory usage
Invaluable for debugging game memory management
Pix for Windows
Graphics debugger
GPU performance investigation
Semi-transparent view
into DirectX 3D
Shader debugging
Ships with DX SDK
FxCop
Static code analysis tool
Integrated into Visual Studio
Analyzes compiled code
Not all rules will likely
apply to games
Code Obfuscation
 All un-obfuscated code is open source
 Dotfuscator Community Edition
bundled with Visual Studio
Demo
Obfuscation
Wait a Minute!
 Most of those tools are Windows tools
 I’m developing a game for Windows Phone 7 Series!
 How do those tools apply to development for
Windows Phone 7 Series?
Debugging NetCF Titles
Profile on
Windows
Develop on
Windows
Deploy to
Device
Cross-Platform Solution
Getting Info from the Device
 Roll your own on-device tools
 Visual information, from the game
 Check out Ito’s debugging toolset
Timing on the Phone
 No high-precision timer
 ≈ 1 ms resolution
 How do you get accurate timings from that?
 Capture multiple frames of data and calculate an average
 Multiple 0 or 1 values, averaged over a bunch of frames,
gives you a pretty accurate result
 FPS component from Shawn Hargreaves
Case Study
Heightmap Collision Sample
Build and Run on Windows
 Frame rate is good
 Iteration time is wonderful
 Life is good, ship it™!
But Then We Run on a NetCF
Device




Frame rate is poor
Gameplay is affected by unpredictable stalls
What’s going on?
Most likely cause: Garbage collections
Sidebar: NetCF Garbage Collector
 Mark and Sweep
 Not generational
 Halts all managed threads on the device
We’re Allocating During
Gameplay?!?
 Let’s figure out where
 Run the game on PC, under CLR Profiler
Demo
CLR Profiler
Kill the Collector!
 Remove allocations during gameplay
 Pre-allocate
 Be careful of hidden allocators
 How could this be easier?
 Run it again on the device,
and we get constant frame rate
Constant FPS != Good FPS
 Constant + Low == still bad
 Fire up the VSTS profiler, and figure out
where we’re spending our time
Demo
VSTS Profiler
Sidebar: NetCF Jitter
 Non-optimizing jitter
 Primarily designed for application development
 Apps bound by I/O, not by CPU/GPU
 High latency toleration
 No inlining
There’s the Culprit!
 Make changes to fix the code
 Run on the device again
 FPS is good, ship it™!
Summary
Wrapping It Up
 Use Windows to your advantage
 Keep your game running on the target platform
 Design with the target platform in mind
Additional Resources






http://MicrosoftGamefest.com
http://blogs.msdn.com/ShawnHar
http://creators.xna.com
http://www.red-gate.com
CLR Profiler download page
Ito's debugging tools
Questions?