All Projects → MetanoKid → msbuild-flame-graph

MetanoKid / msbuild-flame-graph

Licence: GPL-3.0 license
Turns MSBuild executions into flame graphs

Programming Languages

C#
18002 projects

Projects that are alternatives of or similar to msbuild-flame-graph

Xamarin.Legacy.Sdk
Starting from a .NET 6 project, adds the ability to target legacy Xamarin target frameworks such as monoandroid11.0 or xamarin.ios10. *Not fully supported*
Stars: ✭ 18 (-51.35%)
Mutual labels:  msbuild
teamcity-msbuild-logger
MSBuild logger for TeamCity
Stars: ✭ 16 (-56.76%)
Mutual labels:  msbuild
UnityAssemblies
Simple, forward-compatible references to ANY Unity DLL on ANY platform.
Stars: ✭ 65 (+75.68%)
Mutual labels:  msbuild
MetaWear-SDK-Cpp
MetaWear C++ SDK - Platform Agnostic - Main lib - No Bluetooth
Stars: ✭ 42 (+13.51%)
Mutual labels:  msbuild
Narvalo.NET
Applied functional patterns for C#. Money and Currency types. MVP framework. (Obsolete)
Stars: ✭ 16 (-56.76%)
Mutual labels:  msbuild
Openrct2
An open source re-implementation of RollerCoaster Tycoon 2 🎢
Stars: ✭ 10,115 (+27237.84%)
Mutual labels:  msbuild
PowerBuild
Integrate MSBuild into PowerShell pipeline.
Stars: ✭ 24 (-35.14%)
Mutual labels:  msbuild
CodeContracts.MSBuild
Standalone MSBuild integration of CodeContracts (by Microsoft Research)
Stars: ✭ 16 (-56.76%)
Mutual labels:  msbuild
ILMerge-MSBuild-Task
Adds ILMerge to Visual Studio 2013/2017 or automated builds. This Task is intended to work right out of the box however, it supports a configuration file where you can control every ILMerge property including the list of assemblies to be merged.
Stars: ✭ 52 (+40.54%)
Mutual labels:  msbuild
Pharmacist
Builds observables from events.
Stars: ✭ 221 (+497.3%)
Mutual labels:  msbuild
Teronis.DotNet
This project contains utilities, extensions and new functionalities of all types.
Stars: ✭ 24 (-35.14%)
Mutual labels:  msbuild
setup-msbuild
A GitHub Action to facilitate configuring MSBuild in the workflow PATH for building .NET Framework applications.
Stars: ✭ 170 (+359.46%)
Mutual labels:  msbuild
windows-container
Docker files for various Windows Container build
Stars: ✭ 30 (-18.92%)
Mutual labels:  msbuild
Uno.CodeGen
A set of source generators for equality, immutability, ...
Stars: ✭ 85 (+129.73%)
Mutual labels:  msbuild
Examples
An complete examples and related support for various popular projects, and more.
Stars: ✭ 22 (-40.54%)
Mutual labels:  msbuild
gradle-msbuild-plugin
Gradle plugin for msbuild execution, supports C# project files for now
Stars: ✭ 101 (+172.97%)
Mutual labels:  msbuild
Msbuild
The Microsoft Build Engine (MSBuild) is the build platform for .NET and Visual Studio.
Stars: ✭ 4,643 (+12448.65%)
Mutual labels:  msbuild
MvsSln
🧩 Customizable VisualStudio .sln parser, Complex support of the projects (.vcxproj, .csproj., …), Pluginable lightweight r/w handlers at runtime, and more …
Stars: ✭ 86 (+132.43%)
Mutual labels:  msbuild
vsSolutionBuildEvent
🎛 Event-Catcher with variety of advanced Actions to service projects, libraries, build processes, runtime environment of the Visual Studio, MSBuild Tools, and …
Stars: ✭ 66 (+78.38%)
Mutual labels:  msbuild
sitecore-azure-devops
Sitecore 8.2u5 DevOps Scripts
Stars: ✭ 15 (-59.46%)
Mutual labels:  msbuild

MSBuild Flame Graph

Explore MSBuild executions to find why your C++ builds are slow.

This is the flame graph for a default Visual Studio 2015 C++ project:

Flame Graph: default Visual Studio 2015

This graph represents a build from this repository.

Flame Graph: Bruce Dawson's parallel projects

I wrote about the steps I took to build the initial version of the tool in this post series.

UI screenshot

Features

  • Uses MSBuild 15: builds VS2015 and VS2017 C++ projects.
  • Processes /Bt+ and /time+ MSVC flags: Flame Graph: /Bt+ and /time+
  • Processes /d1reportTime MSVC flag (exclusive to VS2017 projects): Flame Graph: /d1reportTime
  • Builds projects into an Events.json file, converts it into Trace.json in a separate step.
  • Can theoretically build other MSBuild-based projects, but is only tested on C++ ones.

Getting started

  • Install Visual Studio 2017+ Community Edition.
  • Install .NET Framework v4.6.2 SDK.
  • Clone repository.
  • Open solution, build and run.

Codebase overview

Should you want to explore what's in the repository, these are the main parts:

Projects

  • Builder: contains the UI (built in WPF) to interact with the tool.
  • MSBuildWrapper: defines MSBuild loggers, interacts with MSBuild API and converts MSBuild events to custom abstractions.
  • BuildTimeline: represents timelines and everything it needs, from events to entries.
  • TimelineSerializer: includes a way to convert a Timeline to a Google Chrome's trace. New trace formats can be added.
  • Model: represents data to be used by other projects.

Main flow

  • As part of MSBuildWrapper/Compilation/Compilation.cs, when a build starts every MSBuild event is displayed in the UI and gets stored in memory.
  • When the build finishes, most events get converted into a custom format (some events and properties are discarded).
  • When the build is finished, Builder/ViewModel/Commands.cs stores every custom event in an Events.json file.
  • A Trace.json file can be exported from an Events.json file via Builder/ViewModel/Commands.cs. This is useful to build different timelines (even to different formats) without having to repeat the build.

License

This project is released under GNU GPLv3 license.

I started this project thanks to the information I gathered from the community, so I wanted to give something back. You are encouraged to alter it in any way you want, but please continue making it public so the community can benefit from it.

Acknowledgements

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].