Asset Bundle Instrumentation

AssetBundle instrumentation provides insight into how long your app takes to load its assets, such as files.

The instrumentation starts a span from an active transaction that's bound to the scope of the following calls:

  • load and loadString - The SDK sets the span operation to file.read.
  • loadStructuredData - The SDK sets the span operation to serialize.

Before starting, ensure:

  1. The Sentry Flutter SDK is initialized. Learn more here.
  2. Performance Monitoring is set up. Learn more here.

Wrap the runApp method with a DefaultAssetBundle and SentryAssetBundle.

Copied
import 'package:flutter/widgets.dart';
import 'package:sentry_flutter/sentry_flutter.dart';

Future<void> main() async {
  await SentryFlutter.init(
    (options) => options.dsn = 'https://examplePublicKey@o0.ingest.sentry.io/0',
      appRunner: () => runApp(
        DefaultAssetBundle(
          bundle: SentryAssetBundle(),
          child: MyApp(),
        ),
    ),
  );
}

Copied
final transaction = Sentry.startTransaction(
  'asset-bundle-transaction',
  'load',
  bindToScope: true,
);

final text = await DefaultAssetBundle.of(context).loadString('assets/lorem-ipsum.txt');

await transaction.finish(status: const SpanStatus.ok());

To view the recorded transaction, log into sentry.io and open your project. Clicking Performance will open a page with transactions, where you can select the just recorded transaction with the name asset-bundle-transaction.

The loadStructuredData is an opt-out feature. The following example shows how to disable it:

Copied
import 'package:sentry_flutter/sentry_flutter.dart';

SentryAssetBundle(enableStructuredDataTracing: false)
Help improve this content
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").