# GetMetrics

> Returns the current AsyncReadManager metrics.

## Definition

* **Type:** Method
* **Namespace:** [Unity.IO.LowLevel.Unsafe](/engine/6000.5/script-reference/unity/io/lowlevel/unsafe.md)
* **Assembly:** UnityEngine.CoreModule

## GetMetrics(AsyncReadManagerMetricsFilters, Flags)

Returns the current [AsyncReadManager](/engine/6000.5/script-reference/unity/io/lowlevel/unsafe/asyncreadmanager.md) metrics.

```csharp
public static AsyncReadManagerRequestMetric[] GetMetrics(AsyncReadManagerMetricsFilters filters, AsyncReadManagerMetrics.Flags flags)
```

### Parameters

**** (\[AsyncReadManagerMetricsFilters]\(/engine/6000.5/script-reference/unity/io/lowlevel/unsafe/asyncreadmanagermetricsfilters)): (Optional) The [filters](/engine/6000.5/script-reference/unity/io/lowlevel/unsafe/asyncreadmanagermetricsfilters.md) to control the data returned.**** (\[Flags]\(/engine/6000.5/script-reference/unity/io/lowlevel/unsafe/asyncreadmanagermetrics/flags)): Flags to control the behaviour, including clearing the underlying completed metrics after reading.

### Returns

| Type                                                                                                                           | Description                                                                                                                                                                                                                                                                                                                         |
| ------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [AsyncReadManagerRequestMetric\[\]](/engine/6000.5/script-reference/unity/io/lowlevel/unsafe/asyncreadmanagerrequestmetric.md) | Array of [read request metrics](/engine/6000.5/script-reference/unity/io/lowlevel/unsafe/asyncreadmanagerrequestmetric.md) currently stored in the AsyncReadManager, which can be filtered by passing [AsyncReadManagerMetricsFilters](/engine/6000.5/script-reference/unity/io/lowlevel/unsafe/asyncreadmanagermetricsfilters.md). |

### Remarks

This function can filter the metrics collected by passing [AsyncReadManagerMetricsFilters](/engine/6000.5/script-reference/unity/io/lowlevel/unsafe/asyncreadmanagermetricsfilters.md). See [AsyncReadManagerMetricsFilters](/engine/6000.5/script-reference/unity/io/lowlevel/unsafe/asyncreadmanagermetricsfilters/ctor.md) for information about filter creation.

### Examples

```csharp
using Unity.IO.LowLevel.Unsafe;
using UnityEngine;
public class AsyncReadManagerMetricsSample : MonoBehaviour
{
#if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER
    void Start()
    {
        AsyncReadManagerMetrics.StartCollectingMetrics();
    }

    void Update()
    {
        AsyncReadManagerRequestMetric[] thisFrameMetrics = AsyncReadManagerMetrics.GetMetrics(AsyncReadManagerMetrics.Flags.ClearOnRead);
        foreach (AsyncReadManagerRequestMetric metric in thisFrameMetrics)
        {
            if (metric.State == ProcessingState.Completed)
            {
                double bandwidthMBPerSecond = metric.SizeBytes / (metric.TotalTimeMicroseconds - metric.TimeInQueueMicroseconds);
                Debug.LogFormat($"Asset name:\"{metric.AssetName}\", bandwidth = {bandwidthMBPerSecond}MB/s");
            }
        }
    }

#endif
}
```

## GetMetrics(List\<AsyncReadManagerRequestMetric>, AsyncReadManagerMetricsFilters, Flags)

Writes the current [AsyncReadManager](/engine/6000.5/script-reference/unity/io/lowlevel/unsafe/asyncreadmanager.md) metrics into the given List.

```csharp
public static void GetMetrics(List<AsyncReadManagerRequestMetric> outMetrics, AsyncReadManagerMetricsFilters filters, AsyncReadManagerMetrics.Flags flags)
```

### Parameters

