0
0
mirror of https://github.com/yse/easy_profiler.git synced 2024-12-27 08:41:02 +08:00
easy_profiler/README.md

121 lines
3.5 KiB
Markdown
Raw Normal View History

2016-08-21 12:45:30 +03:00
# easy_profiler [![License](https://img.shields.io/badge/license-GPL3-blue.svg)](https://github.com/yse/easy_profiler/blob/develop/COPYING)[![Build Status](https://travis-ci.org/yse/easy_profiler.svg?branch=develop)](https://travis-ci.org/yse/easy_profiler)
2016-08-31 22:47:17 +03:00
1. [About](#about)
2. [Build](#build)
- [Linux](#linux)
- [Windows](#windows)
3. [Usage](#usage)
# About
2016-09-15 00:33:47 +03:00
Lightweight profiler library for c++
2016-06-29 06:47:50 +04:00
2016-09-15 00:08:53 +03:00
You can profile any function in you code. Furthermore this library provide measuring time of any block of code.
2016-09-15 00:33:47 +03:00
For example, information for 12 millions of blocks is using less than 300Mb of memory.
Working profiler slows your application execution for only 1-2%.
Disabled profiler will not affect your application execution in any way. You can leave it in your Release build
and enable it in run-time at any moment during application launch to see what is happening at the moment.
Also the library can capture system's context switch events between threads. Context switch information includes
duration, target thread id, thread owner process id, thread owner process name.
2016-09-15 00:08:53 +03:00
You can see the results of measuring in simple GUI application which provides full statistics and renders beautiful time-line.
2016-06-29 06:47:50 +04:00
2016-08-31 22:47:17 +03:00
# Build
## Prerequisites
For core:
* compiler with c++11 support
* cmake 3.0 or later
For GUI:
* Qt 5.3.0 or later
2016-09-15 00:08:53 +03:00
## Linux
2016-08-31 22:47:17 +03:00
```bash
$ mkdir build
$ cd build
$ cmake ..
$ make
```
2016-09-15 00:08:53 +03:00
## Windows
2016-08-31 22:47:17 +03:00
2016-09-15 00:08:53 +03:00
If you are using QtCreator IDE you can just open `CMakeLists.txt` file in root directory.
If you are using Visual Studio you can generate solution by cmake generator command.
2016-08-31 22:47:17 +03:00
2016-09-15 00:08:53 +03:00
### Way 1
2016-09-15 00:33:47 +03:00
Specify path to cmake scripts in Qt5 dir (usually in lib/cmake subdir) and execute cmake generator command,
for example:
2016-08-31 22:47:17 +03:00
```batch
$ mkdir build
$ cd build
2016-09-15 00:08:53 +03:00
$ cmake -DCMAKE_PREFIX_PATH="C:\Qt\5.3\msvc2013_64\lib\cmake" .. -G "Visual Studio 12 2013 Win64"
```
### Way 2
Create system variable "Qt5Widgets_DIR" and set it's value to "[path-to-Qt5-binaries]\lib\cmake\Qt5Widgets".
For example, "C:\Qt\5.3\msvc2013_64\lib\cmake\Qt5Widgets".
And then run cmake generator as follows:
```batch
$ mkdir build
$ cd build
$ cmake .. -G "Visual Studio 12 2013 Win64"
2016-08-31 22:47:17 +03:00
```
# Usage
2016-09-15 00:08:53 +03:00
First of all you can specify path to include directory which contains `include/profiler` directory.
For linking with easy_profiler you can specify path to library.
2016-08-31 22:47:17 +03:00
2016-06-29 06:47:50 +04:00
Example of usage.
2016-09-15 00:08:53 +03:00
This code snippet will generate block with function name and Magenta color:
2016-06-29 06:47:50 +04:00
```cpp
2016-08-31 22:47:17 +03:00
#include <profiler/profiler.h>
2016-09-15 00:08:53 +03:00
void frame() {
2016-09-15 00:33:47 +03:00
EASY_FUNCTION(profiler::colors::Magenta); // Magenta block with name "frame"
2016-09-07 22:12:25 +03:00
prepareRender();
calculatePhysics();
2016-06-29 06:47:50 +04:00
}
```
2016-09-15 00:08:53 +03:00
To profile any block you may do this as following.
You can specify these blocks also with Google material design colors or just set name of the block
2016-09-15 00:33:47 +03:00
(in this case it will have default color which is `Amber100`):
2016-06-29 06:47:50 +04:00
```cpp
2016-08-31 22:47:17 +03:00
#include <profiler/profiler.h>
2016-09-15 00:08:53 +03:00
void frame() {
// some code
2016-09-15 00:33:47 +03:00
EASY_BLOCK("Calculating sum"); // Block with default color
2016-09-15 00:08:53 +03:00
int sum = 0;
for (int i = 0; i < 10; ++i)
2016-09-07 22:12:25 +03:00
sum += i;
EASY_END_BLOCK;
2016-09-15 00:33:47 +03:00
EASY_BLOCK("Calculating multiplication", profiler::colors::Blue500); // Blue block
2016-09-15 00:08:53 +03:00
int mul = 1;
for (int i = 1; i < 11; ++i)
2016-09-07 22:12:25 +03:00
mul *= i;
EASY_END_BLOCK;
2016-06-29 06:47:50 +04:00
}
```
2016-09-15 00:08:53 +03:00
2016-09-15 00:33:47 +03:00
You can also use your own colors. easy_profiler is using standard 32-bit ARGB color format.
2016-09-15 00:08:53 +03:00
Example:
```cpp
#include <profiler/profiler.h>
void foo() {
2016-09-15 00:33:47 +03:00
EASY_FUNCTION(0xfff080aa); // Function block with custom color
2016-09-15 00:08:53 +03:00
// some code
}
```
2016-08-31 22:47:17 +03:00
[![Analytics](https://ga-beacon.appspot.com/UA-82899176-1/easy_profiler/readme)](https://github.com/yse/easy_profiler)