devtools_profiler_core library

Pure-Dart profiling backend for DevTools-inspired automation flows.

This library is the programmatic entrypoint behind the profiler CLI and MCP server. It can launch or attach to VM-service targets, capture whole-session and region-scoped CPU and memory data, persist session artifacts, and build higher-level summaries such as call trees, method tables, hotspot explanations, comparisons, and trend analyses.

Most users should start with devtools_profiler_cli. Import this library directly when you are building another automation layer that needs the same capture and analysis primitives without terminal or MCP transport code.

import 'package:devtools_profiler_core/devtools_profiler_core.dart';

Future<void> main() async {
  final runner = ProfileRunner();
  final result = await runner.run(
    const ProfileRunRequest(
      command: ['dart', 'run', 'bin/main.dart'],
      workingDirectory: '/path/to/app',
    ),
  );

  print(result.sessionId);
  print(result.overallProfile?.sampleCount);
}

The most common starting points are ProfileRunner, ProfileRunRequest, ProfileAttachRequest, ProfileRunResult, and ProfileRegionResult.

Classes

AllocationAttribution
A growing memory class paired with profile-wide CPU activity.
ClassMemoryDelta
Per-class difference between two memory snapshots.
DebugDumpResult
Results from a Flutter debug dump call.
DebugDumpService
Calls Flutter debug dump service extensions for diagnostics.
DiscoveredApp
A running Dart or Flutter application discovered on the local machine.
FrameAnalysisResult
Results from a frame/jank analysis session.
FrameAnalyzer
Captures frame timing data from a running Dart VM service.
LogEntry
A single log entry captured from a VM service stream.
LogStreamCapture
Captures log and output streams from a running Dart VM service.
MemoryClassEntry
A single class allocation entry from a memory snapshot.
MemorySnapshot
A memory snapshot captured from a running VM service.
MemorySnapshotCapture
Captures memory allocation snapshots from a running VM service.
MemorySnapshotDelta
Result of comparing two MemorySnapshots.
ProfileArtifacts
Utilities for reading and summarizing profiler artifacts.
ProfileArtifactStore
Writes session and region artifacts for a profiling run.
ProfileAttachRequest
A request to profile an already-running Dart or Flutter VM service.
ProfileCallTree
A hierarchical CPU profile tree built from VM CPU samples.
ProfileCallTreeNode
A single node in a hierarchical CPU profile tree.
ProfileCpuSample
A VM CPU sample with profiler-recorded isolate provenance.
ProfileFrame
Metadata for a resolved CPU profile frame.
ProfileFrameColumn
One source in a cross-run top-frame comparison.
ProfileFrameDelta
A delta for a merged frame between two prepared profile summaries.
ProfileFrameResolver
Resolves function metadata once per index within one CPU profile.
ProfileFrameRow
One aligned function across multiple sources.
ProfileFrameSummary
A summary of a single frame observed during CPU sampling.
ProfileHotspotInsight
A single hotspot insight derived from a prepared profile.
ProfileHotspotMethodContext
Compact method context attached to a hotspot insight.
ProfileHotspotPath
A representative call path for a hotspot insight.
ProfileHotspotPathFrame
A frame in a representative hotspot call path.
ProfileHotspotSummary
A structured explanation of a prepared profile's hotspots.
ProfileMemoryClassDelta
A per-class memory delta between two profiled windows.
ProfileMemoryClassSummary
A per-class memory summary for a profiled region or session.
ProfileMemoryComparison
A memory diff between two profiled windows.
ProfileMemoryResult
Memory summary data captured for a profiled region or session.
ProfileMethodCandidate
A compact candidate entry returned for ambiguous or failed method lookups.
ProfileMethodComparison
A structured comparison for one selected method across two profiles.
ProfileMethodDelta
A delta for a merged method between two method tables.
ProfileMethodInspection
A structured inspection result for one selected method.
ProfileMethodPath
A representative occurrence path for a selected method.
ProfileMethodPathFrame
A single frame entry within a representative method path.
ProfileMethodRelation
A caller or callee relationship for a method table entry.
ProfileMethodRelationDelta
A delta for a caller or callee relation on a selected method.
ProfileMethodSearchResult
A structured result for searching methods within one prepared profile.
ProfileMethodSummary
A method-table entry summarizing a merged method across the CPU profile.
ProfileMethodTable
A DevTools-style method table for a CPU profile.
ProfileNumericDelta
Shared models for profile comparisons and regression summaries. A numeric baseline/current comparison with derived delta values.
ProfileRecurringRegression
A recurring regression subject observed across multiple trend steps.
ProfileRegionComparison
A structured comparison between two profiled regions or session profiles.
ProfileRegionOptions
Shared region options passed between the helper and backend.
ProfileRegionResult
A summary of profiling data for a marked region.
ProfileRegressionInsight
A structured regression insight derived from a profile comparison.
ProfileRegressionSummary
A prioritized regression summary for a profile comparison.
ProfileRunner
Launches profiled Dart processes and reads stored artifacts.
ProfileRunRequest
A request to launch and profile a Dart or Flutter command.
ProfileRunResult
A full profiling session result.
ProfileTrendPoint
A compact point in a profile trend series.
ProfileTrendSeriesEntry
One prepared profile entry in a multi-session trend series.
ProfileTrendStep
A consecutive step in a multi-session trend series.
ProfileTrendSummary
A structured cross-session trend summary for one selected profile.
ScreenshotCaptureService
Captures screenshots of running Flutter applications via VM service extension.
ShaderCompilationEvent
A timeline event related to shader compilation.
TimelineHotspot
A hotspot insight extracted from the VM timeline.
WidgetInspectorQueryResult
The result of a Flutter widget inspector service query.
WidgetInspectorQueryService
Queries Flutter widget inspector service extensions.
WidgetTreeCapture
Captured Flutter widget tree with metadata.
WidgetTreeCaptureService
Captures Flutter widget trees from a running application via VM service extension calls.
WidgetTreeNode
A node in the captured Flutter widget tree.