**** (\[List\<AsyncReadManagerRequestMetric>]\(https\://learn.microsoft.com/dotnet/api/system.collections.generic.list-1)): The pre-allocated list to store the metrics in.**** (\[AsyncReadManagerMetricsFilters]\(/engine/6000.5/script-reference/unity/io/lowlevel/unsafe/asyncreadmanagermetricsfilters)): (Optional) The [filters](/engine/6000.5/script-reference/unity/io/lowlevel/unsafe/asyncreadmanagermetricsfilters.md) to control the data returned.**** (\[Flags]\(/engine/6000.5/script-reference/unity/io/lowlevel/unsafe/asyncreadmanagermetrics/flags)): Flags to control the behaviour, including clearing the underlying completed metrics after reading.

### Remarks

This function can filter the metrics collected by passing [AsyncReadManagerMetricsFilters](/engine/6000.5/script-reference/unity/io/lowlevel/unsafe/asyncreadmanagermetricsfilters.md). See [AsyncReadManagerMetricsFilters](/engine/6000.5/script-reference/unity/io/lowlevel/unsafe/asyncreadmanagermetricsfilters/ctor.md) for information about filter creation.

### Examples

```csharp
using Unity.IO.LowLevel.Unsafe;
using System.Collections.Generic;
using UnityEngine;
public class AsyncReadManagerMetricsSample : MonoBehaviour
{
#if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER
    void Start()
    {
        AsyncReadManagerMetrics.StartCollectingMetrics();
    }

    void Update()
    {
        List<AsyncReadManagerRequestMetric> thisFrameMetrics = new List<AsyncReadManagerRequestMetric>();
        AsyncReadManagerMetrics.GetMetrics(thisFrameMetrics, AsyncReadManagerMetrics.Flags.ClearOnRead);
        foreach (AsyncReadManagerRequestMetric metric in thisFrameMetrics)
        {
            if (metric.State == ProcessingState.Completed)
            {
                double bandwidthMBPerSecond = metric.SizeBytes / (metric.TotalTimeMicroseconds - metric.TimeInQueueMicroseconds);
                Debug.LogFormat($"Asset name:\"{metric.AssetName}\", bandwidth = {bandwidthMBPerSecond}MB/s");
            }
        }
    }

#endif
}
```

## GetMetrics(Flags)

Returns the current [AsyncReadManager](/engine/6000.5/script-reference/unity/io/lowlevel/unsafe/asyncreadmanager.md) metrics.

```csharp
public static AsyncReadManagerRequestMetric[] GetMetrics(AsyncReadManagerMetrics.Flags flags)
```

### Parameters

**** (\[Flags]\(/engine/6000.5/script-reference/unity/io/lowlevel/unsafe/asyncreadmanagermetrics/flags)): Flags to control the behaviour, including clearing the underlying completed metrics after reading.

### Returns

| Type                                                                                                                           | Description                                                                                                                                                                                                                                                                                                                         |
| ------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [AsyncReadManagerRequestMetric\[\]](/engine/6000.5/script-reference/unity/io/lowlevel/unsafe/asyncreadmanagerrequestmetric.md) | Array of [read request metrics](/engine/6000.5/script-reference/unity/io/lowlevel/unsafe/asyncreadmanagerrequestmetric.md) currently stored in the AsyncReadManager, which can be filtered by passing [AsyncReadManagerMetricsFilters](/engine/6000.5/script-reference/unity/io/lowlevel/unsafe/asyncreadmanagermetricsfilters.md). |

### Remarks

This function can filter the metrics collected by passing [AsyncReadManagerMetricsFilters](/engine/6000.5/script-reference/unity/io/lowlevel/unsafe/asyncreadmanagermetricsfilters.md). See [AsyncReadManagerMetricsFilters](/engine/6000.5/script-reference/unity/io/lowlevel/unsafe/asyncreadmanagermetricsfilters/ctor.md) for information about filter creation.

### Examples

```csharp
using Unity.IO.LowLevel.Unsafe;
using UnityEngine;
public class AsyncReadManagerMetricsSample : MonoBehaviour
{
#if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER
    void Start()
    {
        AsyncReadManagerMetrics.StartCollectingMetrics();
    }

    void Update()
    {
        AsyncReadManagerRequestMetric[] thisFrameMetrics = AsyncReadManagerMetrics.GetMetrics(AsyncReadManagerMetrics.Flags.ClearOnRead);
        foreach (AsyncReadManagerRequestMetric metric in thisFrameMetrics)
        {
            if (metric.State == ProcessingState.Completed)
            {
                double bandwidthMBPerSecond = metric.SizeBytes / (metric.TotalTimeMicroseconds - metric.TimeInQueueMicroseconds);
                Debug.LogFormat($"Asset name:\"{metric.AssetName}\", bandwidth = {bandwidthMBPerSecond}MB/s");
            }
        }
    }

#endif
}
```

## GetMetrics(List\<AsyncReadManagerRequestMetric>, Flags)

Writes the current [AsyncReadManager](/engine/6000.5/script-reference/unity/io/lowlevel/unsafe/asyncreadmanager.md) metrics into the given List.

```csharp
public static void GetMetrics(List<AsyncReadManagerRequestMetric> outMetrics, AsyncReadManagerMetrics.Flags flags)
```

### Parameters

**** (\[List\<AsyncReadManagerRequestMetric>]\(https\://learn.microsoft.com/dotnet/api/system.collections.generic.list-1)): The pre-allocated list to store the metrics in.**** (\[Flags]\(/engine/6000.5/script-reference/unity/io/lowlevel/unsafe/asyncreadmanagermetrics/flags)): Flags to control the behaviour, including clearing the underlying completed metrics after reading.

### Remarks

This function can filter the metrics collected by passing [AsyncReadManagerMetricsFilters](/engine/6000.5/script-reference/unity/io/lowlevel/unsafe/asyncreadmanagermetricsfilters.md). See [AsyncReadManagerMetricsFilters](/engine/6000.5/script-reference/unity/io/lowlevel/unsafe/asyncreadmanagermetricsfilters/ctor.md) for information about filter creation.

### Examples

```csharp
using Unity.IO.LowLevel.Unsafe;
using System.Collections.Generic;
using UnityEngine;
public class AsyncReadManagerMetricsSample : MonoBehaviour
{
#if ENABLE_PROFILER && UNITY_2020_2_OR_NEWER
    void Start()
    {
        AsyncReadManagerMetrics.StartCollectingMetrics();
    }

    void Update()
    {
        List<AsyncReadManagerRequestMetric> thisFrameMetrics = new List<AsyncReadManagerRequestMetric>();
        AsyncReadManagerMetrics.GetMetrics(thisFrameMetrics, AsyncReadManagerMetrics.Flags.ClearOnRead);
        foreach (AsyncReadManagerRequestMetric metric in thisFrameMetrics)
        {
            if (metric.State == ProcessingState.Completed)
            {
                double bandwidthMBPerSecond = metric.SizeBytes / (metric.TotalTimeMicroseconds - metric.TimeInQueueMicroseconds);
                Debug.LogFormat($"Asset name:\"{metric.AssetName}\", bandwidth = {bandwidthMBPerSecond}MB/s");
            }
        }
    }

#endif
}
```
