amd_uprof 0.1.0

Safe wrappers for amd_uprof-sys
Documentation
# amd_uprof

Safe wrapper for AMD uProf

Uses [amd_uprof-sys](https://github.com/vdrn/amd_uprof-sys) for FFI. If you have issues with build, refer to [amd_uprof-sys readme](https://github.com/vdrn/amd_uprof-sys)

## Usage

### Prerequisites
- If using CLI, add `-start-paused` option.
- if using GUI, make sure `Enable start paused` option is enabled.
- To enable the API, you'll need to call `amd_prof::enable(true)` once at the beggining of the program.

### Basic Usage
``` rust

amd_uprof::enable(true);  // once at the start

// ...

// start profiling
amd_uprof::resume_profiler();

// do some work

// stop profiling 
amd_uprof::pause_profiler();
```

Since `resume_profiler` and `pause_profiler` have very large overhead, there are also async versions that do not block: 
- `resume_profiler_async`
- `pause_profiler_async`

Event gathering will start/stop at some unspecified time after they are called.


### Task Scopes

To use Tasks (unfortunately UProf GUI does not display them, so they are only useful with CLI):

``` rust
amd_uprof::enable(true);  // once at the start

// ...

// start profiling
amd_uprof::resume_profiler();

{
 let _task_scope =  amd_prof::scope("domain", "name");
 
 // do some work

 // scope will be automaticall closed
}

```

Line number and file name (`nightly` is enabled) will be automatically assigned to the beggining of the task, but not the end. If you need that, you'll have to manually drop the scope using `finish()` method:

``` rust
amd_uprof::enable(true);  // once at the start

// ...

// start profiling
amd_uprof::resume_profiler();

let task_scope = amd_prof::scope("domain", "name");

// do some work

task_scope.finish();
```


## Features
- `nightly`: Needed for associating file name with the task.