Enums

ProfileCallTreeView
Supported hierarchical CPU profile tree views.
ProfileCaptureKind
Supported profiler capture kinds.
ProfileHotspotSeverity
Severity for a hotspot insight.
ProfileIsolateScope
Supported isolate scopes for a profiling region.
ProfileMethodComparisonStatus
The overall state of a method comparison request.
ProfileMethodInspectionStatus
The lookup state for a method inspection request.
ProfileMethodSearchSort
Ordering modes for method search results.
ProfileMethodSearchStatus
Availability state for method search against a profile target.
ProfileProcessIoMode
How the profiled process should receive standard IO.
ProfileRegressionSeverity
Severity for a regression insight.

Constants

defaultProfileCaptureKinds → const List<ProfileCaptureKind>
The default capture kinds for a region request.

Functions

alignProfileFrames(List<ProfileFrameColumn> columns, {int? limit}) → List<ProfileFrameRow>
Aligns top-frame lists by name, kind, and exact source location.
analyzeProfileTrends({required List<ProfileTrendSeriesEntry> entries, int? frameLimit, int? methodLimit, int? memoryClassLimit, int maxInsights = 5, int recurringLimit = 5}) → ProfileTrendSummary
Builds a cross-session trend summary from a series of prepared profiles.
attributeAllocationsToCallers(ProfileMemoryResult memory, CpuSamples cpuSamples) → List<AllocationAttribution>
Pairs growing memory classes with the profile-wide self CPU distribution.
buildBottomUpTree({required CpuSamples cpuSamples, ProfileFramePredicate? includeFrame}) → ProfileCallTree
Builds a DevTools-style bottom-up tree from raw VM CPU samples.
buildBottomUpTreeFromCallTree(ProfileCallTree callTree) → ProfileCallTree
Builds a bottom-up view from an untruncated top-down callTree.
buildCallTree({required CpuSamples cpuSamples, ProfileFramePredicate? includeFrame}) → ProfileCallTree
Builds a top-down call tree from raw VM CPU samples.
buildMethodTable({required CpuSamples cpuSamples, ProfileFramePredicate? includeFrame}) → ProfileMethodTable
Builds a DevTools-style method table from raw VM CPU samples.
buildMethodTableFromCallTree(ProfileCallTree callTree) → ProfileMethodTable
Builds a method table from an untruncated top-down callTree.
compactCpuSamples(CpuSamples source) → CpuSamples
Removes unreferenced functions from a CPU snapshot without changing stacks.
compareProfileMethods({required ProfileMethodInspection baseline, required ProfileMethodInspection current, int? relationLimit}) → ProfileMethodComparison
Compares one selected method across two inspected profiles.
compareProfileRegions({required ProfileRegionResult baseline, required ProfileRegionResult current, ProfileMethodTable? baselineMethodTable, ProfileMethodTable? currentMethodTable, int? frameLimit, int? methodLimit, int? memoryClassLimit, ProfileMemoryResult? baselineMemoryOverride, ProfileMemoryResult? currentMemoryOverride}) → ProfileRegionComparison
Builds a structured comparison between two prepared profile summaries.
discoverActiveApps() → Future<List<DiscoveredApp>>
Discovers running Dart and Flutter applications by scanning OS processes.
displayNameForFunction(ProfileFunction function) → String
Returns a human-readable name for a VM profile function.
explainProfileHotspots(ProfileRegionResult region, {ProfileMethodTable? methodTable, ProfileCallTree? callTree, ProfileCallTree? bottomUpTree, int maxInsights = 6, int relationLimit = 3}) → ProfileHotspotSummary
Builds prioritized hotspot insights from a prepared profile summary.
filterStackFrames(List<int> stack, List<ProfileFunction> functions, {ProfileFramePredicate? includeFrame}) → List<ProfileFrame>
heapSampleFromMemoryUsage({required MemoryUsage? memoryUsage, required int timestampMicros}) → HeapSample
inspectProfileMethod({required String query, required String queryKind, required ProfileMethodTable? methodTable, ProfileCallTree? callTree, ProfileCallTree? bottomUpTree, int? pathLimit}) → ProfileMethodInspection
Inspects a single method using a DevTools-style method table and optional call trees.
lineForFunction(ProfileFunction function) → int?
Returns the approximate source line number for function, or null if the line number is unavailable.
locationForFunction(ProfileFunction function) → String?
Returns the best source location available for a VM profile function.
mergeCpuSamples(Iterable<CpuSamples> cpuSamplesByIsolate, {List<String>? isolateIds}) → CpuSamples
Merges multiple isolate-local CPU sample payloads into one synthetic profile.
normalizeProfileCaptureKinds(Iterable<ProfileCaptureKind> captureKinds) → List<ProfileCaptureKind>
Normalizes capture kinds by removing duplicates while preserving order.
normalizeProfileIsolateScopes(Iterable<ProfileIsolateScope> isolateScopes) → List<ProfileIsolateScope>
Normalizes isolate scopes by removing duplicates while preserving order.
parseProfileCpuSamples(Map<String, dynamic> json) → CpuSamples?
Parses a stored VM CPU profile, restoring untyped function names and origins.
profileFrameFromFunction(List<ProfileFunction> functions, int functionIndex) → ProfileFrame
readMemoryClassesFromArtifact(String rawProfilePath, {ProfileMemoryClassPredicate? includeClass, int topClassCount = 50}) → Future<ProfileMemoryResult>
Reads a raw memory_profile.json artifact from rawProfilePath and returns a ProfileMemoryResult with optional class filtering.
rebuildMemoryProfileFromArtifact(Map<String, Object?> rawArtifact, {required String rawProfilePath, ProfileMemoryClassPredicate? includeClass, int topClassCount = 50}) → ProfileMemoryResult
Parses a raw ProfileMemoryArtifact JSON map and returns a ProfileMemoryResult with optional class filtering.
searchProfileMethods({required ProfileMethodTable? methodTable, String? query, ProfileMethodSearchSort sortBy = ProfileMethodSearchSort.total, int? limit}) → ProfileMethodSearchResult
Searches a DevTools-style method table for candidate methods.
summarizeCpuSamples({required String regionId, required String name, required Map<String, String> attributes, required String isolateId, List<String>? isolateIds, List<ProfileCaptureKind> captureKinds = defaultProfileCaptureKinds, ProfileIsolateScope isolateScope = ProfileIsolateScope.current, String? parentRegionId, ProfileMemoryResult? memory, required int startTimestampMicros, required int endTimestampMicros, required CpuSamples cpuSamples, required String summaryPath, String? rawProfilePath, int topFrameCount = 10, ProfileFramePredicate? includeFrame, Map<String, Object?> extra = const {}}) → ProfileRegionResult
Builds a ProfileRegionResult from raw VM CPU samples.
summarizeMemoryProfile({required HeapSample start, required HeapSample end, required Iterable<ClassHeapStats> startClasses, required Iterable<ClassHeapStats> endClasses, required String rawProfilePath, int topClassCount = 10, ProfileMemoryClassPredicate? includeClass}) → ProfileMemoryResult
Builds a ProfileMemoryResult from start and end allocation snapshots.
summarizeProfileRegressions(ProfileRegionComparison comparison, {int maxInsights = 5}) → ProfileRegressionSummary
Builds prioritized regression insights from a structured comparison.

Typedefs

ProfileFramePredicate = bool Function(ProfileFrame frame)
A predicate that determines whether a ProfileFrame should be included.
ProfileMemoryClassPredicate = bool Function(ProfileMemoryClassSummary summary)
Predicate used to retain or hide memory class summaries.