> For the complete documentation index, see [llms.txt](https://flutteruniversity.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://flutteruniversity.gitbook.io/docs/learn-flutter/professional/performance-profiling.md).

# Performance Profiling

Performance profiling is crucial for ensuring that your Flutter app runs smoothly across a variety of devices and use cases. Flutter provides several tools and libraries to help developers identify and resolve performance issues.

## 1. **Flutter DevTools**:

Flutter DevTools is a powerful suite of performance and debugging tools for Flutter and Dart applications. Here are some of its functionalities explained:

#### a. **Flutter Inspector**:

* It provides a visual representation of the widget tree, which is crucial for understanding how widgets are rendered.
* It can help debug layout issues and view padding, alignment, and other properties of widgets.

#### b. **Timeline View**:

* It gives a frame-by-frame breakdown of the work done by the Flutter framework and your application.
* It helps to identify expensive computations and rendering work that could lead to frames being missed, causing jank.

#### c. **Memory View**:

* It displays information about how your application is using memory and helps identify memory leaks.
* You can take snapshots to compare memory usage over time and track down potential issues.

#### d. **Performance View**:

* It allows you to record and profile a session to analyze in detail the performance of your app.
* You can analyze CPU and GPU work, looking for long frame durations, and other performance issues.

### **Setup**:

1. First, ensure you have the latest version of Flutter and Dart.
2. Launch your app in debug mode.
3. Open a terminal and run `flutter devtools`, then follow the instructions to open DevTools in a browser.

***

## 2. **Using the `profile` mode**:

* `profile` mode provides deeper insights into the performance by enabling additional logging and profiling.
* To launch your app in `profile` mode, use the command `flutter run --profile`.
* This mode strikes a balance between development and release mode, allowing you to see performance metrics without the full optimizations of release mode.

***

## 3. **The `flutter test --profile` command**:

* This command allows you to run your test suite in a mode that enables additional profiling, which can be useful for performance testing.
* By using `flutter test --profile`, you can identify performance issues within your tests, which might indicate problems in your app's code.

***

## 4. **The `--trace-skia` flag**:

* Skia is the graphics engine used by Flutter, and `--trace-skia` allows you to see into the performance of the rendering engine.
* This can be invaluable for identifying rendering bottlenecks.
* Running `flutter run --trace-skia` will provide detailed performance data about the Skia graphics library’s performance.

***

## 5. **Custom Performance Profiling**:

* Creating custom performance metrics is often necessary for targeted performance analysis.
* Utilize the Dart language's extensive libraries and APIs to create custom metrics.
* For instance, using the `Stopwatch` class to time certain operations, or creating custom logging to track performance metrics over time.

```dart
final stopwatch = Stopwatch()..start();
// some code
print('elapsed ${stopwatch.elapsed}');
```

***

## **Further Reading**:

Flutter's extensive [documentation](https://flutter.dev/docs/testing/best-practices#performance-profiling) provides a deep dive into profiling and debugging, along with the best practices for testing.

* [Flutter Performance Profiling](https://flutter.dev/docs/testing/best-practices#performance-profiling)
* [Debugging Flutter Apps](https://flutter.dev/docs/testing/debugging)

***

## Assignments 📝

* [ ] Launch DevTools and explore the various views to understand how your app is performing.
* [ ] Run your app in `profile` mode and identify any areas where the performance could be improved.
* [ ] Utilize custom performance profiling to time how long certain operations take and identify any potential bottlenecks.

{% hint style="info" %}
Through a combination of built-in tools, command line flags, and custom metrics, you can gain a comprehensive understanding of your app's performance, helping to create a smoother user experience and identify potential issues early in the development process.
{% endhint %}